2012-03-10 10 views
5

おはよう、ソーシャルグラフ分析。 60GB、1億ノード

私は前述のデータ(edgelistまたはpajek形式)を分析しようとしています。最初はigraphパッケージのRプロジェクトでした。しかし、メモリの制限(6GB)はやりません。 128GBのPCでデータを処理できますか? RAMにグラフ全体を必要としない代替手段はありますか?

ありがとうございます。

P.S:私はいくつかのプログラムを見つけましたが、私はいくつかのプロ(ええ、それはあなたです)の意見を聞きたいと思います。

+1

「分析する」と答えると、あなたは何をしようとしているのかより具体的になりますか? – ose

+0

もちろん。分布をプロットするために使用する度数(​​イン、アウト、トータル)を計算したいと思います。大きなグラフから小さなグラフ(サンプリングプロセス)にノードとエッジを移動できるようにしたいと考えています。ここではigraphのadd.verticesとadd.edgesが非常に便利です。 –

+0

データの形式は何ですか? edgelistは60gbだけですか? (つまり、各行に1つのエッジの送信者と受信者を表す2つの数字が含まれているテキストファイルですか?) –

答えて

6

度数分布だけが必要な場合は、グラフパッケージはまったく必要ありません。私はより多くの詳細についてはtheir websiteをチェックアウトあなたがRAM

  • によって制限されないように

    1. あなたのRオブジェクトは、ファイルバックアップされているように、あなたがforeach

    を使っ度計算を並列化することができbigtablulate packageをお勧めします。このアプローチの簡単な例を示すには、最初に100万のノードのうち100万のエッジを含むedgelistで例を作成しましょう。

    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()は、我々は最初の列にbigtable()を使用してoutdegreesを計算することができ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 
    

    ファイルバックオブジェクトを作成します。

    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

    私はそれが正しくなる場合は、問題を行列計算に移しています。私はすきです。例を挙げてください。 –

    +0

    度計算のために容易でスケーラブルであるようです。グラフのマニュピュレーションを扱うことはできますか?間引きを追加するなど?私は彼らの文書を読む必要があります。 Christopherをお寄せいただきありがとうございます。 –