ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pandas] rolling function 알아보기
    Python 2023. 12. 3. 16:33
    728x90
    반응형

    - 목차

     

    키워드.

    • - 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()

     

     

     

    반응형
Designed by Tistory.