한국은행 API를 이용해서 예금 대출 금리와 국채 수익률(3년, 10년) 데이터를 수집하고
예금 대출 금리 스프레드를 계산 후 그래프로 확인해 보겠습니다.
또 가계대출금리와 기업대출금리의 스프레드도 확인하겠습니다.
확인을 위해서는 한국은행 API에 가입이 되어 있어야 합니다.
1. 한국은행 API 가입
2. 예금 금리 수집
3. 대출 금리 수집(기업대출, 가계대출)
4. 국채 수익률(3년, 10년)
5. 예금-대출 스프레드와 국채 수익률
6. 가계대출-기업대출 스프레드와 국채 수익률
1. 한국은행 API 가입
[한국은행 API] 인증키 신청 및 100대 통계 지표 수집
한국은행 API에 가입하고 서비스 항목 중 100대 통계지표에 대해 데이터 수집하고 그래프로 확인해보겠습니다. 1. 인증키 신청 2. 인증키 확인 3. 100대 통계 지표 수집 1. 인증키 신청 사이트 접속
yenpa.tistory.com
2. 예금 금리 수집
한국은행 API의 통계조회 조건 설정의 서비스에서 통계항목코드 1을 '121 Y002'로
지정하면 1.3.3.1.1. 예금은행 수신금리(신규취급액 기준) 데이터를 불러올 수 있습니다.
아래는 금리에 대한 정보(121Y002)를 202201~202302 기간에서 월별로 조회한 코드입니다.
import requests
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/121Y002/M/202201/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 + '/121Y002/M/202201/202302'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
df=pd.DataFrame(rows)
df
어떤 예금 금리를 제공하는지 확인하겠습니다.
df['ITEM_NAME1'].unique()
이 중에서 정기예금 데이터만 따로 수집하는데
ITEM_CODE1 = 'BEABAA211'입니다. 그럼 정기예금 데이터만 2006년 1월부터 2023년 2월까지 수집하겠습니다.
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/121Y002/M/200601/202302/BEABAA211'
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 + '/121Y002/M/200601/202302/BEABAA211'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
df1=pd.DataFrame(rows)
df1
정기예금만 수집된 것을 알 수 있습니다.
TIME Column이 YYYYMMDD의 object형식인데 Datetime Column으로 만들고,
Data_value는 float으로 변경 후 필요한 Column만 따로 저장했습니다.
df2=df1[['ITEM_NAME1','TIME','DATA_VALUE']]
df2['date']=pd.to_datetime((df2['TIME'].str[:4] + '-' + df2['TIME'].str[4:6] + '-' + '01'))
df2=df2.astype({'DATA_VALUE':'float'})
df2=df2.drop_duplicates()
df2
3. 대출 금리 수집
다음으로는 대출 금리를 수집하겠습니다.
통계항목코드 1을 '121Y006'로 지정하면 1.3.3.2.1. 예금은행 대출금리(신규취급액 기준) 데이터를 불러올 수 있습니다.
2006년 1월부터 2023년 2월까지 데이터를 수집하고, 데이터 중에서 기업대출, 가계대출만 따로 df4에 저장했습니다.
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/121Y006/M/200601/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 + '/121Y006/M/200601/202302'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
df3=pd.DataFrame(rows)
df4=df3.loc[df3['ITEM_NAME1'].isin(['기업대출','가계대출'])]
df4
TIME Column이 YYYYMMDD의 object형식인데 Datetime Column으로 만들고,
Data_value는 float으로 변경 후 필요한 Column만 따로 저장했습니다.
df5=df4[['ITEM_NAME1','TIME','DATA_VALUE']]
df5['date']=pd.to_datetime((df5['TIME'].str[:4] + '-' + df5['TIME'].str[4:6] + '-' + '01'))
df5=df5.astype({'DATA_VALUE':'float'})
df5=df5.drop_duplicates()
df5
예금금리와 대출금리를 그래프로 확인해 보겠습니다.
dfc=df5.loc[df5['ITEM_NAME1']=='기업대출']
dfh=df5.loc[df5['ITEM_NAME1']=='가계대출']
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(
go.Scatter(x=df2['date'], y=df2['DATA_VALUE'], name="예금금리"),
)
fig.add_trace(
go.Scatter(x=dfc['date'], y=dfc['DATA_VALUE'], name="기업대출"),
)
fig.add_trace(
go.Scatter(x=dfh['date'], y=dfh['DATA_VALUE'], name="가계대출"),
)
fig.update_layout(title_text='예금금리와 대출금리(기업,가계)', title_x=0.5)
fig.show()
4. 국채 수익률(3년, 10년)
국채 3년과 10년에 대한 수익률을 수집하겠습니다.
3년은 통계항목코드 1을 '722Y001'와 ITEM_CODE1 '010200000'이고,
10년은 ITEM_CODE1 '010200000'로 수집이 가능합니다.
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/817Y002/D/20060101/20230228/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/20060101/20230228/010200000'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
df3y=pd.DataFrame(rows)
df3y=df3y[['ITEM_NAME1','TIME','DATA_VALUE']]
df3y['date']=pd.to_datetime((df3y['TIME'].str[:4] + '-' + df3y['TIME'].str[4:6] + '-'+ df3y['TIME'].str[6:8]))
df3y=df3y.astype({'DATA_VALUE':'float'})
df3y=df3y.drop_duplicates()
df3y
마찬가지로 10년 데이터를 수집하겠습니다.
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey \
+ '/json/kr/1/100/817Y002/D/20060101/20230228/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)
url = 'https://ecos.bok.or.kr/api/StatisticSearch/' + apikey + '/json/kr/' \
+ start + '/' + end + '/817Y002/D/20060101/20230228/010210000'
response = requests.get(url)
result = response.json()
rows = rows + result['StatisticSearch']['row']
df10y=pd.DataFrame(rows)
df10y=df10y[['ITEM_NAME1','TIME','DATA_VALUE']]
df10y['date']=pd.to_datetime((df10y['TIME'].str[:4] + '-' + df10y['TIME'].str[4:6] + '-' + df10y['TIME'].str[6:8]))
df10y=df10y.astype({'DATA_VALUE':'float'})
df10y=df10y.drop_duplicates()
df10y
국채 3년 10년 수익률을 그래프로 보겠습니다.
fig = go.Figure()
fig.add_trace(
go.Scatter(x=df3y['date'], y=df3y['DATA_VALUE'], name="3년"),
)
fig.add_trace(
go.Scatter(x=df10y['date'], y=df10y['DATA_VALUE'], name="10년"),
)
fig.update_layout(title_text='한국 국채 수익률(3년,10년)', title_x=0.5)
fig.show()
5. 예금-대출 스프레드와 국채 수익률
예금 - 대출 스프레드를 계산하겠습니다. 예금-기업대출, 예금-가계대출을 각각 구하겠습니다.
comspread=pd.concat([df2.set_index('date')[['DATA_VALUE']],dfc.set_index('date')[['DATA_VALUE']]], axis=1)
comspread.columns=['예금금리','기업대출금리']
comspread['스프레드']=comspread['예금금리']-comspread['기업대출금리']
comspread
hospread=pd.concat([df2.set_index('date')[['DATA_VALUE']],dfh.set_index('date')[['DATA_VALUE']]], axis=1)
hospread.columns=['예금금리','가계대출금리']
hospread['스프레드']=hospread['예금금리']-hospread['가계대출금리']
hospread
예금금리 - 기업대출금리의 스프레드와 국채수익률을 그래프로 보겠습니다.
fig = make_subplots(specs=[[{"secondary_y": True}]])
fig.add_trace(
go.Scatter(x=df3y['date'], y=df3y['DATA_VALUE'], name="3년"),
secondary_y=True,
)
fig.add_trace(
go.Scatter(x=df10y['date'], y=df10y['DATA_VALUE'], name="10년"),
secondary_y=True,
)
fig.add_trace(
go.Scatter(x=comspread.index, y=comspread['스프레드'], name="예금금리-기업대출금리_스프레드"),
secondary_y=False,
)
fig.update_layout(title_text='예금금리-기업대출금리_스프레드와 국채 수익률(3년,10년)', title_x=0.5)
fig.show()
예금금리 - 가계대출금리의 스프레드와 국채수익률을 그래프로 보겠습니다.
6. 가계대출-기업대출 스프레드와 국채 수익률
마지막으로 가계대출금리에서 기업대출금리의 스프레드를 구하고
국책 수익률과 비교해 보겠습니다.
spread=pd.concat([dfh.set_index('date')[['DATA_VALUE']],dfc.set_index('date')[['DATA_VALUE']]], axis=1)
spread.columns=['가계대출금리','기업대출금리']
spread['스프레드']=spread['가계대출금리']-spread['기업대출금리']
spread
fig = make_subplots(specs=[[{"secondary_y": True}]])
fig.add_trace(
go.Scatter(x=df3y['date'], y=df3y['DATA_VALUE'], name="3년"),
secondary_y=True,
)
fig.add_trace(
go.Scatter(x=df10y['date'], y=df10y['DATA_VALUE'], name="10년"),
secondary_y=True,
)
fig.add_trace(
go.Scatter(x=spread.index, y=spread['스프레드'], name="가계대출금리-기업대출금리_스프레드"),
secondary_y=False,
)
fig.update_layout(title_text='가계대출금리-기업대출금리_스프레드와 국채 수익률(3년,10년)', title_x=0.5)
fig.show()
예금 대출 금리 및 국채 수익률(3년, 10년) 데이터를 수집하고,
예금 대출 금리 스프레드 및 가계대출금리와 기업대출금리의 스프레드를 계산 후 그래프로 확인해 봤습니다.
'API' 카테고리의 다른 글
[한국은행 API] 소비자동향조사 CSI(금리수준, 현재경기판단)와 코스피, 국채10년 (8) | 2023.04.17 |
---|---|
[한국은행 API] 제조업 재고율 및 설비투자지수와 코스피 (4) | 2023.04.04 |
[Fred API] 미국 기준금리와 국채 수익률 스프레드 (8) | 2023.03.19 |
[한국은행 API] 한국 기준금리와 국채 수익률 스프레드 (4) | 2023.03.16 |
[통계청 API] 해외 입국자의 국적,연령대,입국 목적별 정보수집(2022년) (4) | 2023.03.06 |