K-Mean法によるクラスタ分析

>出典

scikit-learn でクラスタ分析 (K-means 法) - Python でデータサイエンス

 

 

>データ

今回のデータは、卸売業者の顧客データだそうで、前回のワインのデータよりはわかりやすいです。あけてみると

f:id:zizamo2193:20210429181206p:plain



>データの読み込み

Web上のデータを直接読むことができるみたいです。

f:id:zizamo2193:20210429181228p:plain



delで列の削除ができるみたいです。列への操作はヘッダ名を文字列で記載していることから、Csvの1行目を暗黙的にヘッダとして認識しているように見えます。

 

>データの整形

>>データフレーム→行列

f:id:zizamo2193:20210429181256p:plain

本家のサイトにはコメントで、

 

>>> # Pandas のデータフレームから Numpy の行列 (Array) に変換

とあります。先述したcsvを操作していたのはpandasのデータフレームというものだったらしいです。これを行列に変える、とのこと、いわゆる高校数学で出てきた行列のことでしょう。そのあとの転置というのもその方面の用語のようです。どうも列ごとに列挙して、行列にする算段のようです。

 

NumPy 配列の基礎 - Machine Learning Meets Python

 

こちらのサイトで、最小構成の配列の生成の例文があります。それによると、

 

In [14]: a = np.array([[1.5, 0], [0, 3.0]])

In [15]: a

Out[15]:

array([[ 1.5, 0. ],

[ 0. , 3. ]])

これを今回のデータに当てはめると、

f:id:zizamo2193:20210429181334p:plain



こういうことだと推測できます。

 

>>転置

数学Cをちゃんとやってないので転置というのがよくわかりませんでしたが、ここによると、

 

C++とPythonで行列の転置 for VC++ VS2017 - barus's diary

 

f:id:zizamo2193:20210429181358p:plain

f:id:zizamo2193:20210429181411p:plain

ルールとしては、こんな感じで、正方形のときは自明なのですが、長方形のときがややこしい、一旦長い辺に合わせて正方形として観て、斜め45度に線を引く→その線に対して対称の位置にいる要素同士を入れ替える、という方法で処理できるみたいです。完成したものを見ると、エクセルの「行列の入れ替え」になっています。1234の並びが横から縦になったことがわかります。

 

今回のデータで考えるとこう

f:id:zizamo2193:20210429181435p:plain

続くK-Meanのfitでは、横方向に並んだデータを1つの個体として解釈するようです。仮に転置を行わずにfitすると、440個の特徴を持つ7個体の分析になりそうです。

f:id:zizamo2193:20210429181452p:plain

>各クラスタの情報

f:id:zizamo2193:20210429181512p:plain

データフレームに戻って、そっちは元からエクセルの表ライクな構造をしているので、列の追加とグループごとの平均を取ります。

 

f:id:zizamo2193:20210429181534p:plain

エクセルでやろうと思ったらsumifsとかcountifsとかを使ってやるところです。エクセルの式は直感的にわかりやすいですがひとまとまりの処理としては記述性に乏しいと思っているので、使いこなせればすごいよさそうです。

 

>>可視化

f:id:zizamo2193:20210429181551p:plain

 

前にグラフの描画に必要なmatplotlibが入っていないと言ったと思いますが、Jupyterを入れた時点で入っていて、この%のコードが足りてなかっただけのようです。

 

matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業 - YutaKaのPython教室

 

%matplotlib inlineはmatplotlibのバックエンドをinlineに設定するという意味です。

バックエンドとは、グラフを出力するためのmatplotlibの内部処理です。

matplotlibではバックエンドの種類を変更することによって、グラフの出力形式を

inlineモードで出力

pngファイルで出力・保存

インタラクティブモードで出力(出力した図を操作して拡大などができる)

などに変更することができます。

図の出力方法を指定する必要があり、inlineにすることでコードを書いている場所のoutのところに出てくるという仕組みのようです。