Eu tenho um conjunto de dados com um grande número de recursos, portanto, analisar a matriz de correlação se tornou muito difícil. Eu quero traçar uma matriz de correlação que obtemos usando a dataframe.corr()
função da biblioteca de pandas. Existe alguma função interna fornecida pela biblioteca do pandas para plotar essa matriz?
python
pandas
matplotlib
data-visualization
information-visualization
Gaurav Singh
fonte
fonte
Respostas:
Você pode usar
pyplot.matshow()
emmatplotlib
:Editar:
Nos comentários, havia uma solicitação de como alterar os rótulos dos marcadores do eixo. Aqui está uma versão de luxo desenhada em um tamanho de figura maior, com rótulos de eixo para corresponder ao quadro de dados e uma legenda da barra de cores para interpretar a escala de cores.
Estou incluindo como ajustar o tamanho e a rotação dos rótulos e estou usando uma proporção de figura que faz com que a barra de cores e a figura principal tenham a mesma altura.
fonte
AttributeError: 'module' object has no attribute 'matshow'
import matplotlib.pyplot as plt
?Se seu objetivo principal é visualizar a matriz de correlação, em vez de criar um gráfico propriamente dito, as convenientes
pandas
opções de estilo são uma solução interna viável:Observe que isso precisa estar em um back-end que suporte a renderização HTML, como o Notebook JupyterLab. (O texto claro automático em fundos escuros é de um PR existente e não da versão mais recente lançada,
pandas
0,23).Styling
Você pode limitar facilmente a precisão dos dígitos:
Ou se livrar dos dígitos completamente, se você preferir a matriz sem anotações:
A documentação de estilo também inclui instruções de estilos mais avançados, como alterar a exibição da célula sobre a qual o ponteiro do mouse está passando o mouse. Para salvar a saída, você pode retornar o HTML anexando o
render()
método e depois gravá-lo em um arquivo (ou apenas fazer uma captura de tela para fins menos formais).Comparação de tempo
Nos meus testes,
style.background_gradient()
foi 4x mais rápido queplt.matshow()
e 120x mais rápido quesns.heatmap()
com uma matriz 10x10. Infelizmente, não é tão dimensionável quantoplt.matshow()
: os dois demoram quase o mesmo tempo para uma matriz 100x100 eplt.matshow()
são 10x mais rápidos para uma matriz 1000x1000.Salvando
Existem algumas maneiras possíveis de salvar o quadro de dados estilizado:
render()
método e, em seguida, grave a saída em um arquivo..xslx
arquivo com formatação condicional anexando oto_excel()
métodoAtualização para pandas> = 0,24
Ao definir
axis=None
, agora é possível calcular as cores com base em toda a matriz, e não por coluna ou linha:fonte
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')
. Atualmente, não há como centralizar o cmap em um valor específico, o que pode ser uma boa ideia com cmaps divergentes.Experimente esta função, que também exibe nomes de variáveis para a matriz de correlação:
fonte
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')
se você quiser orientação vertical de nomes de colunas em x-axisplt.tight_layout()
também pode ser útil para nomes longos de colunas.Versão do mapa de calor do Seaborn:
fonte
Você pode observar a relação entre os recursos desenhando um mapa de calor do mar ou a matriz de dispersão dos pandas.
Matriz de dispersão:
Se você deseja visualizar a assimetria de cada recurso também - use gráficos de pares marítimos.
Sns Heatmap:
A saída será um mapa de correlação dos recursos. ou seja, veja o exemplo abaixo.
A correlação entre mercearia e detergentes é alta. Similarmente:
Pdodutos com alta correlação:Dos gráficos em pares: é possível observar o mesmo conjunto de relações dos gráficos em pares ou da matriz de dispersão. Mas a partir disso, podemos dizer que, se os dados são normalmente distribuídos ou não.
Nota: O gráfico acima é o mesmo retirado dos dados, usado para desenhar o mapa de calor.
fonte
from matplotlib import pyplot as pl
Você pode usar o método imshow () no matplotlib
fonte
Se você é o dataframe,
df
pode simplesmente usar:fonte
Os gráficos statmodels também oferecem uma boa visão da matriz de correlação
fonte
Por uma questão de completude, a solução mais simples que conheço com os marinhos no final de 2019, se alguém estiver usando o Jupyter :
fonte
Juntamente com outros métodos, também é bom ter um gráfico de pares que fornecerá o gráfico de dispersão para todos os casos -
fonte
Matriz de correlação de formulários, no meu caso, zdf é o quadro de dados que eu preciso para executar a matriz de correlação.
Então podemos tirar uma captura de tela. ou converter html em um arquivo de imagem.
fonte