Python에서 NumPy 배열의 이동 평균

Manav Narula 2023년1월30일
  1. numpy.convolve방법을 사용하여 NumPy 배열에 대한 이동 평균 계산
  2. scipy.convolve방법을 사용하여 NumPy 배열에 대한 이동 평균 계산
  3. bottleneck모듈을 사용하여 이동 평균 계산
  4. pandas모듈을 사용하여 이동 평균 계산
Python에서 NumPy 배열의 이동 평균

이동 평균은 특정 간격으로 데이터의 평균을 계산하여 시계열 데이터를 연구하는 데 자주 사용됩니다. 단기 변동을 완화하고 데이터의 추세를 연구하는 데 사용됩니다. 단순 이동 평균은 주가 추세를 연구하는 동안 많이 사용됩니다.

가중 이동 평균은 이전 데이터보다 최근 데이터에 더 중점을 둡니다.

아래 그래프는 이동 평균에 대한 더 나은 이해를 제공합니다.

단순 이동 평균

이 튜토리얼에서는 Python에서 numpy 배열의 이동 평균을 구현하는 방법에 대해 설명합니다.

numpy.convolve방법을 사용하여 NumPy 배열에 대한 이동 평균 계산

convolve()함수는 신호 처리에 사용되며 두 배열의 선형 컨볼 루션을 반환 할 수 있습니다. 각 단계에서 수행되는 작업은 배열과 현재 창 사이의 내적을 취하고 그 합계를 취하는 것입니다.

다음 코드는 사용자 정의 함수에서이를 구현합니다.

import numpy as np


def moving_average(x, w):
    return np.convolve(x, np.ones(w), "valid") / w


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(moving_average(data, 4))

출력:

[ 8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

scipy.convolve방법을 사용하여 NumPy 배열에 대한 이동 평균 계산

scipy.convolve()함수도 같은 방식으로 사용할 수 있습니다. 조금 더 빠르다고 가정합니다. numpy 모듈을 사용하여 이동 평균을 계산하는 또 다른 방법은cumsum()함수를 사용하는 것입니다. 배열의 누적 합계를 계산합니다. 이것은 이동 평균을 계산하는 매우 간단한 비가 중 방법입니다.

다음 코드는이 함수를 사용하여 이동 평균을 반환합니다.

def moving_average(a, n):
    ret = np.cumsum(a, dtype=float)
    ret[n:] = ret[n:] - ret[:-n]
    return ret[n - 1 :] / n


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(moving_average(data, 4))

출력:

[ 8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

bottleneck모듈을 사용하여 이동 평균 계산

bottleneck모듈은 빠른 numpy 메소드의 컴파일입니다. 이 모듈에는 일부 데이터의 이동 평균을 반환 할 수있는move_mean()함수가 있습니다.

예를 들면

import bottleneck as bn
import numpy as np


def rollavg_bottlneck(a, n):
    return bn.move_mean(a, window=n, min_count=None)


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(rollavg_bottlneck(data, 4))

출력:

[  nan   nan   nan  8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

시간 창 간격이 4이므로 이동 평균을 계산할 수 없기 때문에 처음에 세 개의 nan 값이 있습니다.

pandas모듈을 사용하여 이동 평균 계산

시계열 데이터는 대부분pandas DataFrame과 연관됩니다. 따라서 라이브러리는 이러한 데이터에 대해 서로 다른 계산을 수행 할 수 있도록 잘 갖추어져 있습니다.

아래와 같이rolling()mean()함수를 사용하여 시계열 데이터의 이동 평균을 계산할 수 있습니다.

import pandas as pd
import numpy as np

data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

d = pd.Series(data)

print(d.rolling(4).mean())

출력:

0       NaN
1       NaN
2       NaN
3      8.00
4      9.25
5     13.50
6     18.00
7     18.50
8     18.50
9     17.00
10    15.00
11    14.00
dtype: float64

먼저 numpy 배열을 시계열 객체로 변환 한 다음rolling()함수를 사용하여 롤링 창에서 계산을 수행하고mean()함수를 사용하여 이동 평균을 계산합니다.

여기서도 시간 창 간격이 4이기 때문에 이동 평균을 계산할 수 없기 때문에 처음에 세 개의 nan 값이 있습니다.

작가: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

관련 문장 - Python NumPy