ÎncepețiÎncepe gratuit

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

Vezi cursul

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_time pornind de la track_metadata_tbl.
    • Selectează câmpurile artist_hotttnesss și year.
    • Convertește coloana year la numeric.
    • Folosește ft_bucketizer() pentru a crea un câmp nou, decade, care împarte anii folosind decades.
    • Colectează rezultatul.
    • Convertește câmpul decade într-un factor cu etichetele decade_labels.
  • Desenează un grafic ggplot() de tip boxplot pentru artist_hotttnesss în funcție de decade.
    • Primul argument al ggplot() este argumentul pentru date, hotttnesss_over_time.
    • Al doilea argument al ggplot() este estetica, care primește decade și artist_hotttnesss învelite în aes().
    • Adaugă geom_boxplot() pentru a desena graficul.

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(___, ___)) +
  ___()  
Editează și rulează codul