東日本大震災ビッグデータWS project 311に参加する その1

(2012/9/19 22:51追記 url切れが多かったは間違いだったので修正.奥村先生の分析結果と数が合わないのはもう一度チェックする!)
(2012/9/20 14:24追記 1tweetに複数以上のurlが含まれていても1つしか抽出していなかったので修正.奥村先生の抽出結果の数字とほぼ同じオーダーの数値になったが,今度はこちらが10〜20程度多いものがある…なぜ…?)
(2012/9/20 22:05追記 奥村先生とのツイート数のずれはURLの後ろに付いた#が原因であることが判明.詳細は奥村先生のtwitter分析のページに記載されています)

Googleが幹事となり,朝日新聞社,JCC,Twitter Japan,日本放送協会本田技研工業,レスキューナウ,ゼンリンデータコムによる8社が2011年3月11日前後のデータを公開して,当時何が起こったのか,震災時に必要なサービスは何か,次の災害のためにどんな準備が必要かを明らかにするWSを9月12日から10月28日にかけて開催する.それに申し込んでみた.主に情報系の方々が多いのだと思うが,テーマがテーマだけに様々な分野の人たちが参加しているように感じる.MLでもデータ処理の手法が共有されるなど,ことさらに学際融合などと言わなくても,共通のテーマ,共通のデータでWSを行うことで,十分に交流が行われるのではないか.そのように感じさせるWSが始まった.

東日本大震災ビッグデータWS
https://sites.google.com/site/prj311/

twitterによるURL共有情報の分析

NLPの方々が多数参加されているように思われるので,その方々にまかせればよいのだが,twitterのデータを扱う機会はそんなにない,というか初めてなので,自分もいろいろ分析することにした.twitterによるソーシャルネットワーク分析やデマの拡散研究は情報系の国際会議や論文誌,また社会科学系でもしばしば分析されている対象なので,今更やっても追いつきようがない.ということで,震災時にどのような情報が必要とされたか,または共有されたかをツイートに付随したURLに着目して分析を行うことにしよう.

動機と目的

ツイートにURLを貼り付けるとき,「こういう情報があるよ!」と知ってもらいたい・伝えたいという欲求が表れていたり,「○○について誰か知りませんか?」という問いかけに対して「@×× ここに書いてあるよ http:〜〜」という情報提供がなされていると考えられるため,tweetに付随するURLは震災時に共有された情報・共有したかった情報が端的に詰まっていると考えられる.そこで,つぶやかれたURLを集計し,できればアノテーションもつけて分類を行い,各URLの性質(短期的にバズった,長期的に引用され続けた etc)を見ていけば,当時の情報共有のされ方や今後の情報提供・情報共有手法に有用であるかもしれない….

困りそうなこと

今回の震災は1)直接的な地震津波による被害(主に東北沿岸部から関東沿岸部にかけて),2)311当日の東京圏の帰宅困難問題,3)福島第一原発の事故の問題,4)計画停電や物資の買い占め等の問題(主に関東)が同時または雪崩的に発生したため,各tweetやURLがどの問題に対応した内容であるのかを分類する必要があるだろう.そして,各urlは開いて見ない限り,どの内容に対応しているのかわからないので….どこかで心が折れる可能性がありそう.

また,twitterでは短縮urlがしばしば利用されているため,同一urlに対して異なる短縮urlサービスを利用すれば,urlの文字列として異なる文字列になってしまう.そのため,urlの集計を行う際には元のurlに戻して名寄せをする必要がある.これはpythonのurllib2を使って展開するつもりだが,いちいち展開することになるため時間がかかりそう….

分析方針

twitterから提供されたデータは2011/3/11から2011/3/18の日本語tweetデータ.容量は30GB程度,総ツイート数は179,286,297.1週間で約1億8000万ツイートだが,容量が30GB程度と考えると多いようでそれほど多くないのだなぁと感じる.この中から文字列として"http"を含むツイートを取り出して,正規表現でurlを抽出した.この時点では,1)urlの名寄せができていない,2)非公式RTなどにより,文末の途切れたurlも正規表現によって抽出されてしまうという問題を有している.

上記の問題を含む抽出ツイート総数は26,951,976であり,全ツイートの15%程度であることがわかる(どこかで処理を間違えていなければ).平常時と比べていないので傾向はわからないが,6-7tweetに1度はurl付きtweetをしているというのは結構多いのではないか.

