LoslegenKostenlos loslegen

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

Kurs anzeigen

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_tbl eine Variable namens hotttnesss_over_time.
    • Wähle die Felder artist_hotttnesss und year aus.
    • Wandle die Spalte year in numeric um.
    • Verwende ft_bucketizer(), um ein neues Feld decade zu erzeugen, das die Jahre mithilfe von decades aufteilt.
    • Sammle das Ergebnis ein.
    • Wandle das Feld decade in einen Faktor mit den Labels decade_labels um.
  • Zeichne einen ggplot()-Balkenplot von artist_hotttnesss nach decade.
    • Das erste Argument von ggplot() ist das Datenargument hotttnesss_over_time.
    • Das zweite Argument von ggplot() ist das Mapping, das decade und artist_hotttnesss in aes() einschließt.
    • Füge geom_boxplot() hinzu, um die Balken zu zeichnen.

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(___, ___)) +
  ___()  
Code bearbeiten und ausführen