clustering#

clustering(G, nodes=None, weight=None)[source]#

计算节点的聚类系数。

对于无权图,节点 \(u\) 的聚类系数是经过该节点的可能三角形的存在的比例,

\[c_u = \frac{2 T(u)}{deg(u)(deg(u)-1)},\]

其中 \(T(u)\) 是经过节点 \(u\) 的三角形数量,\(deg(u)\)\(u\) 的度。

对于加权图,有几种定义聚类系数的方法 [1]。这里使用的是子图边权重的几何平均值 [2]

\[c_u = \frac{1}{deg(u)(deg(u)-1))} \sum_{vw} (\hat{w}_{uv} \hat{w}_{uw} \hat{w}_{vw})^{1/3}.\]

边权重 \(\hat{w}_{uv}\) 通过网络中的最大权重进行归一化 \(\hat{w}_{uv} = w_{uv}/\max(w)\)

如果 \(deg(u) < 2\) ,则 \(c_u\) 的值被赋为 0。

此外,这种加权定义已被推广以支持负边权重 [3]

对于有向图,聚类系数同样定义为所有可能的有向三角形的比例或无权和加权有向图的子图边权重的几何平均值 [4]

\[c_u = \frac{T(u)}{2(deg^{tot}(u)(deg^{tot}(u)-1) - 2deg^{\leftrightarrow}(u))},\]

其中 \(T(u)\) 是经过节点 \(u\) 的有向三角形数量,\(deg^{tot}(u)\)\(u\) 的入度和出度之和,\(deg^{\leftrightarrow}(u)\)\(u\) 的互反度。

Parameters:
G
nodes节点, 节点集合, 或 None (默认=None)

如果是一个单独的节点,返回该节点的三角形数量。 如果是一个可迭代对象,计算这些节点的三角形数量。 如果为 None (默认),计算 G 中所有节点的三角形数量。

weight字符串或 None, 可选 (默认=None)

边属性,持有作为权重的数值。 如果为 None,则每条边的权重为 1。

Returns:
out浮点数, 或字典

指定节点的聚类系数

Notes

自环被忽略。

References

[1]

J. Saramäki, M. Kivelä, J.-P. Onnela, K. Kaski, 和 J. Kertész 对加权复杂网络的聚类系数进行了一般化,Physical Review E, 75 027105 (2007). http://jponnela.com/web_documents/a9.pdf

[2]
    1. Onnela, J. Saramäki, J. Kertész, 和 K. Kaski 对加权复杂网络中的模体强度和一致性进行了研究,Physical Review E, 71(6), 065103 (2005).

[3]
  1. Costantini 和 M. Perugini 对聚类系数进行了有符号相关网络的一般化,PloS one, 9(2), e88669 (2014).

[4]
  1. Fagiolo 对复杂有向网络中的聚类进行了研究,Physical Review E, 76(2), 026107 (2007).

Examples

>>> G = nx.complete_graph(5)
>>> print(nx.clustering(G, 0))
1.0
>>> print(nx.clustering(G))
{0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0}

Additional backends implement this function

graphblas : OpenMP-enabled sparse linear algebra backend.