멋사 AI 7기 4주차 -1

psy4072·2022년 10월 9일
0
post-thumbnail

네이버 주식 시세 데이터 시각화

import pandas as pd
import numpy as np

!pip install -U finance-datareader
import FinanceDataReader as fdr
url = "https://finance.naver.com/sise/entryJongmok.naver?&page=1"
df_top10 = pd.read_html(url)[0].dropna()

전체 상장종목에서 종목코드와 종목명 출력

df_krx = fdr.StockListing("KRX")
df_krx.head()

df_krx = df_krx[["Name, "Symbol"]]
df_krx.head()

=> 
	Name		Symbol
0	3S			060310
1	AJ네트웍스	095570
2	AK홀딩스		006840
3	APS홀딩스		054620
4	AP시스템		265520

시가총액 상위 10개 종목

df_10 = df_top10.merge(df_krx, left_on='종목별', right_on='Name', how='left')[["Name", "Symbol"]]
df_10

=> 
Name				Symbol
0	삼성전자			005930
1	LG에너지솔루션		373220
2	SK하이닉스		000660
3	삼성바이오로직스	207940
4	LG화학			051910
5	삼성SDI			006400
6	현대차			005380
7	기아				000270
8	NAVER			035420
9	카카오			035720

기아 주식 2022년 종가 목록

fdr.DataReader("005380", "2022")["Close"]

=> 
Date
2022-01-03    210500
2022-01-04    210000
2022-01-05    213500
2022-01-06    214000
2022-01-07    215000
               ...  
2022-09-28    179500
2022-09-29    181500
2022-09-30    176500
2022-10-04    179500
2022-10-05    176000
Name: Close, Length: 186, dtype: int64

여러 종목 종가 수집

item_list = [fdr.DataReader(sym, "2022")["Close"] for sym in df_10["Symbe"]]
item_list[-1]

Date
2022-01-03    114500
2022-01-04    111500
2022-01-05    105500
2022-01-06    100000
2022-01-07    100000
               ...  
2022-09-28     56900
2022-09-29     55900
2022-09-30     57100
2022-10-04     55900
2022-10-05     55100
Name: Close, Length: 186, dtype: int64

하나의 데이터프레임 합체

df= pd.concat(item_list, axis=1)
df.columns = df_10["Name"]
df.head(1)


Name	삼성전자	LG에너지솔루션	SK하이닉스	삼성바이오로직스	LG화학	삼성SDI	현대차	기아		NAVER	카카오
Date										
2022-01-03	78600	NaN		128500		900338		618000		650000	210500	82600	376000	114500

종목 시각화

!pip install koreanize-matplotlib

import koreanize_matplotlib

# 그래프에 retina display 적용
%config InlineBackend.figure_format = 'retina'

import matplotlib.pyplot as plt

# 판다스의 plot을 통한 전체 데이터 프레임 시각화
df.plot(figsize=(12,3))
plt.legend(bbox_to_anchor=(1, 1))

# 삼성전자, LG화학 비교
df[["삼성전자", "LG화학"]].plot()

2축 그래프

df[["삼성전자", "LG화학"]].plot(secondary_y="LG화학")

전체 데이터프레임 값에 대한 수익률 계산

df_norm = (df / df.iloc[0]) - 1
df_norm.head(3)

=> 
Name	삼성전자		LG에너지솔루션	SK하이닉스	삼성바이오로직스	LG화학	삼성SDI		현대차		기아			NAVER		셀트리온
Date										
2022-01-03	0.000000	NaN		0.0			0.000000	0.000000	0.000000	0.000000	0.000000	0.000000	0.000000
2022-01-04	0.001272	NaN		0.0			-0.025247	0.042071	-0.001538	-0.002375	0.010896	-0.027926	-0.020151
# "LG에너지솔루션" NaN 값 출력
df_norm["LG에너지솔루션"] = (df["LG에너지솔루션"] / df["LG에너지솔루션"].dropna()[0]) - 1
df_norm * 100
df.norm.tail(2)

=> 

Name		삼성전자		LG에너지솔루션		SK하이닉스	삼성바이오로직스	LG화학	삼성SDI		현대차		기아		NAVER			셀트리온
Date										
2022-10-06	-0.283715	-0.053465	-0.300389	-0.098116		-0.056634	-0.100000	-0.154394	-0.134383	-0.555851	-0.143577
2022-10-07	-0.284987	-0.044554	-0.290272	-0.099227		-0.046926	-0.090769	-0.166271	-0.140436	-0.574468	-0.163728

전체 종목의 수익률 시각화

# df_norm 변수에 담긴 전체 종목에 대한 수익률을 시각화 합니다.
# Pandas API

df_norm.plot(figsize=(12,5))
plt.axhline(0, c="k")
plt.legend(bbox_to_anchor=(1,1))

# matplotlib API

plt.plot(df_norm)
plt.show()

# 계산된 수익률의 기술통계값 구하기
df_norm.describe()

=> 
Name	삼성전자	    LG에너지솔루션	SK하이닉스	삼성바이오로직스	LG화학	삼성SDI		현대차		기아			NAVER		셀트리온
count	188.000000	170.000000	188.000000	188.000000	188.000000	188.000000	188.000000	188.000000	188.000000	188.000000
mean	-0.168318	-0.144607	-0.165283	-0.096280	-0.069541	-0.111342	-0.117388	-0.044021	-0.256472	-0.132992
std		0.087553	0.071093	0.107829	0.040131	0.108093	0.063065	0.051282	0.050213	0.119956	0.079055
min		-0.330789	-0.295050	-0.371206	-0.218441	-0.289644	-0.260000	-0.225653	-0.167070	-0.574468	-0.289673
25%		-0.245229	-0.191832	-0.262257	-0.119220	-0.158981	-0.155769	-0.154394	-0.071429	-0.350399	-0.196474
50%		-0.156489	-0.142079	-0.159533	-0.094784	-0.088997	-0.108462	-0.125891	-0.036925	-0.267952	-0.143577
75%		-0.106552	-0.105198	-0.073930	-0.075903	0.008900	-0.073846	-0.080760	-0.006961	-0.145612	-0.073048
max		0.003817	0.085149	0.035019	0.010732	0.250809	0.058462	0.021378	0.049637	0.000000	0.070529
# 수익률에 대한 히스토그램 그리기
df_norm.hist(bins=50, figsize=(15,10))
plt.show()

profile
Ⓓ🅰️🅣🄰 ♡♥︎

0개의 댓글