import FinanceDataReader as fdr
import pandas as pd
import matplotlib.pyplot as plt
1. KOSPI 상장 리스트 불러오기
2. sector명 확인 - > '기타 금융업' 섹터 기간, 종가 출력
3. 특정 시점 수익율, 기간 수익율 구하기
#1 KOSPI 상장 리스트 불러오기
- KRX , KOSPI , KODAQ , KONEX : 한국 거래소 상장, 비상장 종목 리스트
- NASDAQ , AMEX , S&P500 등 : 글로벌 종목 리스트 :
- KR , US , JP : ETF 리스트
- 개별 종목 주가
- 지수 : KS11(코스피) , KQ11(코스닥) , IXIC(나스닥) , US500(S&P 500) , DJI(다우존스)
- 환율 : USD/KRW 등
- 가상화폐 가격 : BTC/KRW 등
sector 이름 확인
오늘은 상장된 주식들 중 금융관련한 업종의 수익율을 구할 것! 'KOSPI' 리스트를 가져온다
내가 얻고자 하는 그 금융종목들은 뭐라고 분류가 되어있는지 먼저 확인이 필요하다
필요한 기능들을 import 해주고 시작
import FinanceDataReader as fdr
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
KOSPI = fdr.StockListing('KOSPI') # 코스피 전체 불러오기
KOSPI['Sector'].unique() # 코스피 Sector 한 개씩 나열

등등 굉장히 많은 출력이 나오는데 오늘은 '기타 금융업' 의 수익율을 알아보자
#2 Sector 추출하기
[ KOSPI [ 'Sector' ] == '기타 금융업' ]
KOSPI_fin = KOSPI[ KOSPI['Sector'] == '기타 금융업']
KOSPI_fin.head() # 5줄 출력

figure로 그래프를 묶음 단위로 쓰겠다는 선언을 하고 사이즈를 설정
위 쪽에서 DataReader를 통해 불러온 DataFrame에서 종가 항목인 Close만 뽑아 .plot으로 그래프로 출력
보기 좋게 범례 legend를 출력하고, 격자 grid 등 설정해준다.
sector_fin = pd.DataFrame()
for row_index, row in KOSPI_fin.iterrows(): # row_index 만큼 column 추출
code, name = row[ 'Symbol' ], row[ 'Name' ] # 종목코드 , 종목명
select_df = fdr.DataReader(code, '2021-01-01', '2021-12-04') # 기간데이터
sector_fin[name] = select_df['Close'] # name 종가 출력
iterrows 로 모든 행에 반복하여 칼럼을 추출한다
code 에는 column 'Symbol' 데이터 즉 종목코드를 넣고 DataReader에서 이 code로 값들을 받아온다.
name에는 column 'Name' 데이터 종목명이 들어가고,
맨 아랫줄에서 이 종목명의 column 'Close' 종가만 가져와 DataFrame으로 나타낸다
아래는 sector_fin 의 중략한 결과. 총 229row와 61column이 나왔다.

null값이 있는 column 제거
sector_fin = sector_fin.dropna(axis=1)
axis=1 로 했기 때문에 column이 제거 된다 ( axis=0 은 row. 기본값 )

#3 수익율 구하기
performance_fin = (sector_fin / sector_fin.iloc[0]) -1
sector_fin.iloc[0] = sector_fin.loc['2021-01-04',:] = sector_fin.iloc[0,;]

2021-01-04 종가를 기준으로 날짜별 종가로 수익율을 구한 performance_fin.
그래서 기준일은 0이며 - 마이너스 들은 2021-01-04 기준으로 했을 때 손실인 것이다...
현재까지 수익율 순위 구하기
performance_fin.iloc[-1].sort_values(ascending=False)
sector_fin.iloc[-1] = sector_fin.loc['2021-12-03',:] = sector_fin.iloc[-1,;]
순위를 구하는 것은 간단하다. 이미 추출한 수익율표 performance_fin 에서 iloc[-1] 로 12/3 또는 원하는 날로 맞춰주고
sort 로 내림차순 정렬 해주면 끝!! 기본값은 오름차순 1,2,3,4 니까 ascending=False로 넣어준다
출력해보면 순위대로 잘 정렬되어있다 ( 우리금융지주 화이팅!! )

기간별 수익율 구하기
출력형태 column 등 동일 확인
from datetime import datetime, timedelta # 기간별 수익율 구하기
the_day = datetime(2021, 12, 3)
row_dict = {}
for days in [5, 10, 20, 60, 120, 240]:
start = the_day - timedelta(days)
end = the_day
df = sector_fin[start:end] # 특정 기간
acc_rets = df / df.iloc[0] - 1.0
row_dict[days] = acc_rets.iloc[-1]
df_rets = pd.DataFrame(dow_dict)

sector 기간별 평균 수익율 구하기
df_rets.mean()
슬슬 파이썬을 진짜 시작한 재미난 기능들이 나온다ㅎㅎ
얼른 페이지도 제작해봐야지
오늘도 역시 GOOD!
'Project > 💸금융 빅데이터 투자 서비스 API' 카테고리의 다른 글
| [python] #10 벡테스팅 카카오 단순 누적수익율 구하기 (0) | 2021.12.11 |
|---|---|
| [python] #9 ETF 수익율구하기 (0) | 2021.12.06 |
| [python] #7 FinanceDataReader + pandas + matplot 예제 (0) | 2021.12.04 |
| [python] #6 FinanceDataReader 주가데이터 오픈소스 (0) | 2021.12.03 |
| [python] #5 라이브러리 matplot (선 그래프, 막대 그래프) (0) | 2021.12.01 |