1. Nauka
  2. /
  3. Kursy
  4. /
  5. Wprowadzenie do Spark z pakietem sparklyr w R

Connected

ćwiczenie

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))

Instrukcje

100 XP

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_time na podstawie track_metadata_tbl.
    • Wybierz pola artist_hotttnesss i year.
    • Przekonwertuj kolumnę year na typ numeric.
    • Użyj ft_bucketizer(), aby utworzyć nowe pole decade, które dzieli lata według wartości decades.
    • Pobierz wynik za pomocą collect().
    • Przekonwertuj pole decade na czynnik z etykietami decade_labels.
  • Narysuj wykres pudełkowy ggplot() przedstawiający artist_hotttnesss według decade.
    • Pierwszym argumentem ggplot() jest argument danych: hotttnesss_over_time.
    • Drugim argumentem ggplot() jest estetyka – przekaż decade i artist_hotttnesss opakowane w aes().
    • Dodaj geom_boxplot(), aby narysować wykres pudełkowy.