Chienomi

Twitterデータ 解析スクリプト

開発::util

前にちょっと話題になって、作ろうかなといった新しい「Twitterデータ」を従来のようにHTMLに整形するツールだが、 今回きっかけがあったのでついに作った。

GitHubで公開している

紹介

スクリプトによる出力

スクリーンショットは、「画像つき」「RT降順」「トップ5」という条件によるものだ。

とりあえず作った簡易なものなので、スクリプト内にテンプレートが組み込まれており、コード自体も簡易なものになっている。

とはいえ、READMEにある通り、設定できる条件がわりと細かいため、実用的に使えるはずだ。

処理時間は意外と短いが、超巨大なファイルを出力することになり、それをレンダリングしようとすると途方もない時間がかかる上にすごく重いので、 スプリットして出力するようになった。

インターフェイスはコマンドラインで、展開したアーカイブディレクトリ上でスクリプトを実行するという単純な方式。

ビギナー向けに丁寧に

このスクリプトはパソコンのビギナーも使う可能性があるので、丁寧に使い方を解説しよう。

Rubyを導入する

このスクリプトはRubyで書かれており、Rubyを導入する必要がある。

Macの場合は標準でRubyが導入されている。 もし古いMacを使っていたりして、Rubyが2.3よりも古い場合は新しいバージョンを導入する必要がある。 また、何らかの理由でRubyが導入されていない場合も同様である。

Mac

まずは話が簡単なのでMacの話からしよう。Windowsは後だ。

まずは “アプリケーション→ユーティリティ→ターミナル” と開いてターミナルを起動しよう。 Control+Spaceで「ターミナル」で検索してもいい。

そして次のように入力してEnter。

ruby --version

これで2.3より大きいバージョンが表示されればOKだが、エラーになったり、古いバージョンだったりする場合は導入が必要だ。

これは、公式のドキュメントを参照してほしい

Windows

WindowsではRubyInstallerを推奨している。

DownloadからWithout Devkitの中で一番上にあるものを選べば良い。 (色々入ってもよければDevkit入りのものを選べばいいし、推奨されるバージョンは太字で、=>のようにマークがつけられている)

あとは普通にインストーラでインストールをすることになる。

スクリプトを入手する

GitHubから “Clone or download”, “Download ZIP”と進めばZIPで入手できる。 任意の(表現しやすい)場所に展開し配置すればいい。

もちろん、Gitが使えるならGitを使えばいい。

使い方 パート1

まずはTwitterで「その他」「設定」「Twitterデータ」と進み、Twitterデータをダウンロードする。 以前はメールで通知がきていたが、今はTwitter上の「通知」に載るようになったので見落とさないようにしよう。

たくさんツイートしている人は相当なサイズになり、時間がかかることに注意してほしい。

使い方 パート2

Windows

例えばマイドキュメント以下にtwdata-analyze/twdata-sorting.rbという形でファイルを配置したとする。 そして、Twitterデータはマイドキュメント以下のtwitter-dataフォルダの下に置くとする。

まずはメニューからStart Command Prompt with Rubyを選択する。 Cortanaに向かってRubyと言ってもいい。

こうするとコマンド入力画面になる。C:\Users\haruka>みたいな感じで表示されているはずだ。 このプロンプトをここでは略して>と表記する。

なお、環境によってバックスラッシュに見えたり、円マークに見えたりするが、これらは同じものだ。

では、次のように入力する。

>cd %HOMEPATH%\Documents\twitter-data
>ruby %HOMEPATH%\Documents\twdata-analyze\twdata-sorting.rb

ここで注意点。 >はプロンプトの意味であり、あなたが入力するものではない。 入力するのはその後ろの部分で、この場合2回コマンドを打つ。

Mac

Macに関してはファイルパスが隠蔽されて、ファイルがどこにあるのか非常にわかりにくいことになってしまうが、ホームディレクトリに置くのがとりあえずわかりやすいだろう。 Finderのサイドバーにホームの表示がなければcommandキーを使えば表示される。

ホームディレクトリ以下twdata-analyze/twdata-sorting.rbにスクリプトを、twitter-data以下にTwitterデータを置いたとする。

この場合、前述のようにターミナルを起動し、

$ cd twitter-data
$ ruby ~/twdata-analyze/twdata-sorting.rb

とやれば良い。

