[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
참조 : 퀀트 전략을 위한 인공지능 트레이닝(김태헌,신준호 지음)