
In questo tutorial, esplorerai diversi metodi di visualizzazione dei dati e le statistiche alla loro base. In particolare, vedrai come identificare tendenze e relazioni tra variabili in un data frame.
Esatto: ti concentrerai su concetti come correlazione e regressione! Per prima cosa, farai un’introduzione alla correlazione in R. Poi, vedrai come tracciare matrici di correlazione in R usando pacchetti come ggplot2 e GGally. Infine, vedrai quali tipi di correlazioni esistono e perché contano per le analisi successive.
Se vuoi approfondire l’argomento, valuta di seguire il corso di DataCamp Correlation and Regression.
Contesto
Nell’esercitazione di oggi lavorerai con un set di dati sui film preso da Kaggle per scoprire come comprendere meglio le relazioni tra variabili.
Ho normalizzato leggermente i dati per rendere l’analisi omogenea, ad esempio assicurandomi che le valute fossero nella stessa unità. Senza questo passaggio, l’analisi statistica di variabili come gross, budget e profit sarebbe fuorviante. Puoi accedere al set di dati originale.
Importare i dati
Per accedere al set di dati movies e usarlo, puoi utilizzare la funzione read.csv() per importare i dati in un data frame e salvarli in una variabile dal nome incredibilmente originale: movies!
movies <- read.csv(url("http://s3.amazonaws.com/dcwoods2717/movies.csv"))
È tutto ciò che serve per iniziare!
Ispezione di base dei dati
Dopo aver importato un data frame, è una buona idea farsi un’idea di cosa contenga. Per prima cosa, controlla la struttura dei dati che stai esaminando. Qui sotto puoi vedere i risultati dell’uso di str(), una funzione semplicissima e utile:
str(movies)
## 'data.frame': 2961 obs. of 11 variables:
## $ title : Factor w/ 2907 levels "10 Cloverfield Lane",..: 1560 2143 34 2687 1405 1896 2633 894 1604 665 ...
## $ genre : Factor w/ 17 levels "Action","Adventure",..: 6 12 5 5 5 3 2 8 3 8 ...
## $ director : Factor w/ 1366 levels "Aaron Schneider",..: 474 472 781 828 175 1355 1328 1328 968 747 ...
## $ year : int 1920 1929 1933 1935 1936 1937 1939 1939 1940 1946 ...
## $ duration : int 110 100 89 81 87 83 102 226 88 144 ...
## $ gross : int 3000000 2808000 2300000 3000000 163245 184925485 22202612 198655278 84300000 20400000 ...
## $ budget : int 100000 379000 439000 609000 1500000 2000000 2800000 3977000 2600000 8000000 ...
## $ cast_facebook_likes: int 4 109 995 824 352 229 2509 1862 1178 2037 ...
## $ votes : int 5 4546 7921 13269 143086 133348 291875 215340 90360 6304 ...
## $ reviews : int 2 107 162 164 331 349 746 863 252 119 ...
## $ rating : num 4.8 6.3 7.7 7.8 8.6 7.7 8.1 8.2 7.5 6.9 ...
In questo data frame, dalla console vedi che sono presenti 2961 osservazioni di 11 variabili.
Nota a margine: anche se ogni film durasse solo un’ora, dovresti guardarli ininterrottamente per oltre quattro mesi per vederli tutti!
La console elenca anche ogni variabile per nome, la classe di ciascuna variabile e alcuni valori di esempio. Questo ci dà una buona idea di cosa contenga il data frame, comprensione cruciale per le nostre analisi.
Un’altra ottima funzione per ottenere rapidamente una panoramica ad alto livello del data frame è summary(). Nota somiglianze e differenze rispetto all’output di str().
summary(movies)
## title genre
## Home : 3 Comedy :848
## A Nightmare on Elm Street : 2 Action :738
## Across the Universe : 2 Drama :498
## Alice in Wonderland : 2 Adventure:288
## Aloha : 2 Crime :202
## Around the World in 80 Days: 2 Biography:135
## (Other) :2948 (Other) :252
## director year duration
## Steven Spielberg : 23 Min. :1920 Min. : 37.0
## Clint Eastwood : 19 1st Qu.:1999 1st Qu.: 95.0
## Martin Scorsese : 16 Median :2004 Median :106.0
## Tim Burton : 16 Mean :2003 Mean :109.6
## Spike Lee : 15 3rd Qu.:2010 3rd Qu.:119.0
## Steven Soderbergh: 15 Max. :2016 Max. :330.0
## (Other) :2857
## gross budget cast_facebook_likes
## Min. : 703 Min. : 218 Min. : 0
## 1st Qu.: 12276810 1st Qu.: 11000000 1st Qu.: 2241
## Median : 34703228 Median : 26000000 Median : 4604
## Mean : 58090401 Mean : 40619384 Mean : 12394
## 3rd Qu.: 75590286 3rd Qu.: 55000000 3rd Qu.: 16926
## Max. :760505847 Max. :300000000 Max. :656730
##
## votes reviews rating
## Min. : 5 Min. : 2.0 Min. :1.600
## 1st Qu.: 19918 1st Qu.: 199.0 1st Qu.:5.800
## Median : 55749 Median : 364.0 Median :6.500
## Mean : 109308 Mean : 503.3 Mean :6.389
## 3rd Qu.: 133348 3rd Qu.: 631.0 3rd Qu.:7.100
## Max. :1689764 Max. :5312.0 Max. :9.300
##
Con un solo comando, R ti restituisce alcune informazioni statistiche chiave per ogni variabile del data frame. Ora che sai con cosa stai lavorando, addentriamoci un po’ di più nei dati!
Feature Engineering: calcolare il profitto
Esaminando le variabili disponibili, sembra che alcune variabili numeriche possano essere manipolate per fornire nuove informazioni sul data frame.
Per esempio, hai le variabili gross e budget, quindi perché non usare un po’ di subsetting per calcolare il profitto di ogni film?
Puoi calcolare il profitto con la formula profit = gross - budget. Provalo nel blocco DataCamp Light qui sotto!
Fantastico!
Puoi notare che nel nostro data frame ci sono parecchi film che hanno fatto guadagnare molto e altri che sono stati dei buchi neri di denaro.
Il profit dei nostri film potrà tornare utile per analisi interessanti più avanti, quindi aggiungiamolo come nuova colonna al data frame.
Correlazione
Ora che profit è stato aggiunto come nuova colonna del data frame, è il momento di guardare più da vicino le relazioni tra le variabili del set di dati.
Vediamo come profit varia in relazione al rating di ciascun film.
Per farlo puoi usare le funzioni integrate di R plot e abline: plot produce uno scatter plot e abline disegna una retta di regressione o “linea di miglior adattamento” grazie all’inclusione del modello lineare, come vedrai tra poco.
L’output corrisponde più o meno a quello che ti aspettavi?

