59

Ho un set di dati con un numero enorme di funzioni, quindi l'analisi della matrice di correlazione è diventata molto difficile. Voglio tracciare una matrice di correlazione che otteniamo usando la funzione dataframe.corr() dalla libreria pandas. C'è una funzione incorporata fornita dalla libreria pandas per tracciare questa matrice?Matrix di correlazione utilizzando i panda

risposta

94

È possibile utilizzare matshow() da matplotlib:

plt.matshow(dataframe.corr())

46

Prova questa funzione, che visualizza anche i nomi delle variabili per la matrice di correlazione:

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); 
38

versione heatmap di Seaborn:

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

La heatmap di Seaborn è elegante ma presenta prestazioni scadenti su matrici di grandi dimensioni. Il metodo matshow di matplotlib è molto più veloce. – anilbey

22

È possibile osservare la relazione tra le caratteristiche o disegnando una mappa di calore da una matrice marina o di dispersione dai panda.

Scatter Matrix:

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

Se si desidera visualizzare asimmetria di ogni funzione, come pure - utilizzare pairplots Seaborn.

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) 

L'uscita sarà una mappa correlazione delle caratteristiche. vedere l'esempio di seguito.

enter image description here

La correlazione tra di alimentari e detersivi è alto. Analogamente:

Pdoducts ad alta correlazione:
  1. e alimentari e detersivi.
Prodotti con tecnologia di correlazione medio:
  1. Milk and Grocery
  2. latte e Detergents_Paper
prodotti a basso Correlazione:
  1. latte e Deli
  2. surgelati e prodotti freschi.
  3. Frozen and Deli.

Da doppi grafici: è possibile osservare lo stesso insieme di relazioni da doppi grafici o matrice di dispersione. Ma da questi possiamo dire che i dati sono normalmente distribuiti o meno.

enter image description here

Nota: Quanto sopra è stesso grafico in base ai dati, che viene utilizzato per disegnare heatmap.

+1

Penso che dovrebbe essere .plt non .pl (se questo si riferisce a matplotlib) – ghukill

+1

@ghukill Non necessariamente. Potrebbe averlo definito come 'da matplotlib import pyplot as pl' –

+2

Fair point @JeruLuke, buon chiarimento. – ghukill