가치투자퀀트

[Python] Step#4 주가 데이터 크롤링 본문

주식 코딩

[Python] Step#4 주가 데이터 크롤링

곰발이 2022. 9. 1. 00:55

파이썬을 하는 이유중 하나는 웹페이지의 html 정보를 크롤링하기 쉽다는데 있습니다.

 

특히 주식 크롤링을 위한 라이브러리는 상당히 다양한데요.

 

오늘은 그중 제가쓰는 두가지 라이브 러리를 소개하도록 하겠습니다.

 

파이썬 문법은 따로 다루지 않겠습니다.

(파이썬 언어 공부는 책을 한권 사셔서 정독/실습 하시는게 가장 빠릅니다)

 

사실 저는 다른 사람의 코드를 실행해 보고 분석하는게 더 빠른 배움의 길이라고 생각합니다. ㅎ

 

아래 코드도 복사하셔서 사용해 보시기 바랍니다.

 

pandas_datareader

굉장히 많으들 쓰시는 라이브러리로 Yahoo 의 historical data 를 크롤링 할 수 있습니다.

 

수정 종가란?

배당락을 제외한 종가로 실제 배당금액을 재투자 하였을때의 주가라고 보시면 됩니다. 수정 종가를 사용하지 않고 그대로 사용할 경우 주가의 데이터 외곡으로 모멘텀 지수가 크게 변할 수 있습니다.

 

설치방법
pip install pandas-datareader

위와 같이 anaconda prompt 창이나 vscode 의 terminal 창에서 타이핑으로 간단히 설치가 가능합니다.

 

활용법 (코딩)

가장많이 쓰는 수정종가를 가져오는 함수를 작성해 보겠습니다.

 

import pandas_datareader as pdr
import pandas as pd
import numpy as np

from datetime import datetime, timedelta

def get_yahoo_price_data(Universe, start_day, end_day):
    
    df_ALL = pd.DataFrame(columns=Universe)

    for ticker in Universe:
    
        df_ALL[ticker] = pdr.get_data_yahoo(ticker, start_day - timedelta(days=365), end_day)['Adj Close']  
       
    return df_ALL

 

입력인자로는 티커가 포함된 Universe 와 Start_day , end_day 를 받습니다.

모멘텀을 구하기 위해서는 1년전 데이터 까지 필요하므로 시작 날짜 대비 1년 이전 값 까지 크롤링 합니다.

 

함수 실행 예제

 

자 이제 함수를 실행해 보도록 하겠습니다.

아래와 같이 타이핑 하고 실행해 보도록 하겠습니다.

 

from Get_Price_Data import *
import time

Get_Price_Data 파일에 연결된 라이브러리를 모두 Import 한다는 의미입니다.

 

Universe = ['GOOG']

start_day = datetime(2020,4,1)
end_day = datetime(2021,4,1)
    
df_ALL = get_datareader_price_data(Universe, start_day, end_day)

print(df_ALL.tail())

 

'GOOG' 을 Universe 로 설정하고 시작날짜와 끝 날짜를 지정해 줍니다.

그리고 위에 생성한 함수를 호출해 줍니다.

 

코드를 실행하면 아래와 같이 정상적으로 주가 데이터를 가져온 것을 볼수 있습니다.

 

FinanceDataReader

다음으로는 FinanceDataReader를 소개해 보겠습니다.

pandasDataReader 는 한국 주식의 데이터가 누락된 것들이 종종 있습니다.

따라서 이를 보완하기 위한 서브 라이브러리로 사용하고 있습니다.

 

설치방법
pip install finance-datareader

위와 같이 anaconda prompt 창이나 vscode 의 terminal 창에서 타이핑으로 간단히 설치가 가능합니다.

활용법 (코딩)
import FinanceDataReader as fdr
import pandas as pd
import numpy as np

from datetime import datetime, timedelta

def get_datareader_price_data(Universe, start_day, end_day):
    
    df_ALL = pd.DataFrame(columns=Universe)

    for ticker in Universe:

        df_ALL[ticker] = fdr.DataReader(ticker, start_day - timedelta(days=62), end_day)['Close']

    return df_ALL

함수 실행 방법은 위와 동일합니다.

 

특히나 FinanceDataReader 는 아래 설명에 보이듯이 FRED 의 데이터도 가져올수 있는 강력한 라이브 러리입니다.

 

이후 다양한 백테스팅 시에 매우 유용한 라이브러리가 될 예정입니다.

Comments