한국은행 API와 fred API를 이용해서 한국의 3년 국채, 10년 국채 금리와 미국의 3년, 10년 국채 금리를
불러와서 각각의 장단기 금리차를 계산하고 비교해 보겠습니다.
한국은행 API 및 fred API가 가입이 되어 있어야 합니다.
1. 한국은행 API 가입
2. fred API 가입
3. 한국 국채(3년, 10년) 데이터 수집
4. 미국채(3년, 10년) 데이터 수집
5. 데이터 비교
1. 한국은행 API 가입
2. fred API 가입
3. 한국 국채(3년, 10년) 데이터 수집
한국은행 API에서 상세 데이터를 불러오는 샘플 URL은 아래와 같습니다.
https://ecos.bok.or.kr/api/StatisticSearch/sample/json/kr/1/100/200Y001/A/2015/2021/10101/
요청 인자의 설명은 아래와 같습니다.
국채의 통계표 코드는 817Y002 (1.3.2.1. 시장금리(일별)) 입니다.
국고채 3년의 통계항목코드1은 010200000이고, 국고채 10년은 010210000입니다.
2001-01-01 ~ 2022-12-10까지 기간을 설정했습니다.
국고채 3년 데이터를 가져오는 코드입니다.
import requests
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/817Y002/D/20010101/20221210/010200000'
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 + '/817Y002/D/20010101/20221210/010200000'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
df3Y=pd.DataFrame(rows)
df3Y
url에 apikey, 통계표코드, 통계항목 코드 및 조회 시작 날짜, 종료 날짜를 입력해서
데이터를 불러와 json으로 저장했습니다.
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/817Y002/D/20010101/20221210/010200000'
response = requests.get(url)
result = response.json()
한 번에 조회할 수 있는 데이터는 100개입니다.
그런데 2001-01-01 ~ 2022-12-10 기간의 총데이터는 100개가 넘으니
100개씩 나누어 데이터를 수집해서 rows라는 list에 저장했습니다.
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 + '/817Y002/D/20010101/20221210/010200000'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
rows의 list를 DataFrame으로 변환했습니다.
df3Y=pd.DataFrame(rows)
국고채 10년도 동일하게 데이터를 수집합니다.
url의 제일 마지막 부분이 010200000 -> 010210000 으로 바뀌었습니다.
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/817Y002/D/20010101/20221210/010210000'
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)
print(start)
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey + '/json/kr/' \
+ start + '/' + end + '/817Y002/D/20010101/20221210/010210000'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
df10Y=pd.DataFrame(rows)
df10Y
아래의 데이터와 같이 필요한 데이터만 가져와서 수정했습니다.
df3Y_1=df3Y[['TIME','DATA_VALUE']]
df3Y_1['date']=pd.to_datetime(df3Y_1['TIME'])
df3Y_1=df3Y_1[['date','DATA_VALUE']].rename(columns={'DATA_VALUE':'국고채3년'}).set_index('date')
df3Y_1
국고채 10년도 동일하게 수정합니다.
df10Y_1=df10Y[['TIME','DATA_VALUE']]
df10Y_1['date']=pd.to_datetime(df10Y_1['TIME'])
df10Y_1=df10Y_1[['date','DATA_VALUE']].rename(columns={'DATA_VALUE':'국고채10년'}).set_index('date')
df10Y_1
그럼 df국채에 두 가지의 데이터를 병합하겠습니다.
df국채=pd.concat([df3Y_1,df10Y_1], axis=1)
df국채
4. 미국채(3년, 10년) 데이터 수집
fred API를 이용해서 미국채 3년과 10년의 데이터를 수집하겠습니다.
보통 장단기 금리차는 10년-2년이지만 우리나라 국채와 기준 통일을 위해 3년 금리를 사용하겠습니다.
아래와 같이 데이터를 수집합니다.
import pandas as pd
import fredpy as fp
from datetime import datetime, timedelta
#fp.api_key = 'YOUR_API_KEY'
enddate=(datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d')
dgs3 = fp.series('DGS3',enddate)
dgs10 = fp.series('DGS10',enddate)
두 개의 데이터를 병합하고, 기간을 2001-01-01부터로 수정합니다.
df미국채=pd.concat([dgs3.data, dgs10.data], axis=1)
df미국채.columns=['미국채3년','미국채10년']
df미국채=df미국채.loc[df미국채.index > '2001-01-01']
df미국채
5. 데이터 비교
계산을 하기 위해 df의 column type을 float으로 변경합니다.
이후 한국과 미국의 장단기 금리차를 구하고,
한국 장단기 금리차 - 미국 장단기 금리차도 계산해 둡니다.
df=df.astype('float')
df['국채장단기']=df['국고채10년']-df['국고채3년']
df['미국채장단기']=df['미국채10년']-df['미국채3년']
df['한국_미국장단기']=df['국채장단기']-df['미국채장단기']
df
아래와 같이 나왔습니다.
그래프로 확인해볼까요.
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
fig = go.Figure()
fig.add_trace(
go.Line(x=df.index, y=df['국채장단기'], name="국채장단기"),
)
fig.add_trace(
go.Line(x=df.index, y=df['미국채장단기'], name="미국채장단기"),
)
fig.update_layout(
title_text = '한국 장단기 금리차, 미국 장단기 금리차',
title = {'x':0.5, 'y':0.85}
)
fig.show()
한국 장단기 금리차에서 미국 장단기 금리차를 뺀 데이터를 그래프로 보겠습니다.
fig = go.Figure()
fig.add_trace(
go.Line(x=df.index, y=df['한국_미국장단기'], name="한국_미국장단기"),
)
fig.update_layout(
title_text = '한국 장단기 금리차 - 미국 장단기 금리차',
title = {'x':0.5, 'y':0.85}
)
fig.show()
마지막으로 위의 그래프에서 코스피 지수를 넣어서 함께 확인해보겠습니다.
import FinanceDataReader as fdr
kospi=fdr.DataReader('KS11', '20010101', '20221210')
fig = make_subplots(specs=[[{"secondary_y": True}]])
fig.add_trace(
go.Line(x=df.index, y=df['한국_미국장단기'], name="한국_미국장단기"),
secondary_y=True,
)
fig.add_trace(
go.Line(x=kospi.index, y=kospi['Close'], name="코스피지수"),
secondary_y=False,
)
fig.update_layout(
title_text = '한국 장단기 금리차 - 미국 장단기 금리차와 코스피지수',
title = {'x':0.5, 'y':0.85}
)
fig.show()
이상으로 한국의 3년 국채, 10년 국채 금리와 미국의 3년, 10년 국채 금리를 불러와서
각각의 장단기 금리차를 계산하고 비교해 봤습니다.
'API' 카테고리의 다른 글
[한국은행 API] 주요 국가의 중앙은행 정책금리 비교 (4) | 2022.12.13 |
---|---|
[fred yahoo API] 소비자심리지수와 S&P500, 달러인덱스, 금 데이터 비교하기 (4) | 2022.12.12 |
[한국은행 API] 인증키 신청 및 100대 통계 지표 수집 (8) | 2022.12.09 |
[FinanceDataReader] CAGR, MDD, 샤프지수,소르티노지수 계산 및 코스피 회사에 대한 결과 시각화 (4) | 2022.12.09 |
[FinanceDataReader] 주가 및 소르티노비율 소르티노지수(sortino) 계산 (4) | 2022.12.07 |