Stetige Variablen in kategoriale umwandeln (1)
Eine Verallgemeinerung der vorherigen Idee ist, mehrere Schwellenwerte zu verwenden; das heißt, du teilst eine stetige Variable in „Buckets“ (oder „Bins“) auf – so wie es ein Histogramm macht. In Base R würdest du für diese Aufgabe cut() verwenden. Bei einer Studie zu Rauchgewohnheiten könntest du beispielsweise die typische Anzahl gerauchter Zigaretten pro Tag nehmen und sie in einen Faktor umwandeln.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
Das sparklyr-Äquivalent dazu ist ft_bucketizer(). Der Code hat ein ähnliches Format wie ft_binarizer(), aber diesmal musst du einen Vektor von Schnittpunkten an das Argument splits übergeben. Hier ist dasselbe Beispiel im sparklyr-Stil geschrieben.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Dabei gibt es einige wichtige Punkte zu beachten. Dir ist vielleicht aufgefallen, dass das Argument breaks aus cut() dem Argument splits von ft_bucketizer() entspricht. Es gibt einen kleinen Unterschied darin, wie Werte an den Grenzen behandelt werden. In cut() ist standardmäßig die obere (rechte) Grenze in jedem Bucket enthalten, die linke jedoch nicht. ft_bucketizer() schließt die untere (linke) Grenze in jeden Bucket ein, aber nicht die rechte. Das entspricht also einem Aufruf von cut() mit dem Argument right = FALSE.
Eine Ausnahme ist, dass ft_bucketizer() beim obersten Bucket die Werte auf beiden Grenzen einbezieht. ft_bucketizer() entspricht damit auch der Einstellung include.lowest = TRUE bei cut().
Abschließend ist zu beachten, dass cut() einen Faktor zurückgibt, während ft_bucketizer() einen numeric-Vektor liefert: Werte im ersten Bucket werden als null, im zweiten als eins, im dritten als zwei usw. zurückgegeben. Wenn du mit den Ergebnissen in R weiterarbeiten möchtest, musst du explizit in einen Faktor umwandeln. Das ist ein gängiges Code-Muster:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
Diese Übung ist Teil des Kurses
Einführung in Spark mit sparklyr in R
Anleitung zur Übung
Eine Spark-Verbindung wurde für dich als spark_conn erstellt. Ein Tibble, das mit den in Spark gespeicherten Track-Metadaten verknüpft ist, wurde als track_metadata_tbl vordefiniert. decades ist eine numerische Folge von 1920, 1930, …, 2020, und decade_labels ist eine Textbeschreibung dieser Jahrzehnte.
- Erstelle aus
track_metadata_tbleine Variable namenshotttnesss_over_time.- Wähle die Felder
artist_hotttnesssundyearaus. - Wandle die Spalte
yearinnumericum. - Verwende
ft_bucketizer(), um ein neues Felddecadezu erzeugen, das die Jahre mithilfe vondecadesaufteilt. - Sammle das Ergebnis ein.
- Wandle das Feld
decadein einen Faktor mit den Labelsdecade_labelsum.
- Wähle die Felder
- Zeichne einen
ggplot()-Balkenplot vonartist_hotttnesssnachdecade.- Das erste Argument von
ggplot()ist das Datenargumenthotttnesss_over_time. - Das zweite Argument von
ggplot()ist das Mapping, dasdecadeundartist_hotttnesssinaes()einschließt. - Füge
geom_boxplot()hinzu, um die Balken zu zeichnen.
- Das erste Argument von
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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(___, ___)) +
___()