引き続き、この本を基にデータサイエンスの手法を勉強します。
- 作者: 尾崎隆
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
今回は第五章のクラスタリングです。
準備
from scipy.cluster.hierarchy import dendrogram,ward,leaves_list import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans % matplotlib inline
データの用意
ec = pd.read_csv("ch5_3.txt",sep = " ") ec.head() # books cloths cosmetics foods liquors #0 43 0 3 4 10 #1 25 5 5 3 11
ECの購買データのようです。
階層クラスタリング
階層クラスタリングはscipyで行います。
書籍内ではWard法でやっていたので、
Ward法でやっていきます。
h_cls = ward(ec) dendrogram(h_cls)
その他、pdistで距離計算を指定したり、
Ward法以外も指定できるようです。
クラスターはleaves_list()
で出せるようですが、
枝切のほうがわからず。。。
どなたかご存知でしたら、教えください。
k-means
続いて、非階層クラスタリングを。
今度はsklearnを使います。
k_cls = KMeans(n_clusters=3) k_cls.fit(ec) cls_labels= k_cls.labels_
sklearnの基本的な使い方通り、
modelを用意、データをfit
で渡す。
で、終わりです。
クラスターのラベルは.labels_
で出せます。
ラベル付の状態の可視化
書籍内では、各変数内のラベルの付き方を可視化していたので、
それをやります。
(今回はkmeansのみ)
ec["cls"] = cls_labels # クラスターのラベル毎にグループに分けて、平均値を出す # ついでに四捨五入しておく pd.groupby(ec,"cls").mean().round() # books cloths cosmetics foods liquors #cls #0 46 11 5 5 5 #1 29 10 4 5 6 #2 9 14 5 4 8
これを積み上げグラフにする。
# グラフ用に転置する res = pd.DataFrame(np.array(pd.groupby(ec,"cls").mean().round()).T) res.columns = ["0","1","2"] res.index = ec.columns res.plot(kind="bar",stacked=True,alpha=0.5)
最後が少しアクロバットになりすぎた気がするけど、本と同じようになりました。
前回記事はこちら。