일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 경력기술서 첨삭
- 데이터 사이언티스트
- 주식데이터
- 베이지안 최적화
- 이력서 첨삭
- sklearn
- pandas
- AutoML
- 코딩테스트
- 하이퍼 파라미터
- 주가데이터
- 하이퍼 파라미터 튜닝
- 파이썬
- 자기소개서
- 데이터사이언스학과
- 주요 파라미터
- 경력 기술서
- 데이터분석
- 데이터 사이언스
- 판다스
- 머신러닝
- 퀀트 투자 책
- 데이터사이언티스트
- 데이터사이언스
- 사이킷런
- 랜덤포레스트
- 커리어전환
- 대학원
- 파라미터 튜닝
- 퀀트
- Today
- Total
GIL's LAB
FinanceDataReader를 이용한 주식, 비트코인 및 경제 지표 데이터 수집 본문
본 포스팅에서는 금융 데이터를 수집하는데 많이 사용되는 파이썬 패키지인 FinanceDataReader를 이용하여, 주식 및 다양한 경제 지표 데이터를 수집하는 방법을 소개한다.
API나 크롤링을 사용하는 것에 비해, 굉장히 손쉽게 수집할 수 있어, 일별 데이터만 수집한다면 이 패키지를 사용하는 것을 추천한다 (추후에 반드시 API를 이용하여 분/틱 데이터 수집하는 것을 공유해야겠다..)
패키지 설치
Anaconda prompt를 실행하여 pip install finance-datareader를 입력하여 아래와 같이 패키지를 설치한다.
환율 데이터 수집
환율 데이터는 fdr.DataReader(환율, 시작날짜, 종료날짜)를 입력하여 수집할 수 있다.
단, 종료날짜를 입력하지 않으면 시작날짜부터 현재날짜까지의 데이터를, 시작날짜와 종료날짜를 모두 입력하지 않으면 전체 기간의 환율을 수집한다.
예를 들어, 2021년 8월 한 달 동안의 달러당 원화 환율 데이터는 다음과 같이 얻을 수 있다.
참고로 입력 가능한 환율 목록은 아래와 같다.
입력 | 설명 |
USD/KRW | 달러당 원화 환율 |
USD/EUR | 달러당 유로화 환율 |
USD/JPY | 달러당 엔화 환율 |
CNY/KRW | 위엔화 원화 환율 |
EUR/USD | 유로화 달러 환율 |
USD/JPY | 달러 엔화 환율 |
JPY/KRW | 엔화 원화 환율 |
AUD/USD | 오스트레일리아 달러 환율 |
EUR/JPY | 유로화 엔화 환율 |
USD/RUB | 달러 루블화 |
이제 언제 사용할진 모르지만, 다음과 같이 5개년치 데이터를 수집해서 저장해보자.
여기서 time.sleep(1)은 데이터를 수집하다가 연결이 끊기는 것을 방지하기 위해 1초씩 텀을 두고 데이터를 수집하기 위한 코드이다.
import FinanceDataReader as fdr
import pandas as pd
import time
ex_rate_list = ["USD/KRW", "USD/EUR", "USD/JPY", "CNY/KRW", "EUR/USD", "USD/JPY", "JPY/KRW", "AUD/USD", "EUR/JPY", "USD/RUB"]
for ex_rate in ex_rate_list:
df = fdr.DataReader(ex_rate, "2016-09-01", "2021-08-31")
df.reset_index(inplace = True) # 날짜 인덱스를 컬럼으로 변경
df.to_csv("{}.csv".format(ex_rate.replace("/", "-"), index = False)) # /는 파일명에 사용할 수 없어서 -로 변경
time.sleep(1)
증시 데이터 수집
주식 데이터 역시 fdr.DataReader를 이용하여 다음과 같이 수집할 수 있다.
fdr.DataReader(코드명/심볼, 시작날짜, 종료날짜)
코드명 혹은 심볼은 StockListing 함수를 이용하면 손쉽게 구할 수 있다.
이 함수의 코드명으로 입력할 수 있는 값은 다음과 같다.
- 'KRX' ('KOSPI', 'KODAQ', 'KONEX')
- 'NASDAQ'
- 'NYSE'
- 'AMEX'
- 'S&P500'
이 함수의 출력은 다음과 같이 Symbol, Name, Sector, Industry로 구분된 데이터프레임이다.
본 예제에서는 S&P 500 데이터와 NASDAQ 데이터 5개년치를 다음과 같이 수집한다.
파일명은 종목명으로 하기 위해, symbol과 name을 같이 순회하도록 코드를 작성했다.
또, reset_index를 사용한 이유는 날짜를 나타내는 인덱스를 컬럼으로 사용하기 위함이다.
<S&P 500>
stock_code_list = fdr.StockListing('S&P500')
for symbol, name in stock_code_list[['Symbol', 'Name']].values:
df = fdr.DataReader(symbol, "2016-09-01", "2021-08-31")
df.reset_index(inplace = True)
df.to_csv("{}.csv".format(name), index = False)
time.sleep(1)
<나스닥>
나스닥 같은 경우는 중간에 오류가 나는 종목들이 섞여 있어, try/except 구문을 사용하였다.
stock_code_list = fdr.StockListing('NASDAQ')
for symbol, name in stock_code_list[['Symbol', 'Name']].values:
try:
df = fdr.DataReader(symbol, "2016-09-01", "2021-08-31")
df.reset_index(inplace = True)
df.to_csv("{}.csv".format(name), index = False)
time.sleep(1)
except:
pass
채권 수익률 데이터 수집
채권 수익률은 다음을 입력하여 수집할 수 있다.
- N년만기 한국국채 수익률: "KRNYT=RR" (예: KR1YT=PR: 1년만기 한국국채 수익률); N = 1,2,3,4,5,10,20,30,50
- N개월만기 미국국채 수익률: "USNMT=X" (예: US3MT=X: 3개월만기 미국국채 수익률); N = 1,3,6
- N년만기 미국국채 수익률: "USNYT=X" (예: US1YT=X; 1년만기 미국국채 수익률); N = 1,2,3,5,7,10,30
예제에서는 년단위 만기인 한국과 미국국채 수익률 데이터를 수집해서 저장한다.
# 한국 국채
for N in [1,2,3,4,5,10,20,30,50]:
df = fdr.DataReader("KR{}YT=RR".format(N), "2016-09-01", "2021-08-31")
df.reset_index(inplace = True)
df.to_csv("{}년만기_한국국채수익률.csv".format(N), index = False)
time.sleep(1)
# 미국 국채
for N in [1,2,3,5,7,10,30]:
df = fdr.DataReader("US{}YT=X".format(N), "2016-09-01", "2021-08-31")
df.reset_index(inplace = True)
df.to_csv("{}년만기_미국국채수익률.csv".format(N), index = False)
time.sleep(1)
상품 선물 데이터 수집
상품 선물 데이터는 아래 표를 이용하여 수집할 수 있다.
심볼 | 내용 |
NG | 천연가스 선물 (NYMEX) |
GC | 금 선물 (COMEX) |
SI | 은 선물 (COMEX) |
HG | 구리 선물 (COMEX) |
CL | WTI유 선물 (NYMEX) |
예제에서는 모든 데이터를 수집해서 저장해보자.
for symbol, name in zip(["NG", "GC", "SI", "HG", "CL"],
["천연가스", "금", "은", "구리", "WIT유"]):
df = fdr.DataReader(symbol, "2016-09-01", "2021-08-31")
df.reset_index(inplace = True)
df.to_csv(name, index = False)
time.sleep(1)
비트코인 데이터 수집
비트코인 데이터는 아래를 참고해서 수집할 수 있다.
심볼 | 내용 |
BTC/KRW | 비트코인 원화 가격 |
ETH/KRW | 이더리움 원화 가격 |
XRP/KRW | 리플 원화 가격 |
BCH/KRW | 비트코인 캐시 원화 가격 |
EOS/KRW | 이오스 원화 가격 |
LTC/KRW | 라이트 코인 원화 가격 |
XLM/KRW | 스텔라 원화 가격 |
역시 예제에서는 모든 데이터를 수집해서 저장해보자.
for symbol, name in zip(["BTC/KRW", "ETH/KRW", "XRP/KRW", "BCH/KRW", "EOS/KRW", "LTC/KRW", "XLM/KRW"],
["비트코인", "이더리움", "리플", "비트코인캐시", "이오스", "라이트코인", "스텔라"]):
df = fdr.DataReader(symbol, "2016-09-01", "2021-08-31")
df.reset_index(inplace = True)
df.to_csv(name, index = False)
time.sleep(1)
수집하고 싶은 금융 데이터나 실험하고 싶은 퀀트 관련 아이디어가 있으면 댓글로 남겨주세요!
관련 포스팅을 준비하도록 하겠습니다!
'퀀트 투자 > 데이터 수집' 카테고리의 다른 글
파이썬을 이용하여 현금흐름표에서 주요 지표 뽑아내기 (16) | 2021.09.08 |
---|---|
아이투자에서 투자지표 (EPS, PER, 영업이익률 등) 크롤링하기 (0) | 2021.09.08 |
전종목 기업 리포트 크롤링 (4) | 2021.09.06 |
오픈 API를 이용한 주식 데이터 수집하기 (2) 일별 코스피/코스닥 데이터 수집 방법 (0) | 2021.09.03 |
오픈 API를 이용한 주식 데이터 수집하기 (1) 환경 설정 (1) | 2021.09.03 |