社会图分析。 60GB和1亿个节点

时间:2012-03-10 13:09:08

标签: r igraph social-graph

晚上好,

我正在尝试分析前面提到的数据(edgelist或pajek格式)。首先想到的是带有igraph包的R-project。但内存限制(6GB)不会成功。 128GB的PC能够处理数据吗?在RAM中是否有任何不需要整个图形的替代方案?

提前致谢。

P.S:我找到了几个节目,但我想听听一些专业人士(是的,就是你)对此事的看法。

1 个答案:

答案 0 :(得分:6)

如果您只想要学位分布,则可能根本不需要图表包。我推荐bigtablulate package以便

  1. 您的R对象是文件备份的,因此您不受RAM
  2. 的限制
  3. 您可以使用foreach
  4. 并行化学位计算

    查看their website了解详情。为了给出这种方法的一个快速示例,让我们首先创建一个示例,其边缘列表涉及100万个节点中的100万个边缘。

    set.seed(1)
    N <- 1e6
    M <- 1e6
    edgelist <- cbind(sample(1:N,M,replace=TRUE),
                      sample(1:N,M,replace=TRUE))
    colnames(edgelist) <- c("sender","receiver")
    write.table(edgelist,file="edgelist-small.csv",sep=",",
                row.names=FALSE,col.names=FALSE)
    

    我接下来将此文件连接10次以使示例更大。

    system("
    for i in $(seq 1 10) 
    do 
      cat edgelist-small.csv >> edgelist.csv 
    done")
    

    接下来,我们加载bigtabulate包并使用我们的边缘列表读入文本文件。命令read.big.matrix()在R。

    中创建一个文件支持的对象
    library(bigtabulate)
    x <- read.big.matrix("edgelist.csv", header = FALSE, 
                         type = "integer",sep = ",", 
                         backingfile = "edgelist.bin", 
                         descriptor = "edgelist.desc")
    nrow(x)  # 1e7 as expected
    

    我们可以在第一列使用bigtable()来计算outdegrees。

    outdegree <- bigtable(x,1)
    head(outdegree)
    

    快速完整性检查以确保表格按预期工作:

    # Check table worked as expected for first "node"
    j <- as.numeric(names(outdegree[1]))  # get name of first node
    all.equal(as.numeric(outdegree[1]),   # outdegree's answer
              sum(x[,1]==j))              # manual outdegree count
    

    要获得不确定性,请执行bigtable(x,2)