Transformarea variabilelor continue în categorice (1)
O generalizare a ideii anterioare este să folosești mai multe praguri: adică să împarți o variabilă continuă în „compartimente" (sau „intervale"), exact ca un histogramă. În R de bază, ai folosi cut() pentru această sarcină. De exemplu, într-un studiu despre obiceiurile de fumat, ai putea prelua numărul tipic de țigări fumate pe zi și îl poți transforma într-un factor.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
Echivalentul din sparklyr este ft_bucketizer(). Codul are un format similar cu ft_binarizer(), însă de această dată trebuie să transmiți un vector de puncte de tăiere argumentului splits. Iată același exemplu rescris în stilul sparklyr.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Există câteva aspecte importante de reținut. Poate ai observat că argumentul breaks din cut() corespunde argumentului splits din ft_bucketizer(). Există o mică diferență în modul în care sunt tratate valorile de pe frontieră. În cut(), implicit, frontiera superioară (dreaptă) este inclusă în fiecare compartiment, nu și cea stângă. ft_bucketizer() include frontiera inferioară (stângă) în fiecare compartiment, nu și cea dreaptă. Prin urmare, este echivalent cu apelarea cut() cu argumentul right = FALSE.
O excepție: ft_bucketizer() include valorile de pe ambele frontiere pentru compartimentul cel mai de sus. Astfel, ft_bucketizer() este echivalent și cu setarea include.lowest = TRUE atunci când folosești cut().
Un ultim lucru de reținut: în timp ce cut() returnează un factor, ft_bucketizer() returnează un vector numeric – valorile din primul compartiment sunt returnate ca zero, cele din al doilea ca unu, cele din al treilea ca doi și așa mai departe. Dacă vrei să lucrezi cu rezultatele în R, trebuie să convertești explicit la factor. Acesta este un tipar de cod frecvent:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
Acest exercițiu face parte din cursul
Introducere în Spark cu sparklyr în R
Instrucțiuni pentru exercițiu
O conexiune Spark a fost creată pentru tine ca spark_conn. Un tibble atașat la metadatele pistelor stocate în Spark a fost predefinit ca track_metadata_tbl. decades este o secvență numerică de 1920, 1930, …, 2020, iar decade_labels conține descrieri text ale acestor decenii.
- Creează o variabilă numită
hotttnesss_over_timepornind de latrack_metadata_tbl.- Selectează câmpurile
artist_hotttnesssșiyear. - Convertește coloana
yearlanumeric. - Folosește
ft_bucketizer()pentru a crea un câmp nou,decade, care împarte anii folosinddecades. - Colectează rezultatul.
- Convertește câmpul
decadeîntr-un factor cu eticheteledecade_labels.
- Selectează câmpurile
- Desenează un grafic
ggplot()de tip boxplot pentruartist_hotttnesssîn funcție dedecade.- Primul argument al
ggplot()este argumentul pentru date,hotttnesss_over_time. - Al doilea argument al
ggplot()este estetica, care primeștedecadeșiartist_hotttnesssînvelite înaes(). - Adaugă
geom_boxplot()pentru a desena graficul.
- Primul argument al
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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(___, ___)) +
___()