LoginSignup
13
4

More than 3 years have passed since last update.

scikit-learnのMultiLabelBinarizerで個々の購入データを表にまとめる

Last updated at Posted at 2019-12-30

データ元

個々の購入データ(変換前)

スクリーンショット 2019-12-31 00.13.48.png

各行はユーザID、各列はユーザの購入したアイテムを表している。列数は最も購入アイテムの多いユーザの購入数になる。そのため、空欄にはNaNが入っている。

つくりたいテーブル(変換後)

スクリーンショット 2019-12-31 00.18.26.png

各列を特定のアイテムに固定して、それぞれのユーザが購入したかを1/0で表す

やりかた

scikit-learn の MultiLabelBinarizerを用いる。変換前のデータフレームをdfとする。変換後の出力はdf_transとする。

from sklearn.preprocessing import MultiLabelBinarizer

df = df.fillna("none")

mlb = MultiLabelBinarizer()
result = mlb.fit_transform(df.values)
df_trans = pd.DataFrame(result, columns = mlb.classes_).drop('none', axis=1)

データフレーム中にNaNが入っているとMultiLabelBinarizerでエラーが発生するので適当な文字列に変換しておく(重複しなければ別にnoneじゃなくてもよい)

MultiLabelBinarizerオブジェクトを生成しfit_transformメソッドを呼び出す。引数にはdf.valuesとしてnumpy.array形式で指定する。

列名(アイテム名)はmlb.classes_で取り出せる。

最後にdropメソッドでnoneを削除すれば、変換後のテーブルを得る。

13
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4