Twitter廃人をRedshift + Tableau Desktopで丸裸にする
やってはみたけど会社のブログに書くには微妙だったシリーズ。
皆さんご存知かも知れませんが、当方Tweet数20万オーバーのTwitter廃人です。
さて、Twitterには自アカウントの過去の全ツイートを取得できる機能があります。取得は[Settings]-[Account]-[Your Twitter Archive]から[Request Your Archive]ボタンを押すことで、登録してあるメールアドレスに対しダウンロードリンクが通知される仕組み。で、このアーカイブには全ツイートがCSVとして格納されています。
このCSVをAmazon Redshiftに突っ込んでTableau Desktopで分析してやるぜ、というのが今日の主旨です。
Amazon Redshiftへの接続情報を入力して[接続]ボタンをクリック。
[スキーマ]から"Public"を選択、[表]の"tweet"を右上にドラッグします。
すると下欄にデータが表示されます。前述の通り、timestampが文字列として格納されているので、Tableau Desktopの力で変換してしまいます。
該当行で[日付と時刻]を選択。
さらにユーザ毎のリプライ数を集計してみます。2位3位に圧倒的な差をつけていたのが@koiwa。仲良過ぎじゃないのか。
皆さんご存知かも知れませんが、当方Tweet数20万オーバーのTwitter廃人です。
さて、Twitterには自アカウントの過去の全ツイートを取得できる機能があります。取得は[Settings]-[Account]-[Your Twitter Archive]から[Request Your Archive]ボタンを押すことで、登録してあるメールアドレスに対しダウンロードリンクが通知される仕組み。で、このアーカイブには全ツイートがCSVとして格納されています。
このCSVをAmazon Redshiftに突っ込んでTableau Desktopで分析してやるぜ、というのが今日の主旨です。
前提条件
この辺は特に説明しません。
- Redshiftを普通に構築しておきます。Database名は"Twitter"で。
- Redshiftにpsqlコマンドで接続可能なようにしておきます。ローカル環境でもEC2でも構いません。
- Redshiftに接続可能なIAMアカウントを用意しておきます。
- S3のバケットにダウンロードしたCSV(tweets.csv)を配置しておきます。
Redshiftにデータを突っ込む
Redshiftにpsqlコマンドで接続します。
$ psql -h myredshift.xxxxx.ap-northeast-1.redshift.amazonaws.com -U admin -d twitter -p 5439とりあえずcreate tableします。Twitterのtimestampは[2014-07-09 02:59:12 +0000]みたいな感じになっているので、RedshiftのDate型にはそのまま入りません。面倒臭いのでとりあえずvarcharで突っ込んでおきます。
ユーザ admin のパスワード:
psql (9.2.9, サーバー 8.0.2)
注意: psql バージョン 9.2, サーバーバージョン 8.0.
psql の機能の中で、動作しないものがあるかもしれません。
SSL 接続 (暗号化方式: ECDHE-RSA-AES256-SHA, ビット長: 256)
"help" でヘルプを表示します.
twitter=# create table tweet (作ったtableにcsvをcopyコマンドでぶっ込みます。IGNOREHEADERで1行目のヘッダ行は読み込まない、空のカラムはNULLとして入れておく、ってことをしてます。
twitter(# tweet_id bigint,
twitter(# in_reply_to_status_id bigint,
twitter(# in_reply_to_user_id bigint,
twitter(# timestamp varchar,
twitter(# source varchar,
twitter(# text varchar,
twitter(# retweeted_status_id bigint,
twitter(# retweeted_status_user_id bigint,
twitter(# retweeted_status_timestamp varchar ,
twitter(# expanded_urls varchar);
CREATE TABLE
twitter=# COPY tweet FROM 's3://mybucket/tweets.csv'そんでcommit。
twitter-# CREDENTIALS 'aws_access_key_id=%ACCESSKEY%;aws_secret_access_key=%SECRETKEY%'
twitter-# CSV
twitter-# TRUNCATECOLUMNS
twitter-# IGNOREHEADER AS 1
twitter-# EMPTYASNULL;
INFO: Load into table 'tweet' completed, 202324 record(s) loaded successfully.
COPY
twitter=# commit;
COMMIT
Tableau DesktopからRedshiftに接続する
さて、Tableau Desktopを立ち上げてみます。なおTableau Desktopは全機能利用可能な無償トライアル版があります。Redshift接続用のドライバをインストールする必要があるのでこちらからダウンロードしてインストールしましょう。
Tableau Desktopを立ち上げて、[データに接続]をクリック。
接続先サーバから[Amazon Redshift]をクリック。
Amazon Redshiftへの接続情報を入力して[接続]ボタンをクリック。
[スキーマ]から"Public"を選択、[表]の"tweet"を右上にドラッグします。
すると下欄にデータが表示されます。前述の通り、timestampが文字列として格納されているので、Tableau Desktopの力で変換してしまいます。
該当行で[日付と時刻]を選択。
するとtimestampがちゃんと日付と時刻として表示されます。
分析してみる
例えば月ごとのtweet数を集計してみる。2010年4月の5192tweetが最大。1日100以上tweetしてることになります。バカじゃないか俺。
さらにユーザ毎のリプライ数を集計してみます。2位3位に圧倒的な差をつけていたのが@koiwa。仲良過ぎじゃないのか。
まとめ
20万レコードくらいなら一瞬でグラフ表示してくれます。よく「Redshift + Tableauの組み合せ最強」と言われるけど、こりゃ確かに簡単ですね。今回は簡単な集計しかしていないけれど、Tableauの計算フィールドを使うことでより高度な分析が可能だし、データインポートのバッチの中で付加レコードを作ってもいいでしょう。例えばtext項目を形態素解析して別テーブルに突っ込むことで、どの時期にどんな単語をtweetしているのかを分析すれば、僕の趣味嗜好の傾向が分かって面白そうだなぁ。
ってことで、面白いですよ、Tableau。