Lección 13 de 29•Módulo 3: Visualización de Datos
13. Gráficos Avanzados con Seaborn
Heatmaps, pairplots, violinplots y visualizaciones estadísticas
25 minutos
Crea visualizaciones estadísticas profesionales con Seaborn, construida sobre Matplotlib pero más elegante.
Introducción a Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Configurar estilo de Seaborn
sns.set_style("whitegrid")
sns.set_palette("husl")
# Dataset de ejemplo
tips = sns.load_dataset('tips')
print(tips.head())
Gráficos de distribución
# Histograma con KDE
plt.figure(figsize=(10, 6))
sns.histplot(data=tips, x='total_bill', kde=True, bins=30)
plt.title('Distribución de Cuentas Totales')
plt.show()
# Boxplot (detectar outliers)
plt.figure(figsize=(10, 6))
sns.boxplot(data=tips, x='day', y='total_bill')
plt.title('Distribución de Cuentas por Día')
plt.show()
# Violinplot (boxplot + distribución)
plt.figure(figsize=(10, 6))
sns.violinplot(data=tips, x='day', y='total_bill', hue='sex')
plt.title('Distribución de Cuentas por Día y Género')
plt.show()
Gráficos de relaciones
# Scatterplot con regresión
plt.figure(figsize=(10, 6))
sns.regplot(data=tips, x='total_bill', y='tip')
plt.title('Relación entre Cuenta Total y Propina')
plt.show()
# Pairplot (matriz de dispersión)
sns.pairplot(tips, hue='time', diag_kind='kde')
plt.show()
# Heatmap de correlación
plt.figure(figsize=(8, 6))
correlation = tips.select_dtypes(include=[np.number]).corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm', center=0)
plt.title('Matriz de Correlación')
plt.show()
Gráficos categóricos
# Barplot con error bars
plt.figure(figsize=(10, 6))
sns.barplot(data=tips, x='day', y='total_bill', estimator=np.mean, ci=95)
plt.title('Promedio de Cuentas por Día (95% CI)')
plt.show()
# Countplot
plt.figure(figsize=(10, 6))
sns.countplot(data=tips, x='day', hue='time')
plt.title('Cantidad de Visitas por Día y Momento')
plt.show()
Proyecto práctico: Dashboard de ventas
# Generar datos de ventas
np.random.seed(42)
ventas_data = pd.DataFrame({
'fecha': pd.date_range('2024-01-01', periods=365, freq='D'),
'ventas': np.random.normal(50000, 10000, 365).clip(min=0),
'mes': pd.date_range('2024-01-01', periods=365, freq='D').month,
'trimestre': pd.date_range('2024-01-01', periods=365, freq='D').quarter,
'dia_semana': pd.date_range('2024-01-01', periods=365, freq='D').day_name()
})
# Crear dashboard con múltiples visualizaciones
fig, axes = plt.subplots(2, 2, figsize=(16, 12))
# 1. Tendencia temporal
sns.lineplot(data=ventas_data, x='fecha', y='ventas', ax=axes[0, 0])
axes[0, 0].set_title('Tendencia de Ventas 2024', fontsize=14, fontweight='bold')
# 2. Distribución por mes
sns.boxplot(data=ventas_data, x='mes', y='ventas', ax=axes[0, 1])
axes[0, 1].set_title('Distribución Mensual', fontsize=14, fontweight='bold')
# 3. Ventas por día de semana
orden_dias = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
sns.barplot(data=ventas_data, x='dia_semana', y='ventas', order=orden_dias, ax=axes[1, 0])
axes[1, 0].set_xticklabels(axes[1, 0].get_xticklabels(), rotation=45)
axes[1, 0].set_title('Promedio por Día de Semana', fontsize=14, fontweight='bold')
# 4. Distribución general
sns.histplot(data=ventas_data, x='ventas', kde=True, bins=50, ax=axes[1, 1])
axes[1, 1].set_title('Distribución de Ventas Diarias', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.savefig('dashboard_ventas.png', dpi=300, bbox_inches='tight')
plt.show()
Resumen de la lección
✅ Seaborn facilita visualizaciones estadísticas complejas ✅ histplot, boxplot, violinplot muestran distribuciones ✅ regplot, pairplot analizan relaciones entre variables ✅ heatmap visualiza matrices de correlación ✅ barplot, countplot resumen datos categóricos
🎯 Próxima lección: 14. Dashboards Interactivos con Plotly
En la siguiente lección crearás visualizaciones interactivas para web con Plotly. 🚀
¿Completaste esta lección?
Marca esta lección como completada. Tu progreso se guardará en tu navegador.