Volver al curso

Data Science con Python: Análisis de Datos para Tu Carrera

leccion
17 / 23
intermediate
8 horas
Visualizacion de Datos

Seaborn: Visualizacion Estadistica de Alto Nivel

Lectura
55 min~3 min lectura

Seaborn: Visualizacion Estadistica de Alto Nivel

Graficos Bonitos con Menos Codigo

Seaborn 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:

  1. Carga el dataset 'tips' de Seaborn y explora la relacion entre total de la cuenta y propina
  2. Crea boxplots de propina por dia de la semana
  3. Crea un heatmap de correlaciones
  4. Usa lmplot para ver la relacion facetada por genero y si es fumador
  5. 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.