파이썬 패키지 활용 - FinanceDataReader에 대하여


FinanceDataReader Package

FinanceDataReader 라는 엄청난 패키지가 어떤분이 개발하셨는지는 몰라도 재무데이터 모으는 나같은 사람에겐 실무에 큰 도움이 되었다. 진심 감사드린다. 이 패키지를 설치하고 임포트해서 간단한 주가 시계열 분석을 진행해보고자 한다. 나도 제대로 써보는 건 처음이라.. 그래도 누군가 이 포스트를 보고 도움이 되기를 간절히 바란다. 내가 하고픈 건, 원하는 주식 또는 상장ETF의 종가 Movement를 아래 그래프처럼 시각화 해보고자 한다.

import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'NanumGothic'
plt.rcParams["axes.grid"] = True
plt.rcParams["figure.figsize"] = (15,15)
plt.rcParams["axes.formatter.useoffset"] = False
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams["axes.formatter.limits"] = -10000, 10000

df.plot()

<AxesSubplot:xlabel='Date'>

png

우선, 패키지를 임포트 하고 버젼을 확인해본다.

import FinanceDataReader as fdr

fdr.__version__

'0.9.10'

사용 가이드에 따라서 차분히 하나씩 해보고자 한다. 국내 상장사는 참고로 코스피, 코스닥, 코넥스가 존재한다. 이 3가지 마켓에 상장된 회사들의 리스트는 아래 명령어를 통해 한번에 DataFrame형태로 불러올 수 있다.

KRX_LISTING = fdr.StockListing('KRX') #참고로 NYSE를 입력하면 미국시장도 소환가능!

어떤 정보를 가져왔는지 개요는 아래와 같다. 깔끔하게 약 10가지 정보를 DataFrame으로 제공해준다.

KRX_LISTING.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2597 entries, 0 to 2596
Data columns (total 10 columns):
 #   Column          Non-Null Count  Dtype         
---  ------          --------------  -----         
 0   Symbol          2597 non-null   object        
 1   Market          2597 non-null   object        
 2   Name            2597 non-null   object        
 3   Sector          2397 non-null   object        
 4   Industry        2377 non-null   object        
 5   ListingDate     2397 non-null   datetime64[ns]
 6   SettleMonth     2397 non-null   object        
 7   Representative  2397 non-null   object        
 8   HomePage        2229 non-null   object        
 9   Region          2397 non-null   object        
dtypes: datetime64[ns](1), object(9)
memory usage: 223.2+ KB
KRX_LISTING
SymbolMarketNameSectorIndustryListingDateSettleMonthRepresentativeHomePageRegion
0060310KOSDAQ3S특수 목적용 기계 제조업반도체 웨이퍼 캐리어2002-04-2303월박종익, 김세완 (각자 대표이사)http://www.3sref.com서울특별시
1095570KOSPIAJ네트웍스산업용 기계 및 장비 임대업렌탈(파렛트, OA장비, 건설장비)2015-08-2112월이현우http://www.ajnet.co.kr서울특별시
2006840KOSPIAK홀딩스기타 금융업지주사업1999-08-1112월채형석, 이석주(각자 대표이사)http://www.aekyunggroup.co.kr서울특별시
3054620KOSDAQAPS홀딩스기타 금융업인터넷 트래픽 솔루션2001-12-0412월정기로http://www.apsholdings.co.kr경기도
4265520KOSDAQAP시스템특수 목적용 기계 제조업디스플레이 제조 장비2017-04-0712월김영주http://www.apsystems.co.kr경기도
.................................
2592000547KOSPI흥국화재2우BNaNNaNNaTNaNNaNNaNNaN
2593000545KOSPI흥국화재우NaNNaNNaTNaNNaNNaNNaN
2594003280KOSPI흥아해운해상 운송업외항화물운송업(케미컬탱커)1976-06-2912월이환구http://www.heung-a.com서울특별시
2595037440KOSDAQ희림건축기술, 엔지니어링 및 관련 기술 서비스업설계 및 감리용역2000-02-0312월정영균, 이목운, 허철호, 염두성 (각자대표)http://www.heerim.com서울특별시
2596238490KOSDAQ힘스특수 목적용 기계 제조업OLED Mask 인장기, OLED Mask 검사기 등2017-07-2012월김주환http://www.hims.co.kr인천광역시

2597 rows × 10 columns

**약 2597개 회사들이 검색되고 있다. 이게 실제 맞는 숫자인지는 모르겠으나 코드 뒷단을 뜯어보니 krx marketdata에서 가져오는 것처럼 보여서 아마도 최신이 계속 반영되는 원천을 가지고 있는 듯하다. 여튼 다행 **

