데이터의 전처리

허준·2022년 8월 20일
0

참고:
https://github.com/PacktPublishing/Machine-Learning-for-Algorithmic-Trading-Second-Edition_Original/blob/master/07_linear_models/03_preparing_the_model_data.ipynb

멀티레벨서 인덱스
idx = pd.IndexSlice
prices = prices.loc[idx[shared, :], :]

최소한의 데이터수를 가진 주식들만 보는 코드.
nobs = prices.groupby(level='ticker').size()
ticker 레벨로 prices라는 df를 ticker에 대해 묶고, 데이터 수를 보여주는 size연산 실행. 이를 이용하면 티커별 수가 나온 series를 얻는다.
keep = nobs[nobs > min_obs].index
nobs가 시리즈므로, nobs>min_obs인 인덱스만을 추출
prices = prices.loc[idx[keep, :], :]
prices에서 해당 인덱스의 데이터만을 pd.IndexSlice를 이용해 추출. 특정 티커만을 꺼내올 때 idx[keep, :]를 쓴다는 점

stocks = stocks[~stocks.index.duplicated() & stocks.sector.notnull()]
중복 항목을 제거§or가 null가 아닌 것들만 사용

stocks.sector = stocks.sector.str.lower().str.replace(' ', '_')
replace, lower모두 str.서 꺼내서 사용.

prices.index.get_level_values('ticker').unique()
멀티레벨 dataframe에서 unique 티커 값들을 배열로 얻는다.

랭크 데이터
df.groupby('date').dollar_vol.rank(ascending=False) : 내림차순으로 날짜별 시총의 랭크.

중요.
talib을 이용한 각종 기술적 지표 계산.
from talib import RSI
prices.groupby(level='ticker').close.apply(RSI).
이게 되는 것이 있고, compute_bb처럼 함수를 만들어 줘야 되는 거솓 있다.

lagged returns: pct_change이용후 chift

더비 변수 생성
pd.get_dummies(df, columns = [] , prefix=[], prefix_sep=[],drop_first=True)
만일 함수를 이용하지 않고 수동으로 생성해 준다면, 실수로 다중공선성을 만들지 않도록 열의 개수를 하나 적게 만들어 줘야 된다. ABC가 있다면 BC만 만드는 식. 안 그러면 A+B+C=1이 무조건 성립하게 된다.

profile
퀀트 지망(Quant candidate)

0개의 댓글