Saltar al contenido principal
Capítulo 1.1 básico pandas matplotlib csv

Tu primera serie temporal en Python

4 min lectura
Instala pandas y matplotlib, carga un archivo CSV con datos reales y dibuja tu primera gráfica de serie temporal.

El capítulo anterior te explicó qué es una serie temporal. Ahora vas a tocar código de verdad. No necesitas un dataset enorme ni una base de datos: con un archivo CSV y dos librerías tienes suficiente para empezar a ver patrones en el tiempo.

Este subcapítulo es práctico. Al finalizar habrás instalado el entorno, cargado datos reales y generado tu primera visualización.


Instala lo imprescindible

Necesitas tres herramientas: pandas para manipular datos, matplotlib para graficar y seaborn si quieres estilos más pulidos (opcional pero recomendable).

python -m venv venv
source venv/bin/activate  # en Windows: venv\Scripts\activate
pip install pandas matplotlib seaborn

Si usas Jupyter Notebook o Google Colab, puedes saltarte la creación del entorno virtual. En Colab estas librerías ya vienen instaladas.


Carga un CSV con fecha

Imagina que tienes un archivo ventas.csv con dos columnas: fecha y ventas.

fecha,ventas
2024-01-01,120
2024-01-02,135
2024-01-03,118
2024-01-04,142
2024-01-05,156

El objetivo es convertir la columna fecha en el índice temporal del DataFrame.

import pandas as pd

# Cargamos el CSV y parseamos la fecha
df = pd.read_csv('ventas.csv', parse_dates=['fecha'], index_col='fecha')

# Ordenamos por fecha (por si el CSV no lo está)
df = df.sort_index()

print(df.head())

Si todo va bien, verás algo como esto:

            ventas
fecha
2024-01-01     120
2024-01-02     135
2024-01-03     118
2024-01-04     142
2024-01-05     156

Fíjate en que fecha ahora es el índice del DataFrame, no una columna más. Ese es el paso más importante.


Dibuja tu primera serie

Con matplotlib puedes graficar la serie en tres líneas.

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 5))
plt.plot(df.index, df['ventas'], color='#1a1a1a', linewidth=2)
plt.title('Ventas diarias')
plt.xlabel('Fecha')
plt.ylabel('Ventas')
plt.grid(True, alpha=0.3)
plt.show()

No busques perfección visual en este punto. Lo importante es ver la línea en el tiempo: ¿sube? ¿baja? ¿tiene picos regulares?


Si no tienes un CSV a mano

Puedes generar datos sintéticos en el mismo script para practicar:

import numpy as np

fechas = pd.date_range(start='2024-01-01', periods=60, freq='D')
ventas = 100 + np.cumsum(np.random.randn(60) * 5)

df = pd.DataFrame({'ventas': ventas}, index=fechas)

Esto crea 60 días de datos con una tendencia leve y ruido aleatorio. Es suficiente para practicar todo lo que verás en los próximos capítulos.


Ejemplo con datos públicos: pasajeros aéreos

Si no tienes un CSV propio, puedes practicar con el clásico dataset de pasajeros aéreos de Seaborn. Es una serie mensual con tendencia y estacionalidad claras.

import seaborn as sns

# Cargamos el dataset de pasajeros aéreos
flights = sns.load_dataset("flights")
flights['month'] = pd.to_datetime(flights['month'], format='%b')
flights['fecha'] = flights['year'].astype(str) + '-' + flights['month'].dt.month.astype(str) + '-01'
flights['fecha'] = pd.to_datetime(flights['fecha'])
flights = flights.set_index('fecha').sort_index()

plt.figure(figsize=(10, 5))
plt.plot(flights['passengers'], color='#1a1a1a', linewidth=2)
plt.title('Pasajeros aéreos mensuales (1949-1960)')
plt.xlabel('Fecha')
plt.ylabel('Pasajeros')
plt.grid(True, alpha=0.3)
plt.show()

Este dataset es perfecto para practicar porque tiene todo lo que verás en los próximos capítulos: tendencia alcista, estacionalidad anual y varianza creciente.


Agregaciones rápidas por mes y año

Una vez que tienes un índice temporal, resumir por periodos es trivial:

# Media anual de pasajeros
media_anual = flights['passengers'].resample('YE').mean()
print(media_anual.head())

# Mes con más pasajeros de cada año
maximo_anual = flights['passengers'].resample('YE').max()
print(maximo_anual.head())

# Comparar enero de cada año
eneros = flights[flights.index.month == 1]['passengers']
print(eneros.head())

Estas operaciones son útiles para validar intuiciones: ¿crece cada año? ¿enero siempre es un mes bajo? ¿cuál fue el mejor año?


Guarda tu primera figura

Para no tener que regenerar la gráfica cada vez, puedes guardarla directamente:

plt.figure(figsize=(10, 5))
plt.plot(flights['passengers'], color='#1a1a1a', linewidth=2)
plt.title('Pasajeros aéreos mensuales')
plt.xlabel('Fecha')
plt.ylabel('Pasajeros')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('pasajeros_aereos.png', dpi=150)
plt.show()

Tip: usa tight_layout() antes de guardar para evitar que los títulos o etiquetas se corten.


Resumen

En este subcapítulo has instalado el entorno básico, cargado un CSV con una columna de fecha y dibujado tu primera serie temporal. El siguiente paso es aprender a detectar si esa serie es estacionaria, porque de eso depende qué modelo puedes aplicarle.