ここで注意点。 $はプロンプトの意味であり、あなたが入力するものではない。 入力するのはその後ろの部分で、この場合2回コマンドを打つ。

使い方 パート3

こうすると、Twitterデータと同じフォルダにTweetChunk_NNNNN.htmlというファイルができる。 ひとつのファイルで300ツイートなので、30000ツイートほどしている人だと100個ほどファイルができることになる。

このファイルはウェブブラウザ(Microsoft Edge, Mozilla Firefox, Google Chrome, Chromium, Vivaldi, e.t.c.)で開くことができるもので、 ツイートが日付降順でならんでいる。

画像つきのツイートは画像なども含んで表示されるが、Twitterデータへのリファレンスなので、Twitterデータを削除したり、移動したりすると表示されなくなる。

Statusとなっている部分はツイートへのリンクだ。

Atはツイート時刻だが、Twitterデータでツイート時刻は文字列になっていて、「米国表記のUTC時刻」だったりする。 米国時間表記自体は読める人が多いだろうが、UTC時刻なので日本時間だと+9時間する必要がある。 将来的には現地時刻のフォーマットで出せるようにしたいけれど、ちょっと面倒なのでとりあえずはこの仕様。

※現在のバージョンでは現地時刻になった

このスクリプトはコマンドにオプションを与えることで振る舞いを変えることができる。 ここではLinux式でコマンドとパスを表記するが、既出部分を参照にそれぞれのプラットフォームのコマンドに読み替えて欲しい。

まずは、出力先をTwitterデータと同じところではなく、指定してみよう。

twdata-sorting.rb -o ~/Documents/Tweets

ここでは出力先に~/Documents/Tweetsを指定した。例えばWindowsなら%HOMEPATH%\Documents\Tweetsのように指定することになるだろう。

次に、RT数降順に並べ替えてみる。

twdata-sorting.rb -r -o ~/Documents/Tweets

-rでRT数順になる。

しかし、RT数が多いものに限定したい。では、RT数が最低100があるもののみを対象にするようにしよう。

twdata-sorting.rb -r 100 -o ~/Documents/Tweets

-rに続いて100と指定することで、RTが最低でも100あるものに限定した。 同じように、いいね数300以上でいいね数順に指定することもできる。

twdata-sorting.rb -f 300 -o ~/Documents/Tweets

-mはメディアツイートに限定する。 しかし、メディアツイートだけにすると300ツイートも表示するとものすごく重くなってしまう。 そこで、-s 50として50ツイート区切りでファイルをわけてもらうことにしよう。

twdata-sorting.rb -m -s 50 -o ~/Documents/Tweets

さて、そうこうしているうちに、画像つきでRT数の多いツイートトップ3を知りたくなった。 -rオプションでRT数で並び替えることができるし、-mオプションで画像つきのツイートに限定できる。 そして、-tオプションを使えばトップの指定したツイートだけに限定できる。

twdata-sorting.rb -m -r -t 3 -o ~/Documents/Tweets

これらのツイートにはリプライやリツイートも含まれている。 リプライを除外するには-M、リツイートを除外するには-Rを追加すればいい。

さらに、-pを使うと、指定したフレーズを含むツイートを絞り込むことができる。 次の例では、Manjaroという言葉を含むツイートに絞り込む。(大文字小文字は無視される)

twdata-sorting.rb -p manjaro -o ~/Documents/Tweets

-p phraseのオプションは複数書くことができ、複数書いた場合はOR検索になり、それらのフレーズのいずれかを含んでいるツイートに絞り込む。 ただし、フレーズ検索はツイートの量と指定フレーズの数によってはだいぶ時間がかかる可能性がある。

だいたいこんな感じだ。 何か要望があれば、この記事にコメントするなり、Twitterで@reasonset宛で言うなりましゅまろを投げるなり、GitHubにissueを投げるなりしてくれれば良い。

変更

念の為最新のTwitterデータをとって確認したところ、データの形式が変わっていた(!)ので、最新の形式に対応すると共に、より見やすい形式で出力するように変更した。

これは言い換えれば、最新バージョンのスクリプトでは古いTwitterデータの解析ができなくなっている。 これについては、Gitを使って古いバージョンのスクリプトを使ってもらうしかない。

無意味にデータ構造を変えるのやめてほしいなぁ……