การแปลงตัวแปรต่อเนื่องให้เป็นตัวแปรเชิงหมวดหมู่ (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(___, ___)) +
___()