데이터 생존 로그

yfinance(야후 파이낸스)로 주가 데이터 손질하기 본문

생존 도구🏹

yfinance(야후 파이낸스)로 주가 데이터 손질하기

분석가 베어그릴스 2024. 1. 7. 22:12

해당 게시글에서는 주가 데이터를 받아 원하는 형태로 전처리를 해보도록 하겠습니다.

야후 파이낸스의 주가 데이터를 받아올 수 있는 'yfinance'라는 파이썬 라이브러리를 활용하겠습니다.

 

개인적으로 궁금한 것들을 몇 가지 정해놓고, 주가 데이터를 통해 확인해봅시다!

제가 확인해볼 것들은 다음 내용들입니다.

  • 2023년 가장 많이 상승(하락)한 종목은?
  • 2023년 거래량이 가장 많았던 종목은?
  • 2023년 중, 어느 시기에 거래량이 많았(적었)을까?

Ticker 정보 가져오기

yfinance에서 데이터를 불러올 때, Ticker(티커)라는 것을 인자로 넣어준다고 합니다.

따라서 보고싶은 종목의 데이터를 보기 위해서는 그 종목은 Ticker를 알아야 합니다.

 

Ticker는 야후 파이낸스 홈페이지에 원하는 종목을 검색하면 Ticker를 볼 수 있습니다.

야후 파이낸스에서 meta를 검색

위와 같이 메타의 ticker는 META인 것을 확인할 수 있습니다.

 

그런데, 만약 보고싶은 종목이 아주 많다면, ticker의 목록 데이터가 필요할 것 같습니다.

ticker의 목록 데이터는 해당 링크에서 받아주도록 할게요.

나스닥에서 시가총액이 Mega, Large에 해당하는 종목들의 Ticker 리스트

나스닥 기준 시가총액(MARKET CAP)이 높으면서, 기술주(SECTOR가 Technology)들의 Ticker 리스트를 받아줬습니다.

이제 Ticker 리스트도 받았으니 이 종목들의 주가 데이터를 받아오겠습니다.

 

위에서 받은 Ticker 리스트를 ticker.csv라는 파일의 형태로 저장하고 불러옵니다.

import yfinance as yf
import pandas as pd

import plotly.graph_objects as go
import plotly.express as px

tickers = pd.read_csv('ticker.csv')
tickers.head()

 

tickers.csv 테이블

 

tickers는 위와 같은 형태로 구성되어있네요.

Symbol 컬럼에 제가 원하는 Ticker 정보가 들어있습니다.


yfinance로 주가 데이터 불러오기

그럼 이번엔 yfinance로 주가 데이터를 불러오도록 하겠습니다.

위에서 검색했던 META의 주가를 예시로 불러오겠습니다.

meta = yf.download('META', start="2023-01-01", end="2023-12-31")
meta.head()

메타 주가 데이터

야후 파이낸스에서 메타의 주가를 불러왔습니다.

일별로 구성되어있고, 시가(Open) 고가(High) 저가(Low) 종가(Close) 조정종가(Adj Close) 거래량(Volume) 값이 담겨있네요.

 

간단한 시각화를 해보겠습니다.

2023년 4분기(10월 이후) meta의 주가를 candle stick으로 표현하겠습니다.

meta = meta.reset_index()
meta = meta[meta['Date']>='2023-10-01']

fig = go.Figure(data=[go.Candlestick(x=meta['Date'],
                open=meta['Open'],
                high=meta['High'],
                low=meta['Low'],
                close=meta['Close'])])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()

메타의 4분기 주가

 

이제 더 많은 주가 데이터를 불러올까요?

아까 tickers.csv에 담았던 Ticker 목록을 한 번에 불러오겠습니다.

stock = yf.download(tickers['Symbol'].tolist(),start="2023-01-01",end="2023-12-31")
stock

 

각 종목의 정보들(시가, 종가 등)이 컬럼에 들어있는 것을 확인할 수 있습니다.


궁금증 해결하기

2023년 가장 많이 상승(하락)한 종목부터 찾아보겠습니다.

2023년 1월 3일 시가와 2023년 12월 29일의 종가를 비교해서 찾습니다.

stock = stock.reset_index()
starts = stock[stock['Date']=='2023-01-03']['Open'].transpose()
starts = starts.reset_index()
ends = stock[stock['Date']=='2023-12-29']['Close'].transpose()
ends = ends.reset_index()

starts.columns = ['Ticker', 'START']
ends.columns = ['Ticker', 'END']

stocks_ = pd.merge(starts, ends, how='left', left_on='Ticker', right_on='Ticker')
stocks_['rate'] = (stocks_['END'] - stocks_['START']) / stocks_['START']
stocks_ = stocks_.sort_values('rate', ascending=False)
stocks_

 

결과를 간단히 시각화해볼까요?

fig = px.bar(stocks_, y='rate', x='Ticker')
fig.show()

종목별 증감율

 

상승율이 높은 종목은 (APP, SMCI, NVDA, META) 순서네요.

 

반대로, 가장 하락율이 큰 종목은 ENPH로 관찰됩니다. -51% 정도 하락했네요.

 

이번엔 거래량(Volumes)을 보겠습니다.

volumes = stock['Volume'].sum().reset_index()
volumes.columns = ['Ticker', 'Volume']
volumes = volumes.sort_values('Volume', ascending=False)
volumes

fig = px.bar(volumes, y='Volume', x='Ticker')
fig.show()

종목별 거래량

거래량이 가장 많았던 종목은 (AMD, AAPL, NVDA, INTC) 순서네요.

 

마지막으로 가장 거래량이 많은 시기를 찾아보겠습니다.

stock_volume = stock[['Date','Volume']]
stock_volume['SUM'] = stock_volume.iloc[:, 1:].sum(axis=1)
stock_volume_ = stock_volume[['Date', 'SUM']]

monthly_sum = stock_volume_.resample('MS').sum()
monthly_sum = monthly_sum.reset_index()

fig = px.line(monthly_sum, x="Date", y="SUM")
fig.show()

weekly_sum = stock_volume_.resample('W-Mon').sum()
weekly_sum = weekly_sum.reset_index()

fig = px.line(weekly_sum, x="Date", y="SUM")
fig.show()

fig = px.line(stock_volume, x="Date", y="SUM")
fig.show()

 

3월의 거래량이 가장 많았고, 4월이 가장 낮았네요.

일별로 본다면 12월 15일에 가장 많은 거래량, 11월 24일에 가장 적은 거래량을 기록했습니다.

 


정리

yfinance는 위에서 활용했던 주가 데이터 이외에도 종목들의 정보도 제공하고 있습니다.

대부분의 주식 관련 정보는 검색하면 나오지만, 다량의 데이터를 활용해서 새로운 사실을 발견할 때 활용하면 좋을 것 같습니다.

 

 

 

 

 

 

 

 

반응형
Comments