はじめに
この記事はpythonのpandasを使ったデータ分析を進める際に有効活用できる、K-means法(データクラスタリング)と主成分分析について記載します。
クラスタリングを理解するためには、平均、偏差、標準化などの知識を事前に持っておくと良いです。
【大学4年間の統計学が10時間でざっと学べる】という本の第二章までの知識があればいいと思います。
あらかじめpandasをpdという名前でimportしてます。
K-means法とは
k個のクラスタに分類分けするアルゴリズム
主成分分析とは
次元数を減らす手法
(3個以上の変数を保持するデータを平面に出力するのは難しいので、次元数を減らすことで平面にわかりやすくプロット可能になる)
Scikit-learnからK-meansで使うライブラリのimport
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
Scikit-learnから主成分分析で使うライブラリのインポート
from sklearn.decomposition import PCA
データの標準化
読み込んだライブラリからfit_transformを使い、標準化を実行
前提:あらかじめpandasなどで分析対象データを読み込み/編集、以下の変数で作成
(以下データにはmean, median, max, minなど数値データを格納)
データ変数名: an_data
sc = StandardScaler()
clustering_sc = sc.fit_transform(an_data)
K-meansによるクラスタリング
KMeansのオプションであるrandom_stateに数値を設定すると、次回以降も同じ数値でのオプション指定することで同じ結果が得られる。(デフォルトはrandom_state=Noneであり、毎回違う乱数で処理される)
kmeans = KMeans(n_cluster=<クラスタの数>, random_state=0)
clusters = kmeans.fit(clustering_sc)
クラスタリング結果の表への出力
an_data["result_clustering"] = clusters.labels_
an_data.head()
主成分分析
hoge = clustering_sc
pca = PCA(n_components=2) # 二次元平面に出力するため、次元数は2を指定
pca.fit(hoge)
hoge_pca = pca.transform(hoge)
pca_data = pd.DataFrame(hoge_pca)
グラフ出力
グラフ表示準備
import matplotlib as plt
%matplotlib inline # jupyterでグラフ表示のため
クラスタ化したので、クラスタラベルごとの散布図で出力してみる
for i in an_data["result_clustering"].unique():
tmp = pca_data.loc[pca_data["result_clustering"] == i]
plt.scatter(tmp[0], tmp[1], label=i)
plt.legend()