Gráficas de series de tiempo con Python, Gráficas de series de tiempo con Python

Gráficas de series de tiempo con Python

A la hora de estar trabajando con una gran cantidad de datos es importante conocer las diferentes maneras de poder visualizarlos ya que hace que el proceso de comprender estos sea mucho más rápido y eficaz. Es por ello que el tema de hoy trata de las gráficas de series de tiempo con Python.

Con este tutorial podrás aprender acerca de esta forma de visualizar datos basados en el tiempo y así poder crear tu primera gráfica de series de tiempo siguiendo las pasos.

¿Para qué sirven?

Las gráficas de series de tiempo se usan para encontrar patrones en sus datos que dependan del tiempo, como las tendencias. Una gráfica de serie de tiempo ayuda a elegir un análisis para modelar estos datos.

Aprende a crear gráficas de series de tiempo con Python

Paso 0: Descarga el dataset desde aquí.

Para empezar con el tutorial descarga el dataset, en el cuál podrás encontrar datos de las diferentes ventas que se hicieron a lo largo de los años; ¡este es un gran ejemplo de una variable que cambia en un período de tiempo!, porque las ventas crecen o disminuyen dependiendo del mes.

Paso 1: Importamos las bibliotecas que se necesitarán.


from datetime import datetime
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from statsmodels.tsa.seasonal import seasonal_decompose

matplotlib.rcParams['figure.figsize'] = (15, 5)
¡Te explico por qué son importantes estas librerías en este ejercicio!:
 
  • datetime – librería de con funciones para manipular objetos de tiempo.
  • pandas – librería para la manipulación y limpieza de datos.
  • matplotlib – librería especializada en visualización de datos.
  • statsmodel – librería que contiene funciones y modelos estadísticos para el análisis de datos.

Paso 2: Leemos el dataset que queremos analizar

¡Sigue la siguiente instrucción para poder leer el dataset que necesitas!


df = pd.read_csv('ventas_2001_2003.csv')
print(df.head(10))

     Month  Sales
0  2001-01  266.0
1  2001-02  145.9
2  2001-03  183.1
3  2001-04  119.3
4  2001-05  180.3
5  2001-06  168.5
6  2001-07  231.8
7  2001-08  224.5
8  2001-09  192.8
9  2001-10  122.9

Paso 3: Empezamos con la limpieza de datos.

Empezamos con la limpieza de datos verificando siempre si existen valores vacíos:

print("# de valores vacíos:")
print(df.isnull().sum())

# de valores vacíos:
Month    0
Sales    0
dtype: int64
¡Muy bien! El dataset no contiene ningún valor vacío. Es momento de identificar la forma en que Python reconoce los datos de las columnas, siguiendo la siguiente instrucción lo averiguaremos:

print(df.dtypes)

Month     object
Sales    float64
dtype: object
Python reconoce la columna ‘Month’ como object, pero para poder hacer la gráfica de series de tiempo con Python lo que necesitamos es que sea reconocido como tipo fecha y no como object, así que tenemos que convertirlo, sigue los siguientes pasos:

df['Month'] = pd.to_datetime(df['Month'])
print(df.head(10))
print(df.dtypes)

       Month  Sales
0 2001-01-01  266.0
1 2001-02-01  145.9
2 2001-03-01  183.1
3 2001-04-01  119.3
4 2001-05-01  180.3
5 2001-06-01  168.5
6 2001-07-01  231.8
7 2001-08-01  224.5
8 2001-09-01  192.8
9 2001-10-01  122.9
Month    datetime64[ns]
Sales           float64
dtype: object
¿Te diste cuenta que Python reconoció la falta del día de cada mes así que lo auto-rellenó colocando el primer día de cada uno? 

Es momento de establecer la columna “Month” como el índice de nuestro dataset, así Python sabrá que este conjunto de datos es una serie de tiempo; ¡mira cómo se hace!:

df.set_index('Month', inplace=True)
print(df.head(10))

            Sales
Month            
2001-01-01  266.0
2001-02-01  145.9
2001-03-01  183.1
2001-04-01  119.3
2001-05-01  180.3
2001-06-01  168.5
2001-07-01  231.8
2001-08-01  224.5
2001-09-01  192.8
2001-10-01  122.9

Paso 4: Generamos nuestra Gráfica de serie de tiempo y analizamos.

Ahora que se reconoce como una serie de tiempo ¡es momento de visualizar nuestros datos! Simplemente ejecutamos el método plot y podremos ver nuestra primera visualización:

df.plot(grid=True, figsize=(15,5))
Gráficas de series de tiempo con Python, Gráficas de series de tiempo con Python
Podemos notar las ventas del producto han tenido un incremento en los últimos 3 años pero ¿qué tal si queremos filtrar ciertos datos? Podemos hacerlo a nuestro gusto, observa cómo hacerlo:

from datetime import datetime
start_date = datetime(2003, 1, 1)
end_date = datetime(2003, 12, 31)
df[(df.index >= start_date) & (df.index 
Gráficas de series de tiempo con Python, Gráficas de series de tiempo con Python
La librería statsmodels tiene varias funciones pero existe una excelente para descomponer y analizar series de tiempo, y así obtener más información como la tendencia de la serie, o la temporalidad, observa cómo se usa:

decompose = seasonal_decompose(df)
figure = decompose.plot()
Gráficas de series de tiempo con Python, Gráficas de series de tiempo con Python
Podemos sobreponer las gráficas que necesitemos, en este caso usaremos la tendencia de las ventas, pero tu puedes escoger otra gráfica qué sobreponer; aquí te explico cómo:

fig, ax = plt.subplots()
ax.grid(True)

plt.plot(df.index, df['Sales'], c='blue')
plt.plot(decompose.trend.index, decompose.trend, c='red')
Gráficas de series de tiempo con Python, Gráficas de series de tiempo con Python
Pero, ¿Qué tal si solo queremos la gráfica de un perído de tiempo en específico? Podemos hacerlo con axvspan, por ejemplo, nos enfocaremos en el mes con mayores ventas en cada año…

fig, ax = plt.subplots()
ax.grid(True)

# Muestra el mes con más ventas de cada año
for year in df.index.year.unique():
  month = df[df.index.year == year].idxmax().loc['Sales'].month
  print("Mejor mes de {} es {}".format(
    year,
    datetime.strptime(str(month), "%m").strftime("%B"))
  ))
  ax.axvspan(
    datetime(year, month - 1, 1),
    datetime(year, month, 1),
    facecolor='green',
    edgecolor='none',
    alpha=.5
  )

plt.title("Ventas del 2001 al 2003")
plt.plot(df.index, df['Sales'], c='blue')
plt.plot(decompose.trend.index, decompose.trend, c='red')
plt.show()
Gráficas de series de tiempo con Python, Gráficas de series de tiempo con Python

En conclusión…

Espero que esta información te haya sido de utilidad y hayas obtenido las herramientas mínimas necesarias para introducirte en la visualización con gráficas de series de tiempo con Python. ¡Ahora podrás iniciar y desarrollar tus proyectos!
 
¿Estas interesado en adentrarte a la visualización de datos? Te recomiendo que investigues la librería llamada seaborn, está escrita sobre matplotlib y te ayuda a generar gráficas que luzcan mucho mejor.
 
Te invito a conocer mis otras publicaciones en mi blog, estoy seguro que encontrarás algo que te ayudará en tus proyectos.

One thought to “Gráficas de series de tiempo con Python”

Deja un comentario

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