Jeśli chcesz tylko dystrybucji stopni, prawdopodobnie nie potrzebujesz w ogóle pakietu graficznego. Polecam bigtablulate package tak aby
- obiektami R są wspierane plik tak, że nie są ograniczone RAM
- można parallelize obliczeń stopni używając
foreach
odjazdu their website więcej szczegółów . Aby dać szybki przykład tego podejścia, najpierw stwórzmy przykład z edgelistą obejmującą 1 milion krawędzi wśród 1 miliona węzłów.
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)
Następnym razem łączę ten plik 10 razy, aby przykład był nieco większy.
system("
for i in $(seq 1 10)
do
cat edgelist-small.csv >> edgelist.csv
done")
Następnie załadować pakiet bigtabulate
i czytać w pliku tekstowym z naszej edgelist. Komenda read.big.matrix()
tworzy obiekt pliku oparciem w 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
Możemy obliczyć krawędzi wychodzących za pomocą bigtable()
na pierwszej kolumnie.
outdegree <- bigtable(x,1)
head(outdegree)
Szybka kontrola poprawności, aby upewnić się stół działa zgodnie z oczekiwaniami:
# 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
Aby uzyskać indegree, zrób bigtable(x,2)
.
Kiedy mówisz "analizuj", czy możesz dokładniej określić, co próbujesz zrobić? – ose
Oczywiście. Chcę obliczyć stopnie (in, out, total), które wykorzystam do wykreślenia dystrybucji. Chcę móc przenosić węzły i krawędzie z dużego wykresu na mniejsze wykresy (procesy próbkowania), w których bardzo przydatne są add.vertices i add.edges z igraph. –
Jaki jest format danych? Czy edgelista jest sam w sobie 60 gb? (Czy jest to plik tekstowy, w którym każdy wiersz zawiera dwie liczby reprezentujące nadawcę i odbiorcę pojedynczej krawędzi?) –