読者です 読者をやめる 読者になる 読者になる

鴨川にあこがれる日々

軽い技術っぽい記事かいてます

TwitterAPIを使ってソーシャルグラフを描く(描画編)

Graph JavaScript HTML R

この記事はシステム主専攻ver1.0 Advent Calendar 2014の7日目の記事です.


システム主専攻ver1.0 Advent Calendar 2014 - Adventar

はじめに

前回の続きです.
グラフの描画を行います.


TwitterAPIを使ってソーシャルグラフを描く(データ収集編) - You have completed regicide!

環境

概要

グラフを描画するツールにはいくつかあります.
今回は以下の3つで行います.

  • D3.js
  • iGraph
  • Gephi

本データは27164個のエッジと830個のノードからなります.

本題

D3.js

まずはd3.jsを使います.
javascriptで動くデータ可視化のライブラリです.
D3.js - 日本語ドキュメント

グラフを描画するために以下のページを参考にさせていただきました.
Force-Directed Graph

ノードをドラックできるのでインタラクティブに扱うことができます.
フォロー・フォロワー関係のデータを以下のようにjsonファイルで用意します.

{
  "nodes":[
    {"id":0,"group":1},
    {"id":1,"group":2},
    {"id":2,"group":2},
    {"id":3,"group":2}
  ],
  "links":[
    {"source":1,"target":3,"value":1},
    {"source":2,"target":1,"value":1},
    {"source":2,"target":3,"value":1},
    {"source":3,"target":0,"value":1}
  ]
}

nodesにアカウントの情報,linksにフォロー・フォロワー関係を記述しています.
valueは辺の重みにあたりますが,今回は全て1とします.

このデータで描画を行うと以下の様なグラフになります.
f:id:another16javac:20150125004149p:plain

描画するデータなのですが,27164のエッジがあるので,嫌な予感しかしませんがfirefoxに頑張ってもらいます.





f:id:another16javac:20150125005852p:plain

カクカク動き続けますが,特徴的な形は現れません.
ブラウザが悲鳴をあげているため,グラフの規模が大きくなるとd3.jsでは限界がありました.

iGraph

igraphはRでグラフデータを扱うためパッケージです.
データの形式としては

1 2
1 3
1 4

といったように
source target
の形式でファイルにグラフのデータを書き出します.
形式でも読み込み可能です.

注意点としては,sourceとtargetとしてAPI経由で取得したアカウントIDを直接使うと桁が大きすぎてファイルからグラフデータの読み込みができません.
そのため,IDを1からの整数値に変換して読み込ました.

"graph"というファイルがあったときは以下のようにして描画します.

> library(igraph)
> g = read.graph("graph")
> plot(g,vertex.size=3,vertex.label.cex=0.1,vertex.label="",edge.width=0.5,layout=layout.auto)

15分程度で完成します.f:id:another16javac:20150125013140p:plain
d3.jsとは異なり一度描画してしまえば動かすことはできません.

Gephi

Java製のソフトウェアです.

Gephiについては以前触れたのでこちらを.

Gephiで夢野久作「ドグラ・マグラ」の可視化 - You have completed regicide!


とりあえず描画します.
赤いノードがわたしです.
f:id:another16javac:20150127010420p:plain

次数が100以上のノードに絞ってみると
f:id:another16javac:20150127010425p:plain

ノードが密集している所は,ある種のクラスタを形成しています.
(図書館系とかCS系とかT大関係者?)

おわりに

3つのツールを大規模なデータを使った結果としては,もっとも簡単に描画ができるのはgephiでした.
今回は行っていませんが,RとGephiでは,HITSなどのアルゴリズムを行えます.