Come calcolare una media mobile nei panda


Una media mobile è semplicemente la media di un numero di periodi precedenti in una serie temporale.

Per calcolare la media mobile di una o più colonne in un DataFrame panda, possiamo utilizzare la seguente sintassi:

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

Questo tutorial fornisce diversi esempi di utilizzo pratico di questa funzione.

Esempio: calcolo della media mobile nei panda

Supponiamo di avere i seguenti panda DataFrame:

 import numpy as np
import pandas as pd

#make this example reproducible
n.p. random . seeds (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

Possiamo utilizzare la seguente sintassi per creare una nuova colonna contenente la media mobile delle “vendite” dei 5 periodi precedenti:

 #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

Possiamo verificare manualmente che la media mobile delle vendite visualizzata per il periodo 5 sia la media dei 5 periodi precedenti:

Media mobile nel periodo 5: (61.417+64.900+66.698+64.927+73.720)/5 = 66.33

Possiamo usare una sintassi simile per calcolare la media mobile di più colonne:

 #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

Possiamo anche creare un rapido grafico a linee utilizzando Matplotlib per visualizzare le vendite lorde rispetto alla media mobile delle vendite:

 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 ()

Tracciare la media mobile nei panda in Python

La linea blu mostra la media mobile delle vendite su 5 periodi e la linea arancione mostra i dati grezzi delle vendite.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni nei panda:

Come calcolare la correlazione scorrevole nei panda
Come calcolare la media delle colonne in Pandas

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *