2012-03-10 53 views
5

晚上好,社會圖分析。 60GB和1億個節點

我想分析前面提到的數據(edgelist或pajek格式)。首先想到的是帶有igraph軟件包的R-project。但內存限制(6GB)不會伎倆。 128GB的個人電腦能夠處理數據嗎?是否有任何替代品不需要RAM中的整個圖形?

在此先感謝。

P.S:我已經找到了幾個項目,但我想聽到一些主張對此事(是的,這就是你)的意見。

+1

當你說「分析」你可以更具體的,以什麼你想幹什麼? – ose 2012-03-10 13:13:27

+0

當然。我想計算度數(進,出,總數),我將用它來繪製分佈。我希望能夠將節點和邊從大圖移動到更小的圖(採樣過程),其中來自igraph的add.vertices和add.edges非常方便。 – 2012-03-10 15:14:48

+0

數據的格式是什麼? Edgelist是60gb嗎? (即它是一個文本文件,其中每行包含代表一條邊的發送者和接收者兩個數字?) – 2012-03-11 07:41:28

回答

6

如果只想度分佈,你可能並不需要一個圖形包都沒有。我建議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()計算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)

+0

因此,如果我把它做對了,我們正在將問題轉移到矩陣計算。我喜歡。請舉一個例子。 – 2012-03-11 12:51:02

+0

似乎很容易和可擴展度計算。它可以處理圖形操作嗎?添加減量等?我必須閱讀他們的文檔。感謝您發佈克里斯托弗。 – 2012-03-12 15:49:41