1

タグネットワークを作成してブログのネットワークを分析しています(重み=共有タグの数/いずれかにあるタグの総数で共通のタグを共有するブログ間のエッジ。グラフには約10000個のノードがあります。変換する必要があります生データを GraphML 形式に変換し、そのために python networkx を使用しています。しかし、メモリが不足しています。Python を初めて使用するので、ここで何が間違っているのか教えてください。(または、ハードウェアの問題ですか?) ? 私のシステムは i3、3GB メモリです)

#!/usr/bin/env python
import sys
import networkx as nx
G=nx.Graph()
tags=[]
for line in open(sys.argv[1]):#Each blog has all its tags in a single line
    tags.append(set(line.split(',')))#tags are separated by comma.
for i in xrange(len(tags)):
    G.add_node(i+1)
for i in xrange(len(tags)):
    for j in xrange(i+1,len(tags)):
        p=len(tags[i].intersection(tags[j]))
        q=len(tags[i].union(tags[j]))
        if p!=0 and q!=0:
            G.add_edge(i+1,j+1,weight=float(p)/q)
nx.write_graphml(G,sys.argv[1]+'.graphml')
4

1 に答える 1

0

私が確認できる唯一の改善点は、タグの 2D リストを作成する代わりに、各タグにバイナリ フラグ ビットを使用できることです。したがって、そのメモリ要件は低くなります (タグはかなり長くなる可能性があり、個別のタグの数は 150 までしかないため、多くの繰り返しがあるため)。これはあまり変わりません。問題は、コメントで言及されている Aric のような write_graphml 関数にあります。最終的に 16 GB のマシンでも実行できるようになり、最大 9.5 GB かかりました。
PS:誰か良いテクニックを知っているなら教えてください。

于 2013-03-18T20:14:52.980 に答える