Moyenne mobile pour NumPy Array en Python

Manav Narula 30 janvier 2023
  1. Utilisez la méthode numpy.convolve pour calculer la moyenne mobile des tableaux NumPy
  2. Utilisez la méthode scipy.convolve pour calculer la moyenne mobile des tableaux NumPy
  3. Utilisez le module bottleneck pour calculer la moyenne mobile
  4. Utilisez le module pandas pour calculer la moyenne mobile
Moyenne mobile pour NumPy Array en Python

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.

Moyenne mobile simple

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.

Auteur: 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

Article connexe - Python NumPy