본문 바로가기

API

[한국은행 API] 외환보유액과 원달러 환율 비교

반응형

한국은행 API를 이용해서 우리나라의 외환보유액과 원 달러 환율을 비교해 보겠습니다.

확인을 위해서는 한국은행 API에 가입이 되어 있어야 합니다.

 

1. 한국은행 API 가입

2. 외환보유액과 원 달러 환율 데이터 수집

3. 데이터 비교

 

 

1. 한국은행 API 가입

https://yenpa.tistory.com/80

 

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

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

yenpa.tistory.com

 

 

2. 외환보유액과 원 달러 환율 데이터 수집

외환 보유액은 STAT_CODE=732Y001(3.5. 외환보유액)에서 확인이 가능합니다.

2000년 1월에서 2022년 12월까지 설정했고, 월 단위로 설정했습니다.

그럼 데이터를 불러오겠습니다.

#외환보유액(합계)
import requests

url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
        + '/json/kr/1/100/732Y001/M/200001/202212'
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 + '/732Y001/M/200001/202212'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
df=pd.DataFrame(rows)
df

 

 

2000년 1월부터의 데이터가 1000개가 넘는데, API로 한 번에 불러올 수 있는 개수는 100개입니다.

그래서 for문을 이용해서 100개 단위로 데이터를 불러와서 rows 리스트에 저장했습니다.

rows 리스트를 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 + '/732Y001/M/200001/202212'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
df=pd.DataFrame(rows)
df

 

데이터중에는 외환, IMF 인출권, 금, 합계가 있는데, 이 중에서 합계 데이터만 가져옵니다.

날짜 데이터는 TIME Column인데 YYYYMM 형태입니다.

이 column을 datetime 형태로 변환 후 datetime column에 저장했습니다.

마지막으로 필요한 column만 다시 df에 저장했습니다.

df=df.loc[df['ITEM_NAME1']=='합계']
df['datetime']=pd.to_datetime(df['TIME'].str[:4] + '-' + df['TIME'].str[4:6] + '-01')
df=df[['datetime','DATA_VALUE']]
df

 

 

 

반응형

 

 

외환 보유액은 STAT_CODE=731Y006(3.1.2.3. 원화의 대미달러, 원화의 대위안/대엔 환율)에서 확인이 가능합니다.

2000년 1월에서 2022년 12월까지 설정했고, 월 단위로 설정했습니다.

불러온 데이터에서 원/달러(종가)만 따로 저장했고,

이후는 외환보유액의 데이터와 동일하게 처리했습니다.

#원달러환율(월단위)
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
        + '/json/kr/1/100/731Y006/M/200001/202212'
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 + '/731Y006/M/200001/202212'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
dfwon=pd.DataFrame(rows)
dfwon
dfwon=dfwon.loc[dfwon['ITEM_NAME1']=='원/달러(종가)']
dfwon['datetime']=pd.to_datetime(dfwon['TIME'].str[:4] + '-' + dfwon['TIME'].str[4:6] + '-01')
dfwon=dfwon[['datetime','DATA_VALUE']]
dfwon

 

 

3. 데이터 비교

우선 외환보유액과 원 달러 환율의 데이터를 병합하도록 하겠습니다.

원 달러 환율데이터는 월별 2개씩 데이터가 존재해서 마지막 데이터만 가져와서

외환 보유액과 병합하고 column 명도 알기 쉽게 수정했습니다.

df1=df.set_index('datetime')
dfwon1=dfwon.groupby('datetime').last()
dfall=pd.concat([df1,dfwon1],axis=1)
dfall.columns=['외환보유액','원달러환율']
dfall

 

그래프로 확인해 보겠습니다.

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

dfall=dfall.astype('float')

fig = make_subplots(specs=[[{"secondary_y":True}]])

fig.add_trace(
    go.Scatter(x=dfall.index, y=dfall['외환보유액'], name="외환보유액"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=dfall.index, y=dfall['원달러환율'], name="원달러환율"),
    secondary_y=True,
)

fig.update_layout(
    title_text='우리나라 외환보유액과 원달러환율',
    title={'x':0.5, 'y':0.9}
)

fig.show()

 

 

이상으로 한국은행 API를 이용해서 우리나라의 외환보유액과 원 달러 환율을 비교해 봤습니다.

반응형