1

Django Web サイトのユーザー間の接続を視覚化するために d3js を使用したいと考えています。各ノードに 2 つの属性 (ID と名前) が必要な強制有向グラフの例のコードを再利用しています。user_profiles_table で各ユーザーのノードを作成し、connections_table の各行に基づいて作成済みのノード間にエッジを追加しました。それは動作しません; connection_table の操作を開始すると、networkx によって新しいノードが作成されます。

nodeindex=0
for user_profile in UserProfile.objects.all():
    sourcetostring=user_profile.full_name3()
    G.add_node(nodeindex, name=sourcetostring)
    nodeindex = nodeindex +1

for user_connection in Connection.objects.all():
    target_tostring=user_connection.target()
    source_tostring=user_connection.source()
    G.add_edge(sourcetostring, target_tostring, value=1)

data = json_graph.node_link_data(G)

結果:

 {'directed': False,
 'graph': [],
 'links': [{'source': 6, 'target': 7, 'value': 1},
  {'source': 7, 'target': 8, 'value': 1},
  {'source': 7, 'target': 9, 'value': 1},
  {'source': 7, 'target': 10, 'value': 1},
  {'source': 7, 'target': 7, 'value': 1}],
 'multigraph': False,
 'nodes': [{'id': 0, 'name': u'raymondkalonji'},
  {'id': 1, 'name': u'raykaeng'},
  {'id': 2, 'name': u'raymondkalonji2'},
  {'id': 3, 'name': u'tester1cet'},
  {'id': 4, 'name': u'tester2cet'},
  {'id': 5, 'name': u'tester3cet'},
  {'id': u'tester2cet'},
  {'id': u'tester3cet'},
  {'id': u'tester1cet'},
  {'id': u'raykaeng'},
  {'id': u'raymondkalonji2'}]}

繰り返されるノードを削除するにはどうすればよいですか?

4

1 に答える 1

4

user_connection.target()関数とuser_connection.source()関数が ID ではなくノード名を返すため、ノードが繰り返される可能性があります。を呼び出すとadd_edge、エンドポイントがグラフに存在しない場合は作成されます。これにより、重複が発生する理由が説明されます。

次のコードは機能するはずです。

for user_profile in UserProfile.objects.all():
    source = user_profile.full_name3()
    G.add_node(source, name=source)

for user_connection in Connection.objects.all():
    target = user_connection.target()
    source = user_connection.source()
    G.add_edge(source, target, value=1)

data = json_graph.node_link_data(G)

dataまた、適切にフォーマットされた json 文字列が必要な場合は、オブジェクトを json にダンプする必要があることに注意してください。次のようにしてそれを行うことができます。

import json
json.dumps(data)                  # get the string representation
json.dump(data, 'somefile.json')  # write to file
于 2013-07-07T21:22:17.123 に答える