6장 국제무역 빅데이터 관리#

국제무역 데이터는 여러 국가(또는 기업), 다양한 제품, 그리고 여러 시점에 걸쳐 기록되므로, 이를 종합한 데이터는 방대한 규모를 가지는 경우가 많다. 특히, UNCTAD(유엔무역개발회의)가 제공하는 비관세조치(NTM: Non-Tariff Measures) 데이터는 관측 개수가 1억 건을 넘어서는 대규모 빅데이터에 해당한다. 이러한 방대한 데이터를 다룰 때는 저장, 로딩, 전처리, 분석 과정에서 다양한 기술적·실무적 문제가 발생할 수 있다. 본 장에서는 UNCTAD의 NTM 데이터를 활용하여 이러한 빅데이터 처리 과정에서 흔히 발생하는 문제(특히, 메모리 부족 문제)를 살펴보고, 이를 효과적으로 해결할 수 있는 방법들을 탐색한다.

1. UNCTAD 비관세조치 데이터 사례#

UNCTAD NTM 프로그램#

비관세조치(NTM: Non-Tariff Measures)는 관세 외에 무역에 영향을 미칠 수 있는 정책으로, 보건·안전·환경 보호뿐만 아니라 무역 규제에도 중요한 역할을 한다. 이러한 조치에는 독성 물질의 최대 허용 기준과 같은 안전 소비를 위한 제품 요구사항, 수입쿼터 및 원산지 규칙과 같은 전통적인 무역 정책이 포함된다.

UNCTAD 비관세조치 프로그램에서는 NTM에 해당하는 정책의 범위를 정의하고, 공통된 NTM 분류 체계를 개발하며, 데이터를 수집·공유하고, 투명성과 우수한 규제 관행 강화를 위한 정책 지원을 제공한다. NTM에 대한 개요는 비관세조치 A to Z에서도 확인할 수 있다.

UNCTAD TRAINS Database에는 NTM 및 관세 데이터가 포함되어 있다. 이 TRAINS 포털에서는 제품(HS 분류), 경제권, 지역, NTM 유형별로 쉽게 접근할 수 있는 정보를 제공한다. 120개 이상의 경제권을 대상으로 하며, 여러 연도의 데이터를 포함한다.

2. NTM 빅데이터 구조#

출처: Metadata for Non-tariff Measures Bulk Download Database: Variables in the ‘Researcher file’

기본 구조#

TRAINS NTM 데이터베이스는 100개 이상의 국가에 대한 포괄적인 데이터를 포함하고 있다. 이 데이터는 제품, 조치 유형, 조치를 부과하는 국가, 영향을 받는 국가 등에 대해 체계적인 정보를 제공한다. 특히 Non-Tariff Measures Data for Researchers는 일괄(bulk) 다운로드가 가능한 빅데이터로서, 통계 분석에 보다 일관성 있고 적합한 형태로 제공된다. 일괄 다운로드를 통해 제공되는 NTM 데이터는 발생 빈도와 같은 기술적 통계(descriptive statistics)를 생성하는 데 활용될 수 있으며, 이는 보다 복잡한 평가 모델에서 변수로도 사용될 수 있다.

일괄 다운로드를 통해 제공되는 NTM 데이터는 CSV 및 STATA 형식으로 제공되며, 분석 단위는 다음 다섯 가지 요소의 조합을 기반으로 한다.

  1. 비관세장벽(NTM)을 시행하는 국가(Reporter)

  2. 교역 상대국(Partner)

  3. HS 6단위 수준에서 영향을 받는 제품

  4. 최대 4자리까지 세분화된 NTM 코드

  5. 데이터 수집 연도

이 다섯 가지 조합은 데이터베이스에서 한 번만 기록된다. 이 각 조합에 대해 nbr로 시작되는 변수들은 원본 데이터에서 동일한 조합이 몇 번 발견되었는지를 나타낸다.

그런데 모든 국가에서 매년 데이터를 수집한 것은 아님을 인지해야 한다. 일부 국가는 매년 데이터가 존재하지만, 일부 국가는 특정 시점에 한두 개의 데이터만 존재할 수도 있다. 또한, 규제의 발행 연도와 데이터 수집 연도를 혼동해서는 안 된다. 예를 들어, 특정 국가의 데이터가 2020년에 수집되었다면, 데이터베이스에는 해당 연도에 시행된 모든 규제가 포함된다. 하지만 이 규제 중 일부는 2010년부터 시행된 것일 수도 있으며, 여전히 무역에 영향을 미친다면 2020년 데이터베이스에 포함된다.

