pandas_datareader를 이용하면 많은 해외 주식 데이터를 가져올 수 있습니다.
매월 말일 기준으로 투자를 하는 방법에 대한 백테스를 하기 위해서 매월 마지막날 데이터만 가져오려고 합니다.
구글을 검색해봐도 찾기가 쉽지 않더라구요. 어렵게 찾았기에 기록으로 남기려고 합니다.
import pandas as pd
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
from datetime import datetime
ticker = 'voo'
df = pdr.get_data_yahoo(ticker)
df
필요 모듈을 가져온 다음에 'voo' 즉 Vangard S&P 500 ETF 데이터를 가져옵니다.
type(df.index)
Index의 type은 'DatetimeIndex'입니다. 이걸 활용하면 쉽게 월별 말일을 구할 수 있습니다.
df['Odate'] = df.index
df
groupby를 사용해서 데이터를 재설정 할 것이기 때문에 우선 index를 복사해서 'Odate'컬럼을 하나 만들었습니다.
"년도별, 월별 마지막으로 그룹핑하기 => 'Odate' 컬럼을 Index로 설정하기"
위와 같은 순서로 월별 마지막일 데이터만 가져올 예정입니다.
df.groupby(by=df.index.year).last()
년도별 마지막 날짜를 가져오려면 위와 같이 코드를 작성하면 됩니다.
indext가 datetimeindex 타입이라서 이렇게 추출 하는게 가능합니다.
이제 년도별 월별로 그룹핑해보겠습니다.
df_m = df.groupby(by=[df.index.year, df.index.month]).last()
df_m
연도별, 월별 인덱스 값을 리스트형태로 입력한 다음 마지막일을 구하는 'last()' 함수를 넣어주면 됩니다.
이렇게 그룹핑한 데이터는 'df_m'이라는 데이터프레임 변수에 넣어줍니다.
그런데 인덱스가 보기는 좋으나 사용하기가 좀 불편할 것 같네요
df_m = df.groupby(by=[df.index.year, df.index.month], as_index=False).last()
df_m
"as_index=False"로 옵션을 설정하면 index는 자동으로 숫자로 순차적으로 매겨집니다.
df_m.set_index('Odate', inplace=True)
df_m
이제 마지막으로 처음에 컬럼('Odate')으로 복사한 index를 다시 Index로 설정해 줍니다.
쉬운 방법인데 구글에서 찾기가 힘드네요.
'파이썬(Python) > 파이썬으로 투자실험' 카테고리의 다른 글
파이썬으로 MDD 구하기(pandas, numpy) (2) | 2024.03.06 |
---|---|
미국 ETF 평균모멘텀스코어로 비중 조절 백테스트(ETF 포트폴리오 투자) (0) | 2024.03.04 |
파이썬으로 변동성 돌파 백테스트 (1) | 2024.01.29 |
원-달러 환율과 KOSPI 지수 상관관계 분석 (11) | 2023.02.06 |
KOSPI 와 환율 비교(With python) (0) | 2022.11.09 |
댓글