Introducción a la visualización de datos

En este notebook introducimos herramientas básicas de visualización en Python.

Trabajaremos con:

Utilizaremos datos reales de COVID-19.


Objetivos

  • Representar series temporales
  • Comparar valores entre categorías
  • Visualizar matrices de datos
  • Crear múltiples gráficos (subplots)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style("ticks")
covid =  pd.read_csv("data/covid19/casos_hosp_uci_def_sexo_edad_provres.csv")

covid = covid.rename(columns={
    "provincia_iso": "province",
    "fecha": "date",
    "num_casos": "cases"
})

covid["date"] = pd.to_datetime(covid["date"])

covid.head()

Series temporales

covid_agg = covid.groupby(["date"])["cases"].sum().reset_index()

plt.figure(figsize=(10, 5))
plt.plot(covid_agg["date"], covid_agg["cases"])
plt.title("Casos diarios en España")
plt.xlabel("Fecha")
plt.ylabel("Casos")
plt.show()

Ejercicio

Representa la serie temporal de casos para una provincia concreta.

sns.lineplot(data=covid_agg, x="date", y="cases")
plt.title("Casos diarios")
plt.show()

Comparación entre regiones

covid_prov = covid.groupby(["date", "province"])["cases"].sum().reset_index()

sns.lineplot(data=covid_prov, x="date", y="cases", hue="province", legend=False)
plt.show()

Ejercicio

Selecciona 3 provincias y compara sus curvas.

Comparación con barras

covid_total = covid.groupby("province")["cases"].sum().sort_values(ascending=False)

covid_total.head(10).plot(kind="bar")
plt.title("Top provincias por casos")
plt.show()

Múltiples gráficos

covid_spain = covid.groupby("date")[["cases"]].sum()

fig, ax = plt.subplots(1,1,figsize=(10, 5))

ax.plot(covid_spain.index, covid_spain["cases"])
ax.set_title("Casos en España")

plt.show()

Ejercicio

Crea 2 subplots: - casos
- hospitalizaciones

Matriz como heatmap

pivot = covid_prov.pivot(
    index="province",
    columns="date",
    values="cases"
)

plt.figure(figsize=(30, 18))
sns.heatmap(pivot.fillna(0), cmap="viridis")
plt.title("Casos por provincia")
plt.show()

Visualización por múltiples regiones

provinces = covid_prov["province"].unique()

fig, axes = plt.subplots(9, 6, figsize=(20, 12), sharex=True)
axes = axes.flatten()

for i, prov in enumerate(provinces[:54]):
    data = covid_prov[covid_prov["province"] == prov]
    axes[i].plot(data["date"], data["cases"])
    axes[i].set_title(prov, fontsize=8)

for j in range(i + 1, len(axes)):
    axes[j].axis("off")

plt.tight_layout()
plt.show()