¿Cómo hacer un gráfico de serie temporal con promedio móvil en Python?

La Gráfica de serie temporal se utiliza para observar varias tendencias en el conjunto de datos durante un período de tiempo. En tales problemas, los datos están ordenados por tiempo y pueden fluctuar por la unidad de tiempo considerada en el conjunto de datos (día, mes, segundos, horas, etc.). Al graficar los datos de la serie temporal, estas fluctuaciones pueden impedirnos obtener información clara sobre los picos y valles en el gráfico. Entonces, para obtener claramente el valor de los datos, usamos el concepto de promedio móvil para hacer el gráfico de la serie de tiempo. 

La media móvil o media móvil es la media simple de los últimos valores de ‘n’. Puede ayudarnos a encontrar tendencias que de otro modo serían difíciles de detectar. Además, se pueden utilizar para determinar tendencias a largo plazo. Simplemente puede calcular el promedio móvil sumando los valores ‘n’ anteriores y dividiéndolos por ‘n’ en sí mismo. De no ser por esto, los primeros (n-1) valores de la media móvil serían Nan.

En este artículo, aprenderemos cómo hacer un gráfico de serie temporal con un promedio móvil en Python utilizando las bibliotecas Pandas y Seaborn. A continuación se muestra la sintaxis para calcular el promedio móvil usando pandas.

Sintaxis: pandas.DataFrame.rolling(n).mean()

Usaremos el ‘Conjunto de datos de nacimientos femeninos diarios’. Este conjunto de datos describe el número de nacimientos diarios de mujeres en California en 1959. Hay 365 observaciones desde el 01-01-1959 hasta el 31-12-1959. Puede descargar el conjunto de datos desde este enlace .

Implementemos paso a paso:

Paso 1: importa las bibliotecas.

Python3

# import the libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

Paso 2: importa el conjunto de datos

Python3

# import the dataset
data = pd.read_csv( "https://raw.githubusercontent.com/jbrownlee/ \
                   Datasets/master/daily-total-female-births.csv")
  
#view the dataset
display( data.head())

Producción:

Paso 3: Trace un diagrama de serie de tiempo simple usando seaborn.lineplot()

Python3

# set figure size
plt.figure( figsize = ( 12, 5))
  
# plot a simple time series plot
# using seaborn.lineplot()
sns.lineplot( x = 'Date',
             y = 'Births',
             data = data,
             label = 'DailyBirths')
  
plt.xlabel( 'Months of the year 1959')
  
# setting customized ticklabels for x axis
pos = [ '1959-01-01', '1959-02-01', '1959-03-01', '1959-04-01', 
       '1959-05-01', '1959-06-01', '1959-07-01', '1959-08-01',
       '1959-09-01', '1959-10-01', '1959-11-01', '1959-12-01']
  
lab = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 
       'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
  
plt.xticks( pos, lab)
  
plt.ylabel('Female Births')

Producción:

Podemos notar que es muy difícil obtener conocimiento del gráfico anterior ya que los datos fluctúan mucho. Entonces, representémoslo de nuevo, pero esta vez usando el concepto de promedio móvil.

Paso 4: Calcule el promedio móvil usando pandas.DataFrame.rolling.mean().

Para el promedio móvil, tenemos que tomar un cierto tamaño de ventana. Aquí, hemos tomado el tamaño de la ventana = 7, es decir, un promedio móvil de 7 días o 1 semana.

Python3

# computing a 7 day rolling average
data[ '7day_rolling_avg' ] = data.Births.rolling( 7).mean()
  
# viewing the dataset
Display(data.head(10))

Producción:

Podemos observar que los primeros 6 valores de la columna ‘7day_rolling_avg’ son valores NaN. Esto se debe a que estos 6 valores no tienen suficientes datos para calcular el promedio móvil de 7 días. Entonces, en la gráfica también, para los primeros seis valores, no se trazarían valores.

Paso 5: Haga un gráfico de serie de tiempo utilizando el promedio móvil calculado en el paso 4

Python3

# set figure size
plt.figure( figsize = ( 12, 5))
  
# plot a simple time series plot
# using seaborn.lineplot()
sns.lineplot( x = 'Date',
             y = 'Births',
             data = data,
             label = 'DailyBirths')
  
# plot using rolling average
sns.lineplot( x = 'Date',
             y = '7day_rolling_avg',
             data = data,
             label = 'Rollingavg')
  
plt.xlabel('Months of the year 1959')
  
# setting customized ticklabels for x axis
pos = [ '1959-01-01', '1959-02-01', '1959-03-01', '1959-04-01', 
       '1959-05-01', '1959-06-01', '1959-07-01', '1959-08-01',
       '1959-09-01', '1959-10-01', '1959-11-01', '1959-12-01']
  
lab = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 
       'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
  
plt.xticks( pos, lab)
  
plt.ylabel('Female Births')

Producción:

Podemos ver claramente a través del gráfico anterior que el promedio móvil ha suavizado el número de nacimientos de mujeres, y podemos notar el pico de manera más evidente.

Publicación traducida automáticamente

Artículo escrito por riyaaggarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *