推薦アルゴリズムを試す準備のためのMovielensデータセットのダウンロードと読み込み方法

推薦アルゴリズムのベンチマークとして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データセットの準備は終わりです。
後は適当に整形して、お好きな推薦アルゴリズムに食べさせてあげましょう。

推薦 

See also