2014/10/15

Twitter廃人をRedshift + Tableau Desktopで丸裸にする

やってはみたけど会社のブログに書くには微妙だったシリーズ。

皆さんご存知かも知れませんが、当方Tweet数20万オーバーのTwitter廃人です。


さて、Twitterには自アカウントの過去の全ツイートを取得できる機能があります。取得は[Settings]-[Account]-[Your Twitter Archive]から[Request Your Archive]ボタンを押すことで、登録してあるメールアドレスに対しダウンロードリンクが通知される仕組み。で、このアーカイブには全ツイートがCSVとして格納されています。

このCSVをAmazon Redshiftに突っ込んでTableau Desktopで分析してやるぜ、というのが今日の主旨です。

前提条件

この辺は特に説明しません。

  1. Redshiftを普通に構築しておきます。Database名は"Twitter"で。
  2. Redshiftにpsqlコマンドで接続可能なようにしておきます。ローカル環境でもEC2でも構いません。
  3. Redshiftに接続可能なIAMアカウントを用意しておきます。
  4. S3のバケットにダウンロードしたCSV(tweets.csv)を配置しておきます。

Redshiftにデータを突っ込む

Redshiftにpsqlコマンドで接続します。
$ psql -h myredshift.xxxxx.ap-northeast-1.redshift.amazonaws.com -U admin -d twitter -p 5439
ユーザ admin のパスワード:
psql (9.2.9, サーバー 8.0.2)
注意: psql バージョン 9.2, サーバーバージョン 8.0.
         psql の機能の中で、動作しないものがあるかもしれません。
SSL 接続 (暗号化方式: ECDHE-RSA-AES256-SHA, ビット長: 256)
"help" でヘルプを表示します. 
とりあえずcreate tableします。Twitterのtimestampは[2014-07-09 02:59:12 +0000]みたいな感じになっているので、RedshiftのDate型にはそのまま入りません。面倒臭いのでとりあえずvarcharで突っ込んでおきます。
twitter=# create table tweet (
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
作ったtableにcsvをcopyコマンドでぶっ込みます。IGNOREHEADERで1行目のヘッダ行は読み込まない、空のカラムはNULLとして入れておく、ってことをしてます。
twitter=# COPY tweet FROM 's3://mybucket/tweets.csv'
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
そんでcommit。
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。

0 件のコメント:

コメントを投稿