Trasformare variabili continue in categoriche (1)
Una generalizzazione dell’idea precedente è usare più soglie; cioè, suddividere una variabile continua in "bucket" (o "bin"), proprio come fa un istogramma. In R base useresti cut() per questo compito. Per esempio, in uno studio sulle abitudini al fumo, potresti prendere il numero tipico di sigarette fumate al giorno e trasformarlo in un fattore.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
L’equivalente in sparklyr è usare ft_bucketizer(). Il codice ha un formato simile a ft_binarizer(), ma questa volta devi passare un vettore di punti di taglio all’argomento splits. Ecco lo stesso esempio riscritto in stile sparklyr.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Ci sono diversi aspetti importanti da notare. Avrai notato che l’argomento breaks di cut() corrisponde a splits di ft_bucketizer(). C’è una piccola differenza in come vengono gestiti i valori sul bordo. In cut(), per impostazione predefinita, il bordo superiore (a destra) è incluso in ciascun bucket, ma non quello sinistro. ft_bucketizer() include il bordo inferiore (a sinistra) in ciascun bucket, ma non quello destro. Questo significa che è equivalente a chiamare cut() con l’argomento right = FALSE.
Un’eccezione è che ft_bucketizer() include i valori su entrambi i bordi per il bucket più alto. Quindi ft_bucketizer() è anche equivalente a impostare include.lowest = TRUE quando usi cut().
L’ultima cosa da notare è che mentre cut() restituisce un fattore, ft_bucketizer() restituisce un vettore numeric, con i valori nel primo bucket come zero, nel secondo come uno, nel terzo come due, e così via. Se vuoi lavorare sui risultati in R, devi convertire esplicitamente in un fattore. Questo è un pattern di codice comune:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
Questo esercizio fa parte del corso
Introduzione a Spark con sparklyr in R
Istruzioni dell'esercizio
È già stata creata una connessione Spark chiamata spark_conn. Una tibble collegata ai metadati delle tracce memorizzati in Spark è stata predefinita come track_metadata_tbl. decades è una sequenza numerica 1920, 1930, …, 2020 e decade_labels è una descrizione testuale di quei decenni.
- Crea una variabile chiamata
hotttnesss_over_timea partire datrack_metadata_tbl.- Seleziona i campi
artist_hotttnessseyear. - Converte la colonna
yearinnumeric. - Usa
ft_bucketizer()per creare un nuovo campo,decade, che suddivide gli anni usandodecades. - Raccogli il risultato.
- Converte il campo
decadein un fattore con etichettedecade_labels.
- Seleziona i campi
- Disegna un grafico a barre con
ggplot()diartist_hotttnesssperdecade.- Il primo argomento di
ggplot()è l’argomento dei dati,hotttnesss_over_time. - Il secondo argomento di
ggplot()è l’estetica, che prendedecadeeartist_hotttnesssracchiusi inaes(). - Aggiungi
geom_boxplot()per disegnare le barre.
- Il primo argomento di
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# track_metadata_tbl, decades, decade_labels have been pre-defined
track_metadata_tbl
decades
decade_labels
hotttnesss_over_time <- track_metadata_tbl %>%
# Select artist_hotttnesss and year
___ %>%
# Convert year to numeric
___ %>%
# Bucketize year to decade using decades vector
___ %>%
# Collect the result
___ %>%
# Convert decade to factor using decade_labels
___
# Draw a boxplot of artist_hotttnesss by decade
ggplot(___, aes(___, ___)) +
___()