-
[Pandas] rolling function 알아보기Python 2023. 12. 3. 16:33728x90반응형
- 목차
키워드.
- - pandas
- - Moving Average
- - Rolling Average
들어가며.
Pandas 는 Moving Average 또는 Rolling Average 를 계산할 수 있도록 Window 기능이 제공됩니다.
이는 Pandas DataFrame 의 rolling 이라는 함수로 구현되어 있습니다.
SQL 뿐만 아니라 Spark, Flink 등의 여러 데이터 처리 프레임워크에서도 Window 기능이 제공되는데,
Window 는 정해진 크기의 데이터들을 한데 묶어 어떠한 계산을 하고 그 결과값을 특정 Row 에 저장하게 됩니다.
하나의 예로써, Moving Average 를 설명해보죠.
Moving Average 는 전체 데이터셋에서 정해진 크기의 데이터들의 부분적인 평균을 의미합니다.
예를 들어, 아래의 이미지 자료는 Window 가 2인 Rolling Sum 을 구현한 결과입니다.
0 ~ 5번까지 데이터를 2개씩 묶어 그 값들을 더하게 됩니다.
아래와 같은 순서로 Pandas DataFrame 의 Rolling 연산이 수행됩니다.
첫번째 Row 는 Window 의 크기인 2가 충족되지 않기에 Rolling 연산을 수행할 수 없는 Missing Value 가 됩니다.
그 이후의 Row 들은 Window 크기인 2 가 충족되어 Rolling Sum 값을 계산할 수 있죠.
위와 같이 Pandas 의 Rolling 함수를 통해서 Window 연산을 적용할 수 있게 됩니다.
rolling 함수 사용해보기.
Pandas DataFrame 은 rolling 함수를 가집니다.
rolling 함수의 간단한 사용법은 아래와 같습니다.
rolling 함수의 window 인자에 Window Size 를 입력한 후에 원하는 연산에 해당하는 함수를 적용합니다.
저는 Rolling Sum 을 구현하기 위해서 sum() 함수를 적용하였습니다.
import pandas as pd df = pd.DataFrame([ [1], [2], [3], [4], [5], [6] ], columns=["num"]) df["rolling_sum"] = df.rolling(window=2).sum()
window.
window 인자는 Rolling 연산에서 사용할 Window Size 를 입력합니다.
아래처럼 window = 1 로 설정하게 되는 경우에는 Rolling Calculation 에 큰 의미가 없습니다.
df["rolling_sum"] = df.rolling(window=1).sum()
반면 window 크기를 4로 설정하는 경우에는 아래의 결과를 보입니다.
0 ~ 2번 index 의 값들은 NaN 인 결측값을 가지게 됩니다.
그리고 3번 index 부터 이전의 4개의 데이터들을 통해서 Sum 연산을 적용하죠.
df["rolling_sum"] = df.rolling(window=4).sum()
min_periods.
min_periods 인자는 결측값을 최소화시키기 위한 방법 중 하나입니다.
window 크기가 N 인 경우에 필연적으로 N-1 개의 결측값이 생기게 됩니다.
위에서 설명하였듯이 window = 4 인 경우에 0 ~ 2 index 의 값들은 NaN 이 결측값을 가지게 되었죠 ?
하지만 Window 의 사이즈가 min_period 는 설정한 값만큼만 결측값을 만들게 됩니다.
예를 들어, window 크기는 4이지만, min_periods = 1 로 설정합니다.
이 의미는 최소한 window 의 크기가 1부터 Rolling Calculation 을 적용할 수 있도록 합니다.
df["rolling_sum"] = df.rolling(window=4, min_periods=1).sum()
반응형'Python' 카테고리의 다른 글
Seaborn heatmap 그리기 (0) 2024.01.07 Seaborn countplot 그리기 (0) 2024.01.07 [numpy] axis 사용법 ( min, max, sum ) 알아보기 (0) 2023.09.06 [Pandas] stack 사용하여 Pivot Table 만들기 ( pivot_table ) (0) 2023.07.10 [pandas] get_dummies 알아보기 ( One Hot Encoding ) (0) 2023.02.06