파이썬
[python] shift() , pct_change(), diff(), rolling(), resample()
필경이야
2021. 10. 13. 14:59
[python] shift() , pct_change(), diff(), rolling(), resample()
shift()
- 인덱스에 연결된 데이터를 일정 간격으로 이동시키는 함수.
- default => period = 1, axis=0(row)
- axis=1을 하면 데이터가 오른쪽으로 이동하게 된다.
mmm_df['Close_lag1'] = mmm_df['Close'].shift()
Date | Open | High | Low | Close | Adj Close | Volume | Close_lag1 |
2017-01-03 | 178.830002 | 180.000000 | 177.220001 | 178.050003 | 154.443573 | 2509300 | NaN |
2017-01-04 | 178.029999 | 178.899994 | 177.610001 | 178.320007 | 154.677734 | 1542000 | 178.050003 |
2017-01-05 | 178.259995 | 179.139999 | 176.889999 | 177.710007 | 154.148636 | 1447800 | 178.320007 |
2017-01-06 | 177.289993 | 178.600006 | 175.800003 | 178.229996 | 154.599731 | 1625000 | 177.710007 |
2017-01-09 | 178.369995 | 178.380005 | 177.199997 | 177.270004 | 153.766983 | 1622600 | 178.229996 |
pct_change()
- 현재 값과 이전 요소 값의 백분율 변화량을 연산하는 함수
mmm_df['pct_change'] = mmm_df['Close'].pct_change()
Open | High | Low | Close | Adj Close | Volume | Close_lag1 | pct_change | |
---|---|---|---|---|---|---|---|---|
Date | ||||||||
2017-01-03 | 178.830002 | 180.000000 | 177.220001 | 178.050003 | 154.443573 | 2509300 | NaN | NaN |
2017-01-04 | 178.029999 | 178.899994 | 177.610001 | 178.320007 | 154.677734 | 1542000 | 178.050003 | 0.001516 |
2017-01-05 | 178.259995 | 179.139999 | 176.889999 | 177.710007 | 154.148636 | 1447800 | 178.320007 | -0.003421 |
2017-01-06 | 177.289993 | 178.600006 | 175.800003 | 178.229996 | 154.599731 | 1625000 | 177.710007 | 0.002926 |
2017-01-09 | 178.369995 | 178.380005 | 177.199997 | 177.270004 | 153.766983 | 1622600 | 178.229996 | -0.005386 |
diff()
- pct_change()와 비슷한 원리이며, 뺄셈을 연산하는 함수이다.
rolling()
- window(구간)데이터드리으 평균값, 최솟값, 최댓값등을 계산하는 함수.
mmm_df.drop('pct_change',axis=1)
mmm_df['MA'] = mmm_df['Close'].rolling(window = 5).mean()
mmm_df.head(10)
Open | High | Low | Close | Adj Close | Volume | Close_lag1 | pct_change | MA | |
---|---|---|---|---|---|---|---|---|---|
Date | |||||||||
2017-01-03 | 178.830002 | 180.000000 | 177.220001 | 178.050003 | 154.443573 | 2509300 | NaN | NaN | NaN |
2017-01-04 | 178.029999 | 178.899994 | 177.610001 | 178.320007 | 154.677734 | 1542000 | 178.050003 | 0.001516 | NaN |
2017-01-05 | 178.259995 | 179.139999 | 176.889999 | 177.710007 | 154.148636 | 1447800 | 178.320007 | -0.003421 | NaN |
2017-01-06 | 177.289993 | 178.600006 | 175.800003 | 178.229996 | 154.599731 | 1625000 | 177.710007 | 0.002926 | NaN |
2017-01-09 | 178.369995 | 178.380005 | 177.199997 | 177.270004 | 153.766983 | 1622600 | 178.229996 | -0.005386 | 177.916003 |
2017-01-10 | 177.360001 | 177.490005 | 176.309998 | 176.580002 | 153.168457 | 2030100 | 177.270004 | -0.003892 | 177.622003 |
2017-01-11 | 176.630005 | 178.449997 | 176.389999 | 177.889999 | 154.304779 | 1579600 | 176.580002 | 0.007419 | 177.536002 |
2017-01-12 | 176.970001 | 177.699997 | 175.750000 | 177.440002 | 153.914429 | 1321800 | 177.889999 | -0.002530 | 177.482001 |
2017-01-13 | 177.580002 | 177.910004 | 176.830002 | 177.389999 | 153.871063 | 1265500 | 177.440002 | -0.000282 | 177.314001 |
2017-01-17 | 177.000000 | 177.679993 | 176.250000 | 177.259995 | 153.758301 | 1557500 | 177.389999 | -0.000733 | 177.311999 |
resample()
- 시간 간격을 재조정하는 기능
업샘플링
- 분단위, 초 단위로 샘플의 빈도수를 증가시킨다
- 보간법을 이용해 누락된 데이터를 채워나간다
다운샘플링
- 몇 일, 몇 달 단위로 샘플의 빈도수를 감소시킨다.
- 기존데이터를 집계하는 방법으로 데이터를 사용한다.
import pandas as pd
index = pd.date_range(start='2019-01-01', end = '2019-10-01',freq = 'B')
#freq = B -> Buisness Day
series = pd.Series(range(len(index)),index=index)
series
2019-01-01 0
2019-01-02 1
2019-01-03 2
2019-01-04 3
2019-01-07 4
...
2019-09-25 191
2019-09-26 192
2019-09-27 193
2019-09-30 194
2019-10-01 195
Freq: B, Length: 196, dtype: int64
series.resample(rule='M').sum()
#M : Monthly -> 월말 일자를 기준으로 데이터를 정렬한다.
- last, first를 호출하여 월말,월초 일자를 확인할 수 있다.
2019-01-31 253
2019-02-28 650
2019-03-31 1113
2019-04-30 1639
2019-05-31 2231
2019-06-30 2370
2019-07-31 3220
2019-08-31 3575
2019-09-30 3864
2019-10-31 195
Freq: M, dtype: int64
참조 : 퀀트 전략을 위한 인공지능 트레이닝(김태헌,신준호 지음)