繁体   English   中英

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

[英]Social graph analysis. 60GB and 100 million nodes

晚上好,

我正在尝试分析上述数据(edgelist或pajek格式)。 首先想到的是带有igraph软件包的R项目。 但是内存限制(6GB)不能解决问题。 一台128GB的PC能够处理数据吗? 是否有不需要在RAM中整个图形的替代方案?

提前致谢。

PS:我找到了几个程序,但是我想听听一些赞成(是的,就是你)对此事的意见。

如果只需要度数分布,则可能根本不需要图形包。 我推荐bigtablulate软件包,以便

  1. 您的R对象是文件支持的,因此您不受RAM的限制
  2. 您可以使用foreach并行度计算

查看他们的网站以获取更多详细信息。 为了给出这种方法的快速示例,我们首先创建一个边缘列表示例,其中包含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()计算出学位。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM