금융 데이터 수집 및 처리
퀀트 투자에서 데이터는 가장 중요한 요소 중 하나입니다. 주식 가격, 재무 데이터 및 각종 경제 지표를 분석하여 투자 결정을 내리기 때문입니다. 이번 글에서는 yfinance와 pandas_datareader를 이용하여 금융 데이터를 수집하고, 주식 가격 및 수익률을 계산하는 방법을 알아보겠습니다.
1. yfinance를 활용한 주식 데이터 다운로드
yfinance는 Yahoo Finance의 데이터를 쉽게 가져올 수 있도록 도와주는 라이브러리입니다. 아래 코드에서는 특정 종목의 과거 가격 데이터를 다운로드하는 방법을 소개합니다.
📌 yfinance 설치
!pip install yfinance
📌 주식 데이터 다운로드
아래 예제에서는 KOSPI 지수(^KS11)와 특정 개별 종목(039490.KS, 키움증권)의 가격 데이터를 가져옵니다.
import yfinance as yf
import pandas as pd
# 원하는 종목 코드 입력
tickers = ['^KS11', '039490.KS']
# 주식 데이터를 저장할 딕셔너리 생성
all_data = {}
for ticker in tickers:
data = yf.download(ticker, start='2016-01-01', end='2021-12-31')
# 데이터가 비어있지 않고, 'Close' 컬럼이 존재하는 경우 저장
if not data.empty and 'Close' in data.columns:
all_data[ticker] = data[['Close']].dropna() # NaN 제거
# 비어 있지 않은 종목만 포함하여 prices 생성
if all_data: # all_data가 비어 있지 않은 경우에만 실행
prices = pd.concat([df.rename(columns={'Close': ticker}) for ticker, df in all_data.items()], axis=1)
print(prices.head())
else:
print("다운로드된 데이터가 없습니다. 티커 코드를 확인하세요.")
이제 prices 데이터프레임에는 선택한 종목들의 종가 데이터가 저장됩니다.
2. pandas_datareader를 이용한 재무 데이터 수집
pandas_datareader는 다양한 금융 데이터를 손쉽게 불러올 수 있는 라이브러리입니다. 특히 famafrench 데이터를 활용하면 유명한 팩터 투자 지표를 쉽게 다운로드할 수 있습니다.
📌 pandas_datareader 설치
!pip install pandas_datareader
📌 재무 데이터 다운로드
아래 코드는 pandas_datareader를 이용하여 파마-프렌치의 PBR(주가순자산비율) 데이터셋을 다운로드하는 예제입니다.
import pandas_datareader.data as web
from pandas_datareader.famafrench import get_available_datasets
import pandas as pd
#import warnings
# FutureWarning을 무시
# warnings.simplefilter("ignore", category=FutureWarning)
# 사용 가능한 데이터셋 목록 확인
datasets = get_available_datasets()
print(datasets[:10]) # 일부 데이터셋 출력
# 특정 데이터셋 불러오기
df_pbr = web.DataReader('Portfolios_Formed_on_BE-ME', 'famafrench', start='1900-01-01')
# 반환된 데이터의 타입 확인
print(f"df_pbr 타입: {type(df_pbr)}") # Debugging
# DataFrame만 필터링하고 날짜 인덱스를 변환
df_pbr = {
key: df.assign(Date=pd.to_datetime(df.index.to_timestamp())) # 날짜 변환 후 새로운 컬럼 추가
.set_index("Date") # 변환된 날짜를 새로운 인덱스로 설정
if isinstance(df, pd.DataFrame) else df
for key, df in df_pbr.items()
}
# 변환된 DataFrame 키 목록 확인
df_keys = [key for key, df in df_pbr.items() if isinstance(df, pd.DataFrame)]
print(f"DataFrame으로 변환된 키 목록: {df_keys}")
# 변환된 데이터 확인
if df_keys:
print(df_pbr[df_keys[0]].head()) # 첫 번째 DataFrame 출력
위 코드 실행 후 df_pbr[0]을 출력하면, PBR 기준으로 나눈 포트폴리오의 수익률을 확인할 수 있습니다.
3. 주식 가격 및 수익률 계산 방법
주식 데이터를 활용하려면, 가격 변화를 수익률로 변환하는 과정이 필요합니다. pct_change() 메서드를 사용하면 간단하게 일간 수익률을 계산할 수 있습니다.
📌 주식 수익률 계산
# 수익률 계산
returns = prices.pct_change().dropna()
# 수익률 확인
print(returns.head())
이제 returns 데이터프레임에는 각 종목의 일일 수익률이 저장됩니다. 이를 활용하여 베타 분석, 포트폴리오 구성 등의 고급 분석이 가능합니다.
결론
이번 글에서는 금융 데이터를 수집하는 방법과 주식 수익률을 계산하는 방법을 알아보았습니다.
- yfinance를 활용하여 특정 종목의 주식 가격 데이터를 다운로드
- pandas_datareader를 이용하여 재무 데이터를 불러오기
- 주식 가격을 수익률로 변환하는 방법
다음 글에서는 팩터 분석과 포트폴리오 최적화 방법을 다루겠습니다! 🚀