グラフにすればよくわかる!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("猫|にゃんこ|ネコ")という風に指定します)
【初心者向け】Python標準入力の取扱い
先日紹介したpaizaですが、スキルチェック問題を解くのに初心者は絶対つまづくんじゃ?と思ったポイントがあったので、簡単に解説したいと思います。
一番簡単なの
まず一行・一回だけ読み込み。これは簡単。
3行目で標準入力から一行代入されます。ここで注意するポイントは、このままだとstr型(文字列)で受け取ることになるということです。文字列ならそれでいいのですが、例えば
このプログラムで入力が”10”だった場合、何が出力されるかわかりますか?正解は、10×2で20!・・・ではなく”1010”となります。何故こうなるかというと、str型で受け取っているため、数字ではなく文字列として認識されているからです。数字として扱い、計算するにはまずstr型からint型(整数)もしくはfloat型(小数点)に変換する必要があります。
なので、こう。aに代入する時に、一緒にint型に変換します。これで実行すると”1010”ではなく”20”と計算できました。
また、1行ではあるけれど、スペース区切りでいくつかの入力がある場合もあります。"2 10"など。
それぞれを別々の要素として、同じリストに受け取ってみましょう。split()というメソッドでそれが実現できます。
このかっこの中には区切り文字を指定できますが、詳しくは過去記事で紹介してるサイトを見たほうがわかりやすいと思います。スペースで区切る場合は何も入れなくて大丈夫です。
さて、上のコードで分割はできました。しかし先程と同じように、このままではstr型のままです。では”a = int(input().split())”とすれば良いのでしょうか?ここが私のどハマリしたポイントです。実はそう簡単にいかないのです。”a = int(input().split())”として実行したところ、こんなエラーが出ると思います。
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
int関数の引数はリストじゃあきまへんで~ってことですね。ではどうするか。以下のような方法があります。
これが本命
これで一行丸ごとint型で且つsplit ()関数によって分割されてリストに収納されました。
sysモジュールを使う
またsysモジュールを使う方法もあります。使うには三行目のように、あらかじめimportしておく必要があります。これだと複数行の入力をまとめてint型に変換できます。ただ、これだとsplit()を使えないので一行に一つの入力がある時しか使えません。
もしかしたらもっと他にスマートなやり方があるのかもしれませんが、この辺がわかっていれば標準入力だけでつまづくことは少ないと思います。あとはfor文で何とかします。append関数も覚えておくと便利。ループ処理等がわからない初心者さんはとりあえず過去記事で紹介したサイトでお勉強してくださいね。それでは!
2019年7月16日追記:paiza公式ブログで動画解説してくれてました。
Pythonの勉強にオススメのサービス3つ。全部無料!
Python完全に初心者の人向け。全部無料!
たくさんオススメしても悩むだけなので、3つだけです。まずは始めよう!
1. まずはこれ。元々は転職サービスみたいだけど、様々な言語の初心者向け動画講座が受けられます。もちろんPythonも。ブラウザ上で実際に手を動かしながら覚えられるのでわかりやすいです。動画を見終わったあとは、スキルチェック問題にチャレンジ。S~Dランクまで問題があり、解けるとランキングがわかるので(翌日)ゲーム感覚で楽しめます。問題を解くためにわからないところを調べると勉強になって良いです。あとは模範解答が見れたら最高なのになー。
2. 次はこれ。わかりやすく解説がまとまっています。paizaのスキルチェック問題を解いてる時にわからないことを検索すると出てきて何度もお世話になりました。そして気がついた。先にこのサイトを全部読めばいいんじゃね?と…。その後はpaizaのD問題がちゃんと解けるようになりましたとさ。めでたしめでたし。(C問題は問題によって解けたり解けなかったり)
3. 最後はこれ。iPhoneアプリ(Androidアプリがあるかは知りません)で、全部英語ですが時間制限もないのでゆっくり読むとわかるはず。プログラミング言語の勉強するとどうしても英語の文章を読む機会が増えるので、それに慣れる意味でもオススメ。これも解説の後に穴埋め問題があり、ちょっとしたスキマ時間に勉強できます。
このアプリにはCode PlaygroundというPython実行環境がついていて、iPhone上でちょっとしたコードの動作確認したりするのにも便利です。
以上です。まだ勉強途中ですが、他人のコードを見て何がどうなってるかわかる程度にはなりました。
paizaのスキルチェック問題を解く時、最初に標準入力の受け取り方がわからなくてめちゃくちゃハマりました。それについてもまた今度。
(3/10追記:標準入力についての記事を書きました。)
<2018/9/27追記:Progateのほうがオススメかも。楽しいよ。>