开始使用免费开始使用

分组:音乐和数据都离不开它

一个常见的分析问题是:如何为数据中的每个分组计算汇总统计量。例如,您可能想按月份或按地区查看销售收入。在 R 中,将数据拆分为若干组、对每组应用汇总统计,再把结果合并为单一数据结构的过程,称为"split-apply-combine"。不过,这个概念早已存在:SQL 数十年来一直有 GROUP BY 语句。"map-reduce"与之相近,其中"map"大致对应"拆分"和"应用","reduce"对应"合并"。dplyr/sparklyr 的做法是先使用 group_by(),再进行 mutate()summarize()。它接收要分组的列名(不加引号)。例如,若要对列 x 计算均值,并按列 grp1grp2 的取值组合分组,代码如下所示。

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

请注意,传递给 group_by() 的列通常应为分类变量。例如,如果您想根据身高计算平均体重,直接按身高分组并不合理,因为每个人的身高几乎都不同。不过,您可以使用 cut() 将身高离散化为若干类别,然后对每个类别计算平均体重。

本练习是课程的一部分

R 中使用 sparklyr 的 Spark 入门

查看课程

练习说明

已经为您创建了名为 spark_conn 的 Spark 连接。已在 Spark 中预先定义了与曲目信息关联的 tibble,名称为 track_metadata_tbl

  • artist_nametrack_metadata 的内容进行分组,然后:
    • 将分组后的 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
  ___
编辑并运行代码