グラフにすればよくわかる!Twitterから自分のツイートをダウンロードして分析する方法。
(2017/03/30追記:もっとわかりやすく使いやすいプログラムを書けたので新しい記事を書きました。下のリンクから飛んでください。)
Twitterでよくある診断アプリは好きですか?自分がどんな人間かわかってるつもりでも、目に見える形にまとめられると新たな発見があって面白いですよね。
ただ、ああいうアプリではTwitterの仕様により、過去の全ツイートを読み込んで分析するということができません。ツイート頻度が高い人では特に、ごく最近のツイートからしか結果に反映されなくてつまらなかった…ということもあります。
それならPythonで簡単診断!
それならば!Python(Pythonとは、初心者にも使いやすいプログラミング言語です。)を使って自分で色々と自分のツイートを分析してみましょう。以下のグラフを見てください。これは私の全ツイート履歴から、非常に辛い気持ちを表す言葉が含まれるツイートの数を時系列で表したものです。私は双極性障害という病気持ちなので、かなりはっきりした波があることがわかります。
これだけでも何となく面白いですが、これに"お金"という言葉を含むツイートのグラフを重ねてみると…
こうなりました。お金について言及している時(私の場合ほぼお金がない時)には、やはり死にたい気持ちも強くなるのかもしれませんね。こうやって重ねてグラフにすると、とてもわかりやすいです。
今回はこのように自分の全ツイート履歴から、任意の言葉を含むツイートを時系列でグラフにするということを説明します。私は自分のメンタル分析・改善を目的としてるので暗いグラフを作ってますが、皆さんは好きな人・物などでグラフを作ってみると楽しいと思います。
Python環境構築
環境構築についてはOSによって違うので、以下のサイトを参考にしてください。すみません、あんまり詳しくないので丸投げ。ちなみに私はRaspberry pi3を使っていて、OSはRaspbianです。ラズパイは教育向けにできてるらしく、Pythonも元々入っています。みんなもラズパイ買っちゃいなよ。
いくつかライブラリをインストール
以下ラズパイのターミナルにコマンドを打ちます。環境によって違うかもしれませんが、ググればいっぱい情報出てくるはず。
sudo pip3 install pandas matplotlib numpy
もしこの辺でわからないことがあったら、コメントに書いてもらえればわかることなら答えます。
ツイートの履歴を取得
Twitterの設定の中に全ツイート履歴をリクエストするというボタンがあるので押してください。しばらくすると登録メールアドレス宛に送られてきます。解凍して適当な場所に保管してください。
さあ実践
まずは下のコードをメモ帳などのテキストエディタに貼り付け、"twigraph.py"という名前で保存します。拡張子(.py)があっていれば、名前は今適当に考えただけなので違ってもOKです。
まず8行目でダウンロードしたツイート履歴を読み込んでいます。自分が保存した場所のパスを入力してください。その次9行目から11行目に自分が抽出したいキーワードを入力します。3つまで同時に扱えるようにしました。それより多いと重なり過ぎてわけわからんことになると思います。11行目は今使っていないので、コメントアウトしています。(先頭に#をつけて無視されるようにしている)キーワードを3つ使うときは#を外します。
その後はデータをグラフに出力できる形式に整えています。20行目から24行目、これも今使っていないのでコメントアウトしています。この場合はこの場合は複数行なので行の前後をダブルクォーテーション3つ(""")で挟んでいます。これもキーワードを3つ使うときは外します。
34行目から36行目には、グラフの凡例を入れます。日本語入力するには設定が大変そうなので、ローマ字で入れてください。そしてまた保存しておきます。
いざ実行
自分の構築した環境で実行してみてください。どうでしょう?グラフがちゃんと出ましたか?
出てないかもしれませんね。私もグラフ出るようになるまでめっちゃ時間かかりました。backendの設定が云々とかあるかもしれません。しかしそろそろ疲れたので終わりにします。何かあれば聞いてください!私も初心者なので答えられないかもしれませんが、一緒に考えましょう。
ちゃんとグラフ出た人は色々キーワード変えて楽しんでみてください。それでは!
(2017/03/16追記:matplotlibバックエンドの設定、下のサイト見るとわかりやすいです。)
matplotlibのデフォルトのバックエンドをPyQt4にする - 計算物理屋の研究備忘録
(2017/3/19追記:同じキーワードで複数の呼び名が考えられる時(ex.猫,にゃんこ,ネコ)、まとめるにはstr.contains("猫|にゃんこ|ネコ")という風に指定します)