4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-01

#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.準備

  1. Flow で Twitter キーワード検索データを OneDrive 上の Excel に保存するフローを作成
  2. Power BI Desktop & Cognitive Services で Twitter テキストデータを分析
  3. 取得&分析した 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 のレポート作成画面で [クエリの変更の適用] ダイアログが表示され、レポート用のデータ取り込みが行われます。ダイアログが終了したらレポート作成に入ります。一旦レポートを保存します。

#次回
次回は、これらのデータを利用して各種グラフや地図、ワードクラウドによるレポートを作成します。

4
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
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?