Przekształcanie zmiennych ciągłych na kategoryczne (1)
Uogólnieniem poprzedniego podejścia jest zastosowanie wielu progów – czyli podział zmiennej ciągłej na „przedziały" (ang. buckets lub bins), podobnie jak robi to histogram. W podstawowym R do tego celu służy funkcja cut(). Na przykład w badaniu nawyków palenia możesz wziąć typową liczbę papierosów wypalanych dziennie i przekształcić ją w czynnik.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
Odpowiednikiem tej funkcji w sparklyr jest ft_bucketizer(). Kod ma podobną strukturę do ft_binarizer(), ale tym razem musisz przekazać wektor punktów podziału do argumentu splits. Poniżej ten sam przykład zapisany w stylu sparklyr.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Warto zwrócić uwagę na kilka ważnych kwestii. Argument breaks z funkcji cut() odpowiada argumentowi splits z ft_bucketizer(). Istnieje jednak subtelna różnica w tym, jak obsługiwane są wartości leżące na granicy przedziału. W cut() domyślnie górna (prawa) granica jest włączona do przedziału, a dolna – nie. ft_bucketizer() włącza dolną (lewą) granicę do przedziału, a górną – nie. Oznacza to, że jest to równoważne wywołaniu cut() z argumentem right = FALSE.
Wyjątkiem jest najwyższy przedział – ft_bucketizer() włącza do niego wartości z obu granic. Dlatego ft_bucketizer() jest też równoważne ustawieniu include.lowest = TRUE w funkcji cut().
Na koniec warto wiedzieć, że o ile cut() zwraca czynnik, o tyle ft_bucketizer() zwraca wektor numeric – wartości z pierwszego przedziału są zwracane jako zero, z drugiego jako jeden, z trzeciego jako dwa itd. Jeśli chcesz pracować z wynikami w R, musisz jawnie przekonwertować je na czynnik. Typowy wzorzec kodu wygląda następująco:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark z pakietem sparklyr w R
Instrukcje do ćwiczenia
Połączenie ze Sparkiem zostało już utworzone jako spark_conn. Obiekt tibble podłączony do metadanych utworów przechowywanych w Sparku jest wstępnie zdefiniowany jako track_metadata_tbl. decades to sekwencja liczbowa 1920, 1930, …, 2020, a decade_labels to tekstowe opisy tych dekad.
- Utwórz zmienną o nazwie
hotttnesss_over_timena podstawietrack_metadata_tbl.- Wybierz pola
artist_hotttnesssiyear. - Przekonwertuj kolumnę
yearna typnumeric. - Użyj
ft_bucketizer(), aby utworzyć nowe poledecade, które dzieli lata według wartościdecades. - Pobierz wynik za pomocą
collect(). - Przekonwertuj pole
decadena czynnik z etykietamidecade_labels.
- Wybierz pola
- Narysuj wykres pudełkowy
ggplot()przedstawiającyartist_hotttnessswedługdecade.- Pierwszym argumentem
ggplot()jest argument danych:hotttnesss_over_time. - Drugim argumentem
ggplot()jest estetyka – przekażdecadeiartist_hotttnesssopakowane waes(). - Dodaj
geom_boxplot(), aby narysować wykres pudełkowy.
- Pierwszym argumentem
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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(___, ___)) +
___()