グループ化した要約統計
この演習では、これまでに使った .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).____("____").____().____(____("____")).____()