Média móvel para NumPy Array em Python
-
Use o método
numpy.convolve
para calcular a média móvel para numpy arrays -
Use o método
scipy.convolve
para calcular a média móvel para numpy arrays -
Use o módulo
bottleneck
para calcular a média móvel -
Use o módulo
pandas
para calcular a média móvel
A média móvel é freqüentemente usada no estudo de dados de séries temporais, calculando a média dos dados em intervalos específicos. É usado para suavizar algumas flutuações de curto prazo e estudar tendências nos dados. As médias móveis simples são amplamente utilizadas no estudo das tendências dos preços das ações.
A média móvel ponderada coloca mais ênfase nos dados recentes do que nos dados mais antigos.
O gráfico abaixo dará uma melhor compreensão das Médias Móveis.
Neste tutorial, discutiremos como implementar a média móvel para numpy arrays em Python.
Use o método numpy.convolve
para calcular a média móvel para numpy arrays
A função convolve()
é usada no processamento de sinais e pode retornar a convolução linear de duas matrizes. O que está sendo feito em cada etapa é pegar o produto interno entre a matriz de uns e a janela atual e tirar sua soma.
O código a seguir implementa isso em uma função definida pelo usuário.
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))
Resultado:
[ 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
Use o método scipy.convolve
para calcular a média móvel para numpy arrays
Também podemos usar a função scipy.convolve()
da mesma maneira. Presume-se que seja um pouco mais rápido. Outra forma de calcular a média móvel usando o módulo numpy é com a função cumsum()
. Ele calcula a soma cumulativa do array. Este é um método não ponderado muito direto para calcular a média móvel.
O código a seguir retorna a média móvel usando esta função.
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))
Resultado:
[ 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
Use o módulo bottleneck
para calcular a média móvel
O módulo bottleneck
é uma compilação de métodos numpy rápidos. Este módulo possui a função move_mean()
, que pode retornar a média móvel de alguns dados.
Por exemplo,
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))
Resultado:
[ nan nan nan 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
Como o intervalo da janela de tempo é 4, há três valores nan no início porque a média móvel não pôde ser calculada para eles.
Use o módulo pandas
para calcular a média móvel
Os dados da série temporal estão principalmente associados a um DataFrame pandas
. Portanto, a biblioteca está bem equipada para realizar diferentes cálculos em tais dados.
Podemos calcular a média móvel dos dados de uma série temporal usando as funções rolling()
e mean()
conforme mostrado abaixo.
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())
Resultado:
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
Primeiro, convertemos a matriz numpy em um objeto de série temporal e, em seguida, usamos a função rolling()
para realizar o cálculo na janela rolante e calcular a média móvel usando a função mean()
.
Também aqui, como o intervalo da janela de tempo é 4, existem três valores nan no início porque a média móvel não pôde ser calculada para eles.
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