在R中操作网络数据

10

我有一个数据框,其中详细描述了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
4个回答

14

一种选择是网络包,它是统计社交网络分析的R软件包statnet系列的一部分。它以稀疏的方式处理网络数据,非常适合大型数据集。

以下是我的操作:

  • 将边缘列表(前两列)加载到网络对象中
  • 将计数分配为称为权重的边属性。
  • 使用gplot绘制网络。(请参阅帮助页面以更改边缘的厚度。)
  • 绘制社交矩阵(只是表示邻接矩阵的5x5个块,其中(i,j)单元格由相对计数着色)。
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)

很棒的答案!非常有帮助! - RHelp

4

以下是如何使用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)

0
我也一直在使用igraph。创建图的一种方法是将所有“起始”和“终止”节点写成一个文本文件,然后将其读取为图对象。该图对象可以进行许多图论处理,并且可以处理相当大的网络。

0
在我的经验中,igraph 是我最喜欢的用于大型图论工作的软件包。它具有高效的内存使用和一些非常好的算法。igraph 使用类似于边缘列表的内部数据结构。
对于更简单/较小的事情,我倾向于使用“sna”软件包(“社交网络分析”)。它非常适合交互式工作和绘制较小网络。sna 使用更多的邻接矩阵数据结构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接