No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Heatmap

17/18
Recursos

Heatmap es un tipo de gráfico enfocado a una estructura matricial. Heatmap correlaciona todas las variables numéricas del dataset.

Ejercicio práctico para usar Heatmap

Importa los datos que necesitas:

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')
tips.head()
  • Correlación entre variables
tips.corr() ---> Muestra las variables correlacionadas entre si
  • Heatmap
sns.heatmap(tips.corr());
heatmap.JPG
  • Se pueden agregar diferentes parámetros. annot muestra el valor de la correlación,
    cmap color,linewidthsespacio entre variables, linecolor color de las líneas, vminv, max valores máximos y mínimos, cbar=False eliminar la barra
sns.heatmap(tips.corr(), annot= True, cmap='coolwarm', linewidths=5, linecolor='black', vmin=0.5,vmax=1,cbar=False);
parametros.JPG

Aportes 29

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Excelente curso, gracias a lo aprendido pude aplicar los conocimientos para un proyecto personal que busca optimizar una cámara termica de baja resolución.

Este fue el resultado.

tips.corr() ahora se escribe asi “tips.corr(numeric_only=True)”

Un tip para cuando quieran invertir los colores en cmap, solo se agrega “_r” al final del nombre del color usado en cmap.

Por ejemplo, este fue el color de ejemplo de la clase en donde el color rojo es para el valor más alto y el azul para el más bajo:

correlation = df.corr()
sns.heatmap(correlation, annot=True, cmap="coolwarm", linewidths=5);

Si se cambia en cmap el valor de “coolwarm” agregandole “_r” al final se tiene lo siguiente:

correlation = df.corr()
sns.heatmap(correlation, annot=True, cmap="coolwarm_r", linewidths=5);

Otro ejemplo grafico

En poco tiempo será necesario especificar que corr aplica solo a datos numericos, por lo que tendremos que usar:

tips.corr(numeric_only=True)  

Separé primero el dataset entre Dinner y Lunch. Luego entre Female y Male. Para comparar las correlaciones entre estas divisiones.

import seaborn as sns
import matplotlib.pyplot as plt

cond_dinner =tips['time'] == 'Dinner' 
tips_dinner = tips[cond_dinner] 
cond_lunch =(tips['time'] =='Lunch')
tips_lunch = tips[cond_lunch] 

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14,6))
sns.heatmap(tips_dinner.corr(), ax=ax1 ,annot=True,cmap='coolwarm',linewidths=5,linecolor='black')
sns.heatmap(tips_lunch.corr(), ax=ax2,annot=True,cmap='coolwarm',linewidths=5,linecolor='black')
ax1.set_title('Dinner Correlation')
ax2.set_title('Lunch Correlation')
plt.show()

En Lunch se producen mayores correlaciones que en Dinner.

cond_male =tips['sex'] == 'Male' 
tips_male = tips[cond_male] 
cond_female =(tips['sex'] =='Female')
tips_female = tips[cond_female] 

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14,6))
sns.heatmap(tips_female.corr(), ax=ax1 ,annot=True,cmap='coolwarm',linewidths=5,linecolor='black')
sns.heatmap(tips_male.corr(), ax=ax2,annot=True,cmap='coolwarm',linewidths=5,linecolor='black')
ax1.set_title('Female Correlation')
ax2.set_title('Male Correlation')
plt.show()

No hay tantas diferencias entre Female y Dinner.

Estuve buscando las opciones que me da cmap, con la esperanza de encontrar la transición de rojo, amarillo y verde.

Si estaban buscando lo mismo, no encontré esas opciones, cmap:
tiene las siguientes opciones:
viridis, plasma, inferno, magma, cividis, coolwarm

De las cuales cvidis fue la que más me gustó:

Sin embargo aún no me di por vencido y encontré que podía utilizar matplotlib para hacer el heatmap como quería:

import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

# Define los colores para el mapa de colores personalizado
colors = [(1, 0, 0), (1, 1, 0), (0, 1, 0)]  # Rojo, amarillo, verde