In generale, sembra che i film con rating più alto tendano ad avere profit più alto. Un altro modo per dirlo è che esiste una correlazione positiva tra rating e profit, almeno nel nostro data frame.
Detto ciò, anche un’occhiata veloce al grafico rivela che ci sono molti film molto apprezzati che non sono stati campioni d’incasso, e diversi film molto redditizi che hanno ottenuto valutazioni relativamente basse.
La correlazione NON implica causalità!
Un aneddoto per capire correlazione e causalità: gestisco un chiosco di gelati in spiaggia. Il numero medio di pedoni che attraversano fuori dalle strisce in città tende ad aumentare quando aumentano le mie vendite di gelati; ma sono i miei gelati a spingere le persone a ignorare il codice della strada, o c’è altro? I miei gelati sono indubbiamente fantastici, ma probabilmente è il sole a far venire voglia di gelato e a far sì che la gente non voglia aspettare ai semafori sotto il sole. Esiste una relazione (correlazione) tra le mie vendite e il numero di pedoni indisciplinati, ma non puoi affermare con certezza che sia una relazione causale.
Tieni a mente questo ragionamento mentre prosegui nel tutorial!
Calcolare la correlazione in R
Che tipi di relazioni esistono tra le variabili in movies e come puoi valutarle quantitativamente?
Un primo modo è calcolare correlazioni e matrici di correlazione con cor():
Nota che puoi anche specificare il metodo per indicare quale coefficiente di correlazione calcolare. Fai attenzione, perché questi metodi fanno alcune assunzioni: i metodi Kendall e Spearman hanno senso solo per input ordinati. Significa che dovrai ordinare i dati prima di calcolare il coefficiente di correlazione.
Inoltre, il metodo predefinito, la correlazione di Pearson, assume che le variabili siano distribuite normalmente, che esista una relazione lineare tra ogni coppia di variabili e che i dati siano distribuiti normalmente attorno alla retta di regressione.
Nota anche che puoi usare rcorr(), parte del pacchetto Hmisc, per calcolare i livelli di significatività per le correlazioni di Pearson e Spearman.
Vedrai anche che la matrice di correlazione è in pratica una tabella che mostra i coefficienti di correlazione tra insiemi di variabili. È già un ottimo primo modo per capire quali relazioni esistono tra le variabili del set di dati; approfondiamo però nella prossima sezione.
Esplorare visivamente la correlazione: la matrice di correlazione in R
In questa esplorazione, traccerai una matrice di correlazione usando le variabili disponibili nel tuo data frame movies. Questo semplice grafico ti permetterà di visualizzare rapidamente quali variabili hanno una correlazione negativa, positiva, debole o forte con le altre.
Per riuscirci userai un pratico pacchetto chiamato GGally e una funzione chiamata ggcorr().
La chiamata avrà la forma ggcorr(df), dove df è il nome del data frame su cui richiami la funzione. L’output sarà una matrice a forma triangolare, codificata a colori e etichettata con i nomi delle variabili. Il coefficiente di correlazione di ciascuna variabile rispetto alle altre si legge scorrendo la matrice in orizzontale e/o in verticale, a seconda della posizione della variabile.
Può sembrare confuso, ma in pratica è semplicissimo: prova nel blocco di codice che segue!

