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

[python] #9 ETF 수익율구하기

by 로띠 2021. 12. 6.

 

from pykrx import stock

import FinanceDataReader as fdr

import pandas as pd

import plotly.express as px

 


 

 

 

  1.  KR ETF 리스트 불러오기

  2.  특정 단어를 포함한 ETF 추출하기

  3.  기간 데이터 불러오기

  4.  가격 추이 그래프 그리기

 

 

 

 

 

#1  KR ETF 리스트 불러오기

 

 

  ETF   -  KR , US , JP  :  나라별 ETF 리스트

 

 

  오늘은 한국 ETF 중 '전기차' 관련 ETF의 가격추이를 그래프로 그려보자.

  필요한 기능들을 import 해주고 시작

 

 

 

  ETF/KR

	from pykrx import stock
	import FinanceDataReader as fdr
	import pandas as pd
    
	ETF_KR = fdr.StockListing("ETF/KR")	# kr의 ETF 리스트 불러오기

 

 

    StockListing으로 한국ETF 데이터를 가져와 ETF_KR에 넣어준다

 

    533개의 ETF가 나오는데 오늘은 비슷한 장르의 ETF들의 가격추이를 비교하기위해

    특정 단어가 들어간 ETF만 추출해서 해볼것이다

 

 

ETF_KR

 

 

 

 

 

 

 

 

 

#2  특정 단어를 포함한 ETF 추출하기

 

 

    한참 Hot했던 전기차로 해본다면

 

 

  [ETF_KR['Name'].str.contains('전기차')]

	ETF_elecCar = ETF_KR[ETF_KR['Name'].str.contains('전기차')]

 

    ETF_KR 에서 contains를 이용해 Name칼럼에 '전기차' 가 포함된 것만 ETF_elecCar에 넣었다

 

 

 

 

ETF_elecCar

 

 

    2개의 ETF가 나왔다.  두 ETF의 2020년 부터의 데이터를 추출해 그래프를 만들어 보자

 

 

 

 

 

 

 

#3  ETF 기간데이터 불러오기

 

 

	elecCar_2020 = pd.DataFrame()
    
	for row_index, values in ETF_elecCar.iterrows():	# row_index 만큼 value 추출
		symbol, name = values				# 종목코드, 종목명 각 value값 삽입
		elec_df = fdr.DataReader(symbol, '2020-01-01')	# 기간데이터
		elec_df['Name'] = name			
		elecCar_2020 = pd.concat([ elecCar_2020,elec_df ])

 

 

 

    iterrows 로 모든 행에 반복하여 값을 추출한다

    symbol(종목코드), name(종목명)에 각각 value를 넣고

    elec_df 에는 2020-01-01 부터의 데이터를 symbol(종목코드)별로 가져온다

    elec_df 의 Name 칼럼에는 name(종목명)을 넣어준다

 

    맨 아랫줄에서 elecCar_2020에 concat으로 데이터를 붙여준다.

    그 이유는 첫번째 symbol로 for문을 다 돌고 나면 두번째 symbol의 데이터가 elec_df의 자리를 차지하기 때문에

    데이터가 온전히 보존되지 못하고 row와 column에 덮혀진다.

    때문에 elecCar_2020에 먼저 넣어준 후 이전 값 + 새 값 을 하기 위해 concat을 사용

 

 

 

 

    아래는 elecCar_2020 의 중략한 결과. Name별로 나눠져 나왔다.

 

 

elecCar2020

 

 

 

 

 

 

 

#4  ETF 가격추이 그래프 그리기

 

 

	import plotly.express as px

	fig = px.line(elecCar_2020, x=elecCar_2020.index, y="Close", color='Name')
	fig.update_layout(title='ETF 가격 추이',		# 타이틀 옵션
				xaxis_title='Date',
				yaxis_title='Close')
	fig.show()

 

    x = elecCar_2020으로 한다고 해서 막대그래프처럼 뭐 이름이 나오는 건 아니고 적절한 값으로 나눠준다. ( 단위 설정은 따로 해야함)

    Name별로 color를 나눠주고 update_layout은 옵션이다.

 

 

elecCar_2020

 

    옵션 사항으로 위쪽 ETF 가격추이, 왼쪽 Close, 아래 Date 가 생겼다

 

 

 

 

 

 

ㅎ끝ㅎ

단계별로 하면 쉬운데 또 내일이면 힘들지 모르겠다 ㅎㅎ

이게 내가 티스토리를 하는 이유이지 않을까

 

Good!