Capire se due o piรน variabili sono correlate ci puรฒ aiutare a identificare pattern e relazioni meno ovvie, quando facciamo analisi dei dati.

In questa micro-lezione vedremo come calcolare la correlazione tra le variabili in un dataframe con Python e pandas.

Cos'รจ la correlazione?

La correlazione รจ una misura statistica che esprime il grado in cui due variabili cambiano insieme.

Il valore della correlazioni รจ espresso da un numero, che prende il nome di coefficiente di correlazione, che รจ compreso tra -1 e 1.

Quando il coefficiente di correlazione tende a 1, si parla di correlazione positiva: quando una variabile aumenta, lo fa anche lโ€™altra. Un classico esempio di correlazione positiva รจ quella tra lโ€™aumento della temperatura e le vendite di gelati.

Quando il coefficiente di correlazione tende a -1, abbiamo una correlazione negativa: quando una variabile aumenta, lโ€™altra diminuisce. Un esempio di correlazione negativa รจ quella tra il prezzo della benzina e suo consumo: infatti, quando il prezzo della benzina aumenta, le persone tendono a guidare meno.

Se il coefficiente di correlazione รจ esattamente 1, ci troviamo di fronte ad una correlazione positiva perfetta. Quando รจ -1 abbiamo una correlazione negativa perfetta.

Se invece il coefficiente di correlazione รจ 0 (o si avvicina ad esso) ciรฒ indica lโ€™assenza di correlazione: i cambiamenti in una variabile non corrispondono ai cambiamenti nell'altra.

Ricapitolando:

  • 1: correlazione positiva perfetta

  • 0: nessuna correlazione

  • -1: correlazione negativa perfetta

Le librerie e il dataframe

Vediamo adesso come calcolare la correlazione tra due variabili allโ€™interno di un set di dati.

Per prima cosa, importiamo le librerie necessarie:

import pandas as pd
import numpy as np

Se vuoi approfondire perchรฉ importiamo le librerie con degli alias, ti consiglio di leggere la micro-lezione che spiega percheฬ scriviamo "import pandas as pd".

Adesso costruiamo un dataframe, ma se ne hai giร  uno a portata di mano puoi saltare questo passaggio:

np.random.seed(42)
df = pd.DataFrame({
    'etร ': np.random.randint(18, 65, 100),
    'stipendio': np.random.randint(20000, 100000, 100),
    'esperienza': np.random.randint(0, 40, 100),
    'soddisfazione': np.random.randint(1, 11, 100)
})

In questo caso abbiamo creato un dataframe con 100 valori random per colonna (ai fini della spiegazione, i valori di alcune colonne sono stati modificati manualmente).

Nel nostro caso, le prime 10 righe del dataframe avranno questo aspetto:

etร 

stipendio

esperienza

soddisfazione

63

92401

52

7

32

71515

22

8

31

98454

16

3

59

49390

50

9

35

69984

19

2

61

88155

47

4

28

62082

13

3

28

63958

13

3

43

45296

26

1

56

72554

39

1

La correlazione tra due colonne

Normalmente, ci aspetteremmo una correlazione positiva tra i valori della colonna โ€œetร โ€ e quelli della colonna โ€œesperienzaโ€, dato che lโ€™esperienza lavorativa di solito aumenta di pari passo con lโ€™etร .

Ecco come ottenere il coefficiente di correlazione tra due variabili (in questo caso, i valori di due colonne):

df['etร '].corr(df['esperienza'])

Ed ecco il risultato:

0.9802131683661705

Con un valore di 0.98, abbiamo una fortissima correlazione positiva.

E se volessimo stabilire la correlazione tra stipendio e soddisfazione allโ€™interno del nostro dataframe?

Nulla di piรน semplice:

df['stipendio'].corr(df['soddisfazione'])

Ed ecco il nostro coefficiente di correlazione tra queste due variabili:

-0.10666109323111787

Con un valore di -0.11, la correlazione รจ debolmente negativa. Sembra quindi che, uno stipendio piรน grande non sia correlato ad una maggiore soddisfazione sul lavoro.

La matrice di correlazione

Ma se volessimo calcolare il coefficiente di correlazione tra tutte le colonne del nostro dataframe in una sola volta?

Per farlo, dobbiamo costruire una matrice (o matrix) di correlazione. Ecco come:

df.corr()

Ed ecco il risultato:

etร 

stipendio

soddisfazione

esperienza

etร 

1.00

-0.07

0.20

0.98

stipendio

-0.07

1.00

-0.11

-0.09

soddisfazione

0.20

-0.10

1.00

0.39

esperienza

0.98

-0.09

0.39

1.00

Analizziamo alcune correlazioni interessanti:

  1. Etร  ed esperienza (0.98): forte correlazione positiva, il che รจ logico poichรฉ piรน si รจ anziani, piรน esperienza lavorativa si tende ad avere.

  2. Soddisfazione ed esperienza (0.39): Correlazione positiva che suggerisce che la gente che ha piรน esperienza tende ad essere piรน soddisfatta del proprio lavoro.

  3. Stipendio ed esperienza (-0.09): Correlazione negativa molto debole che indica che, nel nostro dataframe, allโ€™aumentare dellโ€™esperienza non corrisponde un aumento dello stipendio.

La scelta del metodo di correlazione

Negli esempi visti fin qui, abbiamo utilizzato df.corr() senza modificare alcun parametro.

Questo vuol dire che, per calcolare il coefficiente di correlazione abbiamo sempre usato il metodo โ€œpearsonโ€.

df.corr() ci permette infatti di scegliere tra 3 metodi di correlazione:

  • โ€œpearsonโ€: ideale quando i dati sono distribuiti normalmente e si vuole calcolare una correlazione lineare.

  • โ€œkendallโ€: non presuppone una relazione lineare nรฉ una distribuzione normale dei dati. Ideale quando si ha campioni di dati piccoli.

  • โ€œspearmanโ€: รจ adatto quando si vuole misurare la forza e la direzione di una relazione monotona tra due variabili, specialmente quando i dati non sono distribuiti normalmente o contengono outlier.

Per scegliere un metodo diverso da quello di Pearson (che รจ quello di default) ci basta fare cosรฌ:

# Coefficiente di Spearman

df.corr(method='kendall')


# Coefficiente di Kendall Tau

df.corr(method='spearman')

Ultime considerazioni

Per concludere, ricorda che il valore di default di df.corr() รจ โ€œpearsonโ€, ma puoi cambiarlo a seconda del tipo dei dati che stai analizzando.

Inoltre, il coefficiente di correlazione calcolato con df.corr() esclude sempre eventuali valori nulli presenti nel tuo dataframe.

Alla prossima micro-lezione ๐Ÿ‘‹