Power BI+Pythonで主成分分析

#はじめに
PythonやR等のプログラミング言語では、統計解析のライブラリが豊富で、高度な統計手法を無料で利用できるメリットがありますが、ソースコードの修正やコマンドラインからの操作は煩雑です。
統計解析が行えるPower BIのビジュアルがAppSourceに公開されている場合もありますが、使いたい機能が実装されていない場合もあります。
Power BIのPythonやRビジュアルを使う方法もあります。こちらは、プロットの処理をプログラミング言語で行うものですが、見やすいビジュアルを作成しようとすると少し手間がかかります。
ここでは、主成分分析を例に、Power BIのクエリーからデータを読み込み、クエリーの中でPythonによる統計解析を行い、PowerBIダッシュボードによる可視化を試みてみます。
#サンプルデータ
[ポケモンで多変量分析・主成分分析を始めよう！ RとTableauの連携](https://qiita.com/bashiiiwa/items/d783150ff4299dda27f1)の記事を参考に、Kaggleで公開されている[The Complete Pokemon Dataset](https://www.kaggle.com/rounakbanik/pokemon)のpokemon.csvを使います。
#Power BIクエリーの編集
1.ダウンロードしたPockemon.csvを読み込みます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/f3ac420c-ab4d-808c-2a31-16b84a397889.png)

2.分析に不要な列を削除し、Name列、データ列1、データ列2...とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/67bcb67a-c507-1e77-8d94-fcdac1f3cc58.png)

3.Pythonスクリプトを追加します。
このスクリプトでは、1列目をName、2列目以降をデータとして、skikit-learnのライブラリを使って主成分分析を行います。主成分分析のPythonコードは、[意味がわかる主成分分析](https://qiita.com/NoriakiOshita/items/460247bb57c22973a5f0)を参考にしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/5eec616b-bf6a-31f9-321b-bb1f3a70e4f8.png)

```Pythonスクリプト
 'dataset' はこのスクリプトの入力データを保持しています

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
dataset2=dataset.drop(dataset.columns[0],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
del dataset2
```
4.evrには各成分ごとの寄与率がセットされており、値を確認します。（各成分の影響力を示しており、第1主成分が0.46、第2主成分が0.19）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/b28c6d4f-95f8-6c96-925d-e64264253b34.png)

5.componentsは固有ベクトルが入ります。（各成分が、データ列に対しどの程度の重みづけされているかを示し、主成分を解釈するための参考値）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/22bba479-c7f6-4a7f-d73b-f0cc4abb5823.png)

6.datasetに主成分分析結果の主成分1(PC1)と主成分2(PC2)を追加しており、これを読み込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/cb4cdbaf-e8c9-439c-da7d-854598fcccbe.png)
#ダッシュボードの作成
1.散布図に、X軸 PC1,Y軸 PC2をプロットします。(カテゴリOnでデータラベルを表示）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/36bb80ec-a3a4-bd8a-063a-06ede4e5241f.png)

2.マウスオーバーしたときに各フィールドの値が表示されるよう、ツールヒントのページを作成します。ここでは、複数の行カードを配置します。（ツールヒントをオン、ページにおける書式のページサイズをツールヒントに設定)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/bcb99e0e-1715-05fb-0f68-784e1bf08926.png)


3.散布図のツールヒントを有効にします（書式にあるツールヒントをオン、型：レポートページ、ページを作成したHintsに設定）。マウスカーソルをデータポイントに置くとキャラクタの特性データが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/5e70c0ee-77fa-ed0e-7f8f-081cfb7d9316.png)

#分析結果
[ポケモンデータ解析.py](https://qiita.com/maskot1977/items/2680927b58cdc4fad8d4#%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90)と照らし合わせてみます。
固有ベクトル上では、第一主成分（PC1）は、Sp. Atk（特殊攻撃力）、Attack（攻撃力）の順で寄与が大きく、試しに、Sp.Atkを円のサイズでプロットしてみると、確かに、第一主成分（PC1）の右側へいくほど大きくなる傾向がありますね。:slight_smile:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/be188856-93de-ad3b-6605-91c0d68bc560.png)