Saltar al contingut principal
Capítol 1.1 bàsic pandas matplotlib csv

La teva primera sèrie temporal en Python

4 min lectura
Instal·la pandas i matplotlib, carrega un fitxer CSV amb dades reals i dibuixa la teva primera gràfica de sèrie temporal.

El capítol anterior t’ha explicat què és una sèrie temporal. Ara tocaràs codi de debò. No necessites un dataset enorme ni una base de dades: amb un fitxer CSV i dues llibreries tens suficient per començar a veure patrons en el temps.

Aquest subcapítol és pràctic. En finalitzar hauràs instal·lat l’entorn, carregat dades reals i generat la teva primera visualització.


Instal·la l’imprescindible

Necessites tres eines: pandas per manipular dades, matplotlib per graficar i seaborn si vols estils més politits (opcional però recomanable).

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

Si uses Jupyter Notebook o Google Colab, pots saltar-te la creació de l’entorn virtual. A Colab aquestes llibreries ja venen instal·lades.


Carrega un CSV amb data

Imagina que tens un fitxer vendes.csv amb dues columnes: data i vendes.

data,vendes
2024-01-01,120
2024-01-02,135
2024-01-03,118
2024-01-04,142
2024-01-05,156

L’objectiu és convertir la columna data en l’índex temporal del DataFrame.

import pandas as pd

# Carreguem el CSV i parsegem la data
df = pd.read_csv('vendes.csv', parse_dates=['data'], index_col='data')

# Ordenem per data (per si el CSV no ho està)
df = df.sort_index()

print(df.head())

Si tot va bé, veuràs alguna cosa així:

            vendes
data
2024-01-01     120
2024-01-02     135
2024-01-03     118
2024-01-04     142
2024-01-05     156

Fixa’t que data ara és l’índex del DataFrame, no una columna més. Aquest és el pas més important.


Dibuixa la teva primera sèrie

Amb matplotlib pots graficar la sèrie en tres línies.

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 5))
plt.plot(df.index, df['vendes'], color='#1a1a1a', linewidth=2)
plt.title('Vendes diàries')
plt.xlabel('Data')
plt.ylabel('Vendes')
plt.grid(True, alpha=0.3)
plt.show()

No busquis perfecció visual en aquest punt. L’important és veure la línia en el temps: ¿puja? ¿baixa? ¿té pics regulars?


Si no tens un CSV a mà

Pots generar dades sintètiques en el mateix script per practicar:

import numpy as np

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

df = pd.DataFrame({'vendes': vendes}, index=dates)

Això crea 60 dies de dades amb una tendència lleu i soroll aleatori. És suficient per practicar tot el que veuràs en els propers capítols.


Exemple amb dades públiques: passatgers aeris

Si no tens un CSV propi, pots practicar amb el clàssic dataset de passatgers aeris de Seaborn. És una sèrie mensual amb tendència i estacionalitat clares.

import seaborn as sns

# Carreguem el dataset de passatgers aeris
flights = sns.load_dataset("flights")
flights['month'] = pd.to_datetime(flights['month'], format='%b')
flights['data'] = flights['year'].astype(str) + '-' + flights['month'].dt.month.astype(str) + '-01'
flights['data'] = pd.to_datetime(flights['data'])
flights = flights.set_index('data').sort_index()

plt.figure(figsize=(10, 5))
plt.plot(flights['passengers'], color='#1a1a1a', linewidth=2)
plt.title('Passatgers aeris mensuals (1949-1960)')
plt.xlabel('Data')
plt.ylabel('Passatgers')
plt.grid(True, alpha=0.3)
plt.show()

Aquest dataset és perfecte per practicar perquè té tot el que veuràs en els propers capítols: tendència alcista, estacionalitat anual i variància creixent.


Agregacions ràpides per mes i any

Un cop tens un índex temporal, resumir per períodes és trivial:

# Mitjana anual de passatgers
mitjana_anual = flights['passengers'].resample('YE').mean()
print(mitjana_anual.head())

# Mes amb més passatgers de cada any
maxim_anual = flights['passengers'].resample('YE').max()
print(maxim_anual.head())

# Comparar gener de cada any
geners = flights[flights.index.month == 1]['passengers']
print(geners.head())

Aquestes operacions són útils per validar intuïcions: ¿creix cada any? ¿gener sempre és un mes baix? ¿Quin va ser el millor any?


Guarda la teva primera figura

Per no haver de regenerar la gràfica cada vegada, pots guardar-la directament:

plt.figure(figsize=(10, 5))
plt.plot(flights['passengers'], color='#1a1a1a', linewidth=2)
plt.title('Passatgers aeris mensuals')
plt.xlabel('Data')
plt.ylabel('Passatgers')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('passatgers_aeris.png', dpi=150)
plt.show()

Tip: usa tight_layout() abans de guardar per evitar que els títols o etiquetes es tallin.


Resum

En aquest subcapítol has instal·lat l’entorn bàsic, carregat un CSV amb una columna de data i dibuixat la teva primera sèrie temporal. El següent pas és aprendre a detectar si aquesta sèrie és estacionària, perquè d’això depèn quin model li pots aplicar.