ここまで,処理した上でとりあえず途中経過を載せてみる.今回のような場合,重要なのは上位100くらいではなく(後で示すように上位100はマスメディアによる情報が多数を占める),もっと下位のロングテール(懐かしい響き)部分だと思う.上位はどうしても報道資料や国・自治体による発表,速報的内容になってしまうからだ.しかし,これらの情報を含んだurl以外をうまく抽出するのはなかなか骨が折れそうである.urlごとに[報道][地震津波]や[ブログ][原発]などの分類を行いたいが,どこまでがんばれるかは未知数である.

分析の途中経過として,短縮url名寄せ前の生データ段階での上位100のurlを下記の表にまとめる.
ここでは便宜上,"リンク切れ"は現時点でサイトに繋がらないもの,"url切れ"はtweet内で(非公式RTなどによって)urlが完全ではないが正規表現によって取り出されたものとする.

url freq contents
http://ustre.am/vmCj 173978 NHKustream
http://ustre.am/kJ3E 138648 TBSのustream
http://bit.ly/17n4iz 85776 47NEWSの速報
http://twitpic.com/49zcwy 64083 twitpic(個人)
http://t.co/spB1CKU 50962 SAVE JAPAN
http://bit.ly/eVdXpd 46610 避難マップ
http://ustre.am/eOVh 40718 IWJのustream
http://bit.ly/eoeUc2 39908 ezweb災害伝言板
http://bit 37422 url切れ
http://bit.ly/euuWSb 36519 ezweb災害伝言板
http://bit.ly/tokyohinan 35600 東京都内避難場所
http://bit.ly/ehTZkT 34768 WILLCOM 災害伝言板
http://japan.person-finder.appspot.com/?lang=ja 34141 google person finder
http://bit.ly/hznGrs 33209 茨城県版 被災地救援ぽーたるまっぷ
http://t.co/07xUH83 31642 リンク切れ(Picasa)
http://twitpic.com/48r1o9 31461 twitpic(個人)
http://bit.ly/etWywJ 31443 T-site
http://bit.ly/hF2BHS 30344 docomo 災害伝言板
http://bit. 30326 url切れ
http://nerv.evangelion.ne.jp/ 30045 リンク切れ
http://j.mp/hkqf4H 29379 炊き出しマップ
http://www.saigai-touseki.net/sendsdata/total.php 28982 日本透析医会 災害時情報ネットワーク
http://savejapan.simone-inc.com/ 28624 SAVE JAPAN
http://www.ustream.tv/channel/fc2mh3 28226 地震情報のustream
http://twitpic.com/48zwv0 26419 twitpic(個人)
http://twitpic.com/49dz0t 26400 twitpic(個人)
http://goo.gl/rlR07 26095 リンク切れ(person finder)
http://bit.ly 26055 url切れ
http://twitter.com/ 25684 twitter.com
http://bit.ly/ebNMey 25469 リンク切れ(person finder)
http://bit.ly/feeSpL 25368 T-site
http://matome.naver.jp/odai/2129985372846288901 24852 naverまとめ
http://animal-navi.com/navi/map/map.html 24108 避難マップ
http://prayforjapan.jp/tweet.html 23796 pray for japan
http://bit.ly/ 23514 url切れ
http://t 23273 url切れ
http://setsuden.tumblr.com/ 22563 節電タンブラー
http://b 22180 url切れ
http://bit.l 21735 url切れ
http://bi 21145 url切れ
http://twitpic.com/4a7abm 20960 twitpic(個人)
http://bit.ly/hDqJYs 20694 youtube NHKチャンネル
http://twitpic.com/4 20538 url切れ
http://twitpic.com/4a9xz9 20506 twitpic(個人)
http://bit.ly/fXe5Ms 20319 Softbank 災害伝言板
http://bit.ly/i89HpW 20206 Softbankのプレスリリース
http://ustre.am/iEG9 19767 Ustream Asia公式チャンネル
http://twitpic.com/497y3o 19329 twitpic(個人)
http://keikakuteiden.com/ 18913 リンク切れ
http://bit.ly/fMse2d 18263 SAVE JAPAN
http://ustre.am/n9wj 18183 地震情報のustream
http://goo.gl/ganbare 18033 Googleの避難所名簿共有サービス
http://ow.ly/4dl6Y 18026 SAVE JAPAN
http://youtu.be/9_tpHFTrxWY 17645 youtube 届け! みんなの元気玉〜悟空とアラレの応援メッセージ
http://japan.person-finder.appspot.com/ 17293 google person finder
http://twitpic.com/48r8mz 17208 twitpic(個人)
http://twitpic.com/49kkms 17142 twitpic(個人)
http://www.tepco.co.jp/images/tokyo.pdf 16921 東京電力 計画停電(東京)pdf
http://www.tepco.co.jp/index-j.html 16195 東京電力
http://ustre.am/npvD 16129 ustream(おそらくTVを流してた模様)
http://t.co/xfvHyGv 15748 Googleの避難所名簿共有サービス
http://twitpic.com/49eki9 15694 twitpic(個人)
http://shindanmaker.com/95986 15693 診断メーカー
http://ustre.am/vwjb 15625 NPO原子力資料情報室のustream
http://nhk.jp/jishin 15285 NHK各放送局地震災害情報
http://goo.gl/sagas 15242 google person finder
http://t.co/U0WSqMG 15153 放射線の話
http://twitpi 15099 url切れ
http://t.co/MP8EbjC 14913 pray for japan
http://twitpic.com/49nqza 14901 twitpic(個人)
http://machi.userlocal.jp/teiden/ 14674 停電エリア検索システム
http://ustre.am/vnoD 14407 NHKustream
http://bit.ly/fGdzGo 14217 naverまとめ
http://ow.ly/4d0w4 14101 Hang in there tohoku
http://ustre.am/vnel 13957 日本テレビustream
http://bit.ly/f5qJK0 13929 google person finder
http://bit.ly/goj4tg 13919 東京電力
http://goo.gl/3jzPc 13593 Just giving japan
http://okguide.okwave.jp/guides/40782 13523 OK guide 被災地での給水・炊き出し・物資情報共有
http://bit.ly/g20zTk 13468 被災地でつぶやかれたツィートだけ表示検索するサイト
http://twitpic.com/49m6pa 13395 twitpic(個人)
http://goo.gl/hSXYh 13168 google crisis response
http://bit.ly/heR44C 13044 OK guide 被災地での給水・炊き出し・物資情報共有
http://ustre.am/caZP 12975 ビデオニュースドットコムのustream
http://bizoole.com/power/ 12754 リンク切れ
http://ow.ly 12722 url切れ
http://t.co/ZBpMOvu 12667 裁判資料?
http://bit.ly/g1mO5s 12647 SAVE JAPAN
http://twitpic.com/ 12528 twitpic.com
http://goo.gl/aAeE3 12504 Daily Mailによる東日本大震災の記事
http://twitpic.com/49e07b 12399 twitpic(個人)
http://twme.jp/TWI/VEGAS 12345 リンク切れ
http://bit.ly/grlZN7 12326 東京電力計画停電pdf
http://bit.ly/hXJibi 12154 NHK総合ニコニコ生放送
http://bit.ly/gmKDgO 12046 東京電力 計画停電(神奈川)pdf
http://shindanmaker.com/92217 11842 診断メーカー
http://bit.ly/hGRjzU 11768 東京電力 計画停電(千葉)pdf
http://twitpic.com/48emow 11722 twitpic(個人)
http://bit.ly/ib4Fap 11686 防衛省による自衛隊活動状況
http://cgi.mobile.metro.tokyo.jp/aps/tosei/bousai/hinan.html 11474 東京都避難場所
考察

