Pandas & NumPy Academy · Lección

Mapas de calor para matrices de correlación

Calcule una matriz de correlación con DataFrame.corr() y visualícela como un mapa de calor codificado por colores con sns.heatmap.

Lección 4 de 413 pasos

Mapas de calor para matrices de correlación es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

¿Qué es una matriz de correlación?

Una matriz de correlación es una tabla cuadrada en la que la entrada (i, j) contiene el coeficiente de correlación de Pearson entre la columna i y la columna j. Los valores van de -1 (correlación lineal negativa perfecta) a +1 (positiva perfecta), mientras que 0 indica que no existe una relación lineal. La diagonal siempre es 1 (una variable está perfectamente correlacionada consigo misma). Las matrices de correlación son el primer paso para comprender qué variables varían conjuntamente antes de crear un modelo.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Compute correlation matrix for numeric columns
tips = sns.load_dataset('tips')
corr = tips[['total_bill', 'tip', 'size']].corr()
print(corr.round(2))

Cálculo de la matriz de correlación

Llame a DataFrame.corr() para calcular las correlaciones de Pearson por pares para todas las columnas numéricas. El parámetro method controla qué correlación se calcula: 'pearson' (predeterminada, lineal), 'spearman' (basada en rangos, robusta frente a valores atípicos y relaciones monótonas no lineales) o 'kendall'. Para datos financieros o de conteo asimétricos, Spearman suele ser más informativa que Pearson.

import pandas as pd
import seaborn as sns

tips = sns.load_dataset('tips')
numeric = tips.select_dtypes(include='number')

# Pearson vs Spearman
pearson = numeric.corr(method='pearson')
spearman = numeric.corr(method='spearman')

print('Pearson:')
print(pearson.round(2))
print('\nSpearman:')
print(spearman.round(2))

Mapa de calor básico con sns.heatmap

sns.heatmap(data) recibe una matriz 2D o un DataFrame y lo representa como una cuadrícula de colores; el color de cada celda codifica su valor numérico. Al aplicarlo a una matriz de correlación, los colores cálidos (rojo) suelen representar una correlación positiva y los fríos (azul), una negativa. El parámetro annot=True imprime el valor numérico dentro de cada celda, lo cual es esencial para leer correctamente un mapa de calor de correlación.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()

sns.heatmap(corr, annot=True, fmt='.2f')
plt.title('Correlation Heatmap — Tips Dataset')
plt.tight_layout()
plt.show()

Elección del mapa de colores adecuado

Para las matrices de correlación, utilice siempre un mapa de colores divergente centrado en cero: cmap='coolwarm', 'RdBu_r' o 'vlag'. Estos mapas utilizan un color para los valores positivos, otro para los negativos y un punto medio neutro en cero. Evite los mapas de colores secuenciales (como 'Blues') para los datos de correlación, porque impiden distinguir visualmente las correlaciones positivas de las negativas. Establezca vmin=-1, vmax=1 para fijar la escala de colores en todo el rango de correlación.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()

sns.heatmap(
    corr,
    annot=True,
    fmt='.2f',
    cmap='coolwarm',
    vmin=-1,
    vmax=1,
    center=0
)
plt.title('Correlation Heatmap with Diverging Palette')
plt.tight_layout()
plt.show()

Enmascaramiento del triángulo superior

Como una matriz de correlación es simétrica (corr[i,j] == corr[j,i]), mostrar ambas mitades es redundante. Utilice np.triu para crear una máscara del triángulo superior y pásela mediante mask= a sns.heatmap. Esto reduce a la mitad el número de celdas, haciendo que el gráfico esté menos recargado y sea más fácil de leer. Los valores de la diagonal (todos 1.0) también se pueden enmascarar, ya que no aportan información.

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()

# Mask the upper triangle (including diagonal)
mask = np.triu(np.ones_like(corr, dtype=bool))

sns.heatmap(
    corr,
    mask=mask,
    annot=True,
    fmt='.2f',
    cmap='coolwarm',
    vmin=-1,
    vmax=1
)
plt.title('Lower-Triangle Correlation Heatmap')
plt.tight_layout()
plt.show()

Personalización de las anotaciones y el tamaño de las celdas

Controle el formato de las anotaciones con fmt= (por ejemplo, '.2f' para dos decimales) y el tamaño de la fuente con annot_kws={'size': 10}. El parámetro linewidths añade líneas finas entre las celdas, lo que facilita la lectura de matrices grandes. Utilice square=True para forzar que las celdas sean cuadradas independientemente de las dimensiones de la figura, lo que proporciona a los mapas de calor un aspecto limpio y equilibrado.

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# Load a wider dataset for a more interesting heatmap
penguins = sns.load_dataset('penguins').select_dtypes('number')
corr = penguins.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))

sns.heatmap(
    corr,
    mask=mask,
    annot=True,
    fmt='.2f',
    cmap='vlag',
    vmin=-1,
    vmax=1,
    linewidths=0.5,
    square=True,
    annot_kws={'size': 10}
)
plt.title('Penguins Correlation Matrix')
plt.tight_layout()
plt.show()

Agrupación con clustermap

sns.clustermap() reordena las filas y las columnas mediante una agrupación jerárquica para reunir las variables con patrones de correlación similares. Esto facilita mucho la identificación de bloques de características correlacionadas en matrices grandes. El dendrograma de los ejes superior e izquierdo muestra el árbol de agrupación. Utilice method='ward' y metric='euclidean' como valores predeterminados razonables para la agrupación basada en correlaciones.

