본문 바로가기

API

[fred 한국은행 API] 한국과 미국의 장단기 금리차 비교하기

반응형

한국은행 API와 fred API를 이용해서 한국의 3년 국채, 10년 국채 금리와 미국의 3년, 10년 국채 금리를

불러와서 각각의 장단기 금리차를 계산하고 비교해 보겠습니다.

 

한국은행 API 및 fred API가 가입이 되어 있어야 합니다.

 

1. 한국은행 API 가입

2. fred API 가입

3. 한국 국채(3년, 10년) 데이터 수집

4. 미국채(3년, 10년) 데이터 수집

5. 데이터 비교

 

 

 

1. 한국은행 API 가입

https://yenpa.tistory.com/80

 

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

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

yenpa.tistory.com

 

2. fred API 가입

https://yenpa.tistory.com/65

 

[Fred API] 가입 후 API KEY 신청 및 확인하기

Fred 사이트에 가입 후 API Key 확인하는 방법을 알아보겠습니다. 1. Fred 사이트 가입 아래의 사이트에 접속합니다 https://fred.stlouisfed.org/ Federal Reserve Economic Data | FRED | St. Louis Fed Welcome to FRED, your trust

yenpa.tistory.com

 

 

 

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년 국채 금리를 불러와서

각각의 장단기 금리차를 계산하고 비교해 봤습니다.

 

 

반응형