0
理論上NetworkXを使ってソーシャルグラフを作成しようとしていますが(私が考えるように)すべてが良い仕事ですが、実際には間違っています。 このような形式のグループに関する情報があります: members = {'グループ名1':[ユーザー1 ID、ユーザーID 2 ...]、...、 'グループ名N':[ユーザー1 ID、...、ユーザKイド]}たとえば :成果でグループの一般的なユーザーの社会的なグラフ
members={'Group 1' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'Group 2' : [10, 11, 12, 13, 14, 9],
'Group 3':[21,22,23,24] }
私がしたグラフが必要になります。
- 頂点 - 社会グループ
- エッジ - 一般的な加入者の存在を(ユーザID)
- 頂点サイズ - ユーザ数 01頂点間
- の距離 - 一般的な加入者(ユーザーID)
マイコード:
matrix={}
for i in members:
for j in members:
if i!=j:
matrix[i+j]=len(set(members[i]) & set(members[j]))*1.0/min(len(set(members[i])),len(set(members[j])))
max_matrix = max(matrix.values())
min_matrix = min(matrix.values())
for i in matrix:
matrix[i] = (matrix[i] - min_matrix)/(max_matrix - min_matrix)
g = networkx.Graph(directed=False)
for i in members:
for j in members:
if i != j:
g.add_edge(i, j, weight=matrix[i+j])
members_count = {x:len(members[x]) for x in members}
max_value = max(members_count.values()) * 1.0
size = []
max_size = 900
min_size = 100
for node in g.nodes():
size.append(((members_count[node]/max_value)*max_size + min_size)*10)
import matplotlib.pyplot as plt
pos=networkx.spring_layout(g)
plt.figure(figsize=(20,20))
networkx.draw_networkx(g, pos, node_size=size, width=0.5, font_size=8)
plt.axis('off')
plt.show()
しかし、共通のIDを持っていないグループのために描いたエッジ、なぜ私が理解することはできません。
また、あなたがやろうとしているのと同じように役割を果たしているので、二部構成の投影も見てください。 – Joel