Nella matrice di correlazione che hai appena creato (ottimo lavoro!), puoi andare alla riga o alla colonna associata a una variabile, ad esempio year, e vedere il suo coefficiente di correlazione indicato dal colore della cella corrispondente a un’altra variabile.
Esaminando year, per esempio, vedi che c’è una correlazione positiva debole con budget e, in modo simile, una correlazione negativa debole con rating.
I coefficienti di correlazione sono sempre compresi tra -1 e 1, inclusi. Un coefficiente pari a -1 indica un adattamento perfetto e negativo, in cui i valori di y diminuiscono alla stessa velocità con cui i valori di x aumentano. Un coefficiente pari a 1 indica un adattamento perfetto e positivo, in cui i valori di y aumentano alla stessa velocità con cui aumentano i valori di x.
Nella maggior parte dei casi, come nell’esempio di year qui sopra, il coefficiente di correlazione sarà compreso tra -1 e 1.
Hai notato qualcosa di strano nelle variabili mostrate nella matrice di correlazione?
Non tutte le variabili di movies sono presenti!
È perché non tutte le variabili di movies sono numeriche. La funzione ggcorr ignora automaticamente le variabili non numeriche, risparmiandoti il tempo di doverle escludere prima di creare la matrice.
Se vuoi che la tua matrice di correlazione “salti all’occhio” (o magari sei un po’ daltonico, come me), ci sono alcune semplici modifiche per renderla più leggibile e carica di informazioni.
Nel blocco di codice che segue, è incluso l’argomento label, che può essere impostato su TRUE o FALSE. L’impostazione predefinita è FALSE, ma se aggiungi label = TRUE, in ogni cella viene mostrato il coefficiente di correlazione della relazione corrispondente. Così non devi indovinare i valori dai colori.
L’argomento label_alpha ti permette di aumentare o diminuire l’opacità di ciascuna etichetta in base all’intensità del coefficiente di correlazione. È molto utile per un’analisi visiva rapida.
Non fidarti sulla parola, provalo tu stesso!
Ora tracciamo una matrice di correlazione migliore:

Nei grafici che seguono, vedrai che quando c’è una correlazione “forte”, la pendenza della retta di regressione (x/y) è più vicina a 1/1 o -1/1, mentre in una correlazione “debole” la retta può avere una pendenza minima. Una pendenza più vicina a 1/1 o -1/1 implica che le due variabili rappresentate siano strettamente correlate.
Nel caso del nostro data frame movies, una retta di regressione può offrire indicazioni importanti sulla natura delle variabili e suggerire una loro interdipendenza.
Per esempio, nel tuo grafico precedente di profit rispetto a rating, la retta di regressione aveva una pendenza positiva moderata. Guardando la matrice di correlazione, vedi che il coefficiente tra queste due variabili è 0,3.
Torna tutto, no?
Tipi di correlazione
Vediamo ora altri grafici che illustrano i diversi tipi di correlazione che hai visto nella sezione precedente!
Correlazione forte: grafico di voti contro recensioni
Cominciamo tracciando due variabili con una correlazione positiva forte.
Guardando la matrice di correlazione, sembra che votes rispetto a reviews soddisfi i criteri, con un valore di correlazione di 0,8. Significa che la pendenza dovrebbe essere relativamente vicina a 1/1.
In questo esercizio e nei successivi userai il pacchetto ggplot2. ggplot2 è una cassetta degli attrezzi versatile per creare visualizzazioni efficaci dei dati.
In questo caso, userai la funzione qplot del pacchetto ggplot2, che può produrre molti tipi di grafici in base al tipo passato all’argomento geom (geometria).
Nel blocco di codice seguente, geom è impostato su un vettore con due geometrie, point e smooth: point produce uno scatter plot e smooth genera una linea di tendenza. Noterai anche che method è impostato su lm, il che significa che la linea di tendenza sarà la familiare retta di regressione già vista nel grafico di profit rispetto a years.
In breve, scoprirai quanto è facile creare visualizzazioni potenti in un attimo!

