#Microsoft Power BI Desktop と Cognitive Services による Twitter テキスト分析レポート(2)
前回は、Microsoft Flow を利用して、キーワードによる Twitter 検索データを自動抽出&保存するフローを作成し、OneDrive に配置した Excel シートにデータを取得しました。
今回は、Microsoft Power BI Desktop にデータを取り込み、Microsoft Cognitive Services の Text Analytics API を利用して、Tweet テキストのネガポジ分析を行います。
##手順
0.準備
- Flow で Twitter キーワード検索データを OneDrive 上の Excel に保存するフローを作成
- Power BI Desktop & Cognitive Services で Twitter テキストデータを分析
- 取得&分析した Twitter テキストデータを Power BI Desktop でグラフィカルに表示
#2. Power BI Desktop & Cognitive Services で Twitter テキストデータを分析
以下の手順では キーワード="microsoft" を含む Tweet を一定期間 (2016/11末) 取得したデータを利用します。お好みのキーワードで設定した Tweet 検索データをご利用ください。
同じデータを使いたい方はこちらをお使いください > tweetstream.xlsx
##2.1 Power BI Desktop から Tweet 検索データにアクセスする
1.で取得した Tweet 検索データ(Excel ファイル)を使用します。今回は一旦 Excel ファイルをダウンロードしておきます。OneDrive にアクセスし、tweetstream.xlsx を選択、上部バーの [ダウンロード] をクリックしてダウンロードします。
OneDrive アプリでローカル環境と同期設定しておけば、自動で Excel ファイルをローカル環境に保存することができます。
Power BI Desktop を起動します。初期画面から [データの取得] をクリックし、[データを取得]ダイアログで "Excel" を選択して、[接続]をクリックします。 Tweet 検索データ(Excel ファイル) を選択して開きます。
初期画面が表示されない場合は、ホーム画面で [データの取得]>[Excel] をクリックします。
データの中身が表示されます。ここではデータが挿入されているテーブルを選択し、[編集] をクリックしてデータの加工を行います。
クエリエディターでテーブルが読み込まれた状態で表示されます。テーブル名を右クリックして [名前の変更] をクリックし、"TweetStream" に変更します。
これは "クエリ" と呼ばれる 元の Excel ファイルからデータにアクセスするため接続 (とデータ編集方法をまとめたもの) です。
[TweetStream] に名前を変更したクエリが表示されています。[user_id] カラム左端をクリックし、データの型を [テキスト] に変更します。同様に [tweet_id] カラムも [テキスト] に型を変更します。
##2.2 テキスト分析を行うデータを準備する
画面左バーの [クエリ] の列に表示されている [TweetStream] を右クリックして、[複製] を選択します。すると同じ内容のクエリが新たに作成されますので、クエリ名を "SentimentAnalytics" に変更します。
[SentimentAnalytics] のクエリで、[tweet_id] カラム を右クリックして [名前の変更] を選択し、"id" に変更します。
lang のカラム右端をクリックし、"(すべて選択)" のチェックボックスを外して "en" のみにチェックをつけ、[OK] をクリックします。
現在、日本語でのネガポジ分析機能は提供されていないため、データを英語のみに限定します。
テキスト分析に必要なデータは id, text のみのため、他のデータ列を削除します。[id] と [text] の列両方を選択して右クリックし、"他の列の削除" を選択します。
データから空白行を削除します。[id] と [text] の列両方を選択してから、上部バーの [行の削除] > [空白行の削除] をクリックします。
一度に API Call 出来るデータ量に限りがあるので、データ行を減らします。上部バーの [行の保持]>[上位の行を保持] をクリックします。
今回はデータを 500 行に絞ります。"500" と入力して [OK] をクリックして確定します。
##2.3 Text Analytics API に接続して分析を行う関数を作成する
今回は Cogitive Services Text Analytics API を利用して、Sentiment 分析 (ネガポジ分析) を行います。テキストをを分析して、ネガティブ~ポジティブを 0~1 の間でスコアとして評価することができます。
クエリエディターの画面で、上部バーから [新しいソース] > [空のクエリ] をクリックします。
作成したクエリを選択して右クリックし、名前を "GetSentimentAnalytics" に変更します。再度右クリックして [詳細エディター] を選択します。
[詳細エディター] ダイアログで、デフォルトで入力されている クエリ文 を下記のように書き換えます。(YOUR_SUBSCRIPTION_KEY の部分は準備の手順で取得した Text Analytics のサブスクリプションキーを入れてください。) 入力できたら [完了] をクリックして 詳細エディター を閉じます。
(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
ここでは、Source(引数として指定) のデータを取得し、Text Analytics API の Sentiment Analytics を行うサービスに POST するためのフォーマット↓を作成して API Call します。
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!" // 分析するテキスト
}
]
}
##2.4 Tweet 検索データをセットして ネガポジ分析を実行する
画面左列バーの [クエリ] で [Sentiment Analytics]を右クリックして [複製] を選択します。クエリの名前を "SentimentResult" に変更しておきます。
[SentimentResult] のクエリ画面で [id] のカラムをクリックしてから、上部の関数バーの [fx] をクリックします。
関数バーに "= 保存された先頭行" と表示されるので、編集して "= GetSentimentAnalytics (保存された先頭行)" に変更し、確定します。(Enterキーを入力、または関数バーの ✔ をクリックします。)
データが非表示になったら、ネガポジ分析結果の取得は完了です。"document" の列にある "List" をクリックします。
[List] カラムを右クリックして [テーブルへの変換] を選択します。
[テーブルへの変換] ダイアログで [OK] をクリックして、テーブルへの変換を完了します。
Cognitive Services から取得した分析データは JSON 形式のため、変更を行っています。
[Column1] の右端をクリックして、(すべての列の選択) にチェックが入っていることを確認し、"元の列名をプレフィックスとして使用します" のチェックボックスを外し、[OK] をクリックします。
[id],[score] の列、データが表示されたら、分析データの取得は完了です。カラム の左端をクリックして、型を "10進数" に変更しておきます。
##2.5 ネガポジ分析データを結合する&レポートしやすいように加工する
クエリエディターの上部バーにある [クエリのマージ]>[新規としてクエリをマージ] をクリックします。
[マージ] ダイアログで、上部には [TweetStream]、下部には [SentimentResult] を選択します。照合列として [TweetStream] は "tweet_id" 列、[SentimentResult] は "id" 列 をクリックして選択します。[結合の種類] には 右外部 を選択します。[OK] をクリックして確定します。
[SentimentResult] はデータを絞っているため 500 行のみになります。それに合わせて [TweetStream] のデータを結合します。
結合されたデータを表示します。[NewColumn]カラムの右端をクリックして、"(すべての列の選択)" にチェックが入っていることを確認して [OK] をクリックします。
データが表示されたら結合完了です。
新しくできたクエリの名前は "TweetStreamAnalytics" に変更しておきます。
さらにレポートで表示しやすいようにデータを加工します。ネガポジ分析のスコアを丸めた(小数点以下第1位まで)データを作成します。
上部バーで [列の追加] タブを選択し、[カスタム列] をクリックします。
[カスタム列の追加] ダイアログで [新しい列名] は "score(round)"、[カスタム列の式] には "=Number.Round([score],1)" と入力して、[OK] をクリックします。
新しく追加された [score(round)] カラム の左端をクリックして、型を "10進数" に変更します。
[datetime] の列のデータを加工すると、下記の図のように日付と時間を取り出すこともできます。
以上でデータの取り込み、分析、加工は完了です。
上部バーの [ホーム] タブにある [閉じて適用] をクリックして、クエリエディターを終了します。
Power BI のレポート作成画面で [クエリの変更の適用] ダイアログが表示され、レポート用のデータ取り込みが行われます。ダイアログが終了したらレポート作成に入ります。一旦レポートを保存します。
#次回
次回は、これらのデータを利用して各種グラフや地図、ワードクラウドによるレポートを作成します。