파이썬으로 데이터 분석하기 (10)

Stella Park·2021년 8월 2일
0

PYTHON

목록 보기
10/14
post-thumbnail

주식데이터 상관관계 분석하기
주식데이터를 가공하여 기업별 상관관계를 분석하고 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에 해당 파일을 업로드해서 예쁜 그래프그려보기

profile
코딩 0살

0개의 댓글

관련 채용 정보