Logic Apps + Text Analyticsを使ってツイートを分析する(1) キーフレーズ抽出

# ご無沙汰してます

筆者は念願のデータ分析の仕事を専業ではじめました。

職場でツイッターの分析の話題になり、Google Spreadsheetに入れればGASを使ってSentiment Analyticsにかければ案外かんたんですよーって話していたのですが、よくよくやってみるとGASは認証部分とかで関数の世代交代とコードの陳腐化が激しく、自分たちで使うのは問題ないけれど、お客さんに教えるにはハードルが高いことがわかりました。

少し考えて、AzureのLogic AppsとText Analyticsを使えば自由度は低いけれどもこのへんの泥臭い部分を吸収してしまえるので良さそうだという結論に至りました。

# コーディング

シンプルに Tweet取得＞Text Analyticsにかける＞Google Spreadsheetに書く

大量のコメントが発生するキーワードを使い実際にデータを流しながら試した結果、結局こんな感じになりました。

気をつけなければいけないこと

- 行挿入する保存先にGoogle Spreadsheetを使っているので、案外かんたんにAPI呼び出し上限に達する
- 配列渡しになると書き込みにFor eachループが作られてしまうので、ツイート数 * キーフレーズ数ですごいリクエストがかかる
- Google Spreadsheetは頭がよくて、ID的なものを渡すと行更新をかけようとするので渡す配列に注意が必要

精度と負荷対策として、以下を行いました

- RTだけの書き込みはキーフレーズ分析のときに重複になるので外す
- tweet_user, tweet_idなどは扱わない

<img width="339" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/e9fffa35-ae6c-6443-e511-6921544cb11a.png">


1. Tweetトリガを取得
2. フィルタとして、「RTで始まるもの」「競馬関係」「電車関係」などをORフィルタで取り除く
3. 残ったものをテキスト分析し、キーフレーズの入った配列を抽出
4. Google Spreadsheetに記録


# 解説

## データ保存先の作成

こんなGoogle Spreadsheetを作りました。Entity, Tweet_datetimeという列ヘッダを書きました。__PowerAppsId__　は自動作成されるような気がします。

<img width="194" alt="ツイート分析sandbox_-_Google_スプレッドシート.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/bb4eb2b8-aeb2-1843-8c29-5da7e129c692.png">

## Cognitive Service Text Analyticsの有効化

