Python에서 NumPy 배열의 이동 평균
-
numpy.convolve
방법을 사용하여 NumPy 배열에 대한 이동 평균 계산 -
scipy.convolve
방법을 사용하여 NumPy 배열에 대한 이동 평균 계산 -
bottleneck
모듈을 사용하여 이동 평균 계산 -
pandas
모듈을 사용하여 이동 평균 계산
이동 평균은 특정 간격으로 데이터의 평균을 계산하여 시계열 데이터를 연구하는 데 자주 사용됩니다. 단기 변동을 완화하고 데이터의 추세를 연구하는 데 사용됩니다. 단순 이동 평균은 주가 추세를 연구하는 동안 많이 사용됩니다.
가중 이동 평균은 이전 데이터보다 최근 데이터에 더 중점을 둡니다.
아래 그래프는 이동 평균에 대한 더 나은 이해를 제공합니다.
이 튜토리얼에서는 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 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