GoogleMapとTwitterであなたの回り半径3kmで起こっていることを調べる

GoogleMapAPIを使ってみることにした。JavaScriptはよく分からないのだが、Googleが公開しているサンプルコードをそのままコピペしてみるときちんと動作した。GoogleMapはKMLというファイルを読みこんでレイヤー表示することができる。何かできないかなあと思って、以下の要領で試してみた。

  • まず、GoogleMapAPIを使って任意の場所の座標を調べる。
  • 次にTwitterAPIを使って任意の場所の周辺で呟かれたツイートを抽出した。式はhttps://api.twitter.com/1.1/search/tweets.json?count=100&geocode=35.6625031,139.73192029999996,2kmのように書く。これは六本木6丁目の周囲2kmで呟かれているツイートを抽出せよという意味だ。位置情報を示すデータはgeocodeと呼ばれる。
  • このデータをKMLというファイルに整形する。手作業でやるのは大変なので予めプログラミングして置くとよい。
  • このKMLファイルをGoogleMapに読み込ませて表示する。下記のような画面が得られた。
  • このプログラムはバージョン2でも3でも動作した。2はかなり昔に終っているバージョンのはずだが未だに動かしてくれているらしい。古いAPIを切り捨ててしまうサービス(例えばTwitterやFacebook)もあるので、有り難い限りだ。

googlemapKMLファイルはかなり強力にキャッシュされるらしい。頻繁に情報が更新されるデータなどに使うのはやめた方がよさそうだ。CData形式にしておくと、httpで始まるテキストには自動でリンクが貼られている。

場所付きのデータはかなり多く見つかった。最近流行っていると思われる、スマホを使って場所をチェックインするサービスが普及しているようだ。たいていのデータは「どこで買い物をした」とか「どこで食事をした」などといったたわいもないものだった。イベントなどがあれば参加者の反応を見る事ができて面白いのかもしれない。

意外に思われるかもしれないが、これらのツイートのほとんどが公開されており、誰でも利用することができる。個人情報とか守秘義務などを気にする人はGPS機能を切っておいた方がいいのかもしれない。

KMLファイルは手動で作る事もできるが、最近のスマホカメラ(iPhoneやiPadなど)には最初から場所のコードが添付されている。これをPicasaにアップロードする。PicasaにはKMLファイルを出力するオプションがあり、コメントなども付加することができるので、プログラミングなしで情報の共有地図を作る事も可能だ。災害情報を近所と共有したり、お薦めのお店マップを作ったりと様々に応用できそうだ。

Twitterを使ったお手軽テキストマイニング

Twitter APIを使うと、特定の用語を含むツイート(直近100件)を抽出することができる。式はhttps://api.twitter.com/1.1/search/tweets.json?count=100&q=内閣改造のような形式だ。

本来なら、取得したデータを品詞ごとに分解してネットワーク解析を行う必要がある。Rを使うRMeCabというパッケージが有名だが、最近更新が止まっているらしい。いずれにせよ素人にはなかなかハードルが高い作業だ。そこで「無料ツール」を探したところ、オンラインで形態素解析をしてネットワーク図まで作ってくれるツールを見つけた。どの用語が使われているかを品詞ごとに分解してダウンロードすることもできる。

内閣改造を検索したところこのような結果が出た。もっぱらの噂は新しい農水大臣森山裕氏だ。どうやら暴力団絡みの黒い噂があるらしい。検索したところこのような記事が見つかった。河野太郎氏に期待が集っているように思えたので、ツイートを見てみると「生け贄として囲い込まれた」という記事が人気を集めているらしかった。何かと世知辛い。

他の政党に対するツイートの傾向は下記の通り。維新で検索すると西尾維新という小説家の名前の方が多くひっかかるという難点もある。

もっとも、Twitterで一度に取得できるツイート数の上限は100件なので、これくらいであれば手作業で見た方が早いのかもしれない。大雑把な傾向をテキストマイニングで見つけて、あとはコツコツと元データを当たるというのがいいのかもしれない。

CytoscapeとRでTwitterネットワークを概観する(技術篇)

Twitter APIでデータを集める。APIは JavaScriptや PHPからアクセスすることができる。最新版のRであれば直接アクセスすることも可能だ。今回は安保法制賛成派(右翼)と反対派(左翼)でそれぞれ4人を選びネットワークを作った。

TwitterデータからSIFファイルを作る。SIFファイルはusername1 follow username2のような形式をしている。

Cytoscapeに読み込ませて、並べ替え(Spring Embedなどを使う)て概要を掴む。データが大きくなると並べ替えに時間がかかるので、手作業で1名からフォローしているだけ、されているだけの人を取り除いた。

CytoscapeからGMLファイルを書き出す。

Rで読み込む。予めライブラリigraphを読み込んでおく。library(igraph) と read.graph(,format=”gml”)

コミュニティを調べるために下調べする。edge.betweenness.communityなどを使うが、いくつかの違った分類法を使うことができるが、方法によって精度や計算時間などに違いがあるらしい。

コミュニティを分割する。コミュニティの数が集約するまでNの数を増やして行く。詳しい事は分からないが、影響のないエッジを消していっているいるらしい。community.to.membership(g,data$merge,step=N)

データセットを作成する。data.frame(membership=d$membership,label=V(g)$label,betweenness=betweenness(g),closeness=closeness(g))

データセットを書き出す。write.table(df,file=”data.txt”)

エクセルなどに取り込んで betweennessで並べ直す。数値が大きければ中心にあることが分かる。

属性テーブルに編集し直すと(ID名 = メンバーシップ)Cytoscapeに取り込むことができる。ファイルの先頭に1行加えておくこと。それが属性名になる。

新しいビジュアルスタイルを加える。 Node Shapeを選び、Discrete Mappingを選ぶと属性ごとに色分けができる。Betweennessやclosenessを属性を利用して中心に近い円ほど大きく表示する事もできる。

手作業で並べたもの。大体正しくグループ分けされていることが分かる。ただし、異なるグループが共有されているアカウントはランダムにグループ分けされているらしい。黄色とオレンジが安保法案反対派(左翼)で、残りが安保法制賛成派(右翼)に属する。右翼は結びつきが薄いのでそれぞれ別グループを形成している。

colornetwork1

機械的(Spring Embed)に並べ替えたもの。

colornetwork3