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
복사