1. 结构洞理论
结构洞理论最早由美国社会学家Burt提出。结构洞可以理解为两个未连接节点之间的间隙,当两个节点通过第三个节点连接时,该间隙被填充,并为纽带节点创造了重要的优势。
Burt提出使用约束系数来识别结构洞节点,节点
i
i
i的结构洞约束系数越小,该节点越容易成为结构洞节点,相应的节点作用就越大。约束系数的定义如下:
C
i
=
∑
j
∈
Γ
(
i
)
(
p
i
j
+
∑
q
p
i
q
⋅
p
q
j
)
2
,
q
≠
i
,
j
C_{i}=\sum_{ j\in \Gamma(i)}(p_{ij}+\sum_{q}p_{iq}\cdot p_{qj})^{2},q\neq i,j
Ci=j∈Γ(i)∑(pij+q∑piq⋅pqj)2,q=i,j其中节点
q
q
q代表节点
v
i
v_{i}
vi和节点
v
j
v_{j}
vj的共同邻居集合。
p
i
j
=
a
i
j
/
∑
j
∈
Γ
(
i
)
a
i
j
p_{ij}=a_{ij}/\sum_{j\in \Gamma(i)}a_{ij}
pij=aij/∑j∈Γ(i)aij代表节点
v
i
v_{i}
vi花费在节点
v
j
v_{j}
vj上的精力。
a
i
j
a_{ij}
aij为对网络对应的邻接矩阵的元素。
2. Python实现约束系数计算
import numpy as np
import networkx as nx
G=nx.Graph()
G.add_edges_from([(10,9),(11,9),(12,9),(9,6),(6,1),(6,7),
(1,7),(1,2),(1,5),(5,8),(5,7),(7,2),(7,4),
(7,3),(2,4)])
nx.draw(G,with_labels=True,alpha=0.8,node_size=500)
#得到邻接矩阵
A=np.array(nx.adjacency_matrix(G,nodelist=range(1,13)).todense())
#转化为p_ij矩阵。p_ij代表节点i花费在节点j上的精力。
A=A/A.sum(axis=0).reshape(-1,1)
C=[]#保存各个节点的约束系数
for i in range(A.shape[0]):
#知道当前节点的邻居节点
n_idx=np.where(A[i]>0)[0]
c_i=0
for j in n_idx:
#节点i和节点j的共同邻居
com_n_idx=np.where(np.logical_and(A[i]>0,A[j]>0))[0]
tmp=sum([A[i][k]*A[k][j] for k in com_n_idx])+A[i][j]
c_i+=tmp*tmp
C.append(c_i)
复杂网络结构图
其中各个节点的约束系数如下:
1:0.505
2:0.643
3:1.000
4:0.785
5:0.436
6:0.436
7:0.360
8:1.000
9:0.250
10:1.000
11:1.000
12:1.000