Corso
Come data scientist, dovrai analizzare la distribuzione delle variabili nel tuo dataset. Di solito si usano gli istogrammi: sono molto utili per mostrare l’intervallo di valori della variabile, la loro deviazione e dove si concentrano i valori.
Questo tutorial usa R. Se non hai ancora familiarità con R, ti consiglio il nostro corso gratuito Introduzione a R su DataCamp.
Dataset Bike Sharing
Per questo tutorial userai il Bike Sharing Demand Dataset da una competizione Kaggle.
Segui il link, vai alla scheda dei dati e scarica il file train.csv.

Carica il dataset in R.
library(dplyr)
bike<- read.csv("train.csv",
na.strings = FALSE,
strip.white = TRUE)
glimpse(bike)
Caratteristiche del dataset
| Variabile | Descrizione |
|---|---|
| datetime | data e ora a livello orario |
| season | 1 = primavera 2 = estate 3 = autunno 4 = inverno |
| holiday | se il giorno è considerato festivo |
| workingday | se il giorno non è né weekend né festivo |
| weather | 1: Sereno, Poche nuvole, Parzialmente nuvoloso, Parzialmente nuvoloso 2: Foschia + Nuvoloso, Foschia + Nubi sparse, Foschia + Poche nuvole, Foschia 3: Neve debole, Pioggia debole + Temporale + Nubi sparse, Pioggia debole + Nubi sparse 4: Pioggia forte + Grandine + Temporale + Foschia, Neve + Nebbia |
| temp | temperatura in Celsius |
| atemp | temperatura "percepita" in Celsius |
| humidity | umidità relativa |
| windspeed | velocità del vento |
| casual | numero di noleggi avviati da utenti non registrati |
| registered | numero di noleggi avviati da utenti registrati |
| count | numero totale di noleggi |
Selezione delle variabili
Analizzerai la relazione tra atemp e humidity per season, quindi selezionale dal dataset. Ricordati di caricare il pacchetto dplyr.
bike_data<-
bike %>%
dplyr::select(season, atemp, humidity)
head(bike_data)
Istogrammi
Ok, ora sei prontə per iniziare ad analizzare i dati: comincia creando un istogramma per ognuna delle variabili per stagione. Userai la libreria ggplot2, quindi non dimenticare di caricarla.
Istogramma dell'umidità
library(ggplot2)
bike_data %>%
ggplot( aes(x=humidity) ) +
geom_histogram(bins=30) +
facet_wrap(~season,ncol = 2)

Con l’istogramma puoi vedere che l’umidità è più alta in inverno (il che è ovvio), ma puoi anche farti un’idea di come è distribuita in ciascuna stagione.
Ora aggiungi la densità, un rug di densità e cambia i nomi dei facet, così da ottenere una visualizzazione più gradevole.
bike_data %>%
mutate(season_label = case_when(
season == 1 ~ "Spring",
season == 2 ~ "Summer",
season == 3 ~ "fall",
season == 4 ~ "winter")) %>%
ggplot( aes(x=humidity) ) +
geom_histogram(bins=30,aes(y = ..density..)) +
geom_rug()+
geom_density()+
facet_wrap(~season_label,ncol = 2)+
ggtitle("Histogram of humidity by season")

Adesso hai una percezione migliore di come si comporta l’umidità; fai lo stesso con atemp.
Istogramma di atemp
Riusa il codice sopra e cambia la variabile in atemp,
bike_data %>%
mutate(season_label = case_when(
season == 1 ~ "Spring",
season == 2 ~ "Summer",
season == 3 ~ "fall",
season == 4 ~ "winter")) %>%
ggplot( aes(x=atemp) ) +
geom_histogram(bins=30,aes(y = ..density..)) +
geom_rug()+
geom_density()+
facet_wrap(~season_label,ncol = 2)+
ggtitle("Histogram of atemp by season")

