重み付きグラフ


実際のネットワークでは、vertex間の関係の有無だけでなく、重みを考慮しなくてはなりません。
そのようなグラフを重み付きグラフ weighied graphまたは有値グラフ valued graphと呼びます。

今回は、Rとigraphパッケージを使用して、weighted graphを作成します。
igraph新たに学んだ点としては、E()とV()を用いてedgeやvertexの属性を操作することです。plotするときも、これらの関数使用することが必要となります。



#####以下 Rのスクリプト#####

library(igraph)

#edge listを作成
wg <- matrix(c(
"1", "2",
"1", "4",
"2", "3",
"2", "4"),
ncol=2, byrow=TRUE)

#edge listからグラフを作成
g <- graph.edgelist(wg, directed=FALSE)

###igraph付属のedgeを編集する関数を用いてedgeに重みを指定
#edgeを表示
> E(g)
Edge sequence:
          
[1] 2 -- 1
[2] 4 -- 1
[3] 3 -- 2
[4] 4 -- 2
#$weightの属性を調べる
> E(wg)$weight
NULL

#重みを追加
E(g)$weight <- c(2,4,3,1)

> E(g)$weight 
[1] 2 4 3 1

#vertexの確認
> V(g)
Vertex sequence:
[1] "1" "2" "4" "3"


###グラフを可視化
png("weighted-graph.png")
#vertex.labelとedge.labeをそれぞれ個別に与えていることに注意!!!!!!
plot(g, vertex.label=V(g)$name, edge.label=E(g)$weight, main = "weighted graph")
dev.off()



【参考文献】
金明哲『Rで学ぶデータサイエンス 8 ネットワーク分析』2009 共立出版 序文、13 - 15pp