본문 바로가기

코딩 갤러리/데이터분석

[파이썬] 코스피, 달러, 채권 간 상관관계 분석을 위한 코드

728x90
반응형

코스피, 달러, 단기채권, 3년물 채권, 10년물 채권 간의 상관관계 분석을 위한 코드입니다.

import pandas_datareader as web
import datetime
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

필요한 라이브러리는 위와 같습니다.

today = datetime.date.today()
kospi_data = web.get_data_yahoo('226490.KS', '2017-01-01', today)
dollar_data = web.get_data_yahoo('261240.KS', '2017-01-01', today)
bond_short = web.get_data_yahoo('214980.KS', '2017-01-01', today)
bond_3 = web.get_data_yahoo('114260.KS', '2017-01-01', today)
bond_10 = web.get_data_yahoo('148070.KS', '2017-01-01', today)

코스피 데이터는 KODEX 코스피 ETF를, 달러 데이터는 KODEX 미국달러선물 ETF를, 단기채권 데이터는 KODEX 단기채권PLUS ETF를, 3년물 채권 데이터는 KODEX 국고채3년 ETF를, 10년물 채권은 데이터는 KOSEF 국고채10년 ETF를 사용합니다.

df = pd.DataFrame({'kospi' : kospi_data['Adj Close'],
                   'dollar' : dollar_data['Adj Close'],
                   'bonds' : bond_short['Adj Close'],
                   'bond3' : bond_3['Adj Close'],
                   'bond10' : bond_10['Adj Close']
                   })

각각의 데이터의 수정종가를 한 데이터로 합칩니다.

In[4]: df_corr = df.corr(method = 'pearson')
Out[4]: 
           kospi    dollar     bonds     bond3    bond10
kospi   1.000000 -0.240366  0.537510  0.333779 -0.253312
dollar -0.240366  1.000000  0.533794  0.733017  0.835703
bonds   0.537510  0.533794  1.000000  0.893493  0.525552
bond3   0.333779  0.733017  0.893493  1.000000  0.760014
bond10 -0.253312  0.835703  0.525552  0.760014  1.000000

df.corr() 함수를 통해 각 데이터의 간의 상관계수를 도출하며, 이때 상관계수는 피어슨 상관계수입니다.

sns.heatmap(df_corr,
            cmap = 'Greys', # Greys 색상으로 표시
            annot = True,   # 상관계수 값을 표시한다
            linewidths=.5,  # 경계면 구분하기
            fmt = '.2f', # 상관계수의 소수점 자리수  2자리로 지정
            cbar_kws={"shrink": .5},# 컬러바 크기 절반으로 줄이기
            square = True, # True로 설정 시 정사각형, False 설정 시 직사각형으로 설정
            vmin = -1,vmax = 1   # 컬러바 범위 -1 ~ 1
           )
plt.show()

데이터 간 상관관계를 heatmap으로 시각화합니다. cmap은 heatmap의 색상, annot은 상관계수 값 표시, linewidtfs는 경계선 표시, fmt는 소수점 자리수 설정, cbar_kws는 컬러바 크기 설정, square는 사각형의 모양을 설정합니다. 위를 실행하면 아래와 같은 heatmap이 나옵니다.

 

<전체 코드>

import pandas_datareader as web
import datetime
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

today = datetime.date.today()

kospi_data = web.get_data_yahoo('226490.KS', '2017-01-01', today)
dollar_data = web.get_data_yahoo('261240.KS', '2017-01-01', today)
bond_short = web.get_data_yahoo('214980.KS', '2017-01-01', today)
bond_3 = web.get_data_yahoo('114260.KS', '2017-01-01', today)
bond_10 = web.get_data_yahoo('148070.KS', '2017-01-01', today)

df = pd.DataFrame({'kospi' : kospi_data['Adj Close'],
                   'dollar' : dollar_data['Adj Close'],
                   'bonds' : bond_short['Adj Close'],
                   'bond3' : bond_3['Adj Close'],
                   'bond10' : bond_10['Adj Close']
                   })

df_corr = df.corr(method = 'pearson')

sns.heatmap(df_corr,
            cmap = 'Greys',
            annot = True,
            linewidths=.5,
            fmt = '.2f',
            cbar_kws={"shrink": .5},
            square = True,
            vmin = -1,vmax = 1
           )
plt.show()

seaborn.heatmap에 사용할 수 있는 색상은 아래와 같습니다.

728x90
반응형