Visualització ràpida amb matplotlib
Una bona gràfica val més que mil taules. En sèries temporals, la visualització no és decorativa: és el primer pas de l’anàlisi. Abans d’aplicar qualsevol model, necessites veure quina forma té la sèrie.
En aquest subcapítol aprendràs a crear les quatre gràfiques més útils: línia simple, àrea, múltiples sèries i destacament de pics.
Línia simple amb estil
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
dates = pd.date_range(start="2023-01-01", periods=365, freq="D")
vendes = 100 + np.cumsum(np.random.randn(365) * 2) + 10 * np.sin(2 * np.pi * np.arange(365) / 365.25 * 12)
plt.figure(figsize=(12, 5))
plt.plot(dates, vendes, color="#1a1a1a", linewidth=1.8)
plt.title("Vendes diàries durant 2023", fontsize=14, fontweight="bold")
plt.xlabel("Data")
plt.ylabel("Vendes")
plt.grid(True, alpha=0.3, linestyle="--")
plt.tight_layout()
plt.show()
Tres detalls fan la diferència: mida de figura adequada, línia fina però visible, i reixa subtil.
Gràfica d’àrea
Quan vols enfatitzar la magnitud acumulada, una gràfica d’àrea funciona millor que una línia.
plt.figure(figsize=(12, 5))
plt.fill_between(dates, vendes, color="#ffcc00", alpha=0.6, edgecolor="#1a1a1a", linewidth=1.5)
plt.title("Volum de vendes diàries", fontsize=14, fontweight="bold")
plt.xlabel("Data")
plt.ylabel("Vendes")
plt.grid(True, alpha=0.3, axis="y")
plt.tight_layout()
plt.show()
El color groc semitransparent manté l’estil del llibre i ressalta la forma de la sèrie.
Múltiples sèries en la mateixa gràfica
A sovint vols comparar dues mètriques relacionades, com vendes i visites web.
visites = 1000 + np.cumsum(np.random.randn(365) * 20) + 100 * np.sin(2 * np.pi * np.arange(365) / 365.25 * 12)
fig, ax1 = plt.subplots(figsize=(12, 5))
ax1.plot(dates, vendes, color="#1a1a1a", linewidth=2, label="Vendes")
ax1.set_ylabel("Vendes", color="#1a1a1a")
ax1.tick_params(axis="y", labelcolor="#1a1a1a")
ax2 = ax1.twinx()
ax2.plot(dates, visites, color="#ff8b94", linewidth=2, label="Visites")
ax2.set_ylabel("Visites", color="#ff8b94")
ax2.tick_params(axis="y", labelcolor="#ff8b94")
plt.title("Vendes vs visites web", fontsize=14, fontweight="bold")
fig.tight_layout()
plt.show()
L’eix Y doble és útil quan les dues sèries tenen escales molt diferents.
Destacar pics i valls
Pots ressaltar valors extrems per cridar l’atenció sobre esdeveniments especials.
# Detectar pics: valors per sobre del percentil 95
llindar_alt = np.percentile(vendes, 95)
llindar_baix = np.percentile(vendes, 5)
plt.figure(figsize=(12, 5))
plt.plot(dates, vendes, color="#1a1a1a", linewidth=1.5, label="Vendes")
plt.scatter(dates[vendes > llindar_alt], vendes[vendes > llindar_alt], color="#ff8b94", s=40, zorder=5, label="Pics")
plt.scatter(dates[vendes < llindar_baix], vendes[vendes < llindar_baix], color="#a8e6cf", s=40, zorder=5, label="Valls")
plt.axhline(llindar_alt, color="#ff8b94", linestyle="--", alpha=0.5)
plt.axhline(llindar_baix, color="#a8e6cf", linestyle="--", alpha=0.5)
plt.title("Pics i valls en les vendes", fontsize=14, fontweight="bold")
plt.legend()
plt.tight_layout()
plt.show()
Aquest tipus de gràfica t’ajuda a justificar anàlisis posteriors: ¿els pics coincideixen amb campanyes de màrqueting? ¿les valls amb festius?
Resum
La visualització és l’eina més poderosa per entendre una sèrie temporal. Amb matplotlib pots anar des d’una línia simple fins a gràfiques comparatives i destacaments d’esdeveniments. L’objectiu no és fer-la bonica, és fer que els patrons siguin impossibles d’ignorar.