Mulai sekarangMulai gratis

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

Lihat Kursus

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_time dari track_metadata_tbl.
    • Pilih field artist_hotttnesss dan year.
    • Konversikan kolom year menjadi numeric.
    • Gunakan ft_bucketizer() untuk membuat field baru, decade, yang membagi tahun berdasarkan decades.
    • Kumpulkan hasilnya.
    • Konversikan field decade menjadi faktor dengan label decade_labels.
  • Gambar plot batang ggplot() dari artist_hotttnesss menurut decade.
    • Argumen pertama untuk ggplot() adalah argumen data, hotttnesss_over_time.
    • Argumen kedua untuk ggplot() adalah estetika, yang menggunakan decade dan artist_hotttnesss dibungkus dalam aes().
    • Tambahkan geom_boxplot() untuk menggambar batang.

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(___, ___)) +
  ___()  
Edit dan Jalankan Kode