Kom igångKom igång gratis

Omvandla kontinuerliga variabler till kategoriska (1)

En generalisering av föregående idé är att använda flera tröskelvärden – det vill säga att dela upp en kontinuerlig variabel i "buckets" (eller "bins"), precis som ett histogram gör. I bas-R använder du cut() för detta. I en studie om rökvanor kan du till exempel ta det typiska antalet cigaretter per dag och omvandla det till en faktor.

smoking_status <- cut(
  cigarettes_per_day,
  breaks = c(0, 1, 10, 20, Inf),
  labels = c("non", "light", "moderate", "heavy"),
  right  = FALSE
)

Motsvarigheten i sparklyr är ft_bucketizer(). Koden har ett liknande format som ft_binarizer(), men den här gången måste du skicka en vektor med brytpunkter till argumentet splits. Här är samma exempel omskrivet i sparklyr-stil.

smoking_data %>%
  ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))

Det finns några viktiga saker att notera. Du kanske har sett att argumentet breaks i cut() motsvarar argumentet splits i ft_bucketizer(). Det finns dock en liten skillnad i hur värden på gränsen hanteras. I cut() inkluderas som standard den övre (högra) gränsen i varje bucket, men inte den vänstra. ft_bucketizer() inkluderar den nedre (vänstra) gränsen i varje bucket, men inte den högra. Det innebär att det motsvarar att anropa cut() med argumentet right = FALSE.

Ett undantag är att ft_bucketizer() inkluderar värden på båda gränserna för den översta bucketen. Därför motsvarar ft_bucketizer() även att sätta include.lowest = TRUE när du använder cut().

Slutligen är det värt att notera att medan cut() returnerar en faktor, returnerar ft_bucketizer() en numeric-vektor – värden i den första bucketen returneras som noll, i den andra som ett, i den tredje som två, och så vidare. Om du vill arbeta med resultaten i R behöver du explicit konvertera till en faktor. Det här är ett vanligt kodmönster:

a_tibble %>%
  ft_bucketizer("x", "x_buckets", splits = splits) %>%
  collect() %>%
  mutate(x_buckets = factor(x_buckets, labels = labels))

Den här övningen är en del av kursen

Introduktion till Spark med sparklyr i R

Visa kurs

Övningsinstruktioner

En Spark-anslutning har skapats åt dig som spark_conn. En tibble kopplad till spårmetadata lagrad i Spark är fördefinierad som track_metadata_tbl. decades är en numerisk sekvens av 1920, 1930, …, 2020, och decade_labels är en textbeskrivning av dessa decennier.

  • Skapa en variabel med namnet hotttnesss_over_time från track_metadata_tbl.
    • Välj fälten artist_hotttnesss och year.
    • Konvertera kolumnen year till numeric.
    • Använd ft_bucketizer() för att skapa ett nytt fält, decade, som delar upp åren med hjälp av decades.
    • Hämta resultatet med collect.
    • Konvertera fältet decade till en faktor med etiketterna decade_labels.
  • Rita ett ggplot()-lådagram över artist_hotttnesss per decade.
    • Det första argumentet till ggplot() är data-argumentet, hotttnesss_over_time.
    • Det andra argumentet till ggplot() är estetiken, som tar decade och artist_hotttnesss inslagna i aes().
    • Lägg till geom_boxplot() för att rita lådagrammet.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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(___, ___)) +
  ___()  
Redigera och kör kod