IT/컴퓨터프로그램

[Python] FinanceDataReader 를 통한 주가 읽기

chn1002 2022. 5. 16. 09:02

[Python] FinanceDataReader 를 통한 주가 읽기

기존 pandas-datareader 는 잘 구성된 시계열 데이터 수집 라이브러리로 사용되고 있지만, 현재 야후 파이내스가 더 이상 지원되지 않는 등 의 이슈가 있다. FinanceDataReader는 pandas-datareader 를 대체하기 보다 보완하기 위한 목적으로 만들어졌다.

종목 코드

  • 거래소별 전체 종목코드: KRX (KOSPI, KODAQ, KONEX), NASDAQ, NYSE, AMEX, S&P 500

가격 데이터

  • 해외주식 가격 데이터: AAPL(애플), AMZN(아마존), GOOG(구글) 등
  • 국내주식 가격 데이터: 005930(삼성전자), 091990(셀트리온헬스케어) 등
  • 각종 지수: KS11(코스피지수), KQ11(코스닥지수), DJI(다우지수), IXIC(나스닥 지수), US500(S&P 5000)
  • 환율 데이터: USD/KRX (원달러 환율), USD/EUR(달러당 유로화 환율), CNY/KRW: 위엔화 원화 환율
  • 암호화폐 가격: BTC/USD (비트코인 달러 가격, Bitfinex), BTC/KRW (비트코인 원화 가격, 빗썸)

 

설치

pip install -U finance-datareader

 

stockCode : 종목 이름으로 종목 코드 받아 오는 함수

sotckMain: 종목이름을 Python Dateframe 으로 만들어 주는 함수

def stockCode(val):
    df_krx = fdr.StockListing('KRX')
    df_name = df_krx[df_krx['Name'] == val]
    symbol = df_name.iloc[0,0]
    name = df_name.iloc[0,2]
    return symbol, name

def stockMain(val, strFromDay, strToDay):
    print("stockMain")  
    symbol, name = stockCode(val)
    
    title = name + "("+symbol+")"
    
    df = fdr.DataReader(symbol, strFromDay, strToDay)
    
    return df

 

pltStocknTrend: stockMain 에서 받은 Data Frame 을 그래프로 그려 주는 함수.

이 함수에서는 Data Frame 값을 MinMaxScaler 를 통해 정규화함.

def pltStocknTrend(stockName, s_df, s_KOSPI_df, t_df):
    scaled_stock=pd.DataFrame(s_df['Close'])
    cointrendT=preprocessing.MinMaxScaler().fit_transform(scaled_stock)

    fig = plt.figure(figsize=(16,14))
    axes = plt.subplot2grid((4,4),(0,0), rowspan=3,colspan=4)
    
    axes.plot(s_df.index, cointrendT, linewidth=1, label=stockName)
    axes.legend()
    
    plt.show()

 

위 함수들을 이용하여 Kospi 와 삼성 전자의 지수를 그래프로 그렸습니다. 아래 그래프에 google trend 를 이용하여 코로나 검색 량을 추가하였습니다.