1

networkxグラフをgraphmlに変換する際に次の問題が発生します(すべてのコードをここに投稿することはできませんが、ここに要点があります)。NetworkX のバージョンは 1.6.2 です

Gというnetworkxダイグラフがあります

G = nx.DiGraph()

形式 (AuthorA、AuthorB、Weight) の著者のリストから重み付けされたエッジを入力します。

G.add_weighted_edges_from(author_list)

ここでgraphmlをエクスポートでき、正常に動作します

nx.write_graphml(G, 'test.graphml')

次に、グラフのページランクを計算します

graph_metric = nx.pagerank_numpy(G, weight='weight')

次に、グラフのノードに属性を追加します

nx.set_node_attributes(G, 'pagerank', graph_metric)

グラフを繰り返し処理すると、ノード名とページランクを出力できます

for n.d in G.nodes_iter(data=True):
     print n, d

AuthorA {u'pagerank': 0.0076688948270074164} ... ... ...

しかし、属性を更新した後、グラフからgraphmlを作成しようとすると、次のエラーが発生します:

File "/usr/lib/pymodules/python2.7/networkx/readwrite/graphml.py", line 111, in generate_graphml

writer.add_graph_element(G)

File "/usr/lib/pymodules/python2.7/networkx/readwrite/graphml.py", line 305, in add_graph_element

self.add_nodes(G,graph_element)

File "/usr/lib/pymodules/python2.7/networkx/readwrite/graphml.py", line 262, in add_nodes

self.add_attributes("node", node_element, data, default)

File "/usr/lib/pymodules/python2.7/networkx/readwrite/graphml.py", line 255, in add_attributes

scope=scope, default=default_value)

File "/usr/lib/pymodules/python2.7/networkx/readwrite/graphml.py", line 242, in add_data

raise nx.NetworkXError('GraphML writer does not support '

NetworkXError: GraphML writer does not support dict types as data values.

考え?

4

2 に答える 2

1

まあ、それはあなたに伝えます-辞書をgraphml属性として置くことはできません-それらはほとんどの場合、数値型または文字列のいずれかである必要があります。

答えではありませんが、ここにコードを配置する方が簡単です。「悪い」ノードを見つけます。

for node in G.node:
    for attrib in G.node[node]:
        if type(G.node[node][attrib]) == dict:
            print node
于 2014-01-13T19:16:54.583 に答える