読者です 読者をやめる 読者になる 読者になる

ひとメモ

Pythonを勉強して主にラズパイで何かするブログ

グラフにすればよくわかる!Twitterから自分のツイートをダウンロードして分析する方法。

(2017/03/30追記:もっとわかりやすく使いやすいプログラムを書けたので新しい記事を書きました。下のリンクから飛んでください。)

hwhw.hatenablog.com

 

Twitterでよくある診断アプリは好きですか?自分がどんな人間かわかってるつもりでも、目に見える形にまとめられると新たな発見があって面白いですよね。

ただ、ああいうアプリではTwitterの仕様により、過去の全ツイートを読み込んで分析するということができません。ツイート頻度が高い人では特に、ごく最近のツイートからしか結果に反映されなくてつまらなかった…ということもあります。

 

それならPythonで簡単診断!

それならば!PythonPythonとは、初心者にも使いやすいプログラミング言語です。)を使って自分で色々と自分のツイートを分析してみましょう。以下のグラフを見てください。これは私の全ツイート履歴から、"死にたい"という言葉が含まれるツイートの数を時系列で表したものです。私は双極性障害という病気持ちなので、かなりはっきりした波があることがわかります。

f:id:hwhw:20170312014058p:image

 これだけでも何となく面白いですが、これに"お金"という言葉を含むツイートのグラフを重ねてみると…

f:id:hwhw:20170312014149p:image

こうなりました。お金について言及している時(私の場合ほぼお金がない時)には、やはり死にたい気持ちも強くなるのかもしれませんね。こうやって重ねてグラフにすると、とてもわかりやすいです。

 今回はこのように自分の全ツイート履歴から、任意の言葉を含むツイートを時系列でグラフにするということを説明します。私は自分のメンタル分析・改善を目的としてるので暗いグラフを作ってますが、皆さんは好きな人・物などでグラフを作ってみると楽しいと思います。

 

Python環境構築

環境構築についてはOSによって違うので、以下のサイトを参考にしてください。すみません、あんまり詳しくないので丸投げ。ちなみに私はRaspberry pi3を使っていて、OSはRaspbianです。ラズパイは教育向けにできてるらしく、Pythonも元々入っています。みんなもラズパイ買っちゃいなよ。

 

 

いくつかライブラリをインストール

以下ラズパイのターミナルにコマンドを打ちます。環境によって違うかもしれませんが、ググればいっぱい情報出てくるはず。

 

sudo pip3 install pandas matplotlib numpy

 

もしこの辺でわからないことがあったら、コメントに書いてもらえればわかることなら答えます。

 

ツイートの履歴を取得

Twitterの設定の中に全ツイート履歴をリクエストするというボタンがあるので押してください。しばらくすると登録メールアドレス宛に送られてきます。解凍して適当な場所に保管してください。

 

さあ実践

まずは下のコードをメモ帳などのテキストエディタに貼り付け、"twigraph.py"という名前で保存します。拡張子(.py)があっていれば、名前は今適当に考えただけなので違ってもOKです。

gist.github.com

まず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ですが、スキルチェック問題を解くのに初心者は絶対つまづくんじゃ?と思ったポイントがあったので、簡単に解説したいと思います。ちなみに私はどハマりしました。(このハマるって言葉もプログラミング界隈ではやや普段使う意味と違う使われ方をしている気がします。楽しくてつい夢中になるのではなく、解決できずドツボにはまるという意味。多分…。)

 

一番簡単なの

まず一行・一回だけ読み込み。これは簡単。

gist.github.com

 

 3行目で標準入力から一行代入されます。ここで注意するポイントは、このままだとstr型(文字列)で受け取ることになるということです。文字列ならそれでいいのですが、例えば

gist.github.com

このプログラムで入力が”10”だった場合、何が出力されるかわかりますか?正解は、10×2で20!・・・ではなく”1010”となります。何故こうなるかというと、str型で受け取っているため、数字ではなく文字列として認識されているからです。数字として扱い、計算するにはまずstr型からint型(整数)もしくはfloat型(小数点)に変換する必要があります。

gist.github.com

なので、こう。aに代入する時に、一緒にint型に変換します。これで実行すると”1010”ではなく”20”と計算できました。

 

また、1行ではあるけれど、スペース区切りでいくつかの入力がある場合もあります。"2 10"など。

それぞれを別々の要素として、同じリストに受け取ってみましょう。split()というメソッドでそれが実現できます。

gist.github.com

このかっこの中には区切り文字を指定できますが、詳しくは過去記事で紹介してるサイトを見たほうがわかりやすいと思います。スペースで区切る場合は何も入れなくて大丈夫です。

さて、上のコードで分割はできました。しかし先程と同じように、このままでは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関数の引数はリストじゃあきまへんで~ってことですね。ではどうするか。以下のような方法があります。

 

これが本命

gist.github.com

これで一行丸ごとint型で且つsplit ()関数によって分割されてリストに収納されました。

 

sysモジュールを使う

またsysモジュールを使う方法もあります。使うには三行目のように、あらかじめimportしておく必要があります。これだと複数行の入力をまとめてint型に変換できます。ただ、これだとsplit()を使えないので一行に一つの入力がある時しか使えません。

gist.github.com

 

もしかしたらもっと他にスマートなやり方があるのかもしれませんが、この辺がわかっていれば標準入力だけでつまづくことは少ないと思います。あとはfor文で何とかします。append関数も覚えておくと便利。ループ処理等がわからない初心者さんはとりあえず過去記事で紹介したサイトでお勉強してくださいね。それでは!

 

 

hwhw.hatenablog.com

 

 

 

Pythonの勉強にオススメのサービス3つ。全部無料!

Python完全に初心者の人向け。全部無料!

 

  1. まずはこれ。元々は転職サービスみたいだけど、様々な言語の初心者向け動画講座が受けられます。もちろんPythonも。ブラウザ上で実際に手を動かしながら覚えられるのでわかりやすいです。動画を見終わったあとは、スキルチェック問題にチャレンジ。S~Dランクまで問題があり、解けるとランキングがわかるので(翌日)ゲーム感覚で楽しめます。問題を解くためにわからないところを調べると勉強になって良いです。あとは模範解答が見れたら最高なのになー。

    paiza.jp

  2. 次はこれ。わかりやすく解説がまとまっています。paizaのスキルチェック問題を解いてる時にわからないことを検索すると出てきて何度もお世話になりました。そして気がついた。先にこのサイトを全部読めばいいんじゃね?と…。その後はpaizaのD問題がちゃんと解けるようになりましたとさ。めでたしめでたし。(C問題は問題によって解けたり解けなかったり)

    www.python-izm.com

  3. 最後はこれ。iPhoneアプリで、全部英語ですが時間制限もないのでゆっくり読むとわかるはず。プログラミング言語の勉強するとどうしても英語の文章を読む機会が増えるので、それに慣れる意味でもオススメ。これも解説の後に穴埋め問題があり、ちょっとしたスキマ時間に勉強できます。

    appsto.re

 

以上です。まだ勉強途中ですが、他人のコードを見て何がどうなってるかわかる程度にはなりました。

paizaのスキルチェック問題を解く時、最初に標準入力の受け取り方がわからなくてめちゃくちゃハマりました。それについてもまた今度。

(3/10追記:標準入力についての記事を書きました。)

 

hwhw.hatenablog.com

 

 

 

 

【意外と知らないIT用語】ドメインって何? お名前.com