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

4 回答 4

14

一种选择是网络包,它是用于统计社交网络分析的 R 包statnet系列的一部分。它以稀疏的方式处理网络数据,这对于较大的数据集非常有用。

下面,我执行以下操作:

  • 将边缘列表(前两列)加载到网络对象中
  • 将计数分配为称为权重的边缘属性。
  • 用 gplot 绘制网络。(有关更改边缘厚度的信息,请参阅帮助页面。)
  • 绘制一个社会矩阵(只是一组代表邻接矩阵的 5x5 块,其中 (i,j) 单元格被相对计数着色)
A = read.table(file="so.txt",header=T)
一种
      p1 p2 计数
    1 ab 100
    2 交流 200
    3 广告 100
    4 公元前 80
    5 房 90
    6 是 100
    7 光盘 100
    8 中 40
    9日60

图书馆(网络)
净 = 网络(A[,1:2])
# 获取有关您的网络的摘要信息
网
     网络属性:
      顶点 = 5
      定向 = TRUE
      超=假
      循环 = FALSE
      多个 = FALSE
      二分 = FALSE
      总边数 = 9
        缺失边= 0
        非缺失边 = 9
        顶点属性名称:
        顶点名称
     邻接矩阵:
      abcde
    一个 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(网络)

## 另一个很酷的功能
s = as.sociomatrix(net,attrname="weight")
plot.sociomatrix(s)
于 2009-07-23T03:31:37.633 回答
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)
于 2009-07-23T04:30:39.980 回答
0

我也一直在 igraph 工作。创建图形的一种方法是将所有“从”“到”节点的列表写出到文本文件,然后将其作为图形对象读回。图对象可以经受许多图论过程并且可以处理相当大的网络。

于 2009-07-27T05:04:34.127 回答
0

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

于 2009-08-02T19:51:57.823 回答