야후 파이낸스는 무료이면서도 방대한 주가 데이터를 제공하는 플랫폼으로, 파이썬의 yfinance 라이브러리를 사용하면 실시간 주가 정보부터 과거 데이터까지 손쉽게 수집할 수 있습니다. 이 글에서는 yfinance 설치 방법부터 다양한 데이터 추출 및 분석 방법까지 상세하게 설명합니다.
글의 요약
- yfinance는 주식, ETF, 인덱스 등의 금융 데이터를 손쉽게 가져올 수 있는 파이썬 라이브러리입니다.
- 설치가 간단하고, 야후 파이낸스의 방대한 데이터를 무료로 활용할 수 있습니다.
- 실시간 시세, 과거 데이터, 재무제표, 배당 정보 등 다양한 활용이 가능합니다.
yfinance란 무엇인가?
yfinance
는 파이썬에서 야후 파이낸스(Yahoo Finance)의 주식 시장 데이터를 쉽게 가져올 수 있도록 만든 라이브러리입니다. 구글 파이낸스 API가 중단된 이후, yfinance는 주식 데이터를 자동으로 수집하려는 많은 개발자와 투자자에게 대체 수단이 되었습니다. 특히 yfinance는 다음과 같은 이유로 인기입니다.- 무료로 제공됨
- 비교적 정확한 데이터
- 시계열 데이터뿐 아니라 재무제표, 배당, 주식 분할 정보 등도 포함
- 설치 및 사용이 매우 간단
이 라이브러리는 Yahoo Finance의 웹 페이지에서 데이터를 크롤링하는 방식이기 때문에, 공식 API처럼 안정적인 서비스 수준은 보장하지 않지만, 실무에서도 매우 유용하게 활용됩니다. 예를 들어 주식 백테스팅, 자동화된 데이터 수집, 실시간 모니터링, 포트폴리오 분석 등 다양한 목적에 사용됩니다.
yfinance 설치 및 기본 사용법
먼저 yfinance를 사용하기 위해 파이썬 환경에 라이브러리를 설치해야 합니다. 설치는 pip 명령어로 매우 간단하게 진행할 수 있습니다.
pip install yfinance
설치가 완료되면 아래와 같이 간단한 코드로 원하는 종목의 주가 데이터를 가져올 수 있습니다. 예시는 애플(Apple, AAPL)의 최근 주가 데이터를 가져오는 코드입니다.
import yfinance as yf
# 애플 종목 객체 생성
apple = yf.Ticker("AAPL")
# 최근 5일간 일별 데이터
df = apple.history(period="5d")
print(df)
출력 결과에는 날짜, 시가(Open), 고가(High), 저가(Low), 종가(Close), 거래량(Volume), 배당금(Dividends), 주식 분할(Stock Splits) 등의 정보가 포함되어 있습니다. yfinance의
Ticker
객체는 매우 다양한 기능을 제공하며, 단순한 가격 정보 외에도 다음과 같은 다양한 정보를 조회할 수 있습니다:info
: 종목 기본 정보 (기업 개요, 시가총액, 산업군 등)actions
: 배당 및 주식 분할 정보dividends
: 배당 히스토리splits
: 주식 분할 히스토리financials
: 재무제표recommendations
: 애널리스트 추천 내역
주요 기능별 상세 사용법
1. 주가 히스토리 데이터 수집
가장 많이 사용하는 기능 중 하나는 히스토리 데이터 수집입니다. 예를 들어 2020년부터 2022년까지 삼성전자의 데이터를 가져오고 싶다면 다음과 같은 코드를 사용할 수 있습니다.
import yfinance as yf
samsung = yf.Ticker("005930.KS") # 한국 종목은 .KS를 붙여야 합니다
df = samsung.history(start="2020-01-01", end="2022-12-31")
print(df.head())
옵션 설명:
period
: '1d', '5d', '1mo', '3mo', '1y', '5y', 'max' 등interval
: '1m', '5m', '15m', '1h', '1d', '1wk', '1mo' 등start
,end
: 특정 기간 지정
2. 여러 종목 데이터 한 번에 가져오기
포트폴리오에 여러 종목이 포함되어 있다면, 각각 수동으로 가져오는 대신 리스트 형태로 처리할 수 있습니다.
tickers = yf.download(["AAPL", "MSFT", "GOOG"], start="2023-01-01", end="2023-12-31")
print(tickers.head())
출력은 멀티 인덱스 형태의 데이터프레임으로, 종목별 열이 구분됩니다. 이를 분석하기 위해
xs()
나 groupby()
등을 사용해 원하는 형태로 변환 가능합니다.3. 기업 정보와 재무제표 추출
주가 외에도 기본적인 기업 정보와 재무제표는 분석 시 매우 중요한 요소입니다.
apple = yf.Ticker("AAPL")
# 종목 기본 정보
print(apple.info)
# 재무제표
print(apple.financials)
# 손익계산서
print(apple.financials)
# 대차대조표
print(apple.balance_sheet)
# 현금흐름표
print(apple.cashflow)
여기서
.info
는 딕셔너리 형태로 종목명, 업종, 시가총액, 거래소, P/E Ratio 등 다양한 메타 데이터를 포함합니다. 다만, 일부 항목은 빈 값일 수 있으므로 get()
함수로 확인하는 습관을 들이는 것이 좋습니다.한국 주식 데이터 가져오기
yfinance는 미국 주식뿐만 아니라 한국 주식도 지원합니다. 다만, 티커 뒤에
.KS
(코스피) 또는 .KQ
(코스닥)를 붙여야 합니다.예:
- 삼성전자:
005930.KS
- 카카오:
035720.KQ
samsung = yf.Ticker("005930.KS")
print(samsung.history(period="1mo"))
한국 주식도 히스토리, 배당, 재무제표 등 다양한 정보를 가져올 수 있지만, 일부 데이터는 제한적일 수 있습니다. 예를 들어 애널리스트 리포트나 상세 재무제표는 공시 사이트(DART)를 사용하는 것이 더 정확합니다.
yfinance 데이터 활용 팁과 주의사항
yfinance는 매우 유용한 도구이지만, 한계점도 존재합니다. 다음과 같은 점들을 유의하여 사용해야 합니다.
- 데이터 정확도: 실시간이 아니며, 일부 데이터는 지연되어 반영됩니다.
- 한계 주기 제한: 분 단위 데이터를 가져올 경우 제한이 있으며, 긴 기간은 나눠서 받아야 할 수 있습니다.
- Rate Limit: 너무 많은 요청은 차단될 수 있으므로, sleep() 함수 등을 사용해 적절히 조절해야 합니다.
- 한국 주식의 일부 비호환성: 모든 종목이 완전히 지원되지는 않습니다.
데이터 분석에 활용하기 전 반드시 시각화 혹은 샘플 데이터를 검증하는 것이 좋으며, 보조적으로
pandas_datareader
, investpy
, dart_fss
등의 라이브러리를 함께 사용하는 것도 좋은 전략입니다.Q&A
질문 1. yfinance로 가져온 데이터는 실시간인가요?
답변 1. 완전한 실시간은 아니며 약간의 지연이 존재합니다. 야후 파이낸스가 제공하는 지연 데이터(딜레이드 데이터)를 기반으로 합니다.
질문 2. 한국 주식도 yfinance에서 사용할 수 있나요?
답변 2. 네, 가능합니다. 다만
.KS
(코스피), .KQ
(코스닥)와 같은 접미어를 종목 코드에 붙여야 하며, 일부 종목의 경우 데이터가 제한될 수 있습니다.질문 3. 데이터를 엑셀이나 CSV로 저장할 수 있나요?
답변 3. 가능합니다.
DataFrame.to_csv("파일명.csv")
를 사용하면 손쉽게 저장할 수 있습니다.질문 4. 특정 날짜의 시세만 조회할 수 있나요?
답변 4. 히스토리에서 start와 end 날짜를 동일하게 설정하거나, 데이터를 가져온 뒤 필터링하면 가능합니다.
질문 5. 애널리스트 추천이나 목표주가 정보도 있나요?
답변 5.
.recommendations
속성을 통해 애널리스트 리포트 데이터를 가져올 수 있습니다. 다만, 한국 종목은 제공되지 않을 수 있습니다.
Tags:
데이터수집