こうやって見てみると,既存メディア,特にNHKは強いなぁと思わされる.災害時においては全国に放送局を持つNHKは情報の速さや信頼性の点でよく参照されているのだろう.あと,url切れが大変多いのが気になるが,これは非公式RTのせいなのか,正規表現の書き方をミスってるのか,どちらかだと考えられる(両方もありえるけど).本当に思いっきり間違えてたので修正.最初に比べてurl切れは減ったので上位100に登場するurlも変化した.上位100くらいではustreamのような映像配信サイトが多いことが特徴的で,情報が錯綜している段階においてはpassiveなメディアが強いことが示される.

一方で,はじめからわかっていたことだが,上位100では人口が多く,また当時電力やインターネット環境においても平常時とほぼ変わらなかった東京圏の情報が大半を占めている.あれほど大きな地震津波災害があったにもかかわらず,被災地の情報が共有されておらず,また被災地向けの情報もあまり見られない.ただし,これは上位100のurlのみ見ているからであって,下位を細かくみていくことで,それらの情報共有や情報のやりとりがあることは見出せる可能性は存在する.そこらへんは細かく見ていきつつ,各urlを分類していくことが必要だと思われる.なんか良い方法があれば,どなたか教えてください.

正規表現pythonで以下のようにやっている.
当初"-"を抽出してなかった,1tweet内の複数urlに対応していなかった問題を修正した.

