Rでネットワーク構造を可視化する

| Topic path: Top / データ・マイニング / Rでネットワーク構造を可視化する

*はじめに [#yb7fa054]

Rを用いてネットワーク構造を可視化したので,そのメモです.


*準備 [#r89eea09]

igraphパッケージを使います.

#geshi(rsplus){{
install.packages("igraph")
library("igraph")
}}



*データの読み込み [#z63f74fe]

ネットワークは隣接行列で表現します.
そこで,隣接行列をCSV形式で作成し,Rに読み込みます.
ここでは,1行目と1列目には頂点の名前が入っているものとします.
#geshi(rsplus){{
data <- read.csv("data.csv", header=T, row.names=1)
}}

これを隣接行列に変換します.
ここでは無向グラフ("undirected")とします.
#geshi(rsplus)){{
g <- graph.adjacency(data,mode="undirected")
}}


*ネットワーク構造の可視化 [#v2b5813c]

レイアウトをfruchterman.reingoldにして,ネットワークを表示します.
ネットワークが大きいので,頂点の大きさ(vertex.size)を2に,頂点のラベル(vertex.label)を非表示(NA)にします.
#geshi(rsplus){{
plot(g,layout=layout.fruchterman.reingold,vertex.size=2,vertex.label=NA)
}}
#ref(network.png,nolink,50%);


*見た目を変える [#f1810546]

このネットワークには1,460個の頂点がありますが,最初の691個と残りの769個は別の種類です.
そこで,形と色を変えて表示します.
#geshi(rsplus){{
V(g)$shape="circle"
V(g)$color="red"
for (i in 692:1460) {
  V(g)$shape[i]="square"
  V(g)$color[i]=NA
}
plot(g,layout=layout.fruchterman.reingold,vertex.size=2,vertex.label=NA)
}}
#ref(network2.png,nolink,50%);

このfruchterman.reingoldのように,内部で乱数を用いているレイアウトだと表示するたびに形が変わってしまいます.
表示する前に乱数のシードをセットすれば,毎回同じ形で表示されます.
#geshi(rsplus){{
set.seed(0)
plot(g,layout=layout.fruchterman.reingold,vertex.size=2,vertex.label=NA)
}}
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS