我想分析前面提到的數據(edgelist或pajek格式)。首先想到的是帶有igraph軟件包的R-project。但內存限制(6GB)不會伎倆。 128GB的個人電腦能夠處理數據嗎?是否有任何替代品不需要RAM中的整個圖形?
在此先感謝。
P.S:我已經找到了幾個項目,但我想聽到一些主張對此事(是的,這就是你)的意見。
我想分析前面提到的數據(edgelist或pajek格式)。首先想到的是帶有igraph軟件包的R-project。但內存限制(6GB)不會伎倆。 128GB的個人電腦能夠處理數據嗎?是否有任何替代品不需要RAM中的整個圖形?
在此先感謝。
P.S:我已經找到了幾個項目,但我想聽到一些主張對此事(是的,這就是你)的意見。
如果只想度分佈,你可能並不需要一個圖形包都沒有。我建議bigtablulate package使
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)
。
因此,如果我把它做對了,我們正在將問題轉移到矩陣計算。我喜歡。請舉一個例子。 – 2012-03-11 12:51:02
似乎很容易和可擴展度計算。它可以處理圖形操作嗎?添加減量等?我必須閱讀他們的文檔。感謝您發佈克里斯托弗。 – 2012-03-12 15:49:41
當你說「分析」你可以更具體的,以什麼你想幹什麼? – ose 2012-03-10 13:13:27
當然。我想計算度數(進,出,總數),我將用它來繪製分佈。我希望能夠將節點和邊從大圖移動到更小的圖(採樣過程),其中來自igraph的add.vertices和add.edges非常方便。 – 2012-03-10 15:14:48
數據的格式是什麼? Edgelist是60gb嗎? (即它是一個文本文件,其中每行包含代表一條邊的發送者和接收者兩個數字?) – 2012-03-11 07:41:28