Power BI+Pythonで主成分分析&クラスター分析

#はじめに
PythonやR等のプログラミング言語では、統計解析のライブラリが豊富に存在しますが、プログラミングによる解析は面倒です。
[Power BI+Pythonで主成分分析](https://qiita.com/covao/items/a681ac961b0468378b7d)では、Power BIのクエリー処理でPythonによる分析を行い、PowerBIで可視化を行いました。今回は、アンケートのデータを例に、主成分分析で２軸に要約し、クラスター分析によるグルーピングを試みます。
#サンプルデータ  
以下のような、サンタ帽のカラーイメージを評価するアンケートを扱います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/30a44a74-e224-a439-c949-43cf7021cf59.png)

##アンケートの設問（一部）
ここでは、[SD法](https://kotobank.jp/word/%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%87%E3%82%A3%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB%E6%B3%95-87659)という、対となる形容詞でイメージを探るアンケートでデータを収集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/73e04aed-faaa-c075-87a0-49d719ceb5c5.png)


##回答データ(サンプル)
アンケート結果から、以下のようなExcelデータを用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/28deb3d0-fc2a-2d85-5035-8950a881c53d.png)

|回答者|カラー|親しみやすい-親しみにくい|おもしろい-つまらない|明るい-暗い|活発な-落ち着いた|重い-軽い|力強い-弱々しい|
|---|---|---|---|---|---|---|---|
|1|ブルー|5|3|4|3|5|4|
|1|イエロー|5|6|6|6|3|4|
|1|レッド|5|6|6|6|4|6|
|1|グリーン|4|4|5|4|4|4|
|1|ブラック|3|3|2|2|6|4|
|1|ホワイト|4|5|6|4|2|4|
|2|ブルー|6|4|4|3|5|4|
|2|イエロー|5|6|6|7|3|5|
|2|レッド|6|6|6|6|4|6|
|2|グリーン|4|4|5|4|5|5|
|2|ブラック|3|3|2|2|6|5|
|2|ホワイト|4|5|7|4|2|4|

#データ読み込み
データを取得より、アンケートのExcelデータを読み込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/3b8a6f71-7d83-b878-775f-2fa256cb4afe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/13b95ad4-713a-56ac-6a32-460de6db0ce1.png)

#クエリーの編集　
1. データの変換をクリックし、Power Queryエディタを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/928fe0d1-a1ee-787e-a529-365b04267666.png)

2. メニューの変換>Pythonスクリプトを実行するをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/f638cb3f-5ff5-fd37-d5db-6eb8fe513b0c.png)

3. Pythonスクリプトを記述します。（pythonライブラリのsklearn,pandasを使用しています)

```
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

dataset2=dataset.drop(dataset.columns[[0,1]],axis=1)
X=dataset2.values
pca = PCA()
pca.fit(X)
pca_point = pca.transform(X)
dataset['PC1']=pca_point[:,0]
dataset['PC2']=pca_point[:,1]
evr=pd.DataFrame(data=pca.explained_variance_ratio_,  columns={'explained_variance_ratio'}, dtype='float')
evr['PC No.']=evr.index+1
components=pd.DataFrame(data=pca.components_,  columns=dataset2.columns, dtype='float')
components['PC No.']=components.index+1

km = KMeans(n_clusters=2,            # クラスターの個数
            init='random',           # セントロイドの初期値をランダムに設定  default: 'k-means++'
            n_init=10,               # 異なるセントロイドの初期値を用いたk-meansの実行回数 default: '10'
            max_iter=300,            # k-meansアルゴリズムの内部の最大イテレーション回数  default: '300'
            tol=1e-04,               # 収束と判定するための相対的な許容誤差 default: '1e-04'
            random_state=0)          # セントロイドの初期化に用いる乱数発生器の状態
y_km = km.fit_predict(pca_point)
dataset['Cluster']=y_km

del dataset2


```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/8d104810-5b79-dbf2-e44e-e03363d7ddcf.png)

4.　evrには各成分ごとの寄与率がセットされており、値を確認します。（各成分の影響力を示しています）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/1d971dd6-48e0-97e2-4861-384fe6db762e.png)

5.　datasetのTableをクリックし、Pythonで解析したデータを読み込みます。(主成分1、主成分2、クラスタ番号の列が追加されています。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/5a654691-0b5f-0adb-1535-bb6c3f28b5e7.png)

6.　ホーム>閉じて適用をクリック

#レポートの作成
1. 散布図のアイコンをクリックし、ダッシュボードに置きます。
2. X軸にPC1の平均、Y軸にPC2の平均を設定します。
3. 凡例をCluster、詳細をカラーに設定します。
4. 視覚化>書式＞カテゴリを有効に設定し、データラベルを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/c78d4e56-37c2-9485-9444-87d9ff468b3a.png)

#分析結果
クラスタ数を2に設定した場合、このようにグルーピングされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/516e6c1c-6a85-5d38-5cec-041125c557e4.png)
要約されたX軸(第1主成分）、Y軸（第2主成分)は、分析結果をもとに何らかの意味づけをすると分かりやすくなります。

#まとめ 
Power BIとPythonを用いて、アンケートデータから主成分分析とクラスタ分析を行ってみました。

#参考
- [SD法にかわる，印象評価軸をきめる評価グリッド法について](https://qiita.com/yamathcy/items/b64d8d1663fe768b48f4)
- [k-meansの最適なクラスター数を調べる方法](https://qiita.com/deaikei/items/11a10fde5bb47a2cf2c2)