본문 바로가기
Project/💸금융 빅데이터 투자 서비스 API

[python] #8 금융업 sector 수익율 구하기

by 로띠 2021. 12. 4.

 

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 한 개씩 나열
 
'Sector' unique 출력

 

 

    등등 굉장히 많은 출력이 나오는데 오늘은 '기타 금융업' 의 수익율을 알아보자

 

 

 

 

 

#2 Sector 추출하기

 

 

  [ KOSPI [ 'Sector' ] == '기타 금융업' ]

	KOSPI_fin = KOSPI[ KOSPI['Sector'] == '기타 금융업']
	KOSPI_fin.head()			# 5줄 출력

 

KOSPI_fin

 

 

    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이 나왔다.

 

 

sector_fin

 

 

 

  null값이 있는 column 제거

	sector_fin = sector_fin.dropna(axis=1)

 

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

 

 

null이 있는 column 제거 한 sector_fin

 

 

 

 

 

#3 수익율 구하기

 

	performance_fin = (sector_fin / sector_fin.iloc[0]) -1

 

    sector_fin.iloc[0] = sector_fin.loc['2021-01-04',:] =  sector_fin.iloc[0,;]

 

 

 

performance_fin

 

 

    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!