#はじめに
PythonやR等のプログラミング言語では、統計解析のライブラリが豊富で、高度な統計手法を無料で利用できるメリットがありますが、ソースコードの修正やコマンドラインからの操作は煩雑です。
統計解析が行えるPower BIのビジュアルがAppSourceに公開されている場合もありますが、使いたい機能が実装されていない場合もあります。
Power BIのPythonやRビジュアルを使う方法もあります。こちらは、プロットの処理をプログラミング言語で行うものですが、見やすいビジュアルを作成しようとすると少し手間がかかります。
ここでは、主成分分析を例に、Power BIのクエリーからデータを読み込み、クエリーの中でPythonによる統計解析を行い、PowerBIダッシュボードによる可視化を試みてみます。
#サンプルデータ
ポケモンで多変量分析・主成分分析を始めよう! RとTableauの連携の記事を参考に、Kaggleで公開されているThe Complete Pokemon Datasetのpokemon.csvを使います。
#Power BIクエリーの編集
1.ダウンロードしたPockemon.csvを読み込みます。
2.分析に不要な列を削除し、Name列、データ列1、データ列2...とします。
3.Pythonスクリプトを追加します。
このスクリプトでは、1列目をName、2列目以降をデータとして、skikit-learnのライブラリを使って主成分分析を行います。主成分分析の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)
5.componentsは固有ベクトルが入ります。(各成分が、データ列に対しどの程度の重みづけされているかを示し、主成分を解釈するための参考値)
6.datasetに主成分分析結果の主成分1(PC1)と主成分2(PC2)を追加しており、これを読み込みます。
#ダッシュボードの作成
1.散布図に、X軸 PC1,Y軸 PC2をプロットします。(カテゴリOnでデータラベルを表示)
2.マウスオーバーしたときに各フィールドの値が表示されるよう、ツールヒントのページを作成します。ここでは、複数の行カードを配置します。(ツールヒントをオン、ページにおける書式のページサイズをツールヒントに設定)
3.散布図のツールヒントを有効にします(書式にあるツールヒントをオン、型:レポートページ、ページを作成したHintsに設定)。マウスカーソルをデータポイントに置くとキャラクタの特性データが表示されます。
#分析結果
ポケモンデータ解析.pyと照らし合わせてみます。
固有ベクトル上では、第一主成分(PC1)は、Sp. Atk(特殊攻撃力)、Attack(攻撃力)の順で寄与が大きく、試しに、Sp.Atkを円のサイズでプロットしてみると、確かに、第一主成分(PC1)の右側へいくほど大きくなる傾向がありますね。