Gephiを使ったTwitterネットワークの可視化
今回はオープンソースのグラフ可視化ソフトウェアGephiを使って、自分のTwitterネットワークを可視化してみました。
まずデータですが、自分(@hongo35)がフォローしている人のuser_idをTwitter APIで取得します( https://dev.twitter.com/docs/api/1/get/friends/ids )。そして、そのuser_idそれぞれに対して、その人がフォローしているuser_idを取得してきます(総数: 330,238)。1リクエストに対してmax 5000件のuser_idが取得できます。今回は簡単のため、5000人以上フォローしている人も5000件のuser_idしか取得していないので、その点では正確性を欠きます。次に、取得してきたuser_idのなかで、自分のフォローしている人のuser_idがあればそのuser_id間にリンクを張る(有向)というようにして、ネットワークデータを作成しました。
本当はGraphDBのNeo4jにネットワークデータを入れて、Gephiで可視化するようにしたかったのですが、今回はリンク構造をcsvで書き出し、それをGephiで読み込むことで可視化しました。
結果を以下に示します。真ん中の赤が自分。
Nodes | 452 |
Edges |
9014 |
レイアウトは、Fruchterman Reingoldアルゴリズムで配置しています。
簡単な指標だけ計算すると、
平均次数: 19.942
平均経路長(有向): 3.086
という結果になりました。
Twitterのネットワークは有向グラフであるため、他のSNSに比べて経路長が長くなるように思われますが、 実際には他のSNSよりも平均経路長は短いという研究があります( http://an.kaist.ac.kr/traces/WWW2010.html )。この研究では、Twitterの平均経路長は4.12となっています。これに比べ、今回のネットワークの平均経路長はさらに短い3.09でした。今回はネットワークが小規模で、僕自身を中心としているので当たり前なのかもしれないですが。。
また、今回はクラスタリングはしていませんが、グラフからだいたいの感じで分類してみると、3つくらいに分けられます。それぞれのクラスタに含まれる人を調べると、クラスタはそれぞれ「(広く)IT系」、「学部時代のサークル」、「海外の可視化コミュニティ」になっていました。
もっと大規模なネットワークを可視化して、クラスタの間で領域をまたいでいるような人を見つけたりするとおもしろいのかなーなどと思ったりしました。
今回は遊びでやったんですが、意外とおもしろかったのでまとめてみました。Twitterのフォロー関係はあまり意識したことが無かったのですが、データを可視化して気付くことが多々ありました。あと、JavaScriptの可視化ライブラリのd3.jsやsigma.jsを使って可視化しようかとも思ったのですが、これらで扱えるネットワークデータは小規模で(今回のネットワークは小規模ですが)、もしノード数が数万、数十万になったら使えないですし、ネットワーク指標の計算も自分で実装しなければならないので、今回はGephiを使用しました。ネットワーク指標を計算してくれるのはとても楽です。機会があれば使ってみるとおもしろいと思います。