Parcela de matriz de correlación utilizando pandas.

Tengo un conjunto de datos con un gran número de características, por lo que el análisis de la matriz de correlación se ha vuelto muy difícil. Quiero trazar una matriz de correlación que obtengamos usando la función dataframe.corr() de la biblioteca pandas. ¿Hay alguna función incorporada proporcionada por la biblioteca de pandas para trazar esta matriz?

Puedes usar pyplot.matshow() desde matplotlib :

 import matplotlib.pyplot as plt plt.matshow(dataframe.corr()) plt.show() 

Pruebe esta función, que también muestra nombres de variables para la matriz de correlación:

 def plot_corr(df,size=10): '''Function plots a graphical correlation matrix for each pair of columns in the dataframe. Input: df: pandas DataFrame size: vertical and horizontal size of the plot''' corr = df.corr() fig, ax = plt.subplots(figsize=(size, size)) ax.matshow(corr) plt.xticks(range(len(corr.columns)), corr.columns); plt.yticks(range(len(corr.columns)), corr.columns); 

Versión del mapa de calor de Seaborn:

 import seaborn as sns corr = dataframe.corr() sns.heatmap(corr, xticklabels=corr.columns.values, yticklabels=corr.columns.values) 

Si su objective principal es visualizar la matriz de correlación, en lugar de crear una gráfica per se, las convenientes opciones de diseño de pandas son una solución integrada viable:

 import pandas as pd import numpy as np rs = np.random.RandomState(0) df = pd.DataFrame(rs.rand(10, 10)) corr = df.corr() corr.style.background_gradient(cmap='coolwarm') # 'RdBu_r' & 'BrBG' are other good diverging colormaps 

introduzca la descripción de la imagen aquí

Tenga en cuenta que esto debe estar en un servidor que admita la representación HTML, como el cuaderno JupyterLab. (El texto claro automático sobre fondos oscuros proviene de un RP existente y no de la última versión publicada, pandas 0.23).


Estilo

Puede limitar fácilmente la precisión de dígitos:

 corr.style.background_gradient(cmap='coolwarm').set_precision(2) 

introduzca la descripción de la imagen aquí

O elimine todos los dígitos si prefiere la matriz sin anotaciones:

 corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'}) 

introduzca la descripción de la imagen aquí

La documentación de estilo también incluye instrucciones de estilos más avanzados, como la forma de cambiar la visualización de la celda sobre la que se encuentra el puntero del mouse. Para guardar la salida, puede devolver el HTML agregando el método render() y luego escribirlo en un archivo (o simplemente tomar una captura de pantalla para propósitos menos formales).


Comparacion de tiempo

En mis pruebas, style.background_gradient() fue 4 veces más rápido que plt.matshow() y 120 veces más rápido que sns.heatmap() con una matriz de 10×10. Desafortunadamente, no se escala tan bien como plt.matshow() : los dos toman aproximadamente el mismo tiempo para una matriz de 100×100, y plt.matshow() es 10 veces más rápido para una matriz de 1000×1000.


Actualización para pandas> = 0.24

Al establecer axis=None , ahora es posible calcular los colores basados ​​en toda la matriz en lugar de por columna o por fila:

 corr.style.background_gradient(cmap='coolwarm', axis=None) 

introduzca la descripción de la imagen aquí

Puede observar la relación entre las características ya sea dibujando un mapa de calor desde una matriz de dispersión marina o dispersada desde pandas.

Matriz de dispersión:

 pd.scatter_matrix(dataframe, alpha = 0.3, figsize = (14,8), diagonal = 'kde'); 

Si también desea visualizar el sesgo de cada característica, use las gráficas de pares marítimos.

 sns.pairplot(dataframe) 

Sns Heatmap:

 import seaborn as sns f, ax = pl.subplots(figsize=(10, 8)) corr = dataframe.corr() sns.heatmap(corr, mask=np.zeros_like(corr, dtype=np.bool), cmap=sns.diverging_palette(220, 10, as_cmap=True), square=True, ax=ax) 

La salida será un mapa de correlación de las características. Es decir, ver el siguiente ejemplo.

introduzca la descripción de la imagen aquí

La correlación entre comestibles y detergentes es alta. Similar:

Pdoductos con alta correlación:

  1. Supermercados y detergentes.

Productos con correlación media:

  1. Leche y ulttwigrinos
  2. Leche y Detergentes_Papel

Productos con baja correlación:

  1. Leche y Deli
  2. Congelados y frescos.
  3. Congelados y Deli.

Desde plots: puede observar el mismo conjunto de relaciones a partir de plots o matriz de dispersión. Pero a partir de estos podemos decir que si los datos se distribuyen normalmente o no.

introduzca la descripción de la imagen aquí

Nota: Lo anterior es el mismo gráfico tomado de los datos, que se utiliza para dibujar mapa de calor.

Puedes usar el método imshow () desde matplotlib

 import pandas as pd import matplotlib.pyplot as plt matplotlib.style.use('ggplot') plt.imshow(X.corr(), cmap=plt.cm.Reds, interpolation='nearest') plt.colorbar() tick_marks = [i for i in range(len(X.columns))] plt.xticks(tick_marks, X.columns, rotation='vertical') plt.yticks(tick_marks, X.columns) plt.show()