수평적 조치 및 부분적용#

어떤 조치가 모든 HS 코드에 동시에 영향을 미친다면 이를 수평적 조치(horizontal measure)라고 한다. 예를 들어, 기업이 수입 또는 수출을 허가받기 위해 반드시 무역업자로 등록해야 하는 경우, 이는 제품의 종류와 관계없이 모든 무역 활동에 적용되므로 수평적 조치로 간주된다. 비수평적 조치(non-horizontal measures)와 구별된다.

부분적용(Partial Coverage)이란 특정 조치가 제품 전체에 적용되지 않고, 특정 조건에서만 적용되거나 가장 세분화된 제품 코드의 일부 하위 범주에만 영향을 미치는 경우를 의미한다. 부분적용은 HS6 코드 내에서도 특정 관세품목 코드(8자리 이상)에는 적용되고, 다른 코드에는 적용되지 않을 수 있다. 완전적용(Full Coverage)과 구별된다.

통계 분석에서 수평적 조치를 제외하는 것은 필수적이다. 만약 수평적 조치를 포함하면, 빈도 지수(Frequency Index)와 적용 비율(Coverage Ratio)이 1이 되어버려 국가의 규제 패턴을 왜곡할 수 있다. 즉, 일부 행정적 성격을 가진 수평적 조치 몇 개만으로도 모든 제품이 규제를 받는 것처럼 보일 수 있으며, 이는 NTM의 다양성을 반영하지 못하게 된다. 따라서 수평적 조치를 제외함으로써 보다 정교한 규제 환경 분석이 가능해진다.

주요 변수#

주요 변수는 다음과 같다.

  • ntm_all: 모든 유형의 NTM을 포함한 총 개수

  • ntm_FullCoverage: 특정 제품에 완전적용되는 NTM 개수

  • ntm_PartialCoverage: 특정 제품에 부분적용되는 NTM 개수

  • ntm_H: 수평적 조치의 개수

  • ntm_nonH: 비수평적 조치의 개수

보다 세부적인 구분을 위해, 아래의 추가 변수가 제공된다.

  • ntm_FullCov_H: 수평적 조치 중 모든 제품에 완전적용되는 NTM 개수

  • ntm_PartialC_H: 수평적 조치 중 모든 제품에 부분적용되는 NTM 개수

  • ntm_FullCov_nonH: 수평적 조치를 제외한, 특정 제품에 완전적용되는 NTM 개수

    • 과거 UNCTAD 분석에서 주요 변수로 사용됨

  • ntm_PartialC_nonH: 수평적 조치를 제외한, 특정 제품에 부분적용되는 NTM 개수

3. NTM 빅데이터 로딩#

  • NTM 빅데이터를 다음과 같이 그냥 일반적인 파일처럼 불러들이면 오류(MemoryError)가 발생한다.

  • 이 오류는 Pandas가 대용량 CSV 파일을 읽는 과정에서 메모리 부족으로 인해 발생하는 문제다.

  • 배치 처리: 데이터세트가 매우 클 경우, 데이터를 한 번에 처리하지 않고 배치 단위로 처리할 수 있다. pandas의 chunksize 파라미터를 사용하면 파일을 작은 덩어리로 나누어 처리할 수 있다.

import pandas as pd  

file_path = r"C:\Comtrade\Data\NTM_hs6_2010_2022_H4V12.csv"  

df = pd.read_csv(file_path)
MemoryError: Unable to allocate 14.6 GiB for an array with shape (14, 140197410) and data type int64

ChatGPT 해결책 제안#

이 오류는 메모리 부족(MemoryError) 문제로, 주피터 노트북에서 14.6GB 크기의 배열을 로드하려고 했지만, 시스템 메모리가 부족해서 할당할 수 없는 경우 발생합니다. 해결 방법은 여러 가지가 있으며, 문제의 원인과 상황에 따라 적절한 방법을 선택해야 합니다.


1. 데이터 로딩 방식을 최적화하기

데이터 유형(Dtype) 줄이기

기본적으로 Pandas는 int64, float64와 같은 데이터 타입을 사용하지만, 더 작은 메모리를 차지하는 데이터 타입을 사용하면 메모리 사용량을 크게 줄일 수 있습니다.

import pandas as pd

# 데이터 로딩 시 dtype 지정
dtype_dict = {
    'col1': 'int32',  # 64비트 대신 32비트 사용
    'col2': 'float32'  # 64비트 대신 32비트 사용
}
df = pd.read_csv('bigdata.csv', dtype=dtype_dict)

