まだ Twitter 分析で消耗してるの？無料の Microsoft Flow と Cognitive Services Text Analytics、Power BI でテキスト分析レポート自動化(2)

#Microsoft Power BI Desktop と Cognitive Services による Twitter テキスト分析レポート(2)
[前回](http://qiita.com/annie/items/af481a7a8d4aac4e0fd9)は、Microsoft Flow を利用して、キーワードによる Twitter 検索データを自動抽出＆保存するフローを作成し、OneDrive に配置した Excel シートにデータを取得しました。
今回は、Microsoft Power BI Desktop にデータを取り込み、Microsoft Cognitive Services の Text Analytics API を利用して、Tweet テキストのネガポジ分析を行います。

##手順
0.[準備](http://qiita.com/annie/items/af481a7a8d4aac4e0fd9#準備)
1. [Flow で Twitter キーワード検索データを OneDrive 上の Excel に保存するフローを作成](http://qiita.com/annie/items/af481a7a8d4aac4e0fd9#1-flow-で-twitter-キーワード検索データを-onedrive-上の-excel-に保存するフローを作成)
2. **Power BI Desktop & Cognitive Services で Twitter テキストデータを分析**
3. [取得＆分析した Twitter テキストデータを Power BI Desktop でグラフィカルに表示](http://qiita.com/annie/items/b776e5ac487e0c3178ae)

#2. Power BI Desktop & Cognitive Services で Twitter テキストデータを分析

以下の手順では キーワード="microsoft" を含む Tweet を一定期間 (2016/11末) 取得したデータを利用します。お好みのキーワードで設定した Tweet 検索データをご利用ください。
同じデータを使いたい方はこちらをお使いください > [tweetstream.xlsx](https://cogbot.blob.core.windows.net/tweetanalytics/tweetStream.xlsx)

##2.1 Power BI Desktop から Tweet 検索データにアクセスする

1.で取得した Tweet 検索データ(Excel ファイル)を使用します。今回は一旦 Excel ファイルをダウンロードしておきます。OneDrive にアクセスし、tweetstream.xlsx を選択、上部バーの [ダウンロード] をクリックしてダウンロードします。
>[OneDrive アプリ](https://onedrive.live.com/about/ja-jp/download/)でローカル環境と同期設定しておけば、自動で Excel ファイルをローカル環境に保存することができます。

<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_25.png">

Power BI Desktop を起動します。初期画面から [データの取得] をクリックし、[データを取得]ダイアログで "Excel" を選択して、[接続]をクリックします。 Tweet 検索データ(Excel ファイル) を選択して開きます。

<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_26.png"> <img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_27.png">

>初期画面が表示されない場合は、ホーム画面で [データの取得]＞[Excel] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_28.png">

データの中身が表示されます。ここではデータが挿入されているテーブルを選択し、[編集] をクリックしてデータの加工を行います。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_29.png">

クエリエディターでテーブルが読み込まれた状態で表示されます。テーブル名を右クリックして [名前の変更] をクリックし、"TweetStream" に変更します。
>これは "クエリ" と呼ばれる 元の Excel ファイルからデータにアクセスするため接続 (とデータ編集方法をまとめたもの) です。

<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_30.png">

[TweetStream] に名前を変更したクエリが表示されています。[user_id] カラム左端をクリックし、データの型を [テキスト] に変更します。同様に [tweet_id] カラムも [テキスト] に型を変更します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_31.png">


##2.2 テキスト分析を行うデータを準備する

画面左バーの [クエリ] の列に表示されている [TweetStream] を右クリックして、[複製] を選択します。すると同じ内容のクエリが新たに作成されますので、クエリ名を "SentimentAnalytics" に変更します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_32.png">

[SentimentAnalytics] のクエリで、[tweet_id] カラム を右クリックして [名前の変更] を選択し、"id" に変更します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_33.png">

lang のカラム右端をクリックし、"(すべて選択)" のチェックボックスを外して "en" のみにチェックをつけ、[OK] をクリックします。
>現在、日本語でのネガポジ分析機能は提供されていないため、データを英語のみに限定します。

<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_34.png">

テキスト分析に必要なデータは id, text のみのため、他のデータ列を削除します。[id] と [text] の列両方を選択して右クリックし、"他の列の削除" を選択します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_35.png">

データから空白行を削除します。[id] と [text] の列両方を選択してから、上部バーの [行の削除] ＞ [空白行の削除] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_36.png">

一度に API Call 出来るデータ量に限りがあるので、データ行を減らします。上部バーの [行の保持]＞[上位の行を保持] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_37.png">

今回はデータを 500 行に絞ります。"500" と入力して [OK] をクリックして確定します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_38.png">

##2.3 Text Analytics API に接続して分析を行う関数を作成する

今回は Cogitive Services Text Analytics API を利用して、Sentiment 分析 (ネガポジ分析) を行います。テキストをを分析して、ネガティブ～ポジティブを 0～1 の間でスコアとして評価することができます。

クエリエディターの画面で、上部バーから [新しいソース] ＞ [空のクエリ] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_39.png">

作成したクエリを選択して右クリックし、名前を "GetSentimentAnalytics" に変更します。再度右クリックして [詳細エディター] を選択します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_40.png">

[詳細エディター] ダイアログで、デフォルトで入力されている クエリ文 を下記のように書き換えます。(YOUR_SUBSCRIPTION_KEY の部分は準備の手順で取得した Text Analytics のサブスクリプションキーを入れてください。) 入力できたら [完了] をクリックして 詳細エディター を閉じます。

```GetSentimentAnalytics
(Source as table) as any =>
let
    JsonRecords = Text.FromBinary(Json.FromValue(Source)),
    JsonRequest = "{""documents"": " & JsonRecords & "}",

    JsonContent = Text.ToBinary(JsonRequest, TextEncoding.Ascii),
    Response =
        Web.Contents("https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment?",
            [
                Headers = [#"Ocp-Apim-Subscription-Key"= "YOUR_SUBSCRIPTION_KEY",
                           #"Content-Type"="application/json", Accept="application/json"],
                Content=JsonContent 
            ]),
    JsonResponse = Json.Document(Response,1252)
in
    JsonResponse
```
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_42.png">

>ここでは、Source(引数として指定) のデータを取得し、Text Analytics API の Sentiment Analytics を行うサービスに POST するためのフォーマット↓を作成して API Call します。
<pre>
POST https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment HTTP/1.1
Content-Type: application/json
Host: westus.api.cognitive.microsoft.com
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
  "documents": [
    {
      "id": "123456789",                       // 一意になる id を設定
      "text": "Cognitive Services is great!"   // 分析するテキスト
    }
  ]
}
</pre>

##2.4 Tweet 検索データをセットして ネガポジ分析を実行する

画面左列バーの [クエリ] で [Sentiment Analytics]を右クリックして [複製] を選択します。クエリの名前を "SentimentResult" に変更しておきます。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_43.png">

[SentimentResult] のクエリ画面で [id] のカラムをクリックしてから、上部の関数バーの [fx] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_44.png">

関数バーに "= 保存された先頭行" と表示されるので、編集して "= GetSentimentAnalytics (保存された先頭行)" に変更し、確定します。(Enterキーを入力、または関数バーの ✔ をクリックします。)
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_45.png"> <img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_46.png">

データが非表示になったら、ネガポジ分析結果の取得は完了です。"document" の列にある "List" をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_47.png">

[List] カラムを右クリックして [テーブルへの変換] を選択します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_48.png">

[テーブルへの変換] ダイアログで [OK] をクリックして、テーブルへの変換を完了します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_49.png">

> Cognitive Services から取得した分析データは JSON 形式のため、変更を行っています。

[Column1] の右端をクリックして、(すべての列の選択) にチェックが入っていることを確認し、"元の列名をプレフィックスとして使用します" のチェックボックスを外し、[OK] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_50.png">

[id],[score] の列、データが表示されたら、分析データの取得は完了です。カラム の左端をクリックして、型を "10進数" に変更しておきます。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_51.png">

##2.5 ネガポジ分析データを結合する＆レポートしやすいように加工する

クエリエディターの上部バーにある [クエリのマージ]＞[新規としてクエリをマージ] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_51.png">

[マージ] ダイアログで、上部には [TweetStream]、下部には [SentimentResult] を選択します。照合列として [TweetStream] は "tweet_id" 列、[SentimentResult] は "id" 列 をクリックして選択します。[結合の種類] には 右外部 を選択します。[OK] をクリックして確定します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_52.png">

> [SentimentResult] はデータを絞っているため 500 行のみになります。それに合わせて [TweetStream] のデータを結合します。
 
結合されたデータを表示します。[NewColumn]カラムの右端をクリックして、"(すべての列の選択)" にチェックが入っていることを確認して [OK] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_53.png">
データが表示されたら結合完了です。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_54.png">

新しくできたクエリの名前は "TweetStreamAnalytics" に変更しておきます。
さらにレポートで表示しやすいようにデータを加工します。ネガポジ分析のスコアを丸めた(小数点以下第1位まで)データを作成します。
上部バーで [列の追加] タブを選択し、[カスタム列] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_55.png">

[カスタム列の追加] ダイアログで [新しい列名] は "score(round)"、[カスタム列の式] には "=Number.Round([score],1)" と入力して、[OK] をクリックします。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_56.png">

新しく追加された [score(round)] カラム の左端をクリックして、型を "10進数" に変更します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_57.png">

>[datetime] の列のデータを加工すると、下記の図のように日付と時間を取り出すこともできます。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_58.png">

以上でデータの取り込み、分析、加工は完了です。
上部バーの [ホーム] タブにある [閉じて適用] をクリックして、クエリエディターを終了します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_59.png">

Power BI のレポート作成画面で [クエリの変更の適用] ダイアログが表示され、レポート用のデータ取り込みが行われます。ダイアログが終了したらレポート作成に入ります。一旦レポートを保存します。
<img width="400" src="https://msdnshared.blob.core.windows.net/media/2016/12/bluesky_20161201_60.png">

#次回
[次回](http://qiita.com/annie/items/b776e5ac487e0c3178ae)は、これらのデータを利用して各種グラフや地図、ワードクラウドによるレポートを作成します。