본문 바로가기

API

[한국은행 API] 우리나라의 국가별 수출총액 수집 및 과거데이터 비교

반응형

한국은행 API를 이용해서 우리나라 국가별로 수출액 데이터를 가져와서 비교해 보겠습니다.
확인을 위해서는 한국은행 API에 가입이 되어 있어야 합니다.

1. 한국은행 API 가입
2. 국가별 수출 총액

3. 2010년 1월과 2022년 12월 데이터 비교
4. 2021년 12월과 2022년 12월의 수출액 비교

5. 수출액 상위 4개국 장기데이터

 

 

1. 한국은행 API 가입

https://yenpa.tistory.com/80

 

[한국은행 API] 인증키 신청 및 100대 통계 지표 수집

한국은행 API에 가입하고 서비스 항목 중 100대 통계지표에 대해 데이터 수집하고 그래프로 확인해보겠습니다. 1. 인증키 신청 2. 인증키 확인 3. 100대 통계 지표 수집 1. 인증키 신청 사이트 접속

yenpa.tistory.com

 

 

 

2. 국가별 수출 총액 및 과거 데이터 비교

한국은행 API의 통계조회 조건 설정의 서비스에서 통계항목코드 1을 '901Y011'로
지정하면 국가별 수출에 대한 정보를 불러올 수 있습니다.
아래는 수출에 대한 정보(901Y011)를 201001~202212 기간에서 일별로 조회한 코드입니다.

import requests

url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
        + '/json/kr/1/100/901Y011/M/201001/202302'
response = requests.get(url)
result = response.json()
list_total_count=(int)(result['StatisticSearch']['list_total_count'])
list_count=(int)(list_total_count/100) + 1


rows=[]
for i in range(0,list_count):
    start = str(i * 100 + 1)
    end = str((i + 1) * 100)
    
    url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey + '/json/kr/' \
            + start + '/' + end + '/901Y011/M/201001/202302'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
df=pd.DataFrame(rows)
df

 

 

호출 URL이고 한 번에 최대 100개까지의 데이터만 불러올 수 있습니다.
100개가 넘을 경우에는 100개씩 나누어서 데이터를 수집해야 되는데,
총데이터의 수는 result['StatisticSearch']['list_total_count'] 에서 확인이 가능합니다.

100개씩 몇 번의 for loop를 돌아야 하는지는 list_count에 저장했습니다.

list_total_count=(int)(result['StatisticSearch']['list_total_count'])
list_count=(int)(list_total_count/100) + 1

for문마다 불러온 결과를 rows라는 list에 저장하고 마지막에 dataframe으로 변환했습니다.

rows=[]
for i in range(0,list_count):
    start = str(i * 100 + 1)
    end = str((i + 1) * 100)
    
    url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey + '/json/kr/' \
            + start + '/' + end + '/901Y011/M/201001/202302'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
df=pd.DataFrame(rows)
df

 

아래 국가들에 수출한 정보가 제공됩니다.

총 25개 국가의 데이터가 있습니다.

countries=df['ITEM_NAME1'].unique()
countries

 

국가명(ITEM_NAME1)을 보기 좋게 수정하고,  DATA_VALUE의 column type을 변경했습니다.

그리고 TIME이 YYYYMM형태로 제공되는데 datetime형태의 column을 생성했습니다.

마지막으로 수출총액 데이터는 제외했습니다.

df['ITEM_NAME1']=df['ITEM_NAME1'].str.replace('수출총액','').str.replace('(','').str.replace(')','')
df=df.astype({'DATA_VALUE':'float'})
df['datetime']=pd.to_datetime(df['TIME'].str[:4] + '-' + df['TIME'].str[4:6] + '-01')
df=df.sort_values('datetime')

df1=df.loc[df['ITEM_NAME1']!='국별수출관세청']
df1=df1.drop_duplicates()

 

반응형

 

전체 국가에 대한 수출액 정보를 그래프로 확인해 볼까요

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px

fig=px.line(data_frame=df1, x='datetime', y='DATA_VALUE', 
            color='ITEM_NAME1',
           labels={'ITEM_NAME1':'국가','DATA_VALUE':'수출액','TIME':'날짜'})