int8, int16, float16, float32 등의 더 작은 데이터 타입을 활용하면 메모리를 효율적으로 사용 가능.


필요 없는 컬럼 제거

데이터 파일을 읽기 전에 사용하지 않는 컬럼을 제외하면 메모리를 절약할 수 있음.

df = pd.read_csv("bigdata.csv", usecols=["col1", "col3", "col5"])  # 필요한 컬럼만 로드

데이터 일부만 로드하기(chunking)

전체 데이터를 한 번에 로드하지 않고 작은 조각(chunk)으로 나눠서 처리하면 메모리 사용량을 줄일 수 있음.

chunk_size = 1000000  # 한 번에 100만 개 행씩 읽기
df_list = []

for chunk in pd.read_csv("bigdata.csv", chunksize=chunk_size):
    df_list.append(chunk)  # 필요한 처리를 한 후 리스트에 저장

df = pd.concat(df_list, ignore_index=True)  # 최종 데이터프레임으로 합치기

파일 압축된 상태에서 로딩하기

CSV 파일이 클 경우 압축된 파일(.zip, .gz)을 사용하면 로딩 속도와 메모리 사용을 최적화할 수 있음.

df = pd.read_csv("bigdata.csv.gz", compression='gzip')

2. 시스템 설정 변경

가상 메모리(Swap) 늘리기

  • 램이 부족한 경우 가상 메모리(Swap Memory)를 추가적으로 설정하면 도움이 될 수 있음.

  • 리눅스/맥: sudo fallocate -l 10G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile

  • 윈도우: 가상 메모리 설정 → “제어판 > 시스템 > 고급 시스템 설정 > 성능 설정 > 가상 메모리 변경”


RAM 사용량 확인 후 불필요한 프로세스 종료

  • 메모리 사용량 확인 (htop, top, task manager)

  • 주피터 노트북에서 불필요한 커널 종료

    • jupyter notebook list로 실행 중인 커널 확인 후, 필요 없는 커널 종료.


3. 데이터 저장 형식 변경

CSV 대신 Parquet, Feather 사용

CSV 대신 Parquet 또는 Feather 포맷을 사용하면 메모리 사용을 최적화할 수 있음.

df.to_parquet("bigdata.parquet")  # Parquet 저장
df = pd.read_parquet("bigdata.parquet")  # Parquet 로드

df.to_feather("bigdata.feather")  # Feather 저장
df = pd.read_feather("bigdata.feather")  # Feather 로드

ParquetFeather는 압축률이 높고, 메모리 효율적으로 데이터를 로딩할 수 있음.


4. 병렬 처리 활용

Dask 사용(대용량 데이터 프레임)

Pandas보다 더 큰 데이터를 처리할 수 있는 Dask 활용:

import dask.dataframe as dd
df = dd.read_csv("bigdata.csv")
df.compute()  # 연산 수행 후 Pandas 데이터프레임으로 변환

Dask는 데이터를 메모리에 한 번에 로드하지 않고, 필요할 때만 메모리에 로딩하여 연산 수행.


PySpark 활용

빅데이터 처리용 PySpark 사용:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("BigData").getOrCreate()
df = spark.read.csv("bigdata.csv", header=True, inferSchema=True)
df.show()

PySpark는 대량의 데이터를 분산 처리하여 메모리 부담을 줄일 수 있음.

메모리에서 객체 제거하기#

  • 아래 코드는 Python에서 불필요한 객체를 삭제하고 메모리를 최적화하는 방법이다.

  • del df는 메모리에서 df 변수를 제거하는 역할을 한다.

  • 하지만, Python의 가비지 컬렉터(Garbage Collector, GC)가 즉시 메모리를 해제하는 것은 아니다. 일반적으로 변수를 삭제해도 다른 곳에서 참조 중이면 완전히 제거되지 않을 수 있다.

  • gc.collect()는 Python의 가비지 컬렉터를 수동으로 실행하여 사용되지 않는 메모리를 즉시 반환하도록 한다. 대규모 객체가 삭제된 후에도 메모리가 즉시 반환되지 않을 때 유용하다.

import gc

del df  # df 삭제
gc.collect()  # 가비지 컬렉션 실행

처음 100만행 로딩#

import pandas as pd  
import time

file_path = r"C:\Comtrade\Data\NTM_hs6_2010_2022_H4V12.csv"  

start_time = time.time()  # 시작 시간 기록

