Search

Rolling 집계 / Shift

Rolling

시계열 데이터의 경우, 최근 일정 기간에 대한 집계가 중요하다.
이때 rolling() 메서드를 사용한다.
rolling() 메서드는 특정 창을 기준으로 이동 평균, 이동 합계 등과 같은 집계 작업을 수행한다.
window 매개변수에 집계할 행 수를 지정한다. (매개변수 이름 생략 가능)
min_periods 매개변수에 몇 개의 행만 있어도 집계할 지 지정할 수 있다.
# Ozone 열에 대해서 3개의 행에 대해 이동 평균 계산 air['Ozone'].rolling(window=3, min_periods=1).mean()
Python
복사
# 최근 3일, 7일간의 평균 비교 air['OZ_mean_3'] = round(air['Ozone'].rolling(window=3, min_periods=1).mean(), 1) air['OZ_mean_7'] = round(air['Ozone'].rolling(window=7, min_periods=1).mean(), 1) # 확인 air.head()
Python
복사
Ozone
Solar.R
Wind
Temp
Month
Day
OZ_mean
OZ_mean_3
OZ_mean_7
0
41.0
190.0
7.4
67
5
1
43.3
41.0
41.0
1
36.0
118.0
8.0
72
5
2
43.3
38.5
38.5
2
12.0
149.0
12.6
74
5
3
43.3
29.7
29.7
3
18.0
313.0
11.5
62
5
4
43.3
22.0
26.8
4
23.0
308.3
14.3
56
5
5
43.3
17.7
26.0

Shift

데이터를 행 방향, 또는 열 방향으로 이동시킬 때 shift() 메서드를 사용한다.
shift() 메서드는 데이터를 특정 행이나 열 방향으로 이동시켜, 시계열 데이터에서 이전 값과 비교하는 데 사용된다.
air['OZ_lag_1'] = air['Ozone'].shift(1) air['OZ_lag_2'] = air['Ozone'].shift(2) air['OZ_lag_3'] = air['Ozone'].shift(3) air.head()
Python
복사
shift 안에 음수값을 넣으면 미래 데이터값을 가져올 수 있다.
Ozone
Solar.R
Wind
Temp
Month
Day
OZ_mean
OZ_mean_3
OZ_mean_7
OZ_lag_1
OZ_lag_2
OZ_lag_3
0
41.0
190.0
7.4
67
5
1
43.3
41.0
41.0
NaN
NaN
NaN
1
36.0
118.0
8.0
72
5
2
43.3
38.5
38.5
41.0
NaN
NaN
2
12.0
149.0
12.6
74
5
3
43.3
29.7
29.7
36.0
41.0
NaN
3
18.0
313.0
11.5
62
5
4
43.3
22.0
26.8
12.0
36.0
41.0
4
23.0
308.3
14.3
56
5
5
43.3
17.7
26.0
18.0
12.0
36.0

Rolling & Shift

rolling() , shift() 메서드를 같이 사용할 수 있다.
일반적으로 당일을 제외한 기간에 대한 rolling을 수행할 때 사용한다.
# 당일을 제외한 최근 3일간의 Ozone 값 평균을 갖는 열을 추가 air['OZ_mean_3_lag_1'] = round(air['Ozone'].rolling(3, min_periods=1).mean().shift(1), 2) # 확인 air.head()
Python
복사
Ozone
Solar.R
Wind
Temp
Month
Day
OZ_mean
OZ_mean_3
OZ_mean_7
OZ_lag_1
OZ_lag_2
OZ_lag_3
OZ_mean_3_lag_1
0
41.0
190.0
7.4
67
5
1
43.3
41.0
41.0
NaN
NaN
NaN
NaN
1
36.0
118.0
8.0
72
5
2
43.3
38.5
38.5
41.0
NaN
NaN
41.00
2
12.0
149.0
12.6
74
5
3
43.3
29.7
29.7
36.0
41.0
NaN
38.50
3
18.0
313.0
11.5
62
5
4
43.3
22.0
26.8
12.0
36.0
41.0
29.67
4
23.0
308.3
14.3
56
5
5
43.3
17.7
26.0
18.0
12.0
36.0
22.00

참고 - 머신러닝 Rolling 사용편

시계열 데이터에서 미래의 값을 예측하는 모델을 만들 때, 1일 후 값을 각 행에 추가해줘야 한다.
# 새로운 열 추가: 다음날 Ozone 값 (예측 대상) air['OZ_lead_1'] = air['Ozone'].shift(-1)
Python
복사