iBetter Books
교안 슬라이드
수정

주식 데이터 수집하기

yfinance 라이브러리를 사용하면 Yahoo Finance에서 전 세계 주가 데이터를 무료로 수집할 수 있습니다. 실시간에 가까운 데이터로 실전 분석을 시작합니다.

학습 목표

  • yfinance로 국내외 주가 데이터를 수집할 수 있습니다.
  • DatetimeIndex의 특성을 이해하고 날짜 기반 인덱싱을 할 수 있습니다.
  • 여러 종목을 한 번에 수집하여 비교 분석할 수 있습니다.

yfinance 설치

pip install yfinance

단일 종목 수집

import yfinance as yfimport pandas as pd# 삼성전자 (KRX: 005930.KS)samsung = yf.download("005930.KS", start="2023-01-01", end="2024-12-31")print(samsung.head())#                  Open     High      Low    Close   Volume# Date# 2023-01-02  58800.0  59200.0  58400.0  59000.0  9821300# 2023-01-03  59000.0  59300.0  58500.0  58700.0  8734200# ...

OHLCV 데이터 이해

컬럼 의미
Open 시가 (장 시작 가격)
High 고가 (당일 최고가)
Low 저가 (당일 최저가)
Close 종가 (장 마감 가격)
Volume 거래량

분석에는 주로 종가(Close)를 사용합니다.

DatetimeIndex 활용

yfinance 데이터의 인덱스는 DatetimeIndex입니다. 날짜 기반 슬라이싱이 매우 편리합니다.

# 특정 날짜 선택samsung.loc["2024-01-15"]# 특정 기간 슬라이싱samsung.loc["2024-01-01":"2024-06-30"]# 특정 연도samsung.loc["2024"]# 특정 월samsung.loc["2024-03"]# 날짜 관련 정보 추출samsung.index.yearsamsung.index.monthsamsung.index.dayofweek  # 0=월, 6=일samsung.index.quarter

여러 종목 동시 수집

# 주요 IT 종목tickers = {    "삼성전자": "005930.KS",    "SK하이닉스": "000660.KS",    "NAVER": "035420.KS",    "카카오": "035720.KS",    "LG에너지솔루션": "373220.KS",}# 종가만 수집prices = yf.download(list(tickers.values()), start="2023-01-01")["Close"]prices.columns = list(tickers.keys())  # 영문 티커 → 한글 이름print(prices.head())print(f"\n결측치: {prices.isna().sum().sum()}개")

결측치 처리 (거래 없는 날)

# 공휴일, 거래 정지 등으로 결측치 발생# 전일 종가로 채우기 (가장 일반적)prices = prices.ffill()# 완전히 처음부터 결측인 경우 제거prices = prices.dropna()

데이터 저장 및 재활용

# CSV로 저장 (인터넷 없이 재사용)prices.to_csv("stock_prices.csv")# 불러오기prices = pd.read_csv("stock_prices.csv", index_col="Date", parse_dates=True)

주요 해외 종목 티커

종목 티커
삼성전자 005930.KS
KOSPI 200 ETF 069500.KS
Apple AAPL
Microsoft MSFT
NVIDIA NVDA
S&P 500 ETF SPY

정리

  • yf.download("티커", start="날짜", end="날짜"): 주가 데이터 수집
  • DatetimeIndex: df.loc["2024-01"]처럼 직관적인 날짜 슬라이싱
  • 여러 종목: yf.download([티커1, 티커2, ...])
  • 수집 후 CSV 저장하면 API 호출 없이 재사용 가능