AppEngine と NLP API と BigQuery で 1 時間でソーシャル分析ダッシュボードを作成してみる

Miki Katsuragi
google-cloud-jp
Published in
6 min readDec 18, 2018

Google Cloud Platform の以下の製品を組み合わせ Twitter ネガポジ分析ダッシュボードを作ってみます。Google Cloud Platform コンソールと Cloud Shell で作業することを想定しているため、手元の環境は Chrome ブラウザさえ動作する PC であれば OS は何でも問題ありません。

利用プロダクト

方針

構成イメージ
  • Twitter API から取得したツイートを NLP API で sentiment と magnitude をスコアリングしてBigQueryにストリーミングインサート
  • データポータルから BigQuery に接続してネガポジを可視化

想定する環境

Cloud Shell

事前準備

https://apps.twitter.com/ で Twitter API キーを発行します。まだお持ちでない方は開発者アカウントを作成しアプリケーションを登録します(詳細は開発者ガイドを参照ください)。登録できた方は「keys and tokens」タブから API キーを確認してください。

手順

  1. API の有効化
    GCP コンソール [APIとサービス] > [ライブラリ] から、
    サーチボックスで以下のサービスを検索の上、以下の API を有効にします。

- Cloud Natural Language API
- BigQuery API

2. Cloud Shell でソースコードを取得
GCP コンソール画面右上の Cloud Shell 起動ボタンをクリックし、Cloud Shell が起動したら任意のディレクトリ下にソースコードを clone します。また、必要なパッケージもインストールします。

git clone https://github.com/myoshimu/social_test.git
cd social_test
npm install

3. Cloud Shell のコードエディタなどで .env ファイルに事前準備で確認した Twitter API キーを記述します。また、GCP プロジェクト ID とハッシュタグ(例:#Google)もご自身の環境にあわせて変更します

TWITTER_CONSUMER_KEY=<input your value>
TWITTER_CONSUMER_SECRET=<input your value>
TWITTER_ACCESS_TOKEN_KEY=<input your value>
TWITTER_ACCESS_TOKEN_SECRET=<input your value>
GCP_PROJECT_ID=<input your value>
HASHTAG=<input your value>

4. 下記のコマンドで BigQuery にデータセットとテーブルを作成します。

bq mk twitter
bq mk -t twitter.twitter_stream HashTag:STRING,Tweet:STRING,SentimentScore:FLOAT,SentimentMagnitude:FLOAT,InsertDate:STRING

5. social_test ディレクトリの中で下記コマンドを実行し、AppEngine にデプロイします。

gcloud app deploy

6. BigQuery 上でクエリを実行
数分〜1時間程度待ち(該当ハッシュタグがつぶやかれる頻度によります)、BigQuery で以下の SQL を実行し、取得したツイートがストリーミングされているか確認してみましょう。my_project_name はご自身のプロジェクト名に変更ください。

#Legacy SQL
SELECT
Hashtag,DATE_ADD(MSEC_TO_TIMESTAMP(INTEGER(InsertDate)),9,"HOUR") AS date,
Tweet,
CASE
WHEN SentimentScore >= 0 THEN 'Positive'
WHEN SentimentScore < 0 THEN 'Negative'
END AS Sentiment,
SentimentScore,
SentimentMagnitude
FROM
[my_project_name.twitter.twitter_stream]
WHERE NOT tweet CONTAINS "キャンペーン"
AND NOT tweet CONTAINS "送料"
ORDER BY date DESC

ここでは、例として自社のキャンペーンや販売に関する tweet を除外するため、「キャンペーン」「送料」というキーワードを除外しています。また、SentimentScore が 0 以上はポジティブ、0 より小さい場合はネガティブという区分にしています。クエリの結果を確認し、必要に応じて除外キーワードを追加・削除ください。

7. クエリ結果が正常に返ることを確認したら、「ビューを保存(Save View)」ボタンで任意の名称のビューを保存します(例:social_test)。

8. データポータルの画面左のメニューから「データソース」を開いて右下の「+」ボタンから新規 BigQuery を選択し、7. で作成した BigQuery のビューを選択し「接続」ボタンでデータソースを作成します。

9. データポータルのサンプルページを開き、右上の「コピーを作成」アイコンからコピーして 8.で作成したデータソースに変更します。

最後に

BigQuery と AppEngine の組み合わせで簡単にストリームデータの収集や分析が行えるようになりました。全てマネージドサービスを活用しているため、煩わしいセットアップやインスタンスの管理も不要です。ソーシャル分析をお気軽にはじめてみたい方はぜひ試してみてください。

--

--