# 데이터 일부 확인 (메모리 절약을 위해 chunksize 사용)
chunk_size = 1000000  # 100만 행씩 불러오기
df_chunks = pd.read_csv(file_path, chunksize=chunk_size, low_memory=False)  

# 첫 번째 청크만 확인
df = next(df_chunks)  

end_time = time.time()  # 종료 시간 기록

elapsed_time = end_time - start_time
minutes = int(elapsed_time // 60)
seconds = elapsed_time % 60

print(f"데이터 로딩 시간: {minutes}분 {seconds:.2f}초")

데이터 로딩 시간: 0분 4.64초

100만행씩 나눠서 전체 데이터 로딩#

  • 데이터 로딩 성공함!

start_time = time.time()

df_list = []
for chunk in df_chunks:
    df_list.append(chunk)

df = pd.concat(df_list, ignore_index=True)

end_time = time.time()

elapsed_time = end_time - start_time
minutes = int(elapsed_time // 60)
seconds = elapsed_time % 60

print(f"전체 데이터 로딩 시간: {minutes}분 {seconds:.2f}초")

df # 데이터 확인: 관측수 1억 4,019만개, 변수 19개
전체 데이터 로딩 시간: 11분 3.00초

    Year	Reporter	ReporterISON	PartnerISON	Partner	HSCode	NTMCode	ntm_all	ntm_nonH	ntm_H	ntm_FullCoverage	ntm_FullCov_nonH	ntm_FullCov_H	ntm_PartialCoverage	ntm_PartialC_nonH	ntm_PartialC_H	HSNomenclature	NTMNomenclature	latest_year_flag
0	2020	TUR	792	376	ISR	10514	A11	2	2	0	2	2	0	0	0	0	H4	M4	1
1	2016	TUR	792	380	ITA	10514	A11	1	1	0	1	1	0	0	0	0	H4	M4	0
2	2020	TUR	792	380	ITA	10514	A11	1	1	0	1	1	0	0	0	0	H4	M4	1
3	2016	TUR	792	384	CIV	10514	A11	1	1	0	1	1	0	0	0	0	H4	M4	0
4	2020	TUR	792	384	CIV	10514	A11	1	1	0	1	1	0	0	0	0	H4	M4	1
...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...
140197405	2014	USA	842	192	CUB	970600	P9	1	0	1	1	0	1	0	0	0	H4	M4	0
140197406	2017	USA	842	192	CUB	970600	P9	1	0	1	1	0	1	0	0	0	H4	M4	0
140197407	2018	USA	842	192	CUB	970600	P9	1	0	1	1	0	1	0	0	0	H4	M4	0
140197408	2019	USA	842	192	CUB	970600	P9	1	0	1	1	0	1	0	0	0	H4	M4	0
140197409	2022	USA	842	192	CUB	970600	P9	1	0	1	1	0	1	0	0	0	H4	M4	1

140197410 rows × 19 columns

변수 설명

출처: Metadata for Non-tariff Measures Bulk Download Database: Variables in the ‘Researcher file’

변수명

설명

Year

데이터 수집 연도

ReporterISON

비관세조치(NTM)를 부과하는 국가의 숫자 코드

Reporter

비관세조치(NTM)를 부과하는 국가의 문자 코드

PartnerISON

영향을 받는 상대국의 숫자 코드

Partner

영향을 받는 상대국의 문자 코드

HSNomenclature

HS 버전 코드 (H4는 HS 2012, H5는 HS 2017 등을 의미)

HSCode

HS 제품 코드

NTMNomenclature

국제 비관세조치(NTM) 분류 버전 (최신 버전은 M4)

NTMCode

비관세조치(NTM) 분류 코드

ntm_all

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 모든 유형의 NTM 요구사항 개수

ntm_nonH

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 수평적 조치를 제외한 NTM 요구사항 개수 (완전적용 및 부분적용 포함)

ntm_H

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 수평적 조치만 포함한 NTM 요구사항 개수 (완전적용 및 부분적용 포함)

ntm_FullCoverage

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 부분적용 조치를 제외한 NTM 요구사항 개수 (수평적 및 비수평적 조치를 포함하여 완전히 적용된 경우만 집계)

ntm_FullCov_nonH

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 부분적용 조치를 제외한 NTM 요구사항 개수 (비수평적 조치만 포함, 완전적용된 경우만 집계)

ntm_FullCov_H

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 부분적용 조치를 제외한 NTM 요구사항 개수 (수평적 조치만 포함, 모든 제품에 영향을 미치는 경우만 집계)

ntm_PartialCoverage

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 부분적용된 NTM 요구사항 개수 (수평적 및 비수평적 조치를 포함하여 부분적용된 경우만 집계)

ntm_PartialC_nonH

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 부분적용된 NTM 요구사항 개수 (비수평적 조치만 포함, 부분적용된 경우만 집계)

ntm_PartialC_H

동일한 신고국, 상대국, HS 6단위 코드, NTM 코드, 연도에서 부분적용된 NTM 요구사항 개수 (수평적 조치만 포함, 모든 제품에 영향을 미치는 경우만 집계)

latest_year_flag

특정 신고국의 최신 데이터 수집 연도에 해당하면 1 (패널 데이터에서 해당 국가의 최신 연도를 나타냄)

NTMCode

코드

설명

A

기술적 요구사항 (Technical requirements)

B

적합성 평가 (Conformity assessment)

C

선적 전 검사 및 기타 입국 절차 (Pre-shipment inspection and other entry formalities)

D

수수료, 세금 및 기타 준관세 조치 (Charges, taxes and other para-tariff measures)

E

수량 통제 조치 (Quantity control measures)

F

금융 조치 (Finance Measures)

G

가격 통제 조치 (Price control measures)

H

반경쟁적 조치 (Anti-competitive measures)

I

무역 관련 투자 조치 (Trade related investment measures)

J

유통 제한 (Distribution restrictions)

K

판매 후 서비스 제한 (Restriction of post-sales services)

L

보조금 (Subsidies)

M

정부 조달 제한 (Government procurement restrictions)

N

지적재산권 (Intellectual property)

O

원산지 규정 및 관련 원산지 증명서 (Rules of origin and related certificate of origin)

P

수출 관련 조치 (Export related measures)

빅데이터 처리 오류 발생#

  • 아래 코드는 보고국이 한국(410)인 경우만을 필터링하기 위한 것이나, 다음과 같은 오류 메시지가 나옴.

df_kor = df[df['ReporterISON'] == 410]
import gc

del df  # df 삭제
gc.collect()  # 가비지 컬렉션 실행

4. NTM 빅데이터 한국 자료 필터링#

  • 메모리 절약을 위해 파일을 배치 단위로 읽어온 다음, 각 배치에서 ‘ReporterISON’이 410인 행만 필터링한다.

  • 모든 필터링된 데이터를 하나로 합친다.

import pandas as pd  
import time

file_path = r"C:\Comtrade\Data\NTM_hs6_2010_2022_H4V12.csv"  

start_time = time.time()

chunk_size = 1000000  # 배치 크기 설정 (1백만 행 단위)
df_filtered_list = []  # 필터링된 결과를 저장할 리스트

# 파일을 배치 단위로 읽어오기
chunks = pd.read_csv(file_path, chunksize=chunk_size)

for chunk in chunks:
    # 각 배치에서 'ReporterISON'이 410인 행만 필터링
    df_filtered_chunk = chunk[chunk['ReporterISON'] == 410]

    # 필터링된 데이터를 리스트에 추가
    df_filtered_list.append(df_filtered_chunk)

# 모든 필터링된 데이터를 하나로 합치기
df_kor = pd.concat(df_filtered_list, ignore_index=True)

end_time = time.time()

elapsed_time = end_time - start_time
minutes = int(elapsed_time // 60)
seconds = elapsed_time % 60

print(f"전체 데이터 로딩 시간: {minutes}분 {seconds:.2f}초")

# 결과 저장 및 확인
df_kor.to_csv('../Data/NTM_KOR.csv', index=False)
df_kor
전체 데이터 로딩 시간: 5분 57.57초

    Year	Reporter	ReporterISON	PartnerISON	Partner	HSCode	NTMCode	ntm_all	ntm_nonH	ntm_H	ntm_FullCoverage	ntm_FullCov_nonH	ntm_FullCov_H	ntm_PartialCoverage	ntm_PartialC_nonH	ntm_PartialC_H	HSNomenclature	NTMNomenclature	latest_year_flag
0	2016	KOR	410	0	WLD	10121	A14	1	1	0	0	0	0	1	1	0	H4	M4	1
1	2016	KOR	410	0	WLD	10121	A31	1	1	0	0	0	0	1	1	0	H4	M4	1
2	2016	KOR	410	0	WLD	10121	A32	1	1	0	0	0	0	1	1	0	H4	M4	1
3	2016	KOR	410	0	WLD	10121	A41	1	1	0	0	0	0	1	1	0	H4	M4	1
4	2016	KOR	410	0	WLD	10121	A62	1	1	0	0	0	0	1	1	0	H4	M4	1
...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...
478223	2016	KOR	410	0	WLD	970600	E1	1	1	0	0	0	0	1	1	0	H4	M4	1
478224	2016	KOR	410	0	WLD	970600	F71	1	1	0	0	0	0	1	1	0	H4	M4	1
478225	2016	KOR	410	0	WLD	970600	P14	1	1	0	0	0	0	1	1	0	H4	M4	1
478226	2016	KOR	410	0	WLD	970600	P33	1	1	0	0	0	0	1	1	0	H4	M4	1
478227	2016	KOR	410	0	WLD	970600	P7	1	1	0	0	0	0	1	1	0	H4	M4	1

478228 rows × 19 columns

NTM 한국 데이터#

import pandas as pd  

df_kor = pd.read_csv('../Data/NTM_KOR.csv')
df_kor.describe()
Year ReporterISON PartnerISON HSCode ntm_all ntm_nonH ntm_H ntm_FullCoverage ntm_FullCov_nonH ntm_FullCov_H ntm_PartialCoverage ntm_PartialC_nonH ntm_PartialC_H latest_year_flag
count 478228.0 478228.0 478228.000000 478228.000000 478228.000000 478228.000000 478228.0 478228.000000 478228.000000 478228.0 478228.000000 478228.000000 478228.0 478228.0
mean 2016.0 410.0 356.605584 419197.864512 2.783948 2.783948 0.0 0.513094 0.513094 0.0 2.270854 2.270854 0.0 1.0
std 0.0 0.0 286.307255 336597.382237 5.468467 5.468467 0.0 1.285197 1.285197 0.0 5.511215 5.511215 0.0 0.0
min 2016.0 410.0 0.000000 10121.000000 1.000000 1.000000 0.0 0.000000 0.000000 0.0 0.000000 0.000000 0.0 1.0
25% 2016.0 410.0 68.000000 80720.000000 1.000000 1.000000 0.0 0.000000 0.000000 0.0 0.000000 0.000000 0.0 1.0
50% 2016.0 410.0 336.000000 300190.000000 1.000000 1.000000 0.0 0.000000 0.000000 0.0 1.000000 1.000000 0.0 1.0
75% 2016.0 410.0 608.000000 843069.000000 1.000000 1.000000 0.0 1.000000 1.000000 0.0 1.000000 1.000000 0.0 1.0
max 2016.0 410.0 926.000000 970600.000000 26.000000 26.000000 0.0 24.000000 24.000000 0.0 26.000000 26.000000 0.0 1.0
# 'HSCode'의 값이 6자리인 관측 필터링
df_kor[df_kor['HSCode'].astype(str).str.len() == 6]
Year Reporter ReporterISON PartnerISON Partner HSCode NTMCode ntm_all ntm_nonH ntm_H ntm_FullCoverage ntm_FullCov_nonH ntm_FullCov_H ntm_PartialCoverage ntm_PartialC_nonH ntm_PartialC_H HSNomenclature NTMNomenclature latest_year_flag
126558 2016 KOR 410 0 WLD 100111 A14 1 1 0 0 0 0 1 1 0 H4 M4 1
126559 2016 KOR 410 4 AFG 100111 A19 1 1 0 1 1 0 0 0 0 H4 M4 1
126560 2016 KOR 410 8 ALB 100111 A19 2 2 0 1 1 0 1 1 0 H4 M4 1
126561 2016 KOR 410 10 ATA 100111 A19 1 1 0 1 1 0 0 0 0 H4 M4 1
126562 2016 KOR 410 12 DZA 100111 A19 2 2 0 1 1 0 1 1 0 H4 M4 1
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
478223 2016 KOR 410 0 WLD 970600 E1 1 1 0 0 0 0 1 1 0 H4 M4 1
478224 2016 KOR 410 0 WLD 970600 F71 1 1 0 0 0 0 1 1 0 H4 M4 1
478225 2016 KOR 410 0 WLD 970600 P14 1 1 0 0 0 0 1 1 0 H4 M4 1
478226 2016 KOR 410 0 WLD 970600 P33 1 1 0 0 0 0 1 1 0 H4 M4 1
478227 2016 KOR 410 0 WLD 970600 P7 1 1 0 0 0 0 1 1 0 H4 M4 1

351670 rows × 19 columns