Nhóm: tuyệt cho âm nhạc, tuyệt cho dữ liệu
Một bài toán phân tích phổ biến là cách tính các thống kê tóm tắt cho từng nhóm dữ liệu. Ví dụ, bạn có thể muốn biết doanh thu theo tháng hoặc theo khu vực. Trong R, quy trình chia dữ liệu thành các nhóm, áp dụng một thống kê tóm tắt trên từng nhóm, rồi gộp kết quả thành một cấu trúc dữ liệu duy nhất được gọi là "split-apply-combine". Tuy nhiên, khái niệm này đã cũ hơn nhiều: SQL có câu lệnh GROUP BY từ hàng thập kỷ. Thuật ngữ "map-reduce" cũng tương tự, trong đó "map" xấp xỉ bước "split" và "apply", còn "reduce" là "combine". Cách tiếp cận của dplyr/sparklyr là dùng group_by() trước khi bạn mutate() hoặc summarize(). Hàm này nhận tên cột (không đặt trong dấu ngoặc kép) để nhóm theo. Ví dụ, để tính giá trị trung bình của cột x cho từng kết hợp giá trị trong các cột grp1 và grp2, bạn sẽ viết như sau.
a_tibble %>%
group_by(grp1, grp2) %>%
summarize(mean_x = mean(x))
Lưu ý rằng các cột truyền vào group_by() thường nên là biến phân loại. Chẳng hạn, nếu bạn muốn tính cân nặng trung bình của mọi người theo chiều cao, thì không hợp lý khi nhóm theo chiều cao, vì chiều cao của mỗi người thường là duy nhất. Tuy vậy, bạn có thể dùng cut() để phân loại chiều cao thành các khoảng, rồi tính cân nặng trung bình cho từng khoảng.
Bài tập này là một phần của khóa học
Nhập môn Spark với sparklyr trong R
Hướng dẫn bài tập
Kết nối Spark đã được tạo sẵn dưới tên spark_conn. Một tibble liên kết đến track metadata được lưu trong Spark đã được định nghĩa trước là track_metadata_tbl.
- Nhóm nội dung của
track_metadatatheoartist_name, sau đó:- Tóm tắt giá trị trung bình theo nhóm của
durationthành một cột mới,mean_duration. - Gán kết quả vào
duration_by_artist.
- Tóm tắt giá trị trung bình theo nhóm của
- Tìm các nghệ sĩ có bài hát ngắn nhất bằng cách sắp xếp các dòng theo thứ tự tăng dần của
mean_duration. - Tương tự, tìm các nghệ sĩ có bài hát dài nhất bằng cách sắp xếp theo thứ tự giảm dần của
mean_duration.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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
___