スキップしてメイン コンテンツに移動

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。

コメント

このブログの人気の投稿

これで完璧!本当に役立つテレワークマナー

コロナ禍によってテレワークを導入する企業が増えた昨今、皆様いかがお過ごしでしょうか。僕は4連休明けでダルかったので有給を取得し妻とデートしてきました。イェーイ。 さて、 弊社 も今年2月以降は全社員完全テレワークに移行しました。弊社は2011年からテレワークを導入し各自が自由に活用していたため、特に大きな問題も無くテレワーク体制に移行したのですが、全社員完全テレワークは初めての状況であり、幾つかの課題が発生しました。特に、その状況下でも新しく入社する社員がいますので、これまで社内で培ってきた暗黙の了解が共有出来ないことは大きな課題でした。 ということで、本記事では、弊社のテレワークマナーについてご紹介したいと思います。皆さんのご参考になれば幸いです。 業務の開始と終了はチャットで宣言する これはオフィス出社時でもテレワークでも変わらないのですが、業務開始時と業務終了時にはSlackで宣言しています。弊社ではこれを開店/閉店と呼んでいます。 気をつけて頂きたいのは、これは 報告ではなく共有である ということです。業務開始と業務終了を共有しておくことで、同僚が相談したり依頼をしたりできる時間を把握出来ます。この共有をしておかないと、業務開始前や業務終了後にMentionがバンバン飛んで来るかもしれません。もちろん飛んできたからって怒るメンバーはいないのですが、お互いちょっとした気遣いが出来るように、自分が働いている時間は共有しておくと良いでしょう。 これは休憩時間も同様です。昼休みにのんびりゲームしているときにスマホがブーブー鳴っていたら気が散るかもしれません。休憩開始と終了をSlackで宣言することでゆっくり休憩することが出来ます。休憩中は Display name の後ろに「休憩中」等と付けておくのも良いでしょう。 マイクとスピーカーはPC内蔵のものを使わない PCの性能は以前と比べて格段に上がっていますが、残念ながらマイクとスピーカーはそうではありません。マイクについては音質は向上しているものの、指向性が無いために周囲の音を拾ってしまいます。そしてPC操作時には、どうしても打鍵音がダイレクトに響いてしまいます。またスピーカーは、まぁ正直全く駄目です。音楽を聞くのにさえ向いていないのに、音声のやり取りなんか出来るわけがない。 マイクとスピーカーは必ず別に用意しましょ

ネガティブなフィードバックをする時に意識したい7つのこと

僕は現在は取締役兼事業本部長という立ち位置でお仕事させて頂いてますが、元々はエンジニアで、かつピープルマネージメントを15年以上しておりました。僕がマネジメントしたメンバーは合算すると200人以上になります。正直に言えば、楽しいことはたくさんあったけれど、もちろん辛いことも多々経験していまして、特にメンバーに対してネガティブなフィードバックをすることは大きな苦しみの一つです。 最近、自分の部署の若いマネージャーから、ネガティブなフィードバックを上手に行うことが難しく課題に感じている、という声があったので、僕の経験をまとめてみました。 ポジティブなフィードバックをセットにして伝える どんな人にとっても、悪い話を聞くことは楽しい経験ではありません。悪い話だけを聞き続けると、不愉快な感情が理性を覆い隠してしまいます。しかしフィードバックとは叱ることではなく、どのように改善していくかを議論するためのきっかけであり、感情的になることはマイナスに働きます。ネガティブなフィードバックを伝える時は、ポジティブなフィードバックをセットに、出来れば先に伝えます。良い点がない人はいません(そんな人は採用していないはずです)から、必ず褒めるポイント、褒めるべきアウトプットがあるはずです。ポジティブなフィードバックをセットすることで、相手の感情のバランスを取ることが出来ます。 ネガティブな内容を責めるのではなく事実として伝える 上述の通り、フィードバックの目的は叱責ではなく改善なので、「なんで出来ないんだ」とか「どうして出来なかったんだ」ではなく、事実としてのネガティブな現状を正確に伝えることが重要です。例えそれが叱責に値する内容であったとしても、どちらか一方が感情的になると必ずもう片方も感情的になるので、冷静に正しく事実のみを伝えます。 期待値を提示する ネガティブなフィードバックには、必ずあるべき姿、こちらが期待していた姿があるはずなので、それを伝えます。その際には一方的に伝えるのではなく、こちらの期待値を根拠と併せて伝え、その上で一緒にその期待値の妥当性を議論します。この期待値のすり合わせをしないと、メンバー本人の振り返りも生まれず、改善のためのアクションも「言われたからやる」だけになってしまいます。 なぜネガティブな結果になったのかをヒアリングする 人それぞれ様々な事情や環境がある

「許可を得るな、謝罪せよ」が意図していること

 弊社ではセルフマネジメントとアウトプットファーストを行動指針として掲げていますが、セルフマネジメントを象徴する言葉としてよく使われるのが 「許可を得るな、謝罪せよ」 です。 細かい話は 以前ブログにした のでそちらを読んで頂くとして、この言葉が意味するのは「アクションするのにいちいち許可を得る必要はない。許可を取る時間が無駄。やっていいですかじゃなくてやりましたと言えばいい。その結果間違っていれば謝れば良いだけ」です。 何故この方針を取るのか、この方針によってどのような結果を期待しているのか、を改めて整理したいと思います。 アクションのスピードを上げたい これは上述した意味の通りで、何らかの施策や企画があるときに、上長の許可を取るために資料を作ったり、打ち合わせしたり、下調べをしたり、という時間が無駄だからです。 この考え方の前提として「小さな失敗を早くたくさんする」というのがあります。どんな施策も企画も、正解なんて誰にもわからないし、やり方次第で変わるものです。アイデアの時点であーだこーだ言うより、実際に手を動かしてやってみて、その結果から継続の判断を行うことで、リスクを小さく、コストも小さく、たくさんアクションすることが出来ます。 モチベーションを持って取り組んでもらいたい 何でもそうですけど、人に言われたことをそのままやるより、自分で考えたことを自分のやり方でやるほうが、面白いです。僕が仕事をする上で、または僕がピープルマネジメントする上で、一番重要視しているのは、面白いかどうか、です。 担当者がモチベーションのないままやって成功することなんて(ほとんど)ありません。その施策や企画の実施に一番モチベーションがあるのはそれを考えた人なので、その人に主導してもらうのが一番成功率が高いです。 主体性を持って取り組んでもらいたい モチベーションと同様に、担当者が主体性のないままやって成功することなんて(ほとんど)ありません。その施策/企画を自分ごととして捉え、だからこそ知恵を絞って、全力を発揮する、つまり主体性を持って取り組むことが、一番成功率が高いです。そしてもちろん、一番主体性を持てるのはそれを考えた人です。 なお、主体性と責任は違います。前述の通り「小さな失敗を早くたくさんする」ためには、失敗に対して責任を追求するのではなく、結果と知見を追求する、という文化が