[このあたりの資料を見ながら、アクセスキーとエンドポイントURLを作成してください](https://dev.classmethod.jp/cloud/azure/azure-cognitive-services-text-analytics-japanese/)


## Twitterトリガ

自前のDBなどに保存するならデフォルトで問題ないのですが、Logic Appsは並列処理で思いっきり処理します。書き込み先がGoogle Spreadsheetなので、手加減してあげるためにコンカレンシー制御をOnにし、数値を仮に[8]にしました。

<img width="420" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/fd33e1b0-e8cb-cfaf-65ff-8853d866ad23.png">


<img width="309" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/7146ba61-9bff-1874-342a-b3581cc8093a.png">


## 制御>条件

フローを追加して、アクションで「制御」から「条件」を選びます。

<img width="320" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/5a9d2ffb-3f45-273e-8bfa-07fa4c2428d3.png">

### 単なるRTに対する処理

今回は、RTで始まるものは追加のコメントがない単なるRTで分析するには重複なので、取り除く処理をします。

「ツイート　テキスト」が「次のもので始まる」「RT」がTrueだったら、そのまま終了させます。条件は[AND][または]があるので、後者の[または]を選びましょう。ORなんでしょうね。

<img width="641" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/4b4859a7-0707-c107-eb74-3382c951c668.png">


制御から「終了」を選びます。

<img width="310" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/2d73b0d8-5fbf-b9de-29bb-3e91f8e30dd9.png">

状態はデフォルトで「失敗」になっているので、取り除き完了という意味で正常終了にしてあげましょう。

<img width="324" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/306414e1-afe0-686e-6b72-bfa53dff7697.png">

### 単なるRT以外のもの

<img width="637" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/182ee99e-2563-31bd-1fdb-42298b357c24.png">

こちらのほうが取り出したいツイートなので、なにか処理をかけたいときはこちらがわにアクションを追加します。今回はそのままにしましょう、。

今回はこのツイートに対してText Analyticsを適用します。

## Text Analyticsを行う

新しいステップを追加します。

テキスト分析を選びましょう。

<img width="644" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/c01b76a5-f33b-5707-377d-ecf024036b54.png">

今回はキーフレーズを抽出します。

テキスト分析を選び

<img width="311" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/6a5aa3c4-9a5c-500b-6194-19f9262fb0cb.png">

キーフレーズを選択

<img width="314" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/5ae4eb4d-b4f8-a119-f1cf-c9421a350aa2.png">

キーフレーズを抜き出したいデータソース、今回はツイートテキストを選択


<img width="317" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/378b8927-e0f5-2eb6-822a-a3e6b7e5626d.png">


## Google Spreadsheetに書き込む

ここまででキーフレーズの配列ができるので、これをGoogle Spreadsheetに保存します。

配列を保存すると、自動的にアクションがFor eachの配列繰り返しに変換されます。少しいじるとやり方が分かると思います。

<img width="314" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/41c22795-5905-39dc-b9fa-a175e31987bc.png">


<img width="314" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/f92b53b3-1041-929b-48d3-326a3c803c96.png">


<img width="331" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/c59e9222-acaa-fc4d-201d-38978a4044d2.png">



# 完成　試運転

さて、できあがりました。

<img width="339" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/e9fffa35-ae6c-6443-e511-6921544cb11a.png">

上のメニューから保存し実行してみましょう。

<img width="188" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/5e97d2b4-a583-1d5c-8cb3-f0f57e555b2e.png">

## 修正が必要

<img width="362" alt="ツイート分析sandbox_-_Google_スプレッドシート.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/fe5ca7f7-795f-0309-3ebb-8ec00bad0f13.png">


tweet_datetimeにオリジナルの値を放り込むと、やはりキーフレーズ配列を同じ行に上書き挿入して一個しか見えないみたいです。仕方ないので、現在の時間を入れる設定にしました。これはGoogle Spreadsheet側の挿入時挙動みたいなんで、普通のDBに入れる場合はtweet_datetimeを入れて問題ないと思いますが、処理現在のUTC時間を入れる関数にしました。

<img width="329" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/d9b632c4-0433-fa54-53f4-637b873be999.png">

変えてみたけど、やっぱりおなじく一行を更新してしまい駄目な気がします。本格利用する際はデータストレージに普通のDBを使いましょう。

## 改善してみた

行の挿入のループで少しwaitを入れてあげました。これでGoogle側APIがひっかかることがなくなりました。

<img width="326" alt="Logic_Apps_デザイナー_-_Microsoft_Azure.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/ecfcd98c-817e-5526-aaae-8e1d3d345c01.png">

残念ながら、Google Spreadsheet側で追加なのにIDを見て更新してしまう仕様には引っかかってるので、思うようには動きませんが少し改善しました。

実際にいじってみると、やっぱり泥臭いですね。休日の時間が結構潰れました。






# DOMOで可視化してみた

これを作りたかったのですが、DOMOのワードクラウドで可視化します。いま宝塚でホットな話題は

「聖乃あすか」さんのようでした。嫁さんに一体どういうことか聞いてみます。

形態素解析した結果くらいのほうが見やすいんですけどね〜。まだまだ研究する必要があります。

<img width="237" alt="概要_-_Domo.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96615/79d38c9d-6bb1-04b9-ba3a-b67a4a27a5f4.png">

続き　[Logic Apps + Text Analyticsを使ってツイートを分析する(2) 感情分析](https://qiita.com/damarinz/items/07c7815acf8250dee346)