주식데이터 상관관계 분석하기
주식데이터를 가공하여 기업별 상관관계를 분석하고 Data studio를 통해 예쁘게 그려보기
(1) 필요한 패키지 설치
import pandas as pd
import pandas_datareader.data as web
from datetime import datetime
(2) 회사명과 종목코드만 분리하고, 열이름 바꾸기
code = pd.read_csv('./data/corpgeneral.csv', header = 0)
code = code[['회사명','종목코드']]
code_result = code.rename(columns={'회사명':'corp', '종목코드':'code'})
code_result
(3) code_result, corp_name을 넣으면 코드를 반환해주는 함수 만들기
def get_code(code_result, corp_name):
condition = "corp=='{}'".format(corp_name)
code = code_result.query(condition)['code'].to_string(index=False)
code = code.strip()
code = code.rjust(6,'0')
return code
#아래는 예시
kakao_code = get_code(code_result, "카카오")
kakao_code
(4) 상관관계를 분석하고 싶은 회사리스트 및 기간 정하기
companies = ['삼성전자','LG전자','카카오','NAVER','CJ','한화','현대자동차','기아자동차']
start = datetime(2020,1,1)
end = datetime(2020,12,31)
stocks_of_companies = pd.DataFrame({'Date':pd.date_range(start=start, end=end)})
stocks_of_companies #아직은 날짜밖에 없지만 날짜옆에 각 회사의 주식정보들이 추가될 예정
(5) For문을 사용해서 리스트에 있던 회사들의 주식종가를 위의 테이블에 붙여넣기
for company in companies:
company_code = get_code(code_result, company)
stock_df = web.DataReader(company_code, 'naver', start, end)
stocks_of_companies = stocks_of_companies.join(pd.DataFrame(stock_df['Close'].astype(int)).rename(columns={'Close':company}), on='Date')
stocks_of_companies.tail(5)
corr_data = stocks_of_companies.corr() #NA값을 제외하고 상관관계 분석
corr_data
(6) Seaborn을 사용하여 히트맵 그려보기
conda install -c anaconda seaborn
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.family']="Malgun Gothic"
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,10)) #도화지는 plt사용
sns.heatmap(data=corr_data, annot=True, fmt='.2f', linewidths=.5, cmap='Blues')
plt.show()
(7) 위의 분석내용을 csv로 추출 (전체코드)
import pandas as pd
import pandas_datareader.data as web
from datetime import datetime
code = pd.read_csv('./data/corpgeneral.csv', header=0)
code = code[['회사명', '종목코드']]
# 컬럼명 바꾸기
code_result = code.rename(columns={'회사명': 'corp', '종목코드': 'code'})
# 종목 코드 6자리만들기
code_result.code = code_result.code.map('{:06d}'.format)
def get_code(code_result, corp_name):
condition = "corp=='{}'".format(corp_name)
code = code_result.query(condition)['code'].to_string(index=False)
# 위와같이 code명을 가져오면 앞에 공백이 붙어있는 상황이 발생하여 앞뒤로 sript() 하여 공백 제거
code = code.strip()
return code
companies = ['삼성전자', 'LG전자', '카카오', 'NAVER', 'CJ', '한화', '현대자동차', '기아자동차']
start = datetime(2019,1,1)
end = datetime(2020,9,10)
stocks_of_companies = pd.DataFrame({'Date': pd.date_range(start=start, end=end)})
for company in companies:
company_code = get_code(code_result, company)
stock_df = web.DataReader(company_code, 'naver',start, end)
stocks_of_companies = stocks_of_companies.join(pd.DataFrame(stock_df['Close'].astype(int)).rename(columns={'Close':company}), on='Date')
stocks_of_companies.dropna()
stocks_of_companies.to_csv('./stock_change.csv',sep=',', na_rep='NaN',index = False)
(8) Data studio에 해당 파일을 업로드해서 예쁜 그래프그려보기