Comment calculer une moyenne mobile chez les pandas



Une moyenne mobile est simplement la moyenne d’un certain nombre de périodes précédentes dans une série chronologique.

Pour calculer la moyenne glissante d’une ou plusieurs colonnes dans un DataFrame pandas, nous pouvons utiliser la syntaxe suivante :

df['column_name'].rolling(rolling_window).mean()

Ce tutoriel fournit plusieurs exemples d’utilisation pratique de cette fonction.

Exemple : calculer la moyenne mobile chez les pandas

Supposons que nous ayons le DataFrame pandas suivant :

import numpy as np
import pandas as pd

#make this example reproducible
np.random.seed(0)

#create dataset
period = np.arange(1, 101, 1)
leads = np.random.uniform(1, 20, 100)
sales = 60 + 2*period + np.random.normal(loc=0, scale=.5*period, size=100)
df = pd.DataFrame({'period': period, 'leads': leads, 'sales': sales})

#view first 10 rows
df.head(10)

   period	    leads	    sales
0	1	11.427457	61.417425
1	2	14.588598	64.900826
2	3	12.452504	66.698494
3	4	11.352780	64.927513
4	5	9.049441	73.720630
5	6	13.271988	77.687668
6	7	9.314157	78.125728
7	8	17.943687	75.280301
8	9	19.309592	73.181613
9	10	8.285389	85.272259

Nous pouvons utiliser la syntaxe suivante pour créer une nouvelle colonne contenant la moyenne mobile des « ventes » pour les 5 périodes précédentes :

#find rolling mean of previous 5 sales periods
df['rolling_sales_5'] = df['sales'].rolling(5).mean()

#view first 10 rows
df.head(10)

	period	    leads	    sales	rolling_sales_5
0	1	11.427457	61.417425	NaN
1	2	14.588598	64.900826	NaN
2	3	12.452504	66.698494	NaN
3	4	11.352780	64.927513	NaN
4	5	9.049441	73.720630	66.332978
5	6	13.271988	77.687668	69.587026
6	7	9.314157	78.125728	72.232007
7	8	17.943687	75.280301	73.948368
8	9	19.309592	73.181613	75.599188
9	10	8.285389	85.272259	77.909514

Nous pouvons vérifier manuellement que la moyenne glissante des ventes affichée pour la période 5 est la moyenne des 5 périodes précédentes :

Moyenne mobile à la période 5 : (61,417+64,900+66,698+64,927+73,720)/5 = 66,33

Nous pouvons utiliser une syntaxe similaire pour calculer la moyenne mobile de plusieurs colonnes :

#find rolling mean of previous 5 leads periods 
df['rolling_leads_5'] = df['leads'].rolling(5).mean() 

#find rolling mean of previous 5 leads periods
df['rolling_sales_5'] = df['sales'].rolling(5).mean()

#view first 10 rows
df.head(10)

	period	    leads	    sales	rolling_sales_5	 rolling_leads_5
0	1	11.427457	61.417425	NaN	NaN
1	2	14.588598	64.900826	NaN	NaN
2	3	12.452504	66.698494	NaN	NaN
3	4	11.352780	64.927513	NaN	NaN
4	5	9.049441	73.720630	66.332978	 11.774156
5	6	13.271988	77.687668	69.587026	 12.143062
6	7	9.314157	78.125728	72.232007	 11.088174
7	8	17.943687	75.280301	73.948368	 12.186411
8	9	19.309592	73.181613	75.599188	 13.777773
9	10	8.285389	85.272259	77.909514	 13.624963

Nous pouvons également créer un tracé linéaire rapide à l’aide de Matplotlib pour visualiser les ventes brutes par rapport à la moyenne mobile des ventes :

import matplotlib.pyplot as plt
plt.plot(df['rolling_sales_5'], label='Rolling Mean')
plt.plot(df['sales'], label='Raw Data')
plt.legend()
plt.ylabel('Sales')
plt.xlabel('Period')
plt.show()

Tracer la moyenne mobile chez les pandas en Python

La ligne bleue affiche la moyenne mobile des ventes sur 5 périodes et la ligne orange affiche les données brutes des ventes.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :

Comment calculer la corrélation glissante chez les pandas
Comment calculer la moyenne des colonnes dans Pandas

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *