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
Ö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_timefråntrack_metadata_tbl.- Välj fälten
artist_hotttnesssochyear. - Konvertera kolumnen
yeartillnumeric. - Använd
ft_bucketizer()för att skapa ett nytt fält,decade, som delar upp åren med hjälp avdecades. - Hämta resultatet med collect.
- Konvertera fältet
decadetill en faktor med etiketternadecade_labels.
- Välj fälten
- Rita ett
ggplot()-lådagram överartist_hotttnesssperdecade.- Det första argumentet till
ggplot()är data-argumentet,hotttnesss_over_time. - Det andra argumentet till
ggplot()är estetiken, som tardecadeochartist_hotttnesssinslagna iaes(). - Lägg till
geom_boxplot()för att rita lådagrammet.
- Det första argumentet till
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(___, ___)) +
___()