เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การแปลงตัวแปรต่อเนื่องให้เป็นตัวแปรเชิงหมวดหมู่ (2)

กรณีพิเศษของการแปลงแบบก่อนหน้าคือการตัดตัวแปรต่อเนื่องออกเป็น bucket โดยกำหนด bucket จากค่า quantile ของตัวแปรนั้น การแปลงแบบนี้มักใช้ในการวิเคราะห์ผลสำรวจหรือคะแนนรีวิว เช่น หากให้ผู้ใช้ให้คะแนนตั้งแต่ 1 ถึง 5 ดาว ค่ามัธยฐานมักจะไม่เท่ากับ 3 ดาวพอดี ในกรณีนี้ การแบ่งคะแนนตาม quantile จะช่วยให้วิเคราะห์ได้ดีขึ้น ตัวอย่างเช่น สามารถแบ่งเป็น 5 กลุ่ม quintile โดยแบ่ง ณ เปอร์เซ็นไทล์ที่ 0, 20, 40, 60, 80 และ 100

วิธีใน base-R คือการใช้ cut() ร่วมกับ quantile() ส่วนใน sparklyr จะใช้ฟังก์ชัน ft_quantile_discretizer() ซึ่งรับอาร์กิวเมนต์ num_buckets เพื่อกำหนดจำนวน bucket ด้านล่างนี้แสดงทั้งสองวิธีเปรียบเทียบกัน และกำหนด right = FALSE กับ include.lowest ไว้เช่นเดิม

survey_response_group <- cut(
  survey_score,
  breaks = quantile(survey_score, c(0, 0.25, 0.5, 0.75, 1)),
  labels = c("hate it", "dislike it", "like it", "love it"),
  right  = FALSE,
  include.lowest = TRUE
)
survey_data %>%
  ft_quantile_discretizer("survey_score", "survey_response_group", num_buckets = 4)

เช่นเดียวกับ ft_bucketizer() ผลลัพธ์ที่ได้จะเป็นตัวเลขเริ่มนับจากศูนย์ หากต้องการนำไปใช้งานใน R ให้แปลงเป็น factor อย่างชัดเจนก่อน

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

แนะนำ Spark ด้วย sparklyr ใน R

ดูคอร์ส

คำแนะนำการฝึกหัด

มีการสร้าง Spark connection ให้แล้วในชื่อ spark_conn และ tibble ที่เชื่อมต่อกับ track metadata ที่เก็บอยู่ใน Spark ถูกกำหนดไว้ล่วงหน้าในชื่อ track_metadata_tbl นอกจากนี้ duration_labels คือ character vector ที่อธิบายช่วงความยาวของเพลง

  • สร้างตัวแปรชื่อ familiarity_by_duration จาก track_metadata_tbl
    • เลือกฟิลด์ duration และ artist_familiarity
    • ใช้ ft_quantile_discretizer() เพื่อสร้างฟิลด์ใหม่ชื่อ duration_bin โดยแบ่ง duration ออกเป็น 5 quantile bin
    • ดึงผลลัพธ์ด้วย collect()
    • แปลงฟิลด์ duration_bin ให้เป็น factor โดยใช้ label จาก duration_labels
  • วาด box plot ด้วย ggplot() เพื่อแสดง artist_familiarity ตาม duration_bin
    • อาร์กิวเมนต์แรกของ ggplot() คือข้อมูล ได้แก่ familiarity_by_duration
    • อาร์กิวเมนต์ที่สองของ ggplot() คือ aesthetic ซึ่งใส่ duration_bin และ artist_familiarity ภายใน aes()
    • เพิ่ม geom_boxplot() เพื่อวาด boxplot

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# track_metadata_tbl, duration_labels have been pre-defined
track_metadata_tbl
duration_labels

familiarity_by_duration <- track_metadata_tbl %>%
  # Select duration and artist_familiarity
  ___ %>%
  # Bucketize duration
  ___ %>%
  # Collect the result
  ___ %>%
  # Convert duration bin to factor
  ___

# Draw a boxplot of artist_familiarity by duration_bin
ggplot(___, aes(___, ___)) +
  ___()  
แก้ไขและรันโค้ด