# Crea el mapa de colores personalizado
cmap = LinearSegmentedColormap.from_list("custom_cmap", colors)

# Utiliza el cmap personalizado en el heatmap
sns.heatmap(tips.corr(),annot=True,cmap=cmap,linewidth=5,vmin=0.2, vmax=1)
plt.show()

Espero les sea de ayuda.

Se genera un mensaje de Warning al aplicar la función .corr() debido a que ahora se hace necesario especificar el parámetro numeric_only = True

tips.corr(numeric_only = True)

Se podría decir que el heatmap es una forma de ver las correlaciones con colores. Y que el pairplot es una forma de ver las correlaciones de forma mucho más gráfica.

Para hacer la correlación hoy en día tenés que agregar que es sólo numérico: tips.corr(numeric\_only=True)

Nota mental: la relación es positiva (no “directa”); negativa (no “indirecta”)

 

Correlación de Pearson

  • Los valores de correlación se pueden ubicar entre -1 y +1.
  • Si las dos variables tienden a aumentar o disminuir al mismo tiempo, el valor de correlación es positivo, existe una relación positiva.
  • Si una variable aumenta mientras la otra variable disminuye, el valor de correlación es negativo, existe una relación negativa.
  • El valor de 0 indica ausencia de relación entre las variables

 
El coeficiente de correlación no expresa relación de causa y efecto, expresa asociación de hecho.

Enamorado de todo Seaborn pero el Heatmap es de verdad AMOR a golpe de vista:

sns.heatmap(tips.corr(),annot=True);
Si estás trabajando en un jupyter, aplica el metodo numeric\_only: ```js tips.corr(numeric_only = True) ```

 L
La elección entre estas medidas de correlación depende de la naturaleza de los datos y el tipo de relación que estás buscando. En muchos casos, es útil examinar más de una medida de correlación para obtener una comprensión más completa de la relación entre las variables.

En la clase hicimos el heatmap con los datos correlacionados, ya que solo tomaba los valores numéricos; sin embargo, me di a la tarea de transformar mis datos para poder utilizarlo con las variables categóricas.

tipsn = tips.pivot_table(index='day', columns=['sex','smoker','time'],values= 'tip').fillna(0)
sns.heatmap(tipsn,center=5,annot=True);
Tuve que hacer uso de una linea adicional para poder usar .corr(), ya que estaba obteniendo un error de cast: numeric\_columns = tips.select\_dtypes(include=\['float64', 'int64']) numeric\_columns.corr()
Para los que estan usando VScode y les tiro ValueError al usar corr(), es porque solo funciona para datos numéricos, asique hice esto: `just_num_tips = tips.select_dtypes(include=[np.number])just_num_tips.head()just_num_tips.corr()`

Me encanto el uso del heatmap. No sabia de como funciona al principio y como este se palica al un proyecto. Ahora que lo se. Tengo ganas de implementarlo en mi proyecto sin problemas.

Para quienes no lo están corriendo en un cuaderno, sino en Python, se debe eliminar las columnas que no son númericas:

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')
print(tips.head(2))

print(tips.drop(columns=['sex','smoker','day','time']).corr())

Apuntes

Heatmap

sns.heatmap(tips.corr(),
            annot = True,
            cmap= 'coolwarm',
            linewidth = 5,
            linecolor = 'black',
            vmin = 0.5, vmax = 1,
            cbar = True)

excelente clase 😄, lastima que termina el curso

Configurar gráfico de Heatmap

sns.heatmap(tips.corr(),annot=True, cmap='coolwarm', linewidths=5, linecolor='black', vmin=0, vmax=1, cbar=True)
plt.show()
sns.heatmap(tips.corr(),annot=True, cmap='coolwarm',linewidths=5,linecolor='black',
      vmin=0.5,vmax=1,cbar=True)
plt.show()

Este tipo de gráficos se utiliza mucho al crear portafolios de inversión, la correlación entre diferentes tipos de acciones, donde es importante que se de correlación negativa para que tengas un portafolio bien diversificado

