Mengubah variabel kontinu menjadi kategori (1)
Generalisasi dari gagasan sebelumnya adalah memiliki beberapa ambang; artinya, Anda membagi variabel kontinu menjadi "bucket" (atau "bin"), seperti pada histogram. Di base R, Anda akan menggunakan cut() untuk tugas ini. Misalnya, dalam studi tentang kebiasaan merokok, Anda dapat mengambil jumlah rokok yang biasanya dihisap per hari, lalu mengubahnya menjadi faktor.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
Padanan sparklyr untuk ini adalah menggunakan ft_bucketizer(). Kodenya memiliki format yang mirip dengan ft_binarizer(), tetapi kali ini Anda harus memberikan vektor titik potong ke argumen splits. Berikut contoh yang sama ditulis ulang dalam gaya sparklyr.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Ada beberapa hal penting untuk diperhatikan. Anda mungkin melihat bahwa argumen breaks dari cut() sama dengan argumen splits dari ft_bucketizer(). Ada sedikit perbedaan dalam penanganan nilai di batas. Dalam cut(), secara bawaan batas atas (kanan) disertakan dalam setiap bucket, tetapi bukan batas kiri. ft_bucketizer() menyertakan batas bawah (kiri) dalam setiap bucket, tetapi bukan batas kanan. Ini setara dengan memanggil cut() dengan argumen right = FALSE.
Satu pengecualian adalah bahwa ft_bucketizer() menyertakan nilai pada kedua batas untuk bucket paling atas. Jadi ft_bucketizer() juga setara dengan menyetel include.lowest = TRUE saat menggunakan cut().
Hal terakhir yang perlu dicatat adalah meskipun cut() mengembalikan faktor, ft_bucketizer() mengembalikan vektor numeric, dengan nilai pada bucket pertama bernilai nol, bucket kedua bernilai satu, bucket ketiga bernilai dua, dan seterusnya. Jika Anda ingin memproses hasilnya di R, Anda perlu secara eksplisit mengonversinya menjadi faktor. Ini adalah pola kode yang umum:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
Latihan ini merupakan bagian dari kursus
Pengantar Spark dengan sparklyr di R
Instruksi latihan
Sambungan Spark telah dibuat untuk Anda sebagai spark_conn. Sebuah tibble yang terhubung ke metadata track yang tersimpan di Spark telah didefinisikan sebelumnya sebagai track_metadata_tbl. decades adalah deret numerik 1920, 1930, …, 2020, dan decade_labels adalah deskripsi teks untuk setiap dekade tersebut.
- Buat variabel bernama
hotttnesss_over_timedaritrack_metadata_tbl.- Pilih field
artist_hotttnesssdanyear. - Konversikan kolom
yearmenjadinumeric. - Gunakan
ft_bucketizer()untuk membuat field baru,decade, yang membagi tahun berdasarkandecades. - Kumpulkan hasilnya.
- Konversikan field
decademenjadi faktor dengan labeldecade_labels.
- Pilih field
- Gambar plot batang
ggplot()dariartist_hotttnesssmenurutdecade.- Argumen pertama untuk
ggplot()adalah argumen data,hotttnesss_over_time. - Argumen kedua untuk
ggplot()adalah estetika, yang menggunakandecadedanartist_hotttnesssdibungkus dalamaes(). - Tambahkan
geom_boxplot()untuk menggambar batang.
- Argumen pertama untuk
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
# 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(___, ___)) +
___()