我有一个数据框,其中详细描述了N个节点之间的边权重。是否有一个用于处理这种数据的软件包?
例如,我想将以下信息作为网络绘制出来:
p1 p2 counts
1 a b 100
2 a c 200
3 a d 100
4 b c 80
5 b d 90
6 b e 100
7 c d 100
8 c e 40
9 d e 60
我有一个数据框,其中详细描述了N个节点之间的边权重。是否有一个用于处理这种数据的软件包?
例如,我想将以下信息作为网络绘制出来:
p1 p2 counts
1 a b 100
2 a c 200
3 a d 100
4 b c 80
5 b d 90
6 b e 100
7 c d 100
8 c e 40
9 d e 60
一种选择是网络包,它是统计社交网络分析的R软件包statnet系列的一部分。它以稀疏的方式处理网络数据,非常适合大型数据集。
以下是我的操作:
A = read.table(file="so.txt",header=T) A p1 p2 counts 1 a b 100 2 a c 200 3 a d 100 4 b c 80 5 b d 90 6 b e 100 7 c d 100 8 c e 40 9 d e 60 library(network) net = network(A[,1:2]) # 获取关于您的网络的摘要信息 net 网络属性: 顶点 = 5 有向 = TRUE 超链接 = FALSE 循环 = FALSE 多重 = FALSE 二分图 = FALSE 总边数= 9 缺失边数= 0 非缺失边数= 9 顶点属性名称: vertex.names 邻接矩阵: a b c d e a 0 1 1 1 0 b 0 0 1 1 1 c 0 0 0 1 1 d 0 0 0 0 1 e 0 0 0 0 0
set.edge.attribute(net,"weight",A[,3]) gplot(net)
## 另一个很酷的功能 s = as.sociomatrix(net,attrname="weight") plot.sociomatrix(s)
以下是如何使用igraph制作数据的网络图:
d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'),
p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e'),
counts=c(100, 200, 100,80, 90,100, 100,40,60))
library(igraph)
g <- graph.data.frame(d, directed=TRUE)
print(g, e=TRUE, v=TRUE)
tkplot(g, vertex.label=V(g)$name)