読者です 読者をやめる 読者になる 読者になる

機械学習 ~ MovieLens のデータを pandas.DataFrame にする時に悩むこと

MovieLens のデータを pandas.DataFrame にする時に悩むこと

機械学習や レコメンド エンジン の開発時にサンプルデータとしてよく使われる MovieLens のデータ。
その筋の方々は データ を pandas の DataFrame に変換して使うことが多いと思います。
わたしも何度かそんなことをしていましたが、毎回地味にめんどくさい!と思っていたアレ!をなんとか効率的にできないか考えてみました。

機械学習 の定番・ MovieLens のデータ

MovieLens (英語サイト) というのは、GroupLens と呼ばれる ミネソタ大学 の 機械学習 とか 人工知能 の研究所が無料で公開している、非商用のレコメンド サービスです。
GroupLens はサービスを提供するだけではなく、その開発に用いられているデータを無償で公開しており、機械学習 関係の人々に広く使われています。
Python の 機械学習 の本といえば最近は Python機械学習プログラミング 達人データサイエンティストによる理論と実践 が Am○zon でベストセラーになっているようですが、この本が出るまでは個人的に鉄板に君臨していた、オライリー の Pythonによるデータ分析入門 でも MovieLens のデータを扱ったデータ分析が紹介されています。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

MovieLens のデータを pandas.DataFrame にする時にめんどくさいアレとは

MovieLens のデータを pandas の DataFrame 形式に変換するのは簡単です。
DataFrame の from_csv メソッドは、ファイルパスにインターネット上の URL も指定できるので、例えば、MovieLens のユーザーの行動履歴のデータであれば、ほら、こんなに簡単。

gist.github.com

え?これの何がめんどくさいって・・・?

機械学習 実は大事なカラムの名前がない

さっきの方法で DataFrame にした MovieLens のデータですが、データのカラム名がついてません。
何のデータなのかを表すカラム名は、 機械学習 業界では feature とか言って、これにまつわるエトセトラで本や論文が出るぐらいアツいのです。それが名無しだなんて・・・!
何度かやってると地味〜にめんどくさいんですよね。
特に Item のデータはカラムがたくさんあるので、毎回カラム名手打ちはツライ・・・

MovieLens のデータ・カラム名無し問題を解決する

と、いうわけで、地味だけど毎回いい加減にしてよ!と言いたくなるこの問題をどうにかできないか考えました。
結果、以下のようにコピペとワンライナーで乗り切ることができました!

1. README.txt からカラム名をコピペ

README.txt(英語) に、どのファイルにどんなデータが入っているか、が説明されてますが、ここにカラム名も書いてます。

http://pbs.twimg.com/media/Cmr1lUfUsAAQowp.jpg

赤枠部分に注目。とりあえずこれをコピペ。
gist.github.com
ただ、Python のプログラムの中で使えるわけではないので、ちょっと料理が必要。

2. ワンライナーで Python の list にする

1.でコピペした文字列を map と lambda 関数で料理します。
gist.github.com

3. DataFrame のカラムにセットする

2.で作った list を movielens.columns = item_features な感じで DataFrame の カラムに指定します。
コード全体はこんな感じ。

gist.github.com

こんなめんどくさいことが数行でできちゃうなんて Python ってスゴいねっ!

機械学習 ~ MovieLens のデータを pandas.DataFrame にする時に悩むこと 参考図書

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

Python機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)