45 · Seaborn: visualización estadística sobre matplotlib
Seaborn se asienta sobre matplotlib y aporta una API nativa de DataFrame, valores estadísticos predeterminados sensatos y tipos de gráficos adaptados al análisis de datos — scatter con coloración por clase, box plots por categoría y el mapa de calor de correlación con el que comienza todo notebook de EDA.
La decisión de diseño clave de Seaborn es la **entrada tabular**: pasas un DataFrame más strings de nombres de columna (`x='feat1'`, `y='feat2'`, `hue='label'`) y seaborn maneja la configuración de ejes, paletas de colores, agregaciones estadísticas y generación de leyendas. Con matplotlib construyes cada uno de estos tú mismo; seaborn es el atajo que te lleva a una figura informativa en dos líneas en lugar de veinte.
Sin esto:
Sin seaborn, cada scatter de EDA con coloración por clase requiere ~15 líneas de matplotlib: agrupar por clase, iterar sobre grupos, hacer scatter de cada grupo con un color diferente, construir una leyenda. Seaborn lo hace en una línea. El mapa de calor de correlaciones de features — un primer paso estándar en cualquier EDA — es igualmente verboso de construir desde cero.
Seaborn es una biblioteca de visualización estadística construida sobre matplotlib. Agrega dos cosas que matplotlib no tiene de serie:
- Entrada tabular (DataFrame) — en lugar de pasar arrays crudos, pasas un DataFrame y los nombres de las columnas que quieres en cada eje. Seaborn maneja la división, agregación y coloración.
- Valores predeterminados estadísticos — histogramas con curvas KDE, scatter plots con intervalos de confianza en líneas de regresión, box plots con detección de outliers — todo automático.
El alias de importación universal es import seaborn as sns (nombrado por el personaje de TV Sam Seaborn).
Tipos de gráficos clave que usarás en cada EDA:
| Función | Caso de uso |
|---|---|
| sns.histplot(data, x=col) | Distribución de una variable numérica |
| sns.scatterplot(data, x, y, hue=clase) | Dos variables coloreadas por clase — muestra separabilidad |
| sns.boxplot(data, x=categoría, y=valor) | Distribución de valores por categoría — detección de outliers |
| sns.heatmap(corr_matrix, annot=True) | Matriz de correlación de features — verificación de multicolinealidad |
| sns.pairplot(df) | Todos los pares de columnas numéricas — costoso, solo datasets pequeños |
Seaborn devuelve un Axes de matplotlib (o Figure para gráficos de cuadrícula como pairplot), así que puedes mezclar llamadas de seaborn y matplotlib libremente sobre los mismos ejes.
Python (in browser)
`sns.scatterplot(data=df, x='feat1', y='feat2', hue='label')` reemplaza ~15 líneas de código matplotlib de loop-scatter. El parámetro `hue=` mapea una columna categórica a colores y genera automáticamente la leyenda. `palette=` te permite controlar los colores exactos por categoría.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`df.corr(numeric_only=True)` devuelve una matriz de correlación cuadrada. `sns.heatmap(corr, annot=True, cmap='coolwarm')` colorea las celdas de azul (correlación negativa) a blanco (cero) a rojo (positiva). `vmin=-1, vmax=1` ancla el colormap para que el color de correlación cero siempre sea blanco — sin esto, la escala flota con el rango de los datos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
`sns.pairplot` devuelve un objeto `PairGrid` cuyo atributo `.figure` es la `Figure` de matplotlib subyacente. El costo es cuadrático en el número de columnas — úsalo solo en DataFrames con ≤10 columnas numéricas.
En `sns.scatterplot(data=df, x='feat1', y='feat2', hue='label')`, ¿qué hace el argumento `hue='label'`?
- La API tabular de Seaborn (`data=df, x='col', y='col', hue='class'`) colapsa ~15 líneas de código matplotlib de groupby-loop en una línea.
- `sns.heatmap(df.corr(numeric_only=True), annot=True, cmap='coolwarm')` es el primer vistazo estándar a la multicolinealidad de features.
- Las figuras de Seaborn son matplotlib por dentro — puedes llamar `ax.set_title(...)` y `fig.savefig(...)` sobre los objetos que devuelve seaborn.
- Nunca ejecutes `sns.pairplot` en un DataFrame con más de ~8 columnas numéricas — genera N² subplots y colgará el kernel.
La pipeline de EDA para cada proyecto de ML corre en este orden: `sns.scatterplot` con `hue=clase` para ver separabilidad; `sns.heatmap(corr)` para detectar multicolinealidad (features correlacionados → eliminar uno); `sns.boxplot` por clase para encontrar outliers y diferencias de distribución. Estos tres gráficos responden las tres preguntas que debes responder antes de ajustar cualquier modelo.
Si lo quitas: Sin seaborn (o equivalente), la visualización de EDA tarda 10× más en escribir. Más importante, probablemente lo omitirías e irías directamente al ajuste del modelo — así es como terminas depurando un modelo que falla silenciosamente porque dos de tus features tienen correlación 0.98 y actúan como duplicados.