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.
Il programma della micro-lezione
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 npSe 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.9802131683661705Con 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.10666109323111787Con 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:
Etร ed esperienza (0.98): forte correlazione positiva, il che รจ logico poichรฉ piรน si รจ anziani, piรน esperienza lavorativa si tende ad avere.
Soddisfazione ed esperienza (0.39): Correlazione positiva che suggerisce che la gente che ha piรน esperienza tende ad essere piรน soddisfatta del proprio lavoro.
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 ๐
