#04_02 [python] 주식 데이터 간 연관성 시각화 하기 (seaborn ,corr)

2022. 1. 31. 16:29개발의 흔적/데이터분석

#앞의 04_01의 주식 데이터 셋 사용!

# 이번엔 여러 종목 간의 상관관계를 알아 볼 것이다!

 

import pandas as pan
import pandas_datareader.data as web
from datetime import datetime

 

code = pan.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download', header=0) [0]
code_result = code[['회사명', '종목코드']].rename(columns={'회사명' : 'corpName', '종목코드' : 'code' })
code_result

 

 

def loadCode(x):
    corp_name = x
    condition = "corpName == '{}'".format(corp_name)
    
    corp = code_result.query(condition)
    
    corp = corp['code'].to_string(index = False).strip().rjust(6, '0')
    print(x + ' code : '+ corp)
    return corp

 

#앞 페이지에서 작성했던 코드

 

 

 

 


start = datetime(2021,1,1)
end = datetime(2021,12,31)

companies_stock_2021 =  pan.DataFrame({'Date':pan.date_range(start = start, end = end)})
companies_stock_2021

 

#위의 데이타프레임에 찾을 종목들의 종가를 계속 column으로 추가해줄 것!

 

 

 

companies = ['삼성전자', 'LG전자', '카카오', 'NAVER', 'CJ', '한화','현대자동차']

 

for company in companies:
    company_code = loadCode(company)
    stock_df = web.DataReader(company_code, 'naver', start, end)
    companies_stock_2021 = companies_stock_2021.join(pan.DataFrame(stock_df['Close'].astype(int)).rename(columns={'Close' : company}), on='Date')

 

companies_stock_2021


corr_data = companies_stock_2021.corr()
corr_data

 

#.corr() : 상관분석 함수 : 두 변수사이 관계의 유뮤, 관계의 강도에 대한 분석

# -1 <= p <= 1

# p가 0에 수렴 할수록 상관관계 약해짐

# p가 1에 수렴 할수록 양의 상관관계 (비례)

# p가 -1에 수렴 할수록 음의 상관관계 (반비례)

# |p| > 0.8  -> 두 변수의 상관관계는 중요!

 

corr_data

import matplotlib.pyplot as plt
import seaborn as sns                                    #seaborn 라이브러리 : 시각화 할 때 쓰임

plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False    #그래프에서 마이너스 기호 깨지는거 막아주느 기능


plt.figure(figsize = (10,10))
sns.heatmap(data=corr_data, annot = False, fmt='.2f', linewidth = .5, cmap = 'Blues')

 

#seaborn.heatmap( data = 사용 할 pivot table, annot = 각 cell 안에 숫자 표시 유무, fmt = 소수점 자리, 

#                         linewidth = 칸 너비, cmap = 색깔)
plt.show()