본문 바로가기

API

[한국은행API] 경기 선행지수 및 동행지수 순환변동치와 주가

반응형

한국은행 API를 이용해서 경기 선행지수 및 동행지수의 순환변동치 데이터를 불러오고 KOSPI 지수와 비교해 보겠습니다.

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

 

1. 한국은행 API 가입

2. 경기 선행지수 및 동행지수 순환변동치

3. 선행지수 및 동행지수와 KOSPI

4. 선행지수-동행지수 차분 데이터와 KOSPI

 

 

1. 한국은행 API 가입

https://yenpa.tistory.com/80

 

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

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

yenpa.tistory.com

 

 

 

2. 경기 선행지수 및 동행지수 순환변동치

선행지수 및 동행지수 순환 변동치는 STAT_CODE=901Y067(8.1.2. 경기종합지수)에서 확인이 가능합니다.

월 단위로 데이터를 제공하고 있는데 2000년 1월 ~ 2022년 12월까지의 데이터를 수집하겠습니다.

import requests

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

 

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

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

 

 

수집 데이터중에서 선행지수순환변동치와 동행지수순환변동치만 따로 저장하겠습니다.

df1=df.loc[df['ITEM_NAME1']=='동행지수순환변동치']
df2=df.loc[df['ITEM_NAME1']=='선행지수순환변동치']

 

그래프로 확인해볼까요

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=df1['datetime'], y=df1['DATA_VALUE'], name="동행지수순환변동치"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=df2['datetime'], y=df2['DATA_VALUE'], name="선행지수순환변동치"),
    secondary_y=True,
)

fig.update_layout(
    title_text='선행지수순환변동치와 동행지수순환변동치',
    title={'x':0.5, 'y':0.9}
)


fig.show()

선행지수가 동행지수보다 전체적으로 먼저 수치가 변동되는 것이 확인이 됩니다.

 

반응형

 

 

3. 선행지수 및 동행지수와 KOSPI

우선 KOSPI 데이터를 수집하겠습니다.

import yfinance as yf
from datetime import datetime

enddate=datetime.now().strftime('%Y-%m-%d')
kospi=yf.download('^KS11', '2001-01-01', enddate, auto_adjust=True)
kospi

 

 

선행지수순환변동치와 KOSPI를 비교하겠습니다.

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

fig.add_trace(
    go.Scatter(x=df2['datetime'], y=df2['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='선행지수순환변동치와 코스피',
    title={'x':0.5, 'y':0.9}
)


fig.show()

 

 

다음으로는 동행지수순환변동치와 KOSPI를 보겠습니다.

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

fig.add_trace(
    go.Scatter(x=df1['datetime'], y=df1['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='동행지수순환변동치 코스피',
    title={'x':0.5, 'y':0.9}
)


fig.show()

 

 

반응형

 

 

4. 선행지수-동행지수 차분 데이터와 KOSPI

선행지수와 동행지수 데이터를 병합하고 선행지수-동행지수의 차분 데이터를 계산하겠습니다.

diff=pd.concat([df1[['datetime','DATA_VALUE']].set_index('datetime'), \
           df2[['datetime','DATA_VALUE']].set_index('datetime')], axis=1)
diff.columns=['동행','선행']
diff['선행-동행']=diff['선행']-diff['동행']
diff

 

 

그럼 그래프로 확인해 볼까요

선행지수 KOSPI와 동행지수 KOSPI와 어떻게 다른지 비교해 보셔도 좋을 것 같습니다.

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

fig.add_trace(
    go.Scatter(x=diff.index, y=diff['선행-동행'], 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='선행지수-동행지수 차분데이터와 코스피',
    title={'x':0.5, 'y':0.9}
)


fig.show()

 

선행지수와 차분 데이터를 한 번에 확인하겠습니다.

 

 

이상으로 경기 선행지수 및 동행지수의 순환변동치 데이터를 불러오고 KOSPI 지수와 비교해 봤습니다.

반응형