推薦アルゴリズムのベンチマークとしてMovielensと呼ばれるデータセットがあります。
この記事では推薦アルゴリズムを試す事前準備として、Movielensの軽量データセット(MovieLens 100K Dataset)をPythonのpolarsで読み込む方法について解説します。
Movielensとデータセット
Movielensはミネソタ大学内のGroupLens研究グループによって1997年に公開された映画推薦のためのWebサイトです。 サイト内で集められたユーザーの映画評価データは非商用向けに無償で公開されています。
使用するデータセット(MovieLens 100K Dataset)
公開されているデータセットは複数ありますが、ここでは軽量のデータセットであるMovieLens 100K Datasetを扱うことにします。
このデータセットを選んだ理由としては、最初のうちは複雑な推薦アルゴリズムを扱う予定はないことと、アルゴリズムによる結果の違いも確認したいためにデータセットの中身が変更されないものであることの2つを満たすためです。
もし、より大量のデータが必要であればhttps://grouplens.org/datasets/movielens/で探すことができます。
MovieLens 100K Datasetの特徴は以下の通りです。
映画数:1682
評価ユーザ数:943
評価件数:10万
評価方法:5段階(星1から星5)
データ収集期間:1997年9月19日から1998年4月22日
ファイルサイズ:5MB
備考:20件以上の評価をしたユーザのみデータセットに含まれています。
その他の詳しい内容や利用規約についてはREADME.txtを参照してください。
ダウンロードと解凍
以下のコマンドでデータセットをダウンロードして解凍します。解凍後はml-100k
フォルダが生成されているるはずです。
wget https://files.grouplens.org/datasets/movielens/ml-100k.zip
unzip ml-100k.zip
データの読み込み
各ユーザがどの映画に何点の評価をつけたかのデータはml-100k/u.data
にあります。
なお、このファイル内には列名が含まれていないため、データを読み込んだ後にml-100k/README
に記載されている列名を付与しました。
import polars as pl
df = pl.read_csv("ml-100k/u.data", sep="\t", has_header=False)
df.columns = ["user id", "item id", "rating", "timestamp"]
# shape: (100000, 4)
# ┌─────────┬─────────┬────────┬───────────┐
# │ user id ┆ item id ┆ rating ┆ timestamp │
# │ --- ┆ --- ┆ --- ┆ --- │
# │ i64 ┆ i64 ┆ i64 ┆ i64 │
# ╞═════════╪═════════╪════════╪═══════════╡
# │ 196 ┆ 242 ┆ 3 ┆ 881250949 │
# │ 186 ┆ 302 ┆ 3 ┆ 891717742 │
# │ 22 ┆ 377 ┆ 1 ┆ 878887116 │
# │ 244 ┆ 51 ┆ 2 ┆ 880606923 │
# │ ... ┆ ... ┆ ... ┆ ... │
# │ 716 ┆ 204 ┆ 5 ┆ 879795543 │
# │ 276 ┆ 1090 ┆ 1 ┆ 874795795 │
# │ 13 ┆ 225 ┆ 2 ┆ 882399156 │
# │ 12 ┆ 203 ┆ 3 ┆ 879959583 │
# └─────────┴─────────┴────────┴───────────┘
以上でMovielensデータセットの準備は終わりです。
後は適当に整形して、お好きな推薦アルゴリズムに食べさせてあげましょう。