LoginSignup
13
8

More than 3 years have passed since last update.

Power BI+Pythonで主成分分析

Last updated at Posted at 2020-12-16

はじめに

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を読み込みます。
image.png

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

image.png

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

image.png

 '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

5.componentsは固有ベクトルが入ります。(各成分が、データ列に対しどの程度の重みづけされているかを示し、主成分を解釈するための参考値)
image.png

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

image.png

ダッシュボードの作成

1.散布図に、X軸 PC1,Y軸 PC2をプロットします。(カテゴリOnでデータラベルを表示)

image.png

2.マウスオーバーしたときに各フィールドの値が表示されるよう、ツールヒントのページを作成します。ここでは、複数の行カードを配置します。(ツールヒントをオン、ページにおける書式のページサイズをツールヒントに設定)
image.png

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

image.png

分析結果

ポケモンデータ解析.pyと照らし合わせてみます。
固有ベクトル上では、第一主成分(PC1)は、Sp. Atk(特殊攻撃力)、Attack(攻撃力)の順で寄与が大きく、試しに、Sp.Atkを円のサイズでプロットしてみると、確かに、第一主成分(PC1)の右側へいくほど大きくなる傾向がありますね。:slight_smile:

image.png

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8