python basic(2021-08-01)

Hyunjeong Lee·2021년 8월 1일
0

1.주식데이터 분석하기
2.분석한 데이터로 인사이트 얻기 : 데이터에서 정답찾기
3.나만의 보고서 만들기 : 노트북에서 만든 결과는 공유하기가 쉽지 않음

1.주식데이터 분석하기
1-1.데이터 전처리
1-1-1.데이터 불러오기
import pandas as pd

code = pd.read_csv('./data/corpgeneral.csv', header=0)
code.head(5)
1-1-2. 필요한부분만 자르기
code = code[['회사명', '종목코드']]
code
1-1-3. 컬럼명 바꾸기
code_result = code.rename(columns={'회사명': 'corp', '종목코드': 'code'})
code_result

1-2.원하는 종목 가져오기
1-2-1. 종목이름으로 종목코드 가져오기
corp_name = "카카오"
condition = "corp=='{}'".format(corp_name)

kakao = code_result.query(condition)
kakao = kakao['code']
kakao_string = kakao.to_string(index=False)
kakao_string = kakao_string.strip()
kakao_code = kakao_string.rjust(6, '0')
kakao_code

1-2-2. 종목 코드로 데이터 가져오기
라이브러리 설치
conda install -c anaconda pandas-datareader

import pandas_datareader.data as web
kakao_stock_df = web.DataReader(kakao_code, 'naver') # 네이버로 변경

  • High: 최고가 / Low: 최저가 / Open: 시작가 / Close: 종가
  • 여러가지 데이터를 얻을 수 있습니다!

1-2-3.종가 그래프 그리기
kakao_stock_df['Close'] = kakao_stock_df['Close'].astype(int)import pandas_datareader.data as web
kakao_stock_df['Close'].plot()

2.상관관계란?
피어슨 상관관계: x,y가 각각 변하는 정도에 대해서 x,y가 함께 변하는 정도의 비율

  • 상관 계수는 1부터 -1까지 존재 합니다.
  • 기울기이기 때문이죠
  • 기울기가 1이면 매우 강한 상관관계가 있습니다
    • 하지만 이 세상에서 데이터로 만날 케이스는 하나입니다. 뒤에 보여드리죠
  • 0이면 상관관계를 찾을 수 없는것이죠
  • -1이면? 1과 마찬가지로 강한 상관관계가 있습니다. X축이 증가하면 Y축이 감소합니다
  • '보통은 0.6 ~ 0.4 사이의 값을 가지면 상관 관계가 있다'로 판단합니다

2-1.주식데이터 준비
2-1-1. 라이브러리 불러오기
import pandas as pd
import pandas_datareader.data as web
from datetime import datetime
2-1-2. 전체코드 정보
code = pd.read_csv('./data/corpgeneral.csv', header=0)
code = code[['회사명', '종목코드']]
code_result = code.rename(columns={'회사명': 'corp', '종목코드': 'code'})
2-1-3. 종목명을 입력하면 코드를 가져오는 함수 만들기
#회사명으로 주식 종목 코드를 획득할 수 있도록 하는 함수
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()
code = code.rjust(6, '0')
return code

#ex) 삼성전자의 코드를 구해보겠습니다.
samsung_code = get_code(code_result, '삼성전자')
samsung_code

2-2.주식 데이터 상관관계 분석
2-2-1.테이블 틀 만들기(회사, 2020년 1년의 일수 365일)
companies = ['삼성전자', 'LG전자', '카카오', 'NAVER', 'CJ', '한화', '현대자동차', '기아자동차']
start = datetime(2019,1,1)
end = datetime(2019,12,31)
stocks_of_companies = pd.DataFrame({'Date': pd.date_range(start=start, end=end)})
stocks_of_companies

2-2-2. 만들어진 틀에 값 입력하기(종가)
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)

2-2-3. 상관관계 테이블
corr_data = stocks_of_companies.corr()

2-3. 상관관계 그래프 그리기
2-3-1. 라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns

#Apple은 'AppleGothic', Windows는 'Malgun Gothic'을 추천
plt.rcParams['font.family'] = "Malgun Gothic"
plt.rcParams['axes.unicode_minus'] = False # 마이너스 기호 깨지는 걸 막아줘요
#seaborn설치
conda install -c anaconda seaborn

2-3-2. seaborn으로 그래프 그리기
plt.figure(figsize=(5,3))
sns.lineplot(data=kakao_stock_df['Close'])

2-3-3. 상관관계 그래프 그리기
plt.figure(figsize=(10,10))
sns.heatmap(data = corr_data, annot=True, fmt = '.2f', linewidths=.5, cmap='Blues')
plt.show()

3.결과 공유하기
구글 데이터 스튜디오
https://datastudio.google.com/u/0/navigation/reporting

import pandas as pd
import pandas_datareader as pdr
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) + '.KS'
    stock_df = pdr.get_data_yahoo(company_code, start, end)
    stocks_of_companies = stocks_of_companies.join(pd.DataFrame(stock_df['Close'].pct_change()).rename(columns={'Close':company}), on='Date')

stocks_of_companies = stocks_of_companies.dropna()
stocks_of_companies.to_csv('./stock_change.csv',sep=',', na_rep='NaN',index = False)
``` #csv로 변환하기

만든데이터는 변환하여 구글데이터에서 불러오기 하여 그래프화 한다.

0개의 댓글