networkD3パッケージを使ってみた

networkD3:Tools for creating D3 JavaScript network graphs from R
というRパッケージがリリースされています。

http://christophergandrud.github.io/networkD3/
http://cran.r-project.org/web/packages/networkD3/index.html

D3 JavaScriptを使ってネットワークを描画してくれるパッケージということですが、D3 JavaScriptに関する知識が全くなくても使えました。

RStudioで使うことが推奨されていますが、RGuiなどでもできました。
その場合、図はhtmlファイルとしてブラウザで表示されます。


simpleNetwork

辺リストからネットワークを描く。

サンプルコード

library(networkD3)

# Fake data
Source <- c("A", "A", "A", "A", "B", "B", "C", "C", "D")
Target <- c("B", "C", "D", "J", "E", "F", "G", "H", "I")
NetworkData <- data.frame(Source, Target)

# Create graph
simpleNetwork(NetworkData)

イメージ 1
data.frame形式で1列めにリンクの始点(source)、2列めに終点(target)を指定した辺リストを作っています。

引数を追加すれば、ノードやリンクの色などを変更することができます。


forceNetwork

力学モデルによるグラフ描画。
リンクの太さやノードのグループの色分けができる。

サンプルコード

# Load data
data(MisLinks)
data(MisNodes)

# Create graph
forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source",
             Target = "target", Value = "value", NodeID = "name",
             Group = "group", opacity = 0.4)


イメージ 2

head(MisLinks)

でサンプルデータ(『レ・ミゼラブル』の人物相関図)の辺リストを見てみると、

  source target value
1      1      0     1
2      2      0     8
3      3      0    10
4      3      2     6
5      4      0     1
6      5      0     1

1列めに始点、2列めに終点、3列目に辺の値(リンクの太さ)の入ったdata.frameになっている。

head(MisNodes)

でノードのデータを見てみると、

             name group
1          Myriel     1
2        Napoleon     1
3 Mlle.Baptistine     1
4    Mme.Magloire     1
5    CountessdeLo     1
6        Geborand     1

1列めにノードの名前、2列めにノードのグループが入ったdata.frameになっている。


treeNetwork

樹形図を描くのだが、階層クラスタ分析の結果から描画できるのが面白かった。

サンプルコード

hc <- hclust(dist(USArrests), "ave")

これは普通の階層クラスタ分析。
通常のデンドログラムだとこうなる。

plot(hc)
イメージ 3

これをJSONのリスト形式に変換してツリー形のネットワークとして描画する。

treeNetwork(as.treeNetwork(hc))

イメージ 4


?treeNetwork

すると階層のリストを手入力するサンプルもあるけど大変そう。

文字コードの関係で、Windowsではデフォルトではラベルに日本語が使えませんが、Macなら大丈夫なようです。