테스트 삼아서 2가지 종목 005930과 000660의 가격추이를 그려본다. 참고로 잘 아는 삼성전자와 하이닉스다.

df1 = fdr.DataReader('005930', '2019-10-01', '2020-12-04') #삼성전자
df2 = fdr.DataReader('000660', '2019-10-01', '2020-12-04') #하이닉스
df1['Close'].plot()
df2['Close'].plot()
<AxesSubplot:xlabel='Date'>

png

최근에 크게 가격이 상승한 것으로 보여진다. 특히 하이닉스. 이런형태로 각 종목별 레이블링과 기간에따른 종가 Movement를 조금더 디테일하게 그려보자. 삼성전자, 한글과컴퓨터, 그리고 각종 ETF의 움직임을 동시에 그려보도록 한다.

stock_list = [
  ["삼성전자", "005930"],
  ["한글과컴퓨터", "030520"],
  ["TIGER 2차전지테마", "305540"],
  ["KODEX 200", "069500"],
  ["TIGER 소프트웨어" ,"157490"],
  ["TIGER 현대차그룹+펀더멘털 ()","138540"],
  ["KINDEX 미국S&P 500", "360200"]
]

stock_list 안에다가 종목이름과 종목코드를 입력하고 데이터 프레임형태로 정리한다.

import pandas as pd

df_list = [fdr.DataReader(code, '2019-11-01', '2020-12-31')['Close'] for name, code in stock_list]
#len(df_list)

# pd.concat()로 합치기

df = pd.concat(df_list, axis=1)
df.columns = [name for name, code in stock_list] 
df.head(10)

삼성전자한글과컴퓨터TIGER 2차전지테마KODEX 200TIGER 소프트웨어TIGER 현대차그룹+펀더멘털 ()KINDEX 미국S&P 500
Date
2019-11-015120010050714427273849316388NaN
2019-11-045230010050720427665849816437NaN
2019-11-055270010050723427851847816617NaN
2019-11-065330010150720927865848316471NaN
2019-11-075290011350710027831852816563NaN
2019-11-085210011550718927738847816549NaN
2019-11-115160011200714927524845816480NaN
2019-11-125260011350712927768845816553NaN
2019-11-135250011400703527543836816432NaN
2019-11-145280010750703027763870716446NaN

시계열 형태로 인덱스값과 각 종목별 종가가 깔끔히 정리가 되었다. 이를 시각화 해보자

import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'NanumGothic'
plt.rcParams["axes.grid"] = True
plt.rcParams["figure.figsize"] = (15,15)
plt.rcParams["axes.formatter.useoffset"] = False
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams["axes.formatter.limits"] = -10000, 10000

df.plot()

<AxesSubplot:xlabel='Date'>

png


기타 다른 ETF 종목들도 동일한 방식으로 그려보면 아래와 같다.

stock_list2= [
  ["ARIRANG 신흥국MSCI", "195980"],
  ["KODEX 골드선물(H)", "132030"],
  ["TIGER 미국S&P500 선물(H)" ,"143850"],
    ["KODEX 200", "069500"],
    #["TIGER 소프트웨어" ,"157490"],
    #["KOSEF 국고채10년","148070"],
    #[" KODEX 단기채권PLUS", "214980"]
]
import pandas as pd

df_list2 = [fdr.DataReader(code, '2019-11-01', '2020-12-31')['Close'] for name, code in stock_list2]
#len(df_list)

# pd.concat()로 합치기

df2 = pd.concat(df_list2, axis=1)
df2.columns = [name for name, code in stock_list2] 
df2.tail(10)

ARIRANG 신흥국MSCIKODEX 골드선물(H)TIGER 미국S&P500 선물(H)KODEX 200
Date
2020-11-2311795128854149034810
2020-11-2411800125504192035000
2020-11-2511850124104232034795
2020-11-2611850124454233535140
2020-11-2711930124354225035220
2020-11-3011760121854200534685
2020-12-0111805122704253535235
2020-12-0211885124504252035850
2020-12-0311960126154267036105
2020-12-0412085126504273036750
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'NanumGothic'
plt.rcParams["axes.grid"] = True
plt.rcParams["figure.figsize"] = (15,15)
plt.rcParams["axes.formatter.useoffset"] = False
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams["axes.formatter.limits"] = -10000, 10000

df2.plot()

<AxesSubplot:xlabel='Date'>

png

정말 좋은 패키지 같다. 놀라울정도로 깔끔한 데이터를 끌어올 수 있는 듯 하다. 강추강추!

이 글이 도움이 되셨다면 추천 클릭을 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2020 modified by Tae You Kim

Powered by "shoman2"