Tengo un conjunto de datos con una gran cantidad de características, por lo que analizar la matriz de correlación se ha vuelto muy difícil. Quiero trazar una matriz de correlación que obtenemos usando la dataframe.corr()
función de la biblioteca de pandas. ¿Hay alguna función incorporada proporcionada por la biblioteca de pandas para trazar esta matriz?
python
pandas
matplotlib
data-visualization
information-visualization
Gaurav Singh
fuente
fuente
Respuestas:
Puedes usar
pyplot.matshow()
desdematplotlib
:Editar:
En los comentarios había una solicitud de cómo cambiar las etiquetas de marca del eje. Aquí hay una versión de lujo que se dibuja en un tamaño de figura más grande, tiene etiquetas de eje para que coincidan con el marco de datos y una leyenda de la barra de colores para interpretar la escala de colores.
Incluyo cómo ajustar el tamaño y la rotación de las etiquetas, y estoy usando una relación de figura que hace que la barra de colores y la figura principal salgan a la misma altura.
fuente
AttributeError: 'module' object has no attribute 'matshow'
import matplotlib.pyplot as plt
?Si su objetivo principal es visualizar la matriz de correlación, en lugar de crear un gráfico per se, las
pandas
opciones de estilo convenientes son una solución integrada viable:Tenga en cuenta que esto debe estar en un back-end que admita la representación de HTML, como el JupyterLab Notebook. (El texto claro automático sobre fondos oscuros es de un RP existente y no de la última versión lanzada,
pandas
0.23).Estilo
Puede limitar fácilmente la precisión de los dígitos:
O elimine los dígitos por completo si prefiere la matriz sin anotaciones:
La documentación de estilo también incluye instrucciones de estilos más avanzados, como cómo cambiar la visualización de la celda sobre la que se mueve el puntero del mouse. Para guardar el resultado, puede devolver el HTML agregando el
render()
método y luego escribirlo en un archivo (o simplemente tomar una captura de pantalla para fines menos formales).Comparación de tiempo
En mis pruebas,
style.background_gradient()
fue 4 veces más rápidoplt.matshow()
y 120 veces más rápido quesns.heatmap()
con una matriz de 10x10. Desafortunadamente, no escala tan bien comoplt.matshow()
: los dos toman aproximadamente el mismo tiempo para una matriz de 100x100, yplt.matshow()
es 10 veces más rápido para una matriz de 1000x1000.Ahorro
Hay algunas formas posibles de guardar el marco de datos estilizado:
render()
método y luego escriba el resultado en un archivo..xslx
archivo con formato condicional agregando elto_excel()
método.Actualización para pandas> = 0.24
Al configurar
axis=None
, ahora es posible calcular los colores en función de toda la matriz en lugar de por columna o por fila:fuente
import seaborn as sns corr = df.corr() cm = sns.light_palette("green", as_cmap=True) cm = sns.diverging_palette(220, 20, sep=20, as_cmap=True) corr.style.background_gradient(cmap=cm).set_precision(2)
corr.style.background_gradient(cmap='coolwarm')
. Actualmente no hay forma de centrar el cmap en un valor específico, lo que puede ser una buena idea con cmaps divergentes.Pruebe esta función, que también muestra nombres de variables para la matriz de correlación:
fuente
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')
si desea orientación vertical de los nombres de columna en el eje xplt.tight_layout()
también podría ser útil para nombres largos de columna.Versión de mapa de calor de Seaborn:
fuente
Puede observar la relación entre las características, ya sea dibujando un mapa de calor de los mares marinos o una matriz de dispersión de los pandas.
Matriz de dispersión:
Si también desea visualizar el sesgo de cada característica, use las parcelas nacidas en el mar.
Sns Heatmap:
El resultado será un mapa de correlación de las características. es decir, ver el siguiente ejemplo.
La correlación entre comestibles y detergentes es alta. Similar:
Pdoductos con alta correlación:Desde parcelas: puede observar el mismo conjunto de relaciones desde parcelas o matriz de dispersión. Pero de estos podemos decir que si los datos se distribuyen normalmente o no.
Nota: Lo anterior es el mismo gráfico tomado de los datos, que se utiliza para dibujar el mapa de calor.
fuente
from matplotlib import pyplot as pl
Puede usar el método imshow () de matplotlib
fuente
Si su marco de datos es
df
simplemente puede usar:fuente
los gráficos de statmodels también ofrecen una buena vista de la matriz de correlación
fuente
Para completar, la solución más simple que conozco con seaborn a fines de 2019, si uno está usando Jupyter :
fuente
Junto con otros métodos, también es bueno tener un diagrama de pares que proporcionará un diagrama de dispersión para todos los casos.
fuente
Matriz de correlación de formularios, en mi caso zdf es el marco de datos que necesito para realizar la matriz de correlaciones.
Entonces podemos tomar una captura de pantalla. o convertir html a un archivo de imagen.
fuente