본문 바로가기

API

[한국은행 API] 위안, 엔, 달러 환율과 KOSPI

반응형

한국은행 API를 이용해서 위안/원, 엔/원, 달러/원 환율 데이터를 불러오고 KOSPI 지수와 비교해 보겠습니다.

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

 

1. 한국은행 API 가입

2. 위안/원 환율과 KOSPI

3. 엔/원 환율과 KOSPI

4. 달러/원 환율과 KOSPI

 

 

1. 한국은행 API 가입

https://yenpa.tistory.com/80

 

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

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

yenpa.tistory.com

 

 

 

2. 위안/원 환율과 KOSPI

환율에 대한 정보는 STAT_CODE=731Y001(3.1.1.1. 주요국 통화의 대원화환율)에서 확인이 가능합니다.

일단위 데이터를 설정하고 데이터를 전체 수집하면, 300건이 넘어 30분간 수집이 제한이 됩니다.

그래서 달러, 엔, 위안 환율을 각각 불러오겠습니다.

우선 위안/원인데 2016-01-01부터 데이터를 제공합니다.

#위안환율
import requests

url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
        + '/json/kr/1/100/731Y001/D/20010101/20221231/0000053'
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 + '/731Y001/D/20010101/20221231/0000053'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
dfwon=pd.DataFrame(rows)
dfwon

 

datetime type의 date column을 생성하고, DATA_VALUE column을 float으로 변경하겠습니다.

dfwon['datetime']=pd.to_datetime(dfwon['TIME'].str[:4] + '-' + \
                 dfwon['TIME'].str[4:6] + '-' + dfwon['TIME'].str[6:8])
dfwon=dfwon.astype({'DATA_VALUE':'float'})

 

 

다음으로는 KOSPI 지수를 불러오겠습니다.

kospi는 엔/원 환율과 달러/원 환율 비교 시 사용하고,

kospi1은 위안/원 환율과 비교시 사용하겠습니다.

import yfinance as yf
from datetime import datetime

enddate=datetime.now().strftime('%Y-%m-%d')
kospi=yf.download('^KS11', '2010-01-01', enddate, auto_adjust=True)
kospi1=kospi.loc[kospi.index>='2016-01-01']
kospi1

 

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

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

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

fig.add_trace(
    go.Scatter(x=dfwon['datetime'], y=dfwon['DATA_VALUE'], name="위안/원 환율"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=kospi1.index, y=kospi1['Close'], name="KOSPI"),
    secondary_y=True,
)

fig.update_layout(
    title_text='위안/원 환율과 KOSPI',
    title={'x':0.5, 'y':0.9}
)


fig.show()

 

 

 

반응형

 

 

 

3. 엔/원 환율과 KOSPI

다음으로는 엔/원 환율인데 2010-01-01부터 데이터를 수집하고,

datetime 형식의 column을 생성하겠습니다.

#엔화환율
import requests

url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
        + '/json/kr/1/100/731Y001/D/20100101/20221231/0000002'
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 + '/731Y001/D/20100101/20221231/0000002'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
dfwon1=pd.DataFrame(rows)
dfwon1['datetime']=pd.to_datetime(dfwon1['TIME'].str[:4] + '-' + \
                 dfwon1['TIME'].str[4:6] + '-' + dfwon1['TIME'].str[6:8])
dfwon1=dfwon1.astype({'DATA_VALUE':'float'})

 

그래프로 확인해 볼까요.

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

fig.add_trace(
    go.Scatter(x=dfwon1['datetime'], y=dfwon1['DATA_VALUE'], name="엔/원 환율"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=kospi.index, y=kospi['Close'], name="KOSPI"),
    secondary_y=True,
)

fig.update_layout(
    title_text='엔/원 환율과 KOSPI',
    title={'x':0.5, 'y':0.9}
)


fig.show()

 

 

4. 달러/원 환율과 KOSPI

다음으로는 달러/원 환율 데이터를 수집하겠습니다.

#달러환율
import requests

url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
        + '/json/kr/1/100/731Y001/D/20100101/20221231/0000001'
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 + '/731Y001/D/20100101/20221231/0000001'
    response = requests.get(url)
    result = response.json()
    rows = rows + result['StatisticSearch']['row']
    
dfwon2=pd.DataFrame(rows)
dfwon2['datetime']=pd.to_datetime(dfwon2['TIME'].str[:4] + '-' + \
                 dfwon2['TIME'].str[4:6] + '-' + dfwon2['TIME'].str[6:8])
dfwon2=dfwon2.astype({'DATA_VALUE':'float'})

 

그래프로 볼까요

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

fig.add_trace(
    go.Scatter(x=dfwon2['datetime'], y=dfwon2['DATA_VALUE'], name="달러/원 환율"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=kospi.index, y=kospi['Close'], name="KOSPI"),
    secondary_y=True,
)

fig.update_layout(
    title_text='달러/원 환율과 KOSPI',
    title={'x':0.5, 'y':0.9}
)


fig.show()

 

 

반응형

 

 

 

마지막으로 달러, 엔, 위안 환율 그래프를 확인해 보겠습니다.

dfwon3=dfwon1.loc[dfwon1['datetime']>='2016-01-01']
dfwon4=dfwon2.loc[dfwon1['datetime']>='2016-01-01']

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


fig.add_trace(
    go.Scatter(x=dfwon['datetime'], y=dfwon['DATA_VALUE'], name="위안/원 환율"),
    secondary_y=True,
)

fig.add_trace(
    go.Scatter(x=dfwon3['datetime'], y=dfwon3['DATA_VALUE'], name="엔/원 환율"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=dfwon4['datetime'], y=dfwon4['DATA_VALUE'], name="달러/원 환율"),
    secondary_y=False,
)



fig.update_layout(
    title_text='달러,엔,위안 환율',
    title={'x':0.5, 'y':0.9}
)


fig.show()

 

 

이상으로 위안/원, 엔/원, 달러/원 환율 데이터를 불러오고 KOSPI 지수와 비교해 봤습니다.

반응형