大遅刻すみません。ちょっと技術的に躓いていてしまいまして、心が折れてしまっていました…
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_at
は Sat Oct 26 09:56:24 +0000 2019
の形式なのでそのままでは文字列として扱われてしまいます。
date filter を使ってフォーマットを指定し、 date time として扱うようにしています。
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.json
を works
の下に起き、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はあまり使ったことがなく、手探りですが、これは触って覚える系のツールな感じがします。
強いひとと一緒に一度触ってみると良さそう、と思いました。