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

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

แนวคิดที่ต่อยอดจากเรื่องก่อนหน้าคือการกำหนดจุดตัดหลายจุด นั่นคือการแบ่งตัวแปรต่อเนื่องออกเป็น "ถัง" (bucket) หรือ "ช่อง" (bin) เหมือนที่ histogram ทำ ใน base-R จะใช้ cut() สำหรับงานนี้ ตัวอย่างเช่น ในการศึกษาพฤติกรรมการสูบบุหรี่ คุณสามารถนำจำนวนบุหรี่ที่สูบต่อวันมาแปลงเป็น factor ได้

smoking_status <- cut(
  cigarettes_per_day,
  breaks = c(0, 1, 10, 20, Inf),
  labels = c("non", "light", "moderate", "heavy"),
  right  = FALSE
)

ใน sparklyr ฟังก์ชันที่เทียบเท่ากันคือ ft_bucketizer() โค้ดมีรูปแบบคล้ายกับ ft_binarizer() แต่คราวนี้ต้องส่ง vector ของจุดตัดไปยัง argument splits นี่คือตัวอย่างเดิมที่เขียนใหม่ในสไตล์ sparklyr

smoking_data %>%
  ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))

มีข้อควรสังเกตหลายประการ คุณอาจสังเกตได้ว่า argument breaks ของ cut() นั้นเทียบได้กับ argument splits ของ ft_bucketizer() แต่มีความแตกต่างเล็กน้อยในการจัดการค่าที่อยู่บนขอบเขต ใน cut() โดยค่าเริ่มต้น ขอบเขตบน (ด้านขวา) จะถูกรวมอยู่ในแต่ละถัง แต่ไม่รวมขอบเขตซ้าย ส่วน ft_bucketizer() จะรวมขอบเขตล่าง (ด้านซ้าย) ไว้ในแต่ละถัง แต่ไม่รวมด้านขวา ซึ่งเทียบได้กับการเรียก cut() ด้วย argument right = FALSE

ข้อยกเว้นคือ ft_bucketizer() จะรวมค่าที่ขอบเขตทั้งสองด้านสำหรับถังบนสุด ดังนั้น ft_bucketizer() จึงเทียบเท่ากับการตั้งค่า include.lowest = TRUE ใน cut() ด้วย

สิ่งสุดท้ายที่ควรทราบคือ ในขณะที่ cut() คืนค่าเป็น factor แต่ ft_bucketizer() จะคืนค่าเป็น vector ชนิด numeric โดยค่าในถังแรกจะเป็น 0 ถังที่สองเป็น 1 ถังที่สามเป็น 2 และต่อไปเรื่อย ๆ หากต้องการนำผลลัพธ์ไปใช้งานใน R ต้องแปลงเป็น factor ด้วยตนเอง รูปแบบโค้ดที่ใช้บ่อยมีดังนี้

a_tibble %>%
  ft_bucketizer("x", "x_buckets", splits = splits) %>%
  collect() %>%
  mutate(x_buckets = factor(x_buckets, labels = labels))

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

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

ดูคอร์ส

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

มีการสร้าง Spark connection ไว้ให้แล้วในชื่อ spark_conn และ tibble ที่เชื่อมต่อกับ track metadata ที่เก็บอยู่ใน Spark ถูกกำหนดไว้ล่วงหน้าในชื่อ track_metadata_tbl โดยที่ decades คือลำดับตัวเลข 1920, 1930, …, 2020 และ decade_labels คือคำอธิบายของแต่ละทศวรรษในรูปแบบข้อความ

  • สร้างตัวแปรชื่อ hotttnesss_over_time จาก track_metadata_tbl
    • เลือกฟิลด์ artist_hotttnesss และ year
    • แปลงคอลัมน์ year ให้เป็น numeric
    • ใช้ ft_bucketizer() เพื่อสร้างฟิลด์ใหม่ชื่อ decade ซึ่งแบ่งปีออกโดยใช้ decades
    • เก็บรวบรวมผลลัพธ์
    • แปลงฟิลด์ decade ให้เป็น factor โดยใช้ label จาก decade_labels
  • วาดกราฟ ggplot() แบบ boxplot ของ artist_hotttnesss จำแนกตาม decade
    • argument แรกของ ggplot() คือ argument ข้อมูล ได้แก่ hotttnesss_over_time
    • argument ที่สองของ ggplot() คือ aesthetic ซึ่งรับ decade และ artist_hotttnesss ที่ห่อด้วย aes()
    • เพิ่ม geom_boxplot() เพื่อวาดกราฟ

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

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

# 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(___, ___)) +
  ___()  
แก้ไขและรันโค้ด