Fin qui tutto bene: tutto procede come ti aspetteresti per ciascuna stagione. In ogni grafico hai un’approssimazione della funzione di densità di probabilità.
Ma basandoti su questi grafici è difficile visualizzare come le variabili interagiscono tra loro. La prima difficoltà è che il tuo istogramma dovrebbe essere in 3D, perché stai cercando di trovare la funzione di distribuzione per due variabili.
Adattare una distribuzione bivariata ai tuoi dati
L’obiettivo è visualizzare la distribuzione bivariata; per farlo devi prima adattare una distribuzione bivariata ai dati. Lo farai usando la libreria MASS e la funzione kde2d. La funzione kde2d stimerà la distribuzione bivariata, assumendo la normalità delle variabili aleatorie. Gli input della funzione sono i seguenti,
| input | descrizione |
|---|---|
| x | dati della coordinata x |
| y | dati della coordinata y |
| n | numero di punti della griglia per ciascun asse |
| lims | limiti per x e y |
Ora applicala al dataset filtrando per l’estate,
library(MASS)
bike_data_summer <- bike_data %>% filter(season==1)
bike_density <- kde2d(bike_data_summer$atemp,bike_data_summer$humidity, n=1000)
Nota: Quando carichi la libreria MASS, questa include una funzione
select, che entra in conflitto con la funzioneselectdi dplyr. Per risolvere, quando usi laselectdi dplyr devi anteporredplyr::, ad esempiodplyr::select(), affinché funzioni correttamente.
Ora guarda la classe e la struttura di bike_density
class(bike_density)
str(bike_density)
È una lista con 3 valori x, y e z. I primi due contengono i valori delle variabili, il terzo è una matrice con i valori della pdf. Osserva la densità usando la funzione contour,
contour(bike_density)
text(12.2,92,"1",cex=1.5)
points(12.2,89,col="red",pch=18)
text(10.4,47,"2",cex=1.5)
points(10.4,43,col="red",pch=18)
text(21,45,"3",cex=1.5)
points(21,40,col="red",pch=18)
text(21.6,82,"4",cex=1.5)
points(21.6,78,col="red",pch=18)

Guardando questo grafico puoi identificare alcuni punti di accumulo, che possono essere intesi come i valori più frequenti per la combinazione delle due variabili. I valori per ciascun punto sono riassunti nella seguente tabella,
| punto | atemp (°C) | umidità (%) |
|---|---|---|
| 1 | 12.2 | 89 |
| 2 | 10.4 | 43 |
| 3 | 21 | 43 |
| 4 | 21.6 | 78 |
Heatmap
Per creare la tua heatmap devi prima definire la scala di colori che vuoi usare; puoi farlo con la funzione colorRampPalette
hm_col_scale<-colorRampPalette(c("black","blue","green","orange","red"))(1000)
hm_col_scale è un vettore che va dal nero al rosso usando codici RGB in 1000 passi.
Ora disegna la tua mappa di calore usando la funzione image, che si usa per rappresentare matrici.
image(bike_density$z,
col = hm_col_scale,
zlim=c(min(bike_density$z), max(bike_density$z)))
text(0.31,0.46,"Most Frequent",col="blue",cex=0.8)
points(0.31,0.45,col="blue",pch=18)

Come vedi, questo grafico contiene più informazioni del contour plot, perché i colori indicano l’intensità del punto di accumulo. Puoi notare che i valori più frequenti di umidità e atemp durante la primavera sono intorno al punto $(10.4,43)$
Conclusione
Ora sai come creare una mappa di calore: tocca a te crearne una. Inizia guardando le altre stagioni e la relazione con le altre variabili.
Pensa a come potresti usare queste informazioni per capire quante bici devi mettere a disposizione per i diversi valori delle variabili, considerando che i punti più frequenti hanno una probabilità più alta.
Se vuoi approfondire la creazione di visualizzazioni con ggplot, dai un’occhiata al nostro corso Data Visualization with ggplot2.

