始める無料で始める

グループ化した要約統計

この演習では、これまでに使った .groupBy().filter() を組み合わせて、各曲に対して付与されたユーザー数の min()avg()、および各ユーザーが評価した曲数の min()avg() を計算します。

いまのデータには、まだ消費されていない項目に対して 0 が含まれているため、このようなグループ化要約統計を行うときは .filter() で取り除く必要があります。ここでは msd データセットが用意されています。pyspark.sql.functions からは col()min()avg() がインポート済みです。

この演習はコースの一部です

PySpark で作る Recommendation Engines

コースを見る

演習の手順

  • 例として、msd データセットに対して .filter().groupBy().count() を適用し、さらに .select()min() を使って、データセット内の任意の曲が受け取った評価数の最小値を返しています。これを手本にして、msd 内の曲が受け取った暗黙的評価の avg() を計算しましょう。
  • 同じ手順で、msd データセットにおいて userId が提供した暗黙的評価数の min()avg() を求めましょう。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Min num implicit ratings for a song
print("Minimum implicit ratings for a song: ")
msd.filter(col("num_plays") > 0).groupBy("songId").count().select(min("count")).show()

# Avg num implicit ratings per songs
print("Average implicit ratings per song: ")
____.filter(____("____") > 0).groupBy("____").count().____(avg("____")).____()

# Min num implicit ratings from a user
print("Minimum implicit ratings from a user: ")
msd.____(____("num_plays") > ____).____("userId").____().select(____("____")).____()

# Avg num implicit ratings for users
print("Average implicit ratings per user: ")
____.filter(col("num_plays") > 0).____("____").____().____(____("____")).____()
コードを編集して実行