1. 学ぶ
  2. /
  3. コース
  4. /
  5. sparklyr を使った Spark 入門(R)

Connected

演習

グループ化:音楽にもデータにも欠かせない手法

データ分析でよく直面する課題の1つが、グループごとに要約統計量を計算することです。たとえば、月別や地域別の売上高を把握したいケースが考えられます。R では、データをグループに分割し、各グループに要約統計量を適用して、結果を1つのデータ構造にまとめる処理を「split-apply-combine(分割・適用・結合)」と呼びます。この概念自体は非常に古く、SQL には GROUP BY 文が何十年も前から存在しています。また、「map-reduce」も似た概念で、「map」が「分割」と「適用」のステップに、「reduce」が「結合」にそれぞれ対応しています。dplyr/sparklyr では、mutate() や summarize() の前に group_by() を使います。グループ化に使う列名をクォートなしで指定します。たとえば、列 grp1 と grp2 の値の組み合わせごとに列 x の平均を計算するには、次のように書きます。

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

group_by() に渡す列は、通常カテゴリ変数にする必要があります。たとえば、身長に対する体重の平均を計算したい場合、全員の身長が異なるため、身長でグループ化しても意味がありません。そのような場合は、cut() を使って身長をカテゴリに変換し、各カテゴリの平均体重を計算する方法が適しています。

指示

100 XP

Spark への接続は spark_conn として作成済みです。Spark に格納されたトラックのメタデータに紐付けられたティブルは track_metadata_tbl として事前に定義されています。

  • track_metadata の内容を artist_name でグループ化し、次の操作を行います。
    • duration のグループごとの平均を新しい列 mean_duration として集計します。
    • 結果を duration_by_artist に代入します。
  • mean_duration の昇順に行を並べ替えて、曲が最も短いアーティストを見つけます。
  • 同様に、降順に並べ替えて、曲が最も長いアーティストを見つけます。