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

การจัดกลุ่ม: ดีสำหรับดนตรี ดีสำหรับข้อมูล

ปัญหาที่พบบ่อยในการวิเคราะห์ข้อมูลคือการคำนวณสถิติสรุปสำหรับแต่ละกลุ่มข้อมูล ตัวอย่างเช่น อาจต้องการทราบรายได้จากการขายแยกตามเดือนหรือตามภูมิภาค ใน R กระบวนการแบ่งข้อมูลออกเป็นกลุ่ม นำสถิติสรุปไปใช้กับแต่ละกลุ่ม แล้วรวมผลลัพธ์กลับเป็นโครงสร้างข้อมูลเดียว เรียกว่า "split-apply-combine" แนวคิดนี้มีมานานแล้ว SQL มีคำสั่ง GROUP BY มาหลายสิบปี และคำว่า "map-reduce" ก็เป็นแนวคิดที่คล้ายกัน โดย "map" เปรียบได้คร่าว ๆ กับขั้นตอน "split" และ "apply" ส่วน "reduce" คือการ "combine" แนวทางของ dplyr/sparklyr คือใช้ group_by() ก่อนที่จะเรียก mutate() หรือ summarize() โดยรับชื่อคอลัมน์ที่ต้องการจัดกลุ่มแบบไม่ใส่เครื่องหมายคำพูด ตัวอย่างเช่น หากต้องการคำนวณค่าเฉลี่ยของคอลัมน์ x สำหรับแต่ละชุดค่าในคอลัมน์ grp1 และ grp2 สามารถเขียนได้ดังนี้

a_tibble %>%
  group_by(grp1, grp2) %>%
  summarize(mean_x = mean(x))

โปรดทราบว่าคอลัมน์ที่ส่งให้ group_by() ควรเป็นตัวแปรเชิงหมวดหมู่ ตัวอย่างเช่น หากต้องการคำนวณน้ำหนักเฉลี่ยของบุคคลตามส่วนสูง การจัดกลุ่มตามส่วนสูงโดยตรงไม่สมเหตุสมผล เนื่องจากส่วนสูงของแต่ละคนไม่ซ้ำกัน อย่างไรก็ตาม สามารถใช้ cut() เพื่อแปลงส่วนสูงให้เป็นหมวดหมู่ต่าง ๆ แล้วคำนวณน้ำหนักเฉลี่ยของแต่ละหมวดหมู่ได้

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

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

ดูคอร์ส

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

Spark connection ถูกสร้างไว้ให้แล้วในชื่อ spark_conn และ tibble ที่เชื่อมต่อกับข้อมูล track metadata ที่เก็บใน Spark ถูกกำหนดไว้ล่วงหน้าเป็น track_metadata_tbl

  • จัดกลุ่มข้อมูลใน track_metadata ตาม artist_name จากนั้น:
    • สรุปค่าเฉลี่ยของ duration แต่ละกลุ่มเป็นคอลัมน์ใหม่ชื่อ mean_duration
    • กำหนดผลลัพธ์ให้กับตัวแปร duration_by_artist
  • ค้นหาศิลปินที่มีเพลงสั้นที่สุดโดยเรียงลำดับแถวตาม mean_duration จากน้อยไปมาก
  • ในทำนองเดียวกัน ค้นหาศิลปินที่มีเพลงยาวที่สุดโดยเรียงลำดับตาม mean_duration จากมากไปน้อย

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

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

# track_metadata_tbl has been pre-defined
track_metadata_tbl

duration_by_artist <- track_metadata_tbl %>%
  # Group by artist
  ___ %>%
  # Calc mean duration
  ___

duration_by_artist %>%
  # Sort by ascending mean duration
  ___

duration_by_artist %>%
  # Sort by descending mean duration
  ___
แก้ไขและรันโค้ด