こんにちは。山内です。前回、Twitterから特定のキーワードで検索したものを、ElasticsearchとKibanaで可視化する、という記事を書きましたが、長くなってしまったので2回に分けてお届けします!
詳しくは、下記の前編をご覧ください。
目次
6.Kibanaの設定
後述のタグクラウドを使いたいので、そのためのデータ構造の設定をします。
- AWSマネジメントコンソールで「Elasticsearch Service」を選択し、作成したElasticsearchのダッシュボードから、「Kibana」のURLをクリックする。
- 左サイドメニューの「Dev Tools」をクリックする。
- コンソールに下記を入力して、「実行ボタン(再生マーク)」をクリック。
123456789101112131415161718192021222324252627282930313233PUT twitter{"mappings" : {"test" : {"properties" : {"text" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}},"analyzer" : "kuromoji","fielddata" : true}}}},"settings" : {"index" : {"analysis" : {"tokenizer" : {"kuromoji_user_dict" : {"mode" : "normal","type" : "kuromoji_tokenizer"}}},"mapping.total_fields.limit" : 2000}}}
7.Lambdaの実行
基本的な設定は終わったので、Lambdaをテスト実行してみます。
- AWSマネジメントコンソールで「AWS Lambda」を選択し、作成した関数の編集画面を表示する。
- 「テストイベントの選択▼」をクリックする。
- 「テストイベントの設定」をクリックする。
- 下記情報を入力し、「作成」をクリックする
- イベント名 : 任意
- リクエスト内容 : 下記の通り(任意の文字列はTwitterで検索したいワード)
123{"keyword" : "任意の文字列"} - 「テスト」をクリックし、実行結果に「成功」と出ればOK。
8.Kibanaでグラフの作成
ここは、Kibanaでの基本的なグラフの作成手順です。知ってるよ!って方は飛ばしていただいても構いません。
8-1.indexの作成
まず、Elasticsearchに入っているデータからindexと呼ばれるものを作成します。実際のデータなどが見れてしまうので、スクリーンショットは敢えて載せていません。
- Kibanaの画面で、左サイドメニューの「Management」をクリックする。
- 「Create index pattern」をクリックする。
- 下記情報を入力し、「Next step」をクリックする。
- Index pattern : twitter(Lambdaで指定したindex名と同じ)
- 下記情報を入力し、「Create index pattern」をクリックする。
- Time Filter field name : @timestamp
- 左サイドメニューの「Discover」をクリックし、Tweet情報が表示されればOK。※データが登録されているのに表示されない場合は、右上の表示期間を変更すると出てくる。
8-2.時系列データの縦棒グラフの作成
時系列データをタイムライン的に表示する縦棒グラフを作成します。いわゆるtimestamp型としてデータが入っていないと上手くグラフ化できない場合があるので、ご注意ください。
- Kibanaの画面で、左サイドメニューの「Visualize」をクリックする。
- 「Create a visualization」をクリックする。
- 「Vertical Bar」をクリックする。
- 「twitter(作成したindex名)」をクリックする。
- 「Buckets」項目の「X-Axis」をクリックする。
- 「Aggregation」で「Date Hisogram」を選択する。
- 「Custom Label」項目にx軸のラベル名を入力し、「反映ボタン(再生マーク)」をクリックする。
- グラフが更新されていることを確認する(画像は表示期間を「Last 1 hour」にしたもの)。
- その他見栄えなどの設定をしたら、ヘッダーメニューの「Save」で名前を付けて保存する。
8-3.タグクラウドの作成
Kibanaの設定の時に名前が出ましたが、タグクラウドを作成します。
- Kibanaの画面で、左サイドメニューの「Visualize」をクリックする。
- 「+」マークをクリックする。
- 「Other」の中にある「Tag Cloud」をクリックする。
- 「twitter(作成したindex名)」をクリックする。
- 「Buckets」の「Tags」をクリックする。
- 「Aggregation」で「Terms」を選択する。
- 「Field」で「text」を選択する。※「text.keyword」ではなく「text」であることに注意
- 「Size」に任意の数値を入れる。
- 「Advanced」の「Exclude」項目に下記を入力し、「反映ボタン(再生マーク)」をクリックする。※下記は任意ですが、表示されるものの除外設定なので、一文字だけのものやURLなどの表示を避けたい場合は設定してください(正規表現的に指定できます)。
1.|..|https?|[0-9]*|[w]*
- タグクラウドが表示されることを確認する。
- ヘッダーメニューの「Save」で名前を付けて保存する。
9.ダッシュボードの作成
構築手順としてはここで最後です。これまで作ってきたグラフを組み合わせて、ダッシュボードを作成します。ちなみに、最初にお見せした画面イメージは、手順を載せた以外のグラフも作成していますので、ご了承ください。
- Kibanaの画面で、左サイドメニューの「Dashboard」をクリックする。
- 「Create new dashboard」をクリックする。
- 「Add」をクリックする。
- 「Tag Cloud(保存したタグクラウドの名前)」をクリックする。
- 「Count per Hour(保存した縦棒グラフの名前)」をクリックする。
- 「×マーク」をクリックし、好きな配置にカスタマイズしたら、「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の登録商標です。
執筆者プロフィール
- 社内の開発プロジェクトの技術支援や、Javaにおける社内標準フレームワークの開発を担当しています。Spring BootとTDDに手を出しつつ、LINE Botとかもいじったりしています。最近はマイクロサービスを勉強しつつ、クラウドアプリケーションを開発できるエンジニアの育成にも力を入れてます!