Python × PowerBI データ分析事始め【データ準備編】

# はじめに

と、いうことで、PowerBIでPythonが利用できるようになりました。
※機能はプレビュー段階

Python使いたかったデータサイエンティストの方々も多かったでしょう。
ニッチなデータ加工をPowerQueryではなくPython/Pandasを使えるのはとても喜ばしい。

ところで、PythonもPowerBIも興味あったけど、あまり取組めていなかった人も多いのではないかと。  
せっかく両方使えるようになったので、両者の特徴解説していきながら、
データの取得～加工～可視化をやっていきたいと思います！

Python & PowerBI 初心者さんのためのデータ分析事始めスタート！

# PCにPowerBIDesktopとPythonをインストールしよう

まずは環境構築、自身のPCにPowerBIDesktopとPythonをインストールしましょう。  
それぞれ以下の記事を参考に進めてください。

PowerBIDesktopは[コチラ](https://qiita.com/PowerBIxyz/items/6c4735cb5b5712e70981)

Pythonは[コチラ](https://qiita.com/h_kobayashi1125/items/328f5d44668e59e0d0af)


# PowerBIでPythonが使える準備をしよう

2018/8時点で、Pythonはプレビュー機能のため、オプションで有効化することが必要です。

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/24ec55ab-b153-f938-969f-56c1d4fffeba.png" width=400>

有効化したら、Pythonを実行するホームディレクトリを選択します。 
下記手順でAnaconda経由で環境構築した場合は、だいたい以下のようなディレクトリ名で指定できるはずです。

```
C:\Anaconda3\envs\"つくった環境名"
```

だめな場合は、pythonで以下を実行してパスを確認しましょう。

```.py
import sys
sys.path
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/99c97cb2-7da8-52b5-38ee-7e16f7b25c6b.png" width=400>

表示されるエラーが消えたら、準備できています。


# データを取得しよう

PowerBIでの分析を始めるには、データを取得することがスタートライン。  
データの取得に関してはPowerBIに備わっているクエリ（PowerQuery）が超優秀で、正直Pythonの出番はあまりありません。

でも、Pythonによるデータ取得→反映ももちろんできます。

両方試してみましょう。

## ローカル環境からCSVファイルを取得

### PowerBI

PowerBIのデータ取得は超簡単&高機能です。

仮に取り込みたいデータがCSV形式でデスクトップ上にある場合、  
画面上のリボンから「データを取得」→「テキスト/CSV」→お目当てのCSVを選択するだけ。

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/9bd1bdb1-d193-1f14-abaa-4551da372e8c.png" width=700>

データ取り込み後、データの加工をしていくのが本来のステップ。

PowerBIは、レポートとしてビジュアルを作ったり、データモデルを集計したりする画面「レポート画面」と、集計対象のデータを加工する画面「クエリエディター」の大きく２種で構成されています。

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/a48d2d5d-336a-0d0d-eb72-f5a408e8d0d9.png" width=700>

先ほどのデータも、きちんとクエリエディター上で確認・加工できるようにすでに整備されています。
クエリエディターの「詳細エディター」というところをクリックしてみましょう。

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/c0149d4b-0d77-0ca1-f268-106fc5da0d78.png" width=700>

これが、PowerQuery原文です。
１つ１つの加工ステップが、すべて１行のコードとして対応していることが分かります。
GUI上での操作が全部コード化されて適用されているイメージですね。

さて、加工はまたいずれにして、「閉じて適用」をクリックしてレポート画面に戻りましょう。

レポート画面右側をみてみると、「フィールド」に先ほど取り込んだデータが格納されていることがわかります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/75063588-e4d8-4437-1095-9470c290d2ed.png" width=700>


このフィールドを使って、ビジュアルを作っていくことになります。


### Python

さて、Pythonでローカル環境にあるデータを取り込む手順にうつります。

Pythonのスクリプトを書くことになりますが、おススメは次のステップ。

1. JupyterNotebookやVSCodeなど、自分の環境下でコード作成・テスト
2. PowerBI Pythonスクリプトにコピペ 
3. 実行


PowerBI上のエディタでは絶対に書かないでください。
※初心者殺し的な意味で。

さあやってみましょう。

まずは自分の環境下で、ローカル環境に置いたCSVファイルをデータフレームとして取り込むスクリプトを作ります。

といっても、以下２行です。

```.py
# pandasというデータフレームを扱うためのライブラリをインポートします
import pandas as pd
data = pd.read_csv("C:/Users/hogehoge/Desktop/winequality-white.csv", sep=";")
# 絶対パスで指定するのを忘れずに。
```


<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/90d867cf-16f7-c6e7-cfd9-a667ea5e63ca.png" width=700>


無事に読み込みができていたらOK。

PowerBIに戻って、
「データを取得」→「Pythonスクリプト」→コピペ・OK
で、ナビゲーターが起動し、
データフレームを格納した変数名を選択することができるようになります。
あとはチェックして読み取りだけ。

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/eddfe706-7dc0-ee8e-225e-e7933d502044.png" width=700>


なんかめっちゃ遠回り感ありますが、同じことができました！




## WEB上の情報（HTML）をスクレイピング

さてさて、PowerBIといえば高度なスクレイピング機能。
UCI Machine Learning RepositoryのHTML情報から、データテーブルを作成してみましょう。
対象はデータセット一覧の[コチラのURL](https://archive.ics.uci.edu/ml/datasets.html)

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/36aa3dc1-02c1-5d3d-4252-321146ce9ec2.png" width=700>


### PowerBI

tableタグなどを自動で読み取ってくれたりするんですが、
WEBページ見ながら欲しい情報入力すると、
自動で「お前欲しいのコレやろ（どやぁ）」してくれる機能を紹介

「データを取得」→「WEB」→URLをコピペ→「列を使用してテーブルを追加」


<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/104a5361-a75c-14a7-4bb7-0efc4fca3704.png" width = 700>

すると、WEBの画面を見ながら自分が欲しい情報をいくつか入力すると、自動でHTML・CSS情報を抽出してくれるぶっとび機能。
詳細はこちらの記事を参照[「例を使用してテーブルを抽出するとは」](https://qiita.com/PowerBIxyz/items/ffee73e7336600ad54d6)

簡単にデータセット情報が抽出できちゃいました。

### Python

Pythonの手順は先ほど同様、自分のエディタで試行してから実装しましょう。

まずスクレイピングにあたって、```lxml```、```html5lib```、```BeautifulSoup4```のライブラリが必要なので、pipでインストールしておきます。
※Pythonで以下を実行すればOK

```.py
!pip install pandas lxml html5lib BeautifulSoup4
```

コピペコードは以下のとおりです。


```.py
import pandas as pd
url = 'https://archive.ics.uci.edu/ml/datasets.html'
df_list= pd.io.html.read_html(url)
ucidata2 = df_list[5]
ucidata2 = ucidata2[[0]]
ucidata2.columns=["Name"]
ucidata2 = ucidata2.dropna().drop(0)
```

これで、ucidata2という、先ほどスクレイピングしたデータセットとまったく同じものができあがりました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/165789/df124536-8dca-4513-4cb5-09a5912620b8.png" width=600>


# 次回
通常は加工のステップをやるべきですが、退屈です。
なので、お先にPowerBIビジュアルと、Pythonビジュアルで遊んでみましょう！


# おわりに

利用データは、主に[UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/index.php)から拝借させていただいています。