Seaborn: Visualizacion Estadistica de Alto Nivel
Graficos Bonitos con Menos CodigoSeaborn se construye sobre Matplotlib y esta disenado especificamente para visualizacion estadistica. Con menos lineas de codigo podes crear graficos mas informativos y visualmente atractivos.
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
sns.set_theme(style='whitegrid', palette='husl')
Graficos de Distribucion
# Dataset de ejemplo
np.random.seed(42)
df = pd.DataFrame({
'salario': np.random.lognormal(10.8, 0.5, 500),
'edad': np.random.randint(22, 60, 500),
'departamento': np.random.choice(['Marketing', 'Ventas', 'IT', 'RRHH'], 500),
'evaluacion': np.random.uniform(1, 5, 500).round(1)
})
# histplot: Histograma moderno
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
sns.histplot(data=df, x='salario', bins=40, kde=True, ax=axes[0])
axes[0].set_title('Distribucion de Salarios')
# kdeplot: Solo la curva de densidad
sns.kdeplot(data=df, x='salario', hue='departamento', fill=True, alpha=0.3, ax=axes[1])
axes[1].set_title('Densidad por Departamento')
plt.tight_layout()
plt.show()
# boxplot: Resumir distribucion con outliers
fig, ax = plt.subplots(figsize=(10, 6))
sns.boxplot(data=df, x='departamento', y='salario', palette='Set2', ax=ax)
ax.set_title('Salarios por Departamento (Boxplot)')
plt.tight_layout()
plt.show()
# violinplot: Boxplot + forma de la distribucion
fig, ax = plt.subplots(figsize=(10, 6))
sns.violinplot(data=df, x='departamento', y='salario', palette='Set2', ax=ax)
ax.set_title('Salarios por Departamento (Violin)')
plt.tight_layout()
plt.show()
Graficos de Relacion
# scatterplot con regresion
fig, ax = plt.subplots(figsize=(10, 6))
sns.scatterplot(data=df, x='edad', y='salario', hue='departamento', alpha=0.6, ax=ax)
ax.set_title('Edad vs Salario por Departamento')
plt.tight_layout()
plt.show()
# regplot: Scatter + linea de regresion
fig, ax = plt.subplots(figsize=(8, 6))
sns.regplot(data=df, x='edad', y='salario', scatter_kws={'alpha': 0.3}, ax=ax)
ax.set_title('Regresion: Edad vs Salario')
plt.tight_layout()
plt.show()
# lmplot: Regresion separada por grupo
g = sns.lmplot(data=df, x='edad', y='salario', hue='departamento',
height=6, aspect=1.3, scatter_kws={'alpha': 0.4})
g.fig.suptitle('Regresion por Departamento', y=1.02)
plt.tight_layout()
plt.show()
Graficos Categoricos
# barplot: Promedio con intervalo de confianza
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
sns.barplot(data=df, x='departamento', y='salario', ax=axes[0], palette='viridis')
axes[0].set_title('Salario Promedio por Departamento')
# countplot: Conteo de categorias
sns.countplot(data=df, x='departamento', ax=axes[1], palette='viridis')
axes[1].set_title('Cantidad de Empleados por Departamento')
plt.tight_layout()
plt.show()
# stripplot + boxplot combinados
fig, ax = plt.subplots(figsize=(10, 6))
sns.boxplot(data=df, x='departamento', y='evaluacion', palette='Set2', ax=ax)
sns.stripplot(data=df, x='departamento', y='evaluacion', color='black', alpha=0.3, size=3, ax=ax)
ax.set_title('Distribucion de Evaluaciones por Departamento')
plt.tight_layout()
plt.show()
Heatmaps y Matrices
# Heatmap de correlaciones
corr = df.select_dtypes(include='number').corr()
fig, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(corr, annot=True, fmt='.2f', cmap='RdBu_r', center=0,
square=True, linewidths=0.5, ax=ax)
ax.set_title('Matriz de Correlaciones')
plt.tight_layout()
plt.show()
# Heatmap de tabla pivot
pivot = df.pivot_table(values='salario', index='departamento',
columns=pd.cut(df['edad'], bins=[20,30,40,50,60]),
aggfunc='mean')
fig, ax = plt.subplots(figsize=(10, 5))
sns.heatmap(pivot, annot=True, fmt=',.0f', cmap='YlOrRd', ax=ax)
ax.set_title('Salario Promedio por Departamento y Rango de Edad')
plt.tight_layout()
plt.show()
Pairplot: Vision Global
# pairplot muestra TODAS las combinaciones de variables
g = sns.pairplot(df, hue='departamento', height=2.5,
diag_kind='kde', plot_kws={'alpha': 0.4})
g.fig.suptitle('Pairplot: Todas las Variables', y=1.02)
plt.show()
Video Recomendado
Seaborn Tutorial Completo - Visualizacion Estadistica
Ejercicio Practico
Crea un notebook 17_seaborn.ipynb:
- Carga el dataset 'tips' de Seaborn y explora la relacion entre total de la cuenta y propina
- Crea boxplots de propina por dia de la semana
- Crea un heatmap de correlaciones
- Usa lmplot para ver la relacion facetada por genero y si es fumador
- Crea un pairplot del dataset 'penguins'
💡 Concepto Clave
Revisemos los puntos más importantes de esta lección antes de continuar.
Resumen
- Distribucion: histplot, kdeplot, boxplot, violinplot
- Relacion: scatterplot, regplot, lmplot
- Categoricos: barplot, countplot, stripplot
- Matrices: heatmap
- Exploracion: pairplot (vista global de todas las variables)
- Seaborn calcula automaticamente intervalos de confianza y regresiones
🧠 Pon a prueba tu conocimiento
¿Cuál es el aspecto más importante que aprendiste en esta lección?
- Comprendo el concepto principal y puedo explicarlo con mis palabras
- Entiendo cómo aplicarlo en mi situación específica
- Necesito repasar algunas partes antes de continuar
- Quiero ver más ejemplos prácticos del tema
✅ ¡Excelente! Continúa con la siguiente lección para profundizar más.