fig.update_layout(
    title_text='국가별 수출총액',
    title={'x':0.5}
)
fig.show()

중국, 미국, 일본, 홍콩이 수출액이 높은 나라입니다.

 

 

 

3. 2010년 1월과 2022년 12월 데이터 비교

2010년 1월 데이터를 확인해 보겠습니다.

fig=px.bar(data_frame=df1.loc[df1['datetime']=='2010-01-01'].sort_values('DATA_VALUE',ascending=False), 
           x='ITEM_NAME1', y='DATA_VALUE', 
           labels={'ITEM_NAME1':'국가','DATA_VALUE':'물가','TIME':'날짜'})
fig.update_layout(
    title_text='2010년 1월 국가별 수출',
    title={'x':0.5}
)
fig.show()

수출액 비율로 보겠습니다.

fig=px.pie(data_frame=df1.loc[df1['datetime']=='2010-01-01'].sort_values('DATA_VALUE',ascending=False), 
           names='ITEM_NAME1', values='DATA_VALUE', 
           labels={'ITEM_NAME1':'국가','DATA_VALUE':'물가','TIME':'날짜'})
fig.update_layout(
    title_text='2010년 1월 국가별 수출',
    title={'x':0.5}
)
fig.show()

중국이 가장 많고, 미국 일본 홍콩 순으로 수출액이 많았습니다.

 

 

반응형

 

2022년 12월 데이터를 보겠습니다.

fig=px.pie(data_frame=df1.loc[df1['datetime']=='2022-12-01'].sort_values('DATA_VALUE',ascending=False), 
           names='ITEM_NAME1', values='DATA_VALUE')
fig.update_layout(
    title_text='2022년 12월 국가별 수출',
    title={'x':0.5}
)
fig.show()

2010년과 비교해 보면 상위 4개국은 변화가 없지만, 비율이 변동이 된 것을 알 수 있습니다.

 

 

4. 2021년 12월과 2022년 12월의 수출액 비교

지난해 동월 대비 변동률을 구합니다.

countries=df1['ITEM_NAME1'].unique()

for country in countries:
    df1.loc[df1['ITEM_NAME1']==country,'변동율(YOY)'] = df1.loc[df1['ITEM_NAME1']==country,'DATA_VALUE'].pct_change(12)*100

2022년 12월의 데이터를 그래프로 보겠습니다.

df2=df1.loc[df1['datetime']=='2022-12-01'].sort_values('변동율(YOY)',ascending=False)


fig=px.bar(data_frame=df2.iloc[:10], 
           x='ITEM_NAME1', y='변동율(YOY)')
fig.update_layout(
    title_text='2021년 12월 대비 2022년 12월 국가별 수출 변동율 상위10',
    title={'x':0.5}
)
fig.show()

파나마가 2021년 12월 대비 변동률은 가장 높고, 프랑스 스위스 호주 등이 그 뒤를 잇습니다.

 

반응형

 

변동률을 낮은 순으로 확인해 보겠습니다.

fig=px.bar(data_frame=df2.iloc[-10:], 
           x='ITEM_NAME1', y='변동율(YOY)')
fig.update_layout(
    title_text='2021년 12월 대비 2022년 12월 국가별 수출 변동율 하위10',
    title={'x':0.5}
)
fig.show()

 

5. 수출액 상위 4개국 장기데이터

마지막으로 우리 나라가 수출을 가장 많이 하는 4개 국가의 장기데이터를 확인해 보겠습니다.

df3=df1.loc[df1['ITEM_NAME1'].isin(['중국','미국','일본','홍콩'])]

fig=px.bar(data_frame=df3, 
           x='datetime', y='DATA_VALUE', facet_col='ITEM_NAME1', facet_col_wrap=2, height=800)
fig.update_layout(
    title_text='2010~2022년 수출액 상위 4개국',
    title={'x':0.5}
)
fig.show()

 

 

이상으로 우리나라 국가별로 수출액 데이터를 가져와서 비교해 봤습니다.

 

반응형