開始使用免費開始

團體在音樂很棒,在資料上一樣好用

在分析中,經常需要為每個群組計算彙總統計值。比方說,你可能想知道依月份或依地區的銷售收入。在 R 中,將資料分成群組、對每個群組套用彙總統計,然後把結果合併回單一資料結構的流程,稱為「split-apply-combine」。這個概念其實更早就存在了:SQL 已經有 GROUP BY 敘述幾十年之久。「map-reduce」也是類似概念,其中「map」大致對應「split」與「apply」步驟,而「reduce」則是「combine」。在 dplyr/sparklyr 中,做法是先使用 group_by(),再進行 mutate()summarize()。它接收未加引號的欄位名稱作為分組鍵。舉例來說,若要針對欄位 grp1grp2 的每種組合,計算欄位 x 的平均值,可以這樣寫:

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
  ___
編輯並執行程式碼