Información resumida de esta clase
#EstudiantesDePlatzi

  • La gráfica heatmap me permite graficar los datos que tengo en una estructura matricial

  • La función corr me permite saber la correlación que existen entre los datos de mi dataset

  • La correlación va de -1 a 1

  • Si obtenemos -1 significa que no existe una correlación

  • Si obtenemos 0 significa que no existe una correlación

  • Si obtenemos 1 significa que existe una correlación directa

  • Con la función heatmap obtengo este gráfico de mapa de calor

  • El parámetro annot me permite visualizar las etiquetas en la gráfica

  • Con el parámetro cmap puedo cambiar los colores del headmap

Ejercicios de clase

Heatmap
Heatmap es un tipo de gráfico enfocado a una estructura matricial. Heatmap correlaciona todas las variables numéricas del dataset.
Ejercicio práctico para usar Heatmap
Importa los datos que necesitas:
________________________________________
[1]
1 s
import matplotlib.pyplot as plt
import seaborn as sns
________________________________________
[2]
4 s
titanic = sns.load_dataset("titanic")
titanic.head(10)
________________________________________
[3]
titanic.corr()
#con la funcion (corr), puedo ver todas la corelaciones de mis variables 
________________________________________
[4]
sns.heatmap(titanic.corr())
plt.show()
#este grafico me muetra de 0 a 10 y de -2 a -4, como se comportan mis variables basandose en colores 
#es bastante util porque puedo ver con gama de colores como se encuentra la corelacion dentro las distintas variables 
________________________________________
[10]
1 s
plt.figure(figsize=(10,10))
sns.heatmap(titanic.corr(),annot=True,linewidths=5)
plt.show()
#con el parametro(annot), puedo ver el valor de la correlacion y una barra que me indica cada color 
________________________________________
[20]
1 s
plt.figure(figsize=(10,10))
sns.heatmap(titanic.corr(),annot=True,cmap="coolwarm",linewidths=5,linecolor="black")
plt.show()
#aca podemos general el mismo grafico pero con colores, calidos y frios
#entre mas tienda al rojo es ma calidos y entre mas tienda al azul es mas frios
#con el parametro(linewidths=), podemos  separa un poco las lineas y se vera muchos mas legible la grafica 
#y puedo cambiar el color de las lines que separa a cada una de las corelaciones 
________________________________________
[18]
plt.figure(figsize=(10,10))
sns.heatmap(titanic.corr(),annot=True,cmap="coolwarm",linewidths=5,linecolor="black",
            vmin=0,vmax=1)
plt.show()
#aca tenemos una correlacion de 0 a 1, y se pierden algunos de los colores en este caso
#la tonalidades entre calido y frio, como podemos notar quedaron tonalidades totalmente fria en su mayoria 
#porque van solo de Zero a uno 
________________________________________
[21]
plt.figure(figsize=(10,10))
sns.heatmap(titanic.corr(),annot=True,cmap="coolwarm",linewidths=5,linecolor="black",
            vmin=0,vmax=1)
#aca estamos respetando un poco los valores de la tonalidades y nos dan los resultados 
#mas cálidos 
________________________________________
[25]
0 s
plt.figure(figsize=(10,10))
sns.heatmap(titanic.corr(),annot=True,cmap="coolwarm",linewidths=5,linecolor="black",
            vmin=-0.4,vmax=10)
#aca estamo dejando los valores por defecto que entrega directamente el headmap
#si deseamos no ver la barra de colores en nuetra grafica los podemos quitar con (false )
________________________________________
ya conocemos lo útil y sencillo que es utilizar el headmap de Seaborn, solo tenemos una estructura matricial en la que tenemos características en las columnas y filas y valores en las intersecciones haedmp es la mejor forma de graficarlas, y no solo funciona con correlaciones, también funciona cuando el dataset tiente a esa estructura de correlación
________________________________________
[ ]
 


trabajando con otros dataset