Lambdaで取得したTwitterの情報をElasticsearchとKibanaで可視化したらすごいことになった話・後編

Pocket

こんにちは。山内です。前回、Twitterから特定のキーワードで検索したものを、ElasticsearchとKibanaで可視化する、という記事を書きましたが、長くなってしまったので2回に分けてお届けします!

前編までで、Lambdaを作成するところまで終了しました。
詳しくは、下記の前編をご覧ください。
今回はKibanaの設定から行います。
「作る過程は良いから、作ったものが見たい!」という方は「10.楽しむ!」までジャンプしてください。
 

6.Kibanaの設定

後述のタグクラウドを使いたいので、そのためのデータ構造の設定をします。

  1. AWSマネジメントコンソールで「Elasticsearch Service」を選択し、作成したElasticsearchのダッシュボードから、「Kibana」のURLをクリックする。
  2. 左サイドメニューの「Dev Tools」をクリックする。
  3. コンソールに下記を入力して、「実行ボタン(再生マーク)」をクリック。

7.Lambdaの実行

基本的な設定は終わったので、Lambdaをテスト実行してみます。

  1. AWSマネジメントコンソールで「AWS Lambda」を選択し、作成した関数の編集画面を表示する。
  2. 「テストイベントの選択▼」をクリックする。
  3. 「テストイベントの設定」をクリックする。
  4. 下記情報を入力し、「作成」をクリックする
    • イベント名   : 任意
    • リクエスト内容 : 下記の通り(任意の文字列はTwitterで検索したいワード)

     

  5. 「テスト」をクリックし、実行結果に「成功」と出ればOK。

8.Kibanaでグラフの作成

ここは、Kibanaでの基本的なグラフの作成手順です。知ってるよ!って方は飛ばしていただいても構いません。

8-1.indexの作成

まず、Elasticsearchに入っているデータからindexと呼ばれるものを作成します。実際のデータなどが見れてしまうので、スクリーンショットは敢えて載せていません。

  1. Kibanaの画面で、左サイドメニューの「Management」をクリックする。
  2. 「Create index pattern」をクリックする。
  3. 下記情報を入力し、「Next step」をクリックする。
    • Index pattern : twitter(Lambdaで指定したindex名と同じ)
  4. 下記情報を入力し、「Create index pattern」をクリックする。
    • Time Filter field name : @timestamp
  5. 左サイドメニューの「Discover」をクリックし、Tweet情報が表示されればOK。※データが登録されているのに表示されない場合は、右上の表示期間を変更すると出てくる。

8-2.時系列データの縦棒グラフの作成

時系列データをタイムライン的に表示する縦棒グラフを作成します。いわゆるtimestamp型としてデータが入っていないと上手くグラフ化できない場合があるので、ご注意ください。

  1. Kibanaの画面で、左サイドメニューの「Visualize」をクリックする。
  2. 「Create a visualization」をクリックする。

     

  3. 「Vertical Bar」をクリックする。

     

  4. 「twitter(作成したindex名)」をクリックする。
  5. 「Buckets」項目の「X-Axis」をクリックする。
  6. 「Aggregation」で「Date Hisogram」を選択する。
  7. 「Custom Label」項目にx軸のラベル名を入力し、「反映ボタン(再生マーク)」をクリックする。
  8. グラフが更新されていることを確認する(画像は表示期間を「Last 1 hour」にしたもの)。
  9. その他見栄えなどの設定をしたら、ヘッダーメニューの「Save」で名前を付けて保存する。

8-3.タグクラウドの作成

Kibanaの設定の時に名前が出ましたが、タグクラウドを作成します。

  1. Kibanaの画面で、左サイドメニューの「Visualize」をクリックする。
  2. 「+」マークをクリックする。
  3. 「Other」の中にある「Tag Cloud」をクリックする。
  4. 「twitter(作成したindex名)」をクリックする。
  5. 「Buckets」の「Tags」をクリックする。
  6. 「Aggregation」で「Terms」を選択する。
  7. 「Field」で「text」を選択する。※「text.keyword」ではなく「text」であることに注意
  8. 「Size」に任意の数値を入れる。
  9. 「Advanced」の「Exclude」項目に下記を入力し、「反映ボタン(再生マーク)」をクリックする。※下記は任意ですが、表示されるものの除外設定なので、一文字だけのものやURLなどの表示を避けたい場合は設定してください(正規表現的に指定できます)。

  10. タグクラウドが表示されることを確認する。
  11. ヘッダーメニューの「Save」で名前を付けて保存する。

