台風の時は、コロッケ…ではなくTwitter実況を流し見る

# 台風だ。コロッケ、いやTwitterで情報収集だ。

台風10号来ますよ。暦の上ではもうすぐ二百十日でもあり、台風の季節。ネット上では[台風の時にはコロッケを食べる風習](http://matome.naver.jp/odai/2137162930861214401)があるそうですが、

![croquettes.png](https://qiita-image-store.s3.amazonaws.com/0/9113/33660fec-ca01-de38-4356-e6dc29aa7697.png)

そんなことよりTwitter上に流れている情報や実況を収集しましょう。いやいや、眺めてニヤニヤするのではありません。鮮度の高い情報を収集して災害に備えるのです。[^1]

[^1]: 私も[ゼロメートル地帯](http://www3.nhk.or.jp/news/html/20160827/k10010656381000.html)にいるので、わりと真面目なネタです。

# パワーアップした「小鳥男」だ

Twitterの情報収集には、改良したTwitterアプリ[**恐怖！小鳥男**](https://github.com/ShellShoccar-jpn/kotoriotoko/)が便利です。（アプリ名は気にしないでください）

![typhoon_tweets.png](https://qiita-image-store.s3.amazonaws.com/0/9113/baec3718-794b-d40d-6f57-30c1e2226aeb.png)

こんなふうにしてターミナル上に今現在のツイートが刻々と流れてきます。ちなみにこれはBash on Ubuntu on Windows上で動いています。**つまり、Windows 10でも動きます。**（もちろん各種UNIX系OSでもMacでも動きます）

[ストリーミングAPI](http://www.slideshare.net/yusukey/3twitter-api-api)により、発せられたツイートをリアルタイムに表示するTwitterアプリもあるかと思いますが、**日本語キーワードに今なお非対応**[^2]ですので、例えば「台風」を含むツイートを表示するということができません。それに対し、このアプリなら日本語もOKですし、[高度な検索クエリー](https://syncer.jp/twitter-how-to-use-search#section-3)も指定できます。

[^2]: 一応、ハッシュタグに書かれた日本語には対応しています。

# 準備 ― アプリのインストール

まずはアプリケーションのインストールをします。方法は[ここ](http://qiita.com/richmikan@github/items/24af09dfaba2c6a6ea97#%E3%81%95%E3%81%81%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8D)に書いてあるとおりです。

ちなみに、過去にインストールしたことがある人なら、過去に作った`CONFIG/COMMON.SHLIB`のバックアップをとって、新しいバージョンをgit cloneして、

```sh:
$ git clone https://github.com/ShellShoccar-jpn/kotoriotoko.git
```

新たな`CONFIG`ディレクトリーの中にコピーすれば完了です。

# 使い方① ― リアルタイムの情報を流し見る

小鳥男をインストールするといろいろなコマンドができますが、今回使うのは`APPS`ディレクトリーの中にある`gathertw.sh`というコマンドです。

これの詳しい使い方は[ココ](https://github.com/ShellShoccar-jpn/kotoriotoko/blob/master/APPS/gathertw.md)にも書きましたが、リアルタイムのツイートをとにかく画面でモニターしたいだけなら次のように打ち込めばOKです。

```sh:「台風」を含むツイートをモニターする
$ cd kotorioroko/APPS # 予めAPPSディレクトリーに移動しておく
$ ./gathertw.sh -d typhoon10 -c -p --nores --noraw 台風
         :
# 検索結果が1つ以上表示されたら一度[CTRL]+[C]を押して中断する。
         :
# 再び同じ引数で同じコマンドを実行する。
$ ./gathertw.sh -d typhoon10 -c -p --nores --noraw 台風
         :
# すると、リアルタイムのツイートが延々と表示される。
         :
```

このコマンドについての補足は次のとおりです。

* `-p`オプションを、`-p2`、`-p3`に置き換えるとより詳細にモニターできます。
* `-d`オプションの引数“`typhoon10`”は、このコマンドが使うデータ格納ディレクトリーを指定するものなので、都合のよいパスを指定して構いません。
* `--nores`オプションを外して実行すると、収集されたツイート情報が“`typhoon10/RES`”ディレクトリーの中に格納されます。
* `--noraw`オプションを外して実行すると、収集された生のJSONデータが“`typhoon10/RAW`”ディレクトリーの中に格納されます。
* 検索キーワードは必ずオプションより後（最後）に記述してください。
* 検索キーワードは[高度な検索クエリー](https://syncer.jp/twitter-how-to-use-search#section-3)で指定することができます。例えば、“台風”または“typhoon”のOR検索をしたいのであれば、引数の最後で`台風 OR typhoon`と書けばできます。
* **Bash on Ubuntu on Windowsではまだ日本語が打ち込めません。**「台風」のように日本語文字を入力したい場合は、直接打ち込む代わりにメモ帳などからコピー&ペーストしてください。


また、モニターしているツイートは標準出力に出てきますので、パイプに繋いだりリダイレクションしたりして如何様にも加工できます。

# 使い方② ― 過去のツイートを収集する

このコマンドはもともと、リアルタイムに流れるツイートを表示するためのものではなく、過去のツイートを次々収集して後々分析するために作られたものです。

**Twitter APIでは過去約10日分のツイートを検索することが可能**ですので、過去約10日遡って条件に合うツイートを全部収集することができます。

```sh:「台風」を含むツイートをモニターする
$ cd kotorioroko/APPS # 予めAPPSディレクトリーに移動しておく
$ ./gathertw.sh -d typhoon10 -p 台風
         :
         :
# 過去約10日分のツイートを収集し終わったら終了する。
$ 
```

このコマンドについての補足は次のとおりです。

* 収集だけが目的で、内容をモニターする必要がないなら`-p`オプションを付けないでください。
* `-d`オプションの引数“`typhoon10`”は、このコマンドが使うデータ格納ディレクトリーを指定するものなので、都合のよいパスを指定して構いません。
* `--nores`オプションを付けて実行すると、収集されたツイート情報が格納されません。よって、“`typhoon10/RAW`”の中に生のJSONデータだけが格納されます。
* `--noraw`オプションを付けて実行すると、生のJSONデータが格納されません。よって、“`typhoon10/RES`”ディレクトリーの中に収集されたツイート情報だけが格納されます。

## 使い方②' ― 収集した過去ツイートを分析する

過去ツイートを収集する目的とは、大抵の場合それを分析することが目的だと思います。

`-d`オプションで指定したディレクトリーの中に次のようにツイート情報が格納されますので、各種UNIXコマンドを駆使すれば様々な分析ができます。さらに、**[MeCab](http://taku910.github.io/mecab/)等の形態素解析ソフトを使えば単語の使用頻度等の分析も可能**です。

```
.
|
|-- NUM_OF_TWEETS.txt ............ 収集した全ツイート数
|-- LAST_TWID.txt ................ 収集した全ツイートのIDの中で最新のもの（*1）
|-- SINCE_TWID.txt ............... 収集した全ツイートのIDの中で最古のもの
|                                  *1 連続収集モードの際、このID以前ものもは検索しないように
|                                     するために、本コマンドによって参照される）
|
|-- RES/ ......................... 収集データファイル（JSONパース済）置き場
|   |
|   |-- <YYYYMMDD>/ .................... 該当日付の収集ツイート格納ディレクトリー
|   |   |
|   |   |-- <hh>/ ...................... 該当時間の収集ツイート格納ディレクトリー
|   |   |   |
|   |   |   |-- <hhmmss>.txt ........... 該当時分秒の収集ツイート格納ファイル
|   |   |   |--    :
|   |   |   |      :
|   |   |
|   |   |-- <hh>/
|   |   |    :
|   |        :
|   |
|   |-- <YYYYMMDD>/
|   |       :
|           :
|
`-- RAW/ ......................... 収集データファイル（JSON形式の生データ）置き場
    |
    |-- <YYYYMMDD>/ .................... 検索結果JSONの先頭ツイートが該当日付であるデータ置き場
    |   |
    |   |-- <hh>/ ...................... 検索結果JSONの先頭ツイートが該当時間であるデータ置き場
    |   |   |
    |   |   |-- <YYYYMMDD_hhmmss>.json . 検索結果JSONの先頭ツイートが該当日時であるデータファイル
    |   |   |--    :
    |   |   |      :
    |   |
    |   |-- <hh>/
    |   |    :
    |        :
    |
    |-- <YYYYMMDD>/
    |       :
            :
```

台風の例ではなく、先日あったコミケ会場で発せられたツイートの分析ですが、時間帯毎のツイート数を数えてCSV化した後、こうして表計算ソフトでグラフ化したり、

![C90tweets.png](https://qiita-image-store.s3.amazonaws.com/0/9113/57a5cce6-5339-9b59-7ec9-c0c05d5ad35e.png)

あるいはツイートに付随する位置情報を抽出し、[外部サービス](https://www.tree-maps.com/)にコピペするとプロットすることもできます。

![C90tweets_plot.jpg](https://qiita-image-store.s3.amazonaws.com/0/9113/5f0b138f-590b-02ff-8857-c13d3ed34ba3.jpeg)

UNIXコマンドを駆使して大量のツイートを集計したり分析したりする話も今後紹介しようと思います。