Moyenne mobile pour NumPy Array en Python
-
Utilisez la méthode
numpy.convolve
pour calculer la moyenne mobile des tableaux NumPy -
Utilisez la méthode
scipy.convolve
pour calculer la moyenne mobile des tableaux NumPy -
Utilisez le module
bottleneck
pour calculer la moyenne mobile -
Utilisez le module
pandas
pour calculer la moyenne mobile
La moyenne mobile est fréquemment utilisée pour étudier les données de séries chronologiques en calculant la moyenne des données à des intervalles spécifiques. Il est utilisé pour lisser certaines fluctuations à court terme et étudier les tendances des données. Les moyennes mobiles simples sont très utilisées lors de l’étude des tendances des cours des actions.
La moyenne mobile pondérée met davantage l’accent sur les données récentes que sur les données plus anciennes.
Le graphique ci-dessous vous permettra de mieux comprendre les moyennes mobiles.
Dans ce didacticiel, nous expliquerons comment implémenter la moyenne mobile pour les tableaux numpy en Python.
Utilisez la méthode numpy.convolve
pour calculer la moyenne mobile des tableaux NumPy
La fonction convolve()
est utilisée dans le traitement du signal et peut renvoyer la convolution linéaire de deux tableaux. Ce qui est fait à chaque étape est de prendre le produit interne entre le tableau de uns et la fenêtre courante et de prendre leur somme.
Le code suivant implémente cela dans une fonction définie par l’utilisateur.
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))
Production:
[ 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
Utilisez la méthode scipy.convolve
pour calculer la moyenne mobile des tableaux NumPy
On peut aussi utiliser la fonction scipy.convolve()
de la même manière. Il est supposé être un peu plus rapide. Une autre façon de calculer la moyenne mobile en utilisant le module numpy est la fonction cumsum()
. Il calcule la somme cumulée du tableau. Il s’agit d’une méthode non pondérée très simple pour calculer la moyenne mobile.
Le code suivant renvoie la moyenne mobile à l’aide de cette fonction.
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))
Production:
[ 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
Utilisez le module bottleneck
pour calculer la moyenne mobile
Le module bottleneck
est une compilation de méthodes numpy rapides. Ce module a la fonction move_mean()
, qui peut renvoyer la moyenne mobile de certaines données.
Par exemple,
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))
Production:
[ nan nan nan 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
Puisque l’intervalle de la fenêtre de temps est de 4, il y a trois valeurs nan au début car la moyenne mobile n’a pas pu être calculée pour elles.
Utilisez le module pandas
pour calculer la moyenne mobile
Les données de séries chronologiques sont principalement associées à un DataFrame pandas
. Par conséquent, la bibliothèque est bien équipée pour effectuer différents calculs sur de telles données.
Nous pouvons calculer la moyenne mobile d’une série de données chronologiques en utilisant les fonctions rolling()
et mean()
comme indiqué ci-dessous.
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())
Production:
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
Nous convertissons d’abord le tableau numpy en un objet de série temporelle puis utilisons la fonction rolling()
pour effectuer le calcul sur la fenêtre glissante et calculer la moyenne mobile en utilisant la fonction mean()
.
Ici aussi puisque, l’intervalle de la fenêtre de temps est de 4, il y a trois valeurs nan au départ car la moyenne mobile n’a pas pu être calculée pour elles.
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