import seaborn as sns
import matplotlib.pyplot as plt

penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()

sns.clustermap(
    corr,
    cmap='coolwarm',
    vmin=-1,
    vmax=1,
    annot=True,
    fmt='.2f',
    figsize=(6, 6)
)
plt.suptitle('Clustered Correlation Matrix', y=1.02)
plt.show()

Mapa de calor para datos de tablas dinámicas

Los mapas de calor no se limitan a las matrices de correlación: cualquier tabla numérica 2D se beneficia de la codificación mediante colores. Un patrón habitual consiste en calcular una tabla dinámica (por ejemplo, la propina media por día y hora) y visualizarla después como un mapa de calor. Esto transforma una tabla densa de números en una cuadrícula de colores que se puede examinar rápidamente, donde los valores más altos y más bajos destacan visualmente.

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

tips = sns.load_dataset('tips')

# Pivot: average bill by day and time
pivot = tips.pivot_table(
    values='total_bill',
    index='day',
    columns='time',
    aggfunc='mean'
)

sns.heatmap(pivot, annot=True, fmt='.1f', cmap='YlOrRd')
plt.title('Average Bill by Day and Time')
plt.tight_layout()
plt.show()

Interpretación de los valores de correlación

Al interpretar las correlaciones, utilice estas referencias aproximadas: |r| < 0.2 = insignificante, 0.2-0.4 = débil, 0.4-0.6 = moderada, 0.6-0.8 = fuerte, > 0.8 = muy fuerte. Sin embargo, la correlación no informa sobre la causalidad y puede ser espuria (una correlación casual debida a una tercera variable de confusión). Combine siempre el análisis numérico de correlación con gráficos de dispersión para verificar que la relación sea realmente lineal y no esté determinada por valores atípicos.

import pandas as pd
import seaborn as sns

# Find the most correlated pairs
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()

# Unstack to get pairs, remove self-correlations, sort
pairs = (corr
    .unstack()
    .reset_index()
    .rename(columns={'level_0': 'var1', 'level_1': 'var2', 0: 'r'})
    .query('var1 != var2')
    .assign(abs_r=lambda df: df['r'].abs())
    .sort_values('abs_r', ascending=False)
    .drop_duplicates(subset='abs_r')
)
print(pairs.head(6).to_string(index=False))

Mapas de calor para conjuntos de datos grandes: selección de subconjuntos

En los DataFrames con muchas columnas, un mapa de calor de correlación completo resulta ilegible. Un enfoque mejor consiste en filtrar la matriz de correlación para mostrar solo los pares con |r| por encima de un umbral (por ejemplo, 0.5), o seleccionar únicamente las características más correlacionadas con una variable objetivo. También puede seleccionar subconjuntos por dominio; por ejemplo, representar por separado las correlaciones entre métricas financieras y las correlaciones entre métricas operativas en un conjunto de datos empresarial.

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# Show only features with |r| > 0.4 with any other feature
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()

# Filter columns that have at least one high correlation (excluding diagonal)
high_corr = (corr.abs() > 0.4).any(axis=1)
filtered = corr.loc[high_corr, high_corr]
mask = np.triu(np.ones_like(filtered, dtype=bool))

sns.heatmap(filtered, mask=mask, annot=True,
            fmt='.2f', cmap='coolwarm', vmin=-1, vmax=1)
plt.title('High-Correlation Subset')
plt.tight_layout()
plt.show()

Guardar mapas de calor en archivos

Los mapas de calor suelen incluirse en informes y presentaciones. Llame a plt.savefig('filename.png', dpi=150, bbox_inches='tight') después de crear el mapa de calor para guardarlo. El argumento bbox_inches='tight' evita que las etiquetas de los ejes se recorten. Para informes en PDF, utilice format='pdf'. Al usar sns.clustermap, la figura se almacena en el objeto devuelto: g = sns.clustermap(...); g.savefig('plot.png').

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
mask = np.triu(np.ones_like(corr, dtype=bool))

fig, ax = plt.subplots(figsize=(6, 5))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
            cmap='coolwarm', vmin=-1, vmax=1,
            linewidths=0.5, ax=ax)
ax.set_title('Correlation Heatmap')

# Save to file
plt.savefig('/tmp/correlation_heatmap.png', dpi=150, bbox_inches='tight')
plt.close()
print('Saved to /tmp/correlation_heatmap.png')

Comprobación rápida

Compruebe su comprensión de los mapas de calor de correlación de esta lección.

Resumen de la lección

En esta lección ha aprendido que DataFrame.corr() calcula correlaciones por pares; sns.heatmap las representa como una cuadrícula de colores con mapas divergentes y anotaciones; y el enmascaramiento del triángulo superior elimina la redundancia. A continuación, exploraremos el proceso completo de análisis exploratorio de datos: una lista de comprobación sistemática para crear el perfil de cualquier conjunto de datos nuevo.

Gratis para empezar

Aprende Python con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Mapas de calor para matrices de correlación» es gratis?

Sí — el texto completo de «Mapas de calor para matrices de correlación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Mapas de calor para matrices de correlación»?

Calcule una matriz de correlación con DataFrame.corr() y visualícela como un mapa de calor codificado por colores con sns.heatmap. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Pandas & NumPy Academy?

No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Mapas de calor para matrices de correlación»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?

Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Gráficos de distribución: histplot y kdeplot
  2. Gráficos categóricos: boxplot, barplot y violinplot
  3. Gráficos de dispersión y pair plots
  4. Mapas de calor para matrices de correlación
← Volver a Pandas & NumPy Academy