Avrai riconosciuto l’argomento alpha incluso in qplot. L’uso di alpha in qplot applica un gradiente di opacità ai punti nello scatter plot, in modo simile a come cambiava l’opacità delle etichette dei coefficienti in ggcorr.
Nella configurazione usata, l’opacità totale si ottiene solo quando un punto è sovrapposto da altri 5 punti. Aumentare o diminuire il numero al denominatore di alpha cambia quanti punti sovrapposti servono per modificare l’opacità. Questo aiuto visivo può rendere più rapido individuare le concentrazioni di punti nel grafico, facendo emergere nuove intuizioni sui dati a colpo d’occhio.
Metti mano al codice e vedi come funziona!
Correlazione debole: grafico del profitto nel tempo
Ora vediamo come appare una correlazione “debole” e negativa tracciando profit rispetto a years. Questa volta non è stato specificato alcun method, quindi la linea di tendenza varierà in modo curvilineo in base ai dati (una curva adattata), che è l’impostazione predefinita della funzione. Noterai che lungo alcuni tratti della linea di tendenza c’è un’area grigia chiara che aumenta o diminuisce in base all’ampiezza dell’intervallo di confidenza della curva.
Se non conosci il concetto di intervallo di confidenza, non preoccuparti! R farà il lavoro per te, e il concetto sarà spiegato meglio dopo questo esercizio.
Per ora, completa gli spazi con il codice necessario e osserva!

Ora che hai visto intervallo di confidenza e curva di smoothing in azione, che osservazioni puoi fare?
- Per prima cosa, nella parte iniziale del grafico,
profitsembra aumentare di anno in anno (year). - In secondo luogo, noti che l’area grigia attorno alla curva di smoothing è inizialmente piuttosto ampia e il numero di punti (o osservazioni) è piuttosto ridotto.
- In terzo luogo, quando la curva entra in una zona con una maggiore concentrazione di osservazioni, l’area grigia si riduce e praticamente “abbraccia” la curva, che poi inizia a calare negli ultimi
year.
In conclusione, tracciare l’intervallo di confidenza insieme alla curva di smoothing ci permette di vedere la quantità di incertezza associata alla retta di regressione. Tale incertezza aumenta con meno osservazioni e diminuisce con più osservazioni.
Questo è molto utile per visualizzare come il rapporto tra variabili cambi all’interno del data frame e come le concentrazioni di osservazioni modifichino la curva tracciata.
La nota dolente è che il grafico può risultare un po’ fuorviante, perché è difficile capire visivamente se la correlazione tra le variabili sia positiva o negativa.
Tracciamo ora profit rispetto a year nello stesso modo in cui hai tracciato votes contro reviews: sostituisci semplicemente i “…..” in ciascun argomento così che gli anni siano sull’asse x e profit sull’asse y. Assicurati di specificare quale data frame passi come “data”!

Guardando la matrice di correlazione, vedi che il coefficiente di correlazione di profit e year è -0,1, valore forse più facile da visualizzare nel grafico con la linea di miglior adattamento che non nel grafico con la curva adattata.
Ricapitolando
Vediamo ora un’altra potente funzione disponibile in GGally chiamata ggpairs. Questa funzione è ottima perché consente di creare una matrice che mostra il coefficiente di correlazione di più variabili insieme a uno scatter plot (con linea di miglior adattamento e intervallo di confidenza) e a un grafico di densità.
Con un’unica funzione, puoi combinare efficacemente tutto ciò che hai visto in questo tutorial in modo conciso e facilmente comprensibile.
Nel blocco di codice seguente, scegli le tue tre variabili preferite dal data frame (senza bisogno di subsetting!), inseriscile e divertiti!

Come avrai intuito, ci sono molti scenari in cui un tipo di grafico è ideale: la chiave è conoscere le tecniche di visualizzazione disponibili, come usarle e cosa significa il risultato finale!
Prossimi passi
Hai coperto un sacco di argomenti in questo tutorial, quindi complimenti per essere arrivato alla fine!
Spero che tu possa mettere al lavoro questi concetti nelle tue avventure analitiche! Queste sono davvero le basi dell’esplorazione dei dati in R e c’è molto altro che puoi fare per capire bene i tuoi dati prima di iniziare ad analizzarli e modellarli. Perché non fare un passo in più e iniziare il corso di DataCamp Exploratory Data Analysis?
Nel frattempo, ti invito a fare un salto su Kaggle e trovare un set di dati ricco e interessante tutto tuo da esplorare, se non vuoi continuare con il set di dati movies!

