tutorial lenguaje descargar python

lenguaje - python tutorial



Mapa de calor de correlaciĆ³n (5)

Quiero representar la matriz de correlación utilizando un mapa de calor. Hay algo llamado correlogram en R, pero no creo que haya algo así en Python.

¿Cómo puedo hacer esto? Los valores van de -1 a 1, por ejemplo:

[[ 1. 0.00279981 0.95173379 0.02486161 -0.00324926 -0.00432099] [ 0.00279981 1. 0.17728303 0.64425774 0.30735071 0.37379443] [ 0.95173379 0.17728303 1. 0.27072266 0.02549031 0.03324756] [ 0.02486161 0.64425774 0.27072266 1. 0.18336236 0.18913512] [-0.00324926 0.30735071 0.02549031 0.18336236 1. 0.77678274] [-0.00432099 0.37379443 0.03324756 0.18913512 0.77678274 1. ]]

Pude producir el siguiente mapa de calor basado en otra question , pero el problema es que mis valores se "cortan" en 0, por lo que me gustaría tener un mapa que pase de azul (-1) a rojo (1), o algo así, pero aquí los valores por debajo de 0 no se presentan de manera adecuada.

Aquí está el código para eso:

plt.imshow(correlation_matrix,cmap=''hot'',interpolation=''nearest'')


  1. Use el mapa de colores ''jet'' para una transición entre azul y rojo.
  2. Use pcolor() con los parámetros vmin , vmax .

Se detalla en esta respuesta: https://.com/a/3376734/21974


Otra alternativa es usar la función de mapa de calor en el mar para trazar la covarianza. Este ejemplo utiliza el conjunto de datos Automático del paquete ISLR en R (igual que en el ejemplo que mostró).

import pandas.rpy.common as com import seaborn as sns %matplotlib inline # load the R package ISLR infert = com.importr("ISLR") # load the Auto dataset auto_df = com.load_data(''Auto'') # calculate the correlation matrix corr = auto_df.corr() # plot the heatmap sns.heatmap(corr, xticklabels=corr.columns, yticklabels=corr.columns)

Si quieres ser aún más elegante, puedes usar Pandas Style , por ejemplo:

cmap = cmap=sns.diverging_palette(5, 250, as_cmap=True) def magnify(): return [dict(selector="th", props=[("font-size", "7pt")]), dict(selector="td", props=[(''padding'', "0em 0em")]), dict(selector="th:hover", props=[("font-size", "12pt")]), dict(selector="tr:hover td:hover", props=[(''max-width'', ''200px''), (''font-size'', ''12pt'')]) ] corr.style.background_gradient(cmap, axis=1)/ .set_properties(**{''max-width'': ''80px'', ''font-size'': ''10pt''})/ .set_caption("Hover to magify")/ .set_precision(2)/ .set_table_styles(magnify())


Puedes usar matplotlib para esto. Hay una pregunta similar que muestra cómo puede lograr lo que quiere: question


Si sus datos están en un Data Frame de Pandas, puede usar la función de heatmap de heatmap de Seaborn para crear la trama deseada.

import seaborn as sns Var_Corr = df.corr() # plot the heatmap and annotation on it sns.heatmap(Var_Corr, xticklabels=Var_Corr.columns, yticklabels=Var_Corr.columns, annot=True)

Correlation plot

De la pregunta, parece que los datos están en una matriz NumPy. Si esa matriz tiene el nombre numpy_data , antes de que puedas usar el paso anterior, querrías ponerlo en un Data Frame de Pandas usando lo siguiente:

import pandas as pd df = pd.DataFrame(numpy_data)


Tarde en la fiesta, pero tuve ganas de contribuir con algo que armé después de que se anunció que el destacado corrplot marítimo iba a ser desaprobado. El siguiente fragmento de código hace una gráfica de correlación parecida a la de un mapa de calor marino. También puede especificar el rango de colores y seleccionar si desea eliminar o no las correlaciones duplicadas. Observe que he usado los mismos números que usted, pero que los he puesto en un marco de datos de pandas. En cuanto a la elección de colores, puede consultar los documentos de sns.diverging_palette .

import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np # A list with your data slightly edited l = [1.0,0.00279981,0.95173379,0.02486161,-0.00324926,-0.00432099, 0.00279981,1.0,0.17728303,0.64425774,0.30735071,0.37379443, 0.95173379,0.17728303,1.0,0.27072266,0.02549031,0.03324756, 0.02486161,0.64425774,0.27072266,1.0,0.18336236,0.18913512, -0.00324926,0.30735071,0.02549031,0.18336236,1.0,0.77678274, -0.00432099,0.37379443,0.03324756,0.18913512,0.77678274,1.00] # Split list n = 6 data = [l[i:i + n] for i in range(0, len(l), n)] # A dataframe df = pd.DataFrame(data) def CorrMtx(df, dropDuplicates = True): # Your dataset is already a correlation matrix. # If you have a dateset where you need to include the calculation # of a correlation matrix, just uncomment the line below: # df = df.corr() # Exclude duplicate correlations by masking uper right values if dropDuplicates: mask = np.zeros_like(df, dtype=np.bool) mask[np.triu_indices_from(mask)] = True # Set background color / chart style sns.set_style(style = ''white'') # Set up matplotlib figure f, ax = plt.subplots(figsize=(11, 9)) # Add diverging colormap from red to blue cmap = sns.diverging_palette(250, 10, as_cmap=True) # Draw correlation plot with or without duplicates if dropDuplicates: sns.heatmap(df, mask=mask, cmap=cmap, square=True, linewidth=.5, cbar_kws={"shrink": .5}, ax=ax) else: sns.heatmap(df, cmap=cmap, square=True, linewidth=.5, cbar_kws={"shrink": .5}, ax=ax) CorrMtx(df, dropDuplicates = False)

Aquí está la trama resultante:

Pidió azul, pero eso queda fuera del rango en sus datos de muestra. Cambie 0.95173379 a -0.95173379 para ambas observaciones y obtendrá esto: