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


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

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 への挿入の確認から。以下から確認できます。

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

Kibana

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

Kibanaで可視化する

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

ツイート数の遷移


ツイート数の遷移。2012年は今より活発です。
僕のブログの2012年のエントリを見ると、釣りに行ったり、工作をしたり、プログラム書いて発表したりしていました。

疲れていた時期

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

好きなTwitterクライアント

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

まとめ

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