네이버 주식 시세 데이터 시각화
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()