3
0

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.

Elastic Stack (Elasticsearch)その2Advent Calendar 2019

Day 7

自分のツイートデータをKibanaで可視化して当時の心境を振り返る

Posted at

大遅刻すみません。ちょっと技術的に躓いていてしまいまして、心が折れてしまっていました…

Twitterは https://twitter.com/settings/your_twitter_data ここから自分の全ツイートデータを取得することができます。
これをKibanaで可視化してみたいと思います。

データ加工

ツイート、画像、動画などたくさんの懐かしいデータが得られます。
ツイートは tweet.js がそれで、本文だけではなく、いつ、どのクライアントでなど様々な情報が得られます。
ファイル名から予想がつくように、これは JavaScript のコードで json ではありません。

乱暴ですが以下のように json にします。

# brew install gnu-sed
gsed -i -e "s/^window.YTD.tweet.part0 =//" tweet.js
jq -c '.[]' tweet.js > tweet_jsonlines.json

これで tweet_jsonlines.json にできあがるのは JSON Lines などと呼ばれる形式で、1行に1つのjsonが書かれているファイルになります。

環境構築

手前味噌でなんですが、5分でできるElastic stack(Elasticsearch, Logstash, Kibana)環境構築を参照ください。

今回は /usr/share/logstash/work に json lines(1行に1JSON)をおいて読み込ませてみます。
デフォルトだと port 5000 で待ち受けているので、docker-elkを使って過去のCloudTrailのログをサクッと分析してみた | Developers.IOのようにやったほうが環境構築は楽ですね。
今回のような「大量のツイートデータをいれたい」のようなケースだと遅そうかな、と思いましてファイルから読むようにしてみました。
(僕のツイートは3万件程度で全然こだわるところではないのですが…)

workディレクトリをDockerとホストで共有するようにします。

diff --git a/docker-compose.yml b/docker-compose.yml
index a590b5b..491da23 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -40,6 +40,10 @@ services:
         source: ./logstash/pipeline
         target: /usr/share/logstash/pipeline
         read_only: true
+      - type: bind
+        source: ./logstash/work
+        target: /usr/share/logstash/work

ファイルを読み込む設定をします。
Kibanaでは timestamp に datetime を入れると扱いやすいのですが、Twitterの created_atSat Oct 26 09:56:24 +0000 2019 の形式なのでそのままでは文字列として扱われてしまいます。
date filter を使ってフォーマットを指定し、 date time として扱うようにしています。

logstash/pipeline/logstash.conf
input {
  file {
    codec => "json"
    path => ["/usr/share/logstash/work/*.json"]
    sincedb_path => "/usr/share/logstash/work/since"
    start_position => "beginning"
  }
}

filter {
  date {
    match => [ "created_at", "EEE MMM dd HH:mm:ss Z yyyy" ]
      target => "timestamp"
  }
}

output {
  elasticsearch {
    hosts => "elasticsearch:9200"
      user => "elastic"
      password => "changeme"
      index => "tweet%{+YYYYMMdd}"
  }
  # 読み込まれない!などはデバッグ出力を見ると良い
  # stdout { codec => rubydebug }
}

先程、作成した tweet_jsonlines.jsonworks の下に起き、Dockerを再起動します。

確認

まずは Elasticsearch への挿入の確認から。以下から確認できます。

image.png

tweet20191222 の Docs Count がツイート数とほぼ一致しました。

Kibana

index patternを作ります
ゴミが残っていますが、 tweet* としてみました。
Kibanaは複数の Elasticsearch index をいい感じにまとめてくれるのですね。
ログとかは 日付ごとに index を作ったりすると良さそうです。

Kibanaで可視化する

http://localhost:5601/app/kibana#/discover を見てみます。

ツイート数の遷移

スクリーンショット 2019-12-22 18.28.33.png
ツイート数の遷移。2012年は今より活発です。
僕のブログの2012年のエントリを見ると、釣りに行ったり、工作をしたり、プログラム書いて発表したりしていました。

疲れていた時期

image.png

full_text 疲 で検索して疲れていそうなデータを探してみました。
同じく2012年は疲れていた模様。

好きなTwitterクライアント

スクリーンショット 2019-12-22 18.36.36.png

http://localhost:5601/app/kibana#/visualize/ から source (Twitterクライアント)を集計してみる。
なんだかんだでTwitter Webは良く出来てる。Featherも好きでしたし、今はなきついっぷるも好きでした。

まとめ

これ以上、僕の分析をしても面白くありませんのでこの辺にしましょう。みなさん、独自の切り口で自己分析してみてはいかがでしょうか?
僕もKibanaはあまり使ったことがなく、手探りですが、これは触って覚える系のツールな感じがします。
強いひとと一緒に一度触ってみると良さそう、と思いました。

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?