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