9.ダッシュボードの作成

構築手順としてはここで最後です。これまで作ってきたグラフを組み合わせて、ダッシュボードを作成します。ちなみに、最初にお見せした画面イメージは、手順を載せた以外のグラフも作成していますので、ご了承ください。

  1. Kibanaの画面で、左サイドメニューの「Dashboard」をクリックする。
  2. 「Create new dashboard」をクリックする。
  3. 「Add」をクリックする。
  4. 「Tag Cloud(保存したタグクラウドの名前)」をクリックする。
  5. 「Count per Hour(保存した縦棒グラフの名前)」をクリックする。
  6. 「×マーク」をクリックし、好きな配置にカスタマイズしたら、「Save」で名前を付けて保存する。

10.楽しむ!

ここまででTwitterの情報の可視化はできたと思います。あとは、Kibanaを使って色んな視点で見てみてください。例えばですが、「Add a filter」から「lang is ja」を設定すると、日本語だけで絞ることができます。 他のグラフが変化しましたね、面白い!

データ数としては、3万ツイートくらいですかね。タグクラウドで「プレゼント」というワードが大きく表示されています。何かしらのプレゼント企画をやっているのでしょうか。

タグクラウドの「プレゼント」というワードをクリックしてみます。 本当にプレゼント企画をやっていることが確認できました!こうなると、リツイートの情報を拾いたくないときもありそうですね。

先ほどと同じく「Add a filter」から「retweeted_status.retweeted is not false」を設定してみます。 おぉ、リツイートが消えました。すごいですね! 全体が見たいので、「プレゼント」というフィルターを消してみます。 今度は1万7千ツイートくらいですね。半分くらいリツイートだったのでしょうか…!?

タグクラウドを見ると、「楽しい」とか「面白い」といったポジティブなワードが比較的多く見受けられます。皆さん、ゲームを楽しまれているようですね!

11.おわりに

ということで、Elasticsearchを構築して、LambdaからTwitter APIを叩いてElasticsearchに蓄積、Kibanaで可視化をしてみましたが、いかがでしたでしょうか。楽しんでいただけましたでしょうか。

こういう可視化は、とにかく作っていてすごく楽しいですね!良ければ皆さんも構築してみて、タグクラウドが動く様子などを実際に見てみてください!

それから、今回のこの可視化構成の構築を通して、とても重要な教訓を得たので、その共有もしておきます(ここが今回一番すごいところ)。

今回はツイート情報の感情分析のために「Comprehend」と「Translate」というAWSのサービスを使いました。それぞれ読み込ませた文字数ごとに課金される形態なのですが、今回読み込ませた文字はなんと131,434,013文字(すごい)!料金にして、Comprehendは$415.47、Translateはなんと$1,971.51(すごい)!しかもだいたい2,3日で上記の金額だったので、もし1ヶ月フルで使っていたら、単純計算だと10倍くらい(すごい)。

よくよく考えてみれば、1つのツイートが最大200文字、平均を取って100文字くらいだとすると、15分に1回1000ツイートを取得するにしても、1日で9,600,000文字(4回 * 24h * 1000ツイート * 100文字)なので、余裕で超えちゃいますね…。最悪な事態を避けるために、アラート通知などの設定を活用しましょう!設定方法は以下の記事を参考にしてください。

皆さんも、料金は気にする癖をつけるようにしてください。でないと、すごいことになってしまいますよ。

 

※TWITTER、TWEET(ツイート)、RETWEET(リツイート)、Twitter のロゴはTwitter, Inc.またはその関連会社の登録商標です。
※KibanaはElasticsearch BVの登録商標です。

お問い合わせ先

執筆者プロフィール

Yamauchi Kentaro
Yamauchi Kentarotdi デジタルイノベーション技術部
社内の開発プロジェクトの技術支援や、Javaにおける社内標準フレームワークの開発を担当しています。Spring BootとTDDに手を出しつつ、LINE Botとかもいじったりしています。最近はマイクロサービスを勉強しつつ、クラウドアプリケーションを開発できるエンジニアの育成にも力を入れてます!
Pocket

関連記事