使用networkx查找弱关系
问题描述
我正在尝试查找weak ties as defined by Granovetter。到目前为止,我已经尝试使用中心性度量来根据重要性绘制Stanford Facebook network dataset(facebook_combined.txt
)。下图使用了度中心性。我已经用蓝色矩形表示了我希望找到的一些节点("弱纽带")。
Bridges似乎很接近,但并不完全是这样。我应该如何继续查找这些节点?
示例代码:
import networkx as nx
fb = nx.read_edgelist("facebook_combined.txt")
degree_cent_fb = nx.degree_centrality(fb)
pos_fb = nx.spring_layout(fb ,iterations = 1000)
nsize = np.array ([v for v in degree_cent_fb.values ()])
nsize = 500*( nsize - min(nsize))/(max(nsize) - min(nsize))
nodes = nx.draw_networkx_nodes (fb , pos = pos_fb ,
node_size = nsize)
edges = nx.draw_networkx_edges (fb , pos = pos_fb ,
alpha = .1)
以下是使用其他大小调整函数的更多示例图:
相同数据,按中间度中心性调整大小:
和贴近中心性:
和PageRank:
解决方案
请注意,弱连接或桥指的是边,而您要寻找的是节点级别的度量。您可能会对Ron Burt的structural hole概念感兴趣。占据结构漏洞的节点是代理,它们以有限的重叠连接组-听起来就是您要找的。
NetworkX(如果我没记错的话,从2.0版开始)有Burt's constraint measure的实现。伯特说,如果一个节点具有较低的约束,那么它就占据了一个结构洞。1减去节点的约束分数似乎可以很好地突出显示社区之间的节点,尽管并非在所有情况下都是如此。
这里是代码。注意-计算约束需要一些时间!
fb = nx.read_edgelist("facebook_combined.txt")
pos_fb = nx.spring_layout(fb ,iterations = 100)
cons = nx.constraint(fb)
plt.figure(figsize=(15,10))
nsize = np.array ([1-v for v in cons.values()])
nsize = 10**(nsize+1)
nodes = nx.draw_networkx_nodes (fb , pos = pos_fb , node_color=nsize, cmap=plt.cm.coolwarm,
node_size = nsize)
edges = nx.draw_networkx_edges (fb , pos = pos_fb ,
alpha = .1)
plt.axis('off')
相关文章