(tweet_id, user_id, timestamp, body) = line.split('\t')

pattern = "http://[A-Za-z0-9\'~+\-=_.,/%\?!;:@#\*&]+"
regExp = re.findall(pattern, unicode(body, "utf-8"))
        
if regExp:
        for i in regExp:
        	output(fo, tweet_id, user_id, timestamp, i)

ゼンリンデータコムの混雑統計の可視化

こっちもとても適当な分析?というより,簡易的な可視化をしてみた.データはゼンリンデータコムGPSで取得した位置情報を250mメッシュに分割し,そのメッシュの人数を1時間単位で推定したデータであり,提供機関は2011/3/8〜3/17までのデータである.

東日本を対象エリアとしてデータが提供されているようだが,とりあえず関東近辺を可視化したのが下図.それぞれ緯度・経度がよくわからない数字なのだが,これらを3600*1000で割ると,通常の度表現の緯度経度座標になるようです(@kotanakahiraさんにtwitterで教えてもらいました,thx!!)これに関してはとりあえずデータ概要を眺めるためにRで可視化をしただけである.各メッシュ3000人以上が赤,1000-2999がオレンジ,1000未満が黒にしてある.

上記の東京近辺に絞ったデータで,各メッシュに冪乗則の関係またはZipf則に従ってないかを確認してみたのが下の図.順位とメッシュ人口の両対数グラフである.途中までは直線だが,最後にガクっと下がってしまう.ある閾値までは冪乗則が成り立っていそうな感じがする.

それはともかく,震災前の平日と震災当日の人口変動をこの図を用いて比較してみよう.左が3/08,右が地震当日の3/11.黒が深夜0時,オレンジが昼の12時,赤が22時のデータである.つまり,黒が夜間人口,オレンジが昼間人口を表し,1日の中でエリア全体で人口密度の低い地域から人口密度のより高いエリアに人口全体が移動(通勤・通学など)していることがわかる.で,22時の段階では一部を除いて自宅に帰っており,深夜に近づくにつれて帰宅する様子がうかがえる(たぶん1時間ごとに表示したら全体の変動がわかりやすそう).一方で,震災当日は22時になっても,人口分布が昼間人口の分布とほぼ変わらない.これは当日の鉄道運休などによる帰宅困難状態により,22時の段階でも都心部に人が多く残っていたことを表している.

上記のtwitterの分析もこの混雑統計も,既にみんな(感覚的に)知っていることをデータに基づいて確認しただけに過ぎないので,もう少し面白い発見があったり,次の災害時に寄与するような分析が行えると良いのですが.tweetデータと移動・活動データを同時に扱えると面白いなと思いつつ,実際にやるのはなかなか骨が折れそうです.

あと,診断メーカーはどんな状況においてもウザいことがわかりました.

地図のplotはあまりに適当なので載せるの恥ずかしいのですが,このようにしています.

###首都圏あたりをplotする関数
plotTokyo <- function(x) {
  date <- x[1]
  time <- x[2]
  
  #首都圏の座標(適当)
  lat_up    <- 35.83333
  lat_down  <- 35.27778
  lon_left  <- 139.4444
  lon_right <- 140.2778

  #zenrin0308などのファイル名でゼンリンデータを読み込んでおく
  originalData <-  eval(parse(text=paste("zenrin0", date, sep="")))
  #東京中心部
  subData      <- subset(originalData, (originalData$V3 >= lat_down)&
                        (originalData$V3 <= lat_up)&(originalData$V4 >= lon_left)&
                        (originalData$V4 <= lon_right)&(originalData$V2==time))

  plot(subData$V4, subData$V3, pch=15, xlab="lon", ylab="lat", main =paste(date, time),
       col=ifelse(subData$V7 >= 3000, "red", ifelse(subData$V7 >= 1000, "orange", "black")))
}