【问题标题】:Social graph analysis. 60GB and 100 million nodes社交图分析。 60GB 和 1 亿个节点
【发布时间】:2012-03-27 15:35:06
【问题描述】:

晚上好,

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

提前致谢。

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

【问题讨论】:

  • 当您说“分析”时,您能否更具体地说明您要做什么?
  • 当然。我想计算度数(入、出、总),我将用它来绘制分布。我希望能够将节点和边从大图移动到较小的图(采样过程),其中 igraph 中的 add.vertices 和 add.edges 非常方便。
  • 数据的格式是什么?单是edgelist就60gb吗? (即它是否是一个文本文件,其中每行包含两个数字,代表单个边缘的发送者和接收者?)
  • 是的,它是一个edgelist txt文件,每行包含两个ID,代表从第一个ID到第二个ID的有向边。

标签: r igraph social-graph


【解决方案1】:

如果您只需要度数分布,您可能根本不需要图形包。我推荐bigtablulate package 这样

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

查看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 包并使用我们的edgelist 读入文本文件。命令 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)

【讨论】:

  • 所以如果我做对了,我们将把问题转移到矩阵计算上。我喜欢。请举个例子。
  • 对于学位计算来说似乎很容易且可扩展。它可以处理图形操作吗?添加减法等?我必须阅读他们的文档。感谢您发布克里斯托弗。
猜你喜欢
  • 2017-03-26
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多