퀀트투자 with Python & 인공지능

금융 데이터 수집 및 처리

4OurFuture 2025. 2. 3. 19:49
728x90
반응형

퀀트 투자에서 데이터는 가장 중요한 요소 중 하나입니다. 주식 가격, 재무 데이터 및 각종 경제 지표를 분석하여 투자 결정을 내리기 때문입니다. 이번 글에서는 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를 이용하여 재무 데이터를 불러오기
  • 주식 가격을 수익률로 변환하는 방법

다음 글에서는 팩터 분석과 포트폴리오 최적화 방법을 다루겠습니다! 🚀

728x90
반응형