Transformace spojitých proměnných na kategorické (1)
Rozšířením předchozí myšlenky je použití více prahových hodnot – tedy rozdělení spojité proměnné do „košů" (nebo „přihrádek"), stejně jako to dělá histogram. V základním R by sis na tento úkol pomohl/a funkcí cut(). Například ve studii o kuřáckých návycích můžeš vzít průměrný počet cigaret za den a převést ho na faktor.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
Ekvivalentem v sparklyr je funkce ft_bucketizer(). Kód má podobný formát jako ft_binarizer(), tentokrát ale musíš předat vektor hraničních hodnot argumentu splits. Tady je stejný příklad přepsaný ve stylu sparklyr.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Je tu několik důležitých věcí, které stojí za pozornost. Možná sis všiml/a, že argument breaks z funkce cut() odpovídá argumentu splits z ft_bucketizer(). Drobný rozdíl je v tom, jak se zachází s hodnotami na hranici přihrádky. Ve funkci cut() je standardně horní (pravá) hranice každé přihrádky zahrnuta, levá nikoli. ft_bucketizer() naopak zahrnuje dolní (levou) hranici, ale nikoli pravou. Chová se tedy stejně jako volání cut() s argumentem right = FALSE.
Výjimkou je nejvyšší přihrádka – ft_bucketizer() v jejím případě zahrnuje obě hranice. To odpovídá nastavení include.lowest = TRUE ve funkci cut().
A ještě jedna důležitá věc: zatímco cut() vrací faktor, ft_bucketizer() vrací číselný vektor (numeric) – hodnoty v první přihrádce jsou nula, ve druhé jedna, ve třetí dva a tak dále. Pokud chceš s výsledky dál pracovat v R, musíš je explicitně převést na faktor. Toto je typický vzor kódu:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
Toto cvičení je součástí kurzu
Úvod do Sparku se sparklyr v R
Pokyny k cvičení
Připojení ke Sparku je pro tebe připraveno jako spark_conn. Tibble napojený na metadata skladeb uložená ve Sparku je předdefinován jako track_metadata_tbl. decades je číselná posloupnost 1920, 1930, …, 2020 a decade_labels jsou textové popisky těchto dekád.
- Vytvoř proměnnou
hotttnesss_over_timeztrack_metadata_tbl.- Vyber sloupce
artist_hotttnesssayear. - Převeď sloupec
yearna číselný typ (numeric). - Pomocí
ft_bucketizer()vytvoř nové poledecade, které rozdělí roky podle hodnot vdecades. - Sesbírej výsledek pomocí
collect(). - Převeď pole
decadena faktor s popiskydecade_labels.
- Vyber sloupce
- Vytvoř boxplot v
ggplot()znázorňujícíartist_hotttnessspodledecade.- Prvním argumentem
ggplot()je datový argumenthotttnesss_over_time. - Druhým argumentem
ggplot()je estetika –decadeaartist_hotttnessszabalené doaes(). - Přidej
geom_boxplot()pro vykreslení boxplotů.
- Prvním argumentem
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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(___, ___)) +
___()