Continue variabelen omzetten naar categorisch (1)
Een generalisatie van het vorige idee is om meerdere drempels te hebben; je splitst een continue variabele in "buckets" (of "bins"), net zoals een histogram doet. In base-R zou je hiervoor cut() gebruiken. In een onderzoek naar rookgewoonten kun je bijvoorbeeld het gemiddelde aantal sigaretten per dag nemen en dat omzetten naar een factor.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
Het sparklyr-equivalent hiervan is ft_bucketizer() gebruiken. De code lijkt op ft_binarizer(), maar deze keer geef je een vector met snijpunten door aan het splits-argument. Hieronder staat hetzelfde voorbeeld herschreven in sparklyr-stijl.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Er zijn een paar belangrijke dingen om op te merken. Je hebt misschien gezien dat het breaks-argument van cut() hetzelfde is als het splits-argument van ft_bucketizer(). Er is een klein verschil in hoe waarden op de grenzen worden behandeld. In cut() valt standaard de bovenste (rechter) grens in elke bucket, maar de linker niet. ft_bucketizer() neemt de onderste (linker) grens op in elke bucket, maar de rechter niet. Dit komt overeen met cut() aanroepen met het argument right = FALSE.
Eén uitzondering is dat ft_bucketizer() waarden op beide grenzen opneemt voor de bovenste bucket. ft_bucketizer() komt dus ook overeen met include.lowest = TRUE instellen bij cut().
Tot slot: waar cut() een factor teruggeeft, retourneert ft_bucketizer() een numeric vector, waarbij waarden in de eerste bucket als nul worden gegeven, in de tweede als één, in de derde als twee, enzovoort. Als je in R met de resultaten wilt werken, moet je expliciet omzetten naar een factor. Dit is een veelvoorkomend codepatroon:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
Deze oefening maakt deel uit van de cursus
Introductie tot Spark met sparklyr in R
Oefeninstructies
Er is al een Spark-verbinding voor je gemaakt als spark_conn. Een tibble die is gekoppeld aan de trackmetadata die in Spark is opgeslagen is vooraf gedefinieerd als track_metadata_tbl. decades is een numerieke reeks van 1920, 1930, …, 2020, en decade_labels is een tekstuele beschrijving van die decennia.
- Maak een variabele
hotttnesss_over_timeop basis vantrack_metadata_tbl.- Selecteer de velden
artist_hotttnesssenyear. - Zet de kolom
yearom naarnumeric. - Gebruik
ft_bucketizer()om een nieuw velddecadete maken, waarin de jaren worden gesplitst metdecades. - Verzamel het resultaat met
collect(). - Zet het veld
decadeom naar een factor met labelsdecade_labels.
- Selecteer de velden
- Maak een
ggplot()-boxplot vanartist_hotttnesssperdecade.- Het eerste argument van
ggplot()is het data-argument,hotttnesss_over_time. - Het tweede argument van
ggplot()is de esthetiek, diedecadeenartist_hotttnesssbevat, verpakt inaes(). - Voeg
geom_boxplot()toe om de boxplots te tekenen.
- Het eerste argument van
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# 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(___, ___)) +
___()