TIL | FinanceDataReader를 통한 여러 종목 수익률 비교
👩🏻💻 오늘코드 실시간 강의 _ 박조은 강사님
FinanceDataReader 라이브러리를 이용해 실시간 주식 데이터를 가져올 수 있다.
📑 이론 및 개념
- Jupyter lab은 좀 더 진화된 버전
- 실습은 Jupyter notebook으로 진행
- ais7-likelion > ais7 > ‘경로 확인.ipynb’
- %pwd : 현재 작업 중인 디렉터리 확인
- 강의 교안 보고 jupyter extension 설치해보기
- Jupyter notebook에서 도움말 보기 : Shift + Tab + Tab
FinanceDataReader를 통한 수익률 비교를 위해 필요한 조각 코드
- esc + o : output 숨기기
- FinanceDataReader
- 설치 :
!pip install -U finance-datareader
- 버전 확인
import FinanceDataReader as fdr fdr.__version__
- 설치 :
- KRX 일부 종목 가져오기
fdr.StockListing(“KRX”)
- 일별 시세 수집 위해 종목코드 찾기
- left -> df_top10 / right -> df_krx
df_top10.merge(df_krx, left_on = "종목별", right_on = "Name")
- left -> df_top10 / right -> df_krx
- 일별 시세 수집
# 카카오 035720 fdr.DataReader("035720", "2022")["Close"]
- 여러 종목의 종가 수집
- list comprehension을 이용하자
item_list = [fdr.DataReader(sym, "2022")["Close"] for sym in df_10["Symbol"]]
- list comprehension을 이용하자
시각화를 위한 폰트 설정
- Koreanize-matplotlib
- 설치 코드 :
!pip install koreanize-matplotlib
import koreanize_matplotlib # 그래프에 retina display 적용 %config InlineBackend.figure_format = 'retina'
Graph로 시각화하기
- 가능한 style 종류 보기
import matplotlib.pyplot as plt print(plt.style.available)
- 그래프 그리기
plt.style.use("ggplot") df.plot(figsize = (10,5), title = "2022년 TOP 10 종목 종가")
- 범례 위치 바꾸기
plt.legend(bbox_to_anchor = (1,1))
- 기준선 표시
plt.axhline(0, c = 'k')
- k : black
- r : red
- b : blue
🤔 pandas plot VS matplotlib
pandas plot이 matplotlib보다
더 한 눈에 알아보기 쉽고 좀 더 간단하게 그래프를 그릴 수 있다.
왜도와 첨도 skewness and kurtness
- 왜도 : 양의 값이면 오른쪽 꼬리가 길고, 음의 값이면 왼쪽 꼬리가 길다.
df_norm.skew()
- 첨도 : 3보다 작으면 완만 납작, 3보다 크면 뾰족한 분포
df_norm.kurt()
Resampling
- 월별로
df_norm.resample(“M”).median()
- 분기별로
df_norm.resample(“Q”).median()
df_norm['삼성전자'].resample("Q").agg(["mean", "median"])
🚗 실습 예제 코드 🚙
여러 종목 한 번에 시각화하기
# 2개의 종목 비교하기 : "삼성전자", "LG화학" 을 plot으로 시각화 합니다.
df[["삼성전자", "LG화학"]].plot()
삼성과 LG화학의 종가 scale이 다르기 때문에 위처럼 시각화하면 LG화학의 변화를 알기 어렵다. scale을 맞춰주기 위해 추가로 보조축을 지정해주자.
# secondary_y를 사용해 2축 그래프 그리기
df[["삼성전자", "LG화학"]].plot(secondary_y = "LG화학")
전체 종목 수익률 시각화
1. 상장종목 목록 가져오기
url = "https://finance.naver.com/sise/entryJongmok.naver?&page=1"
df_top10 = pd.read_html(url)[0].dropna()
df_top10
2. 전체 상장종목에서 종목코드와 종목명만 가져오기
df_krx = fdr.StockListing("KRX")
df_krx
df_krx = df_krx[["Name", "Code"]]
df_krx
3. 국내 TOP 10 종목만 가져오자.
for sym in df_10["Code"]:
print(sym)
item_list = [fdr.DataReader(sym, "2022")["Close"] for sym in df_10["Code"]]
# 수집한 리스트를 axis=1(컬럼)을 기준으로 병합(concat) 합니다.
df = pd.concat(item_list, axis = 1)
df.columns = df_10["Name"]
df
4. 전체 DataFrame 값에 대한 수익률 계산하기
LG에너지솔루션
은 최근에 상장해서 이전의 데이터가 없다. 계산할 때 따로 처리를 해주자.
df_norm = df / df.iloc[0] - 1
df_norm["LG에너지솔루션"] = df["LG에너지솔루션"].dropna() / df["LG에너지솔루션"].dropna()[0] - 1
df_norm
# df_norm 변수에 담긴 전체 종목에 대한 수익률을 시각화 합니다.
df_norm.plot(figsize = (10,5), title = "2022년 TOP 10 종목 수익률")
plt.axhline(0, c = 'k') # black -> k
plt.legend(bbox_to_anchor = (1,1))
다음 포스트에서 만나요 🙌
뒷 내용은 TIL | FinanceDataReader를 통한 여러 종목 daily price 비교에서 이어서 작성한다. FinanceData를 이용해 여러 종목 수익률을 plotly로 시각화를 해볼 예정이다.
Related Posts
TIL | FinanceDataReader를 통한 여러 종목 daily price 비교 |
💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).