Cómo calcular una media móvil en pandas

Una media móvil es simplemente la media de un cierto número de períodos anteriores en una serie de tiempo.

Para calcular la media móvil de una o más columnas en un DataFrame de pandas, podemos usar la siguiente sintaxis:

df [' nombre_columna ']. rolling ( rolling_window ). significa ()

Este tutorial proporciona varios ejemplos de cómo utilizar esta función en la práctica.

Ejemplo: calcular la media móvil en pandas

Supongamos que tenemos el siguiente DataFrame de pandas:

importar numpy como np
 importar pandas como pd

#Haga que este ejemplo sea reproducible
 np. al azar . semilla (0)

#create dataset 
period = np. arange (1, 101, 1)
leads = np. al azar . uniforme (1, 20, 100)
ventas = 60 + 2 * período + np. al azar . normal (loc = 0, escala = .5 * período, tamaño = 100)
gl = pd. DataFrame ({' período ': período, ' clientes potenciales ': clientes potenciales, ' ventas ': ventas})

#ver las primeras 10 filas
 df. cabeza (10)

   el período conduce a las ventas
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

Podemos usar la siguiente sintaxis para crear una nueva columna que contenga la media móvil de ‘ventas’ de los 5 períodos anteriores:

# encontrar la media móvil de los 5 períodos de ventas anteriores
 df [' rolling_sales_5 '] = df [' sales ']. rodante (5). significa ()

#ver las primeras 10 filas
 df. cabeza (10)

	el período conduce a las ventas 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

Podemos verificar manualmente que las ventas medias móviles que se muestran para el período 5 son la media de los 5 períodos anteriores:

Media móvil en el período 5: (61,417 + 64,900 + 66,698 + 64,927 + 73,720) / 5 = 66,33

Podemos usar una sintaxis similar para calcular la media móvil de varias columnas:

# encontrar la media móvil de los 5 periodos de clientes potenciales anteriores 
 df [' rolling_leads_5 '] = df [' leads ']. rodante (5). significa ()

# encontrar la media móvil de los 5 períodos de clientes potenciales anteriores
df [' rolling_sales_5 '] = df [' ventas ']. rodante (5). significa ()

#ver las primeras 10 filas
 df. cabeza (10)

	período genera ventas 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

También podemos crear una gráfica de línea rápida usando Matplotlib para visualizar las ventas sin procesar en comparación con la media móvil de ventas:

importar matplotlib. pyplot  como plt 
plt. plot (df ​​[' rolling_sales_5 '], label = ' Media
 móvil 
') plt. plot (df ​​[' ventas '], label = ' Datos brutos ') plt. leyenda () 
plt. ylabel (' Ventas ') 
plt. xlabel (' Período ') 
plt. mostrar ()

Trazar la media rodante en pandas en Python

La línea azul muestra la media móvil de ventas de 5 períodos y la línea naranja muestra los datos de ventas sin procesar.

Recursos adicionales

Cómo calcular la correlación de rodadura en pandas
Cómo calcular la media de columnas en pandas

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

Se utiliza un ANOVA de una vía para determinar si existe o no una diferencia estadísticamente significativa entre las medias…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!