Seaborn: Evaluación
Aprende la API de Seaborn al completo para aprobar cualquier certificación en ciencia de datos con Python.
Aprende Seaborn GRATIS y certifícateSeaborn es una biblioteca de visualización estadística en Python que proporciona una interfaz de alto nivel para crear gráficos informativos y atractivos. Dominar Seaborn es esencial para cualquier certificación en ciencia de datos, ya que permite comunicar hallazgos de manera efectiva y explorar datos de forma visual. Esta guía abarca todos los conceptos fundamentales que necesitas conocer para aprobar con buena nota un examen sobre Seaborn.
Fundamentos de Seaborn
Seaborn está construido sobre Matplotlib y está diseñado para integrarse perfectamente con las estructuras de datos de Pandas. Para utilizar Seaborn, primero debes importar las bibliotecas necesarias:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Configuración básica
sns.set_theme()
Los niveles de abstracción en Seaborn son:
- Funciones de figura: Funciones que crean una figura completa (como
relplot()
,displot()
,catplot()
). - Funciones de ejes: Funciones que operan en un solo conjunto de ejes (como
scatterplot()
,lineplot()
,boxplot()
). - Objetos de cuadrícula: Clases para crear múltiples gráficos (
FacetGrid
,PairGrid
,JointGrid
).
Una de las principales ventajas de Seaborn es su capacidad para manejar automáticamente variables categóricas, mapearlas a diferentes características visuales y realizar cálculos estadísticos de forma transparente.
Estilos y personalización básica
Seaborn incluye varios estilos predefinidos que se pueden aplicar a toda la visualización:
# Estilos disponibles
estilos = ["whitegrid", "darkgrid", "white", "dark", "ticks"]
# Aplicar un estilo
sns.set_style("whitegrid")
Los contextos ajustan el tamaño de los elementos según el medio de salida:
# Contextos disponibles
contextos = ["paper", "notebook", "talk", "poster"]
# Aplicar un contexto
sns.set_context("notebook", font_scale=1.2)
Las paletas de colores pueden ser:
- Secuenciales: Para datos que varían de bajo a alto (
"Blues"
,"Greens"
). - Divergentes: Para datos que se desvían de un valor central (
"RdBu"
,"coolwarm"
). - Cualitativas: Para categorías discretas (
"Set1"
,"Paired"
).
# Paletas predefinidas
sns.set_palette("deep")
# Paleta personalizada
custom_palette = sns.color_palette("husl", 8)
sns.set_palette(custom_palette)
Tipos de gráficos en Seaborn
Gráficos relacionales
Los gráficos relacionales muestran la relación entre dos variables numéricas:
# Cargar datos de ejemplo
tips = sns.load_dataset("tips")
# Gráfico de dispersión
sns.relplot(
data=tips,
x="total_bill",
y="tip",
hue="time",
size="size",
style="smoker",
kind="scatter"
)
plt.title("Relación entre importe total y propina")
plt.show()
# Gráfico de líneas
flights = sns.load_dataset("flights")
flights_pivot = flights.pivot("month", "year", "passengers")
sns.relplot(
data=flights.pivot_table(index="year", columns="month", values="passengers"),
kind="line",
markers=True
)
plt.title("Pasajeros por año y mes")
plt.show()
Gráficos de distribución
Los gráficos de distribución visualizan la distribución de una o más variables:
# Histograma
sns.displot(
data=tips,
x="total_bill",
hue="time",
kind="hist",
kde=True,
bins=20
)
plt.title("Distribución del importe total")
plt.show()
# Gráfico de densidad (KDE)
sns.displot(
data=tips,
x="total_bill",
hue="time",
kind="kde",
fill=True
)
plt.title("Estimación de densidad del importe total")
plt.show()
# Gráfico de distribución acumulada
sns.displot(
data=tips,
x="total_bill",
hue="time",
kind="ecdf"
)
plt.title("Distribución acumulada del importe total")
plt.show()
Gráficos categóricos
Los gráficos categóricos muestran la distribución de una variable numérica en función de variables categóricas:
# Gráfico de cajas
sns.catplot(
data=tips,
x="day",
y="total_bill",
hue="time",
kind="box"
)
plt.title("Distribución del importe por día y horario")
plt.show()
# Gráfico de violín
sns.catplot(
data=tips,
x="day",
y="total_bill",
hue="time",
kind="violin",
split=True,
inner="stick"
)
plt.title("Distribución del importe por día y horario")
plt.show()
# Gráfico de barras
sns.catplot(
data=tips,
x="day",
y="total_bill",
hue="time",
kind="bar",
errorbar="sd"
)
plt.title("Importe medio por día y horario")
plt.show()
# Gráfico de dispersión por categorías
sns.catplot(
data=tips,
x="day",
y="total_bill",
hue="time",
kind="swarm"
)
plt.title("Distribución del importe por día y horario")
plt.show()
Gráficos de regresión
Los gráficos de regresión muestran relaciones estadísticas entre variables:
# Gráfico de regresión simple
sns.regplot(
data=tips,
x="total_bill",
y="tip",
scatter_kws={"alpha": 0.5},
line_kws={"color": "red"}
)
plt.title("Regresión entre importe total y propina")
plt.show()
# Gráfico de regresión con facetas
sns.lmplot(
data=tips,
x="total_bill",
y="tip",
hue="smoker",
col="time",
row="sex",
height=4
)
plt.suptitle("Regresión por grupos", y=1.02)
plt.tight_layout()
plt.show()
Mapas de calor y matrices
Los mapas de calor visualizan datos matriciales:
# Mapa de calor básico
iris = sns.load_dataset("iris")
corr = iris.drop("species", axis=1).corr()
plt.figure(figsize=(10, 8))
sns.heatmap(
corr,
annot=True,
fmt=".2f",
cmap="coolwarm",
vmin=-1,
vmax=1
)
plt.title("Matriz de correlación de características")
plt.show()
# Mapa de calor con agrupamiento
sns.clustermap(
corr,
annot=True,
fmt=".2f",
cmap="coolwarm",
vmin=-1,
vmax=1,
figsize=(10, 10)
)
plt.title("Agrupamiento jerárquico de correlaciones", pad=50)
plt.show()
Gráficos de pares y conjuntos
Los gráficos de pares muestran relaciones entre múltiples variables:
# Matriz de gráficos de pares
sns.pairplot(
iris,
hue="species",
markers=["o", "s", "D"],
diag_kind="kde",
corner=True
)
plt.suptitle("Relaciones entre variables por especie", y=1.02)
plt.show()
# Gráfico conjunto
sns.jointplot(
data=iris,
x="sepal_length",
y="petal_length",
hue="species",
kind="scatter"
)
plt.suptitle("Relación entre longitud de sépalo y pétalo", y=1.02)
plt.show()
Personalización avanzada
Control de estimaciones estadísticas
Seaborn realiza cálculos estadísticos automáticamente, que pueden controlarse:
# Diferentes intervalos de confianza
for ci in [None, 68, 95, 99]:
plt.figure(figsize=(10, 6))
sns.barplot(
data=tips,
x="day",
y="total_bill",
errorbar=("ci", ci) if ci else None
)
plt.title(f"Intervalos de confianza: {ci if ci else 'Sin intervalo'}")
plt.show()
# Diferentes estimadores estadísticos
estimadores = {
"Media": np.mean,
"Mediana": np.median,
"Desviación estándar": np.std,
"Máximo": np.max
}
for nombre, estimador in estimadores.items():
plt.figure(figsize=(10, 6))
sns.barplot(
data=tips,
x="day",
y="total_bill",
estimator=estimador
)
plt.title(f"Estimador: {nombre}")
plt.show()
Personalización de leyendas
Las leyendas se pueden personalizar para mejorar la interpretación:
plt.figure(figsize=(10, 6))
scatter = sns.scatterplot(
data=tips,
x="total_bill",
y="tip",
hue="day",
style="time",
size="size",
sizes=(20, 200)
)
# Personalizar la leyenda
plt.legend(
title="Variables",
loc="upper left",
bbox_to_anchor=(1.05, 1),
frameon=True,
shadow=True,
fancybox=True
)
plt.title("Relación entre importe y propina")
plt.tight_layout()
plt.show()
Combinación con Matplotlib
Seaborn se integra perfectamente con Matplotlib para personalizaciones avanzadas:
# Crear figura y definir layout
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle("Panel de visualizaciones combinadas", fontsize=16)
# Gráfico 1: Dispersión
sns.scatterplot(
data=tips,
x="total_bill",
y="tip",
hue="day",
ax=axes[0, 0]
)
axes[0, 0].set_title("Relación importe-propina")
# Gráfico 2: Cajas
sns.boxplot(
data=tips,
x="day",
y="total_bill",
hue="time",
ax=axes[0, 1]
)
axes[0, 1].set_title("Distribución por día")
# Gráfico 3: Barras
sns.barplot(
data=tips,
x="day",
y="tip",
hue="time",
ax=axes[1, 0]
)
axes[1, 0].set_title("Propina media por día")
# Gráfico 4: Violín
sns.violinplot(
data=tips,
x="day",
y="tip",
hue="time",
split=True,
ax=axes[1, 1]
)
axes[1, 1].set_title("Distribución de propinas")
plt.tight_layout(rect=[0, 0, 1, 0.96])
plt.show()
Técnicas avanzadas para el examen
Personalización de facetas
Las facetas permiten crear múltiples gráficos según variables categóricas:
# Personalización de facetas
g = sns.FacetGrid(
tips,
col="time",
row="smoker",
hue="sex",
height=4,
aspect=1.2,
margin_titles=True
)
# Mapear función de visualización
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip", alpha=0.7)
# Personalizar títulos y etiquetas
g.set_axis_labels("Importe total", "Propina")
g.set_titles(col_template="{col_name}", row_template="{row_name}")
g.add_legend()
g.fig.suptitle("Relación entre importe y propina por grupos", y=1.05, fontsize=16)
plt.tight_layout()
plt.show()
Creación de gráficos personalizados
Los gráficos personalizados combinan diferentes elementos:
# Gráfico personalizado
plt.figure(figsize=(12, 8))
# Capa 1: Puntos individuales
sns.swarmplot(
data=tips,
x="day",
y="total_bill",
hue="time",
dodge=True,
size=4,
pa
Lecciones de este módulo de Seaborn
Lecciones de programación del módulo Evaluación del curso de Seaborn.
Ejercicios de programación en este módulo de Seaborn
Evalúa tus conocimientos en Evaluación con ejercicios de programación Evaluación de tipo Test, Puzzle, Código y Proyecto con VSCode.