python-igraph API 参考

python-igraph 中所有类、函数和方法的列表

模块文档

未归档

函数 _community_edge_betweenness 基于网络中边的介数的社区结构。
函数 _community_fastgreedy 基于模块化贪婪优化的社区结构。
函数 _community_infomap 根据 Martin Rosvall 和 Carl T. Bergstrom 的 Infomap 方法查找网络的社区结构。
函数 _community_label_propagation 根据 Raghavan 等人的标签传播方法查找图的社区结构。
函数 _community_leading_eigenvector 纽曼的领先特征向量法,用于检测社区结构。
函数 _community_leading_eigenvector_naive 纽曼特征向量社区结构检测的朴素实现。
函数 _community_leiden 使用 Traag、van Eck 和 Waltman 的 Leiden 算法查找图的社区结构。
函数 _community_multilevel 基于 Blondel 等人的多层算法的社区结构。
函数 _community_optimal_modularity 计算图的最佳模块化分数和相应的社区结构。
函数 _community_spinglass 根据 Reichardt & Bornholdt 的自旋玻璃社区检测方法查找图的社区结构。
函数 _community_walktrap Latapy & Pons 的社区检测算法,基于随机游走。
函数 _k_core 返回图的一些 k 核。
函数 _modularity 计算图相对于给定聚类的模块化分数。
def _community_edge_betweenness(graph, clusters=None, directed=True, weights=None):

基于网络中边的介数的社区结构。

其思路是,连接两个社区的边的介数通常很高,因为分离社区中节点之间的许多最短路径都经过它们。 因此,我们逐渐删除介数最高的边,并在每次删除后重新计算介数。 这样,网络迟早会分解成独立的组件。 聚类的结果将由树状图表示。

参数
未归档
clusters我们希望看到的聚类数量。这实际上定义了我们“切割”树状图以获得顶点成员向量的“级别”。如果None,树状图在最大化模块度的级别上被切割,如果图是未加权的; 否则,树状图在单个集群处被切割(因为如果不是所有权重都相等,则基于模块度的集群计数选择对于此方法没有意义)。
有向是否应考虑边的方向性。
weights边属性的名称或包含边权重的列表。
返回值
一个 VertexDendrogram 对象,最初在最大模块度或所需的集群数量处被切割。
def _community_fastgreedy(graph, weights=None):

基于模块化贪婪优化的社区结构。

该算法以贪婪地最大化图的模块度分数的方式将各个节点合并到社区中。 可以证明,如果没有合并可以增加当前的模块度分数,则可以停止该算法,因为无法实现进一步的增加。

据说此算法在稀疏图上几乎以线性时间运行。

参数
未归档
weights边属性名称或包含边权重的列表
返回值
一个适当的 VertexDendrogram 对象。
未知字段:newfield
ref参考
未知字段:ref
A Clauset、MEJ Newman 和 C Moore:在非常大的网络中查找社区结构。Phys Rev E 70, 066111 (2004)。
def _community_infomap(graph, edge_weights=None, vertex_weights=None, trials=10):

根据 Martin Rosvall 和 Carl T. Bergstrom 的 Infomap 方法查找网络的社区结构。

参数
未归档
edge_weights边属性的名称或包含边权重的列表。
vertex_weights顶点属性的名称或包含顶点权重的列表。
trials对网络进行分区的尝试次数。
返回值
一个适当的 VertexClustering 对象,带有一个额外的属性codelength的额外属性,该属性存储由算法确定的代码长度。
未知字段:newfield
ref参考
未知字段:ref
M. Rosvall 和 C. T. Bergstrom:信息流图揭示了复杂网络中的社区结构,PNAS 105, 1118 (2008)。 http://dx.doi.org/10.1073/pnas.0706851105, http://arxiv.org/abs/0707.0609.
M. Rosvall, D. Axelsson, 和 C. T. Bergstrom:地图方程,Eur. Phys. J. Special Topics 178, 13 (2009)。 http://dx.doi.org/10.1140/epjst/e2010-01179-1, http://arxiv.org/abs/0906.1405.
def _community_label_propagation(graph, weights=None, initial=None, fixed=None):

根据 Raghavan 等人的标签传播方法查找图的社区结构。

最初,每个顶点都被分配一个不同的标签。 之后,每个顶点在每次迭代中选择其邻域中的主要标签。 平局随机打破,并且每次迭代之前,顶点更新的顺序都会被随机化。 当顶点达成共识时,算法结束。

请注意,由于平局是随机打破的,因此不能保证算法每次运行后都返回相同的社区结构。 事实上,它们经常不同。 请参阅 Raghavan 等人的论文,了解如何提出聚合的社区结构。

另请注意,社区_标签_(数字)没有语义意义,igraph 可以自由地重新编号社区。 如果你使用固定标签,igraph 仍然可以重新编号社区,但是共社区成员资格约束将被遵守:如果你有两个带有固定标签的顶点属于同一个社区,它们仍然会在最后处于同一个社区。 类似地,如果你有两个带有固定标签的顶点属于不同的社区,它们仍然会在最后处于不同的社区。

参数
未归档
weights边属性的名称或包含边权重的列表
initial顶点属性的名称或包含初始顶点标签的列表。 标签由从零到 n − 1 的整数标识,其中 n 是顶点的数量。 此向量中也可能存在负数,它们表示未标记的顶点。
fixed每个顶点的布尔值列表。True对应于算法期间其标签不应更改的顶点。 只有在也给出初始标签的情况下才有意义。 未标记的顶点无法固定。 它也可能是顶点属性的名称; 每个属性值将被解释为布尔值。
返回值
一个适当的 VertexClustering 对象。
未知字段:newfield
ref参考
未知字段:ref
Raghavan, U.N. and Albert, R. and Kumara, S. 近线性时间算法,用于检测大规模网络中的社区结构。 Phys Rev E 76:036106, 2007. http://arxiv.org/abs/0709.2938.
def _community_leading_eigenvector(graph, clusters=None, weights=None, arpack_options=None):

纽曼的领先特征向量法,用于检测社区结构。

这是递归、分裂算法的正确实现:每次拆分都是通过最大化关于原始网络的模块性来完成的。

参数
未归档
clusters所需的社区数量。如果None,则算法尝试尽可能多地拆分。请注意,如果前导特征向量的符号都相同,则该算法不会进一步拆分社区,因此发现的社区的实际数量可能少于所需的数量。
weights边属性的名称或包含边权重的列表。
arpack_options用于微调 ARPACK 特征向量计算的 ARPACKOptions 对象。如果省略,将使用名为arpack_options
返回值
一个适当的 VertexClustering 对象。
未知字段:newfield
ref参考
未知字段:ref
MEJ Newman:使用矩阵的特征向量在网络中寻找社区结构,arXiv:physics/0605087
def _community_leading_eigenvector_naive(graph, clusters=None, return_merges=False):

纽曼特征向量社区结构检测的朴素实现。

此函数根据模块度矩阵的 leading 特征向量将网络分成两个组件,然后通过将社区拆分为单个网络来递归地执行给定的步数。 然而,这不是正确的方法,请参阅参考资料中的解释。 考虑使用正确的 Graph.community_leading_eigenvector 方法。

参数
未归档
clusters所需的社区数量。如果None,则算法尝试尽可能多地拆分。请注意,如果前导特征向量的符号都相同,则该算法不会进一步拆分社区,因此发现的社区的实际数量可能少于所需的数量。
return_merges返回的对象是否应该是一个树状图而不是单个聚类。
返回值
一个适当的 VertexClusteringVertexDendrogram 对象。
未知字段:newfield
ref参考
未知字段:ref
MEJ Newman:使用矩阵的特征向量在网络中寻找社区结构,arXiv:physics/0605087
def _community_leiden(graph, objective_function='CPM', weights=None, resolution_parameter=1.0, beta=0.01, initial_membership=None, n_iterations=2, node_weights=None):

使用 Traag、van Eck 和 Waltman 的 Leiden 算法查找图的社区结构。

参数
未归档
objective_function是使用恒定 Potts 模型 (CPM) 还是模块性。必须是"CPM"之一或"modularity".
weights要使用的边权重。 可以是序列或可迭代对象,甚至可以是边属性名称。
resolution_parameter要使用的分辨率参数。较高的分辨率会导致更多较小的社区,而较低的分辨率会导致较少较大的社区。
beta影响 Leiden 算法中随机性的参数。这仅影响算法的优化步骤。
initial_membership如果提供,Leiden 算法将尝试改进此提供的成员资格。如果没有提供参数,则算法只从单例分区开始。
n_iterations迭代 Leiden 算法的次数。每次迭代都可能进一步改进分区。使用负数的迭代次数将运行直到遇到稳定的迭代(即,在该迭代期间质量没有提高)。
node_weightsLeiden 算法中使用的节点权重。如果未提供,将根据您是否要使用 CPM 或模块化自动确定。如果您确实提供了此参数,请确保您了解自己在做什么。
返回值
一个适当的 VertexClustering 对象。
未知字段:newfield
ref参考
未知字段:ref
Traag, V. A., Waltman, L., & van Eck, N. J. (2019). 从 Louvain 到 Leiden:保证连接良好的社区。 科学报告,9(1), 5233. doi: 10.1038/s41598-019-41695-z
def _community_multilevel(graph, weights=None, return_levels=False):

基于 Blondel 等人的多层算法的社区结构。

这是一种自下而上的算法:最初,每个顶点都属于一个单独的社区,并且顶点以最大化顶点对整体模块度分数的局部贡献的方式在社区之间迭代移动。 当达成共识时(即,没有一次移动会增加模块度分数),原始图中的每个社区都缩小到单个顶点(同时保持相邻边的总权重),并且该过程在下一层继续。 当在将社区缩小到顶点后不再可能增加模块度时,该算法停止。

据说此算法在稀疏图上几乎以线性时间运行。

参数
未归档
weights边属性名称或包含边权重的列表
return_levels如果True,每个级别的社群都将以列表形式返回。如果False,则仅返回具有最佳模块化的社群结构。
返回值
VertexClustering 对象列表,每个级别对应一个对象(如果return_levelsTrue),或者对应于最佳模块度的 VertexClustering
未知字段:newfield
ref参考
未知字段:ref
VD Blondel, J-L Guillaume, R Lambiotte 和 E Lefebvre:大型网络中社区层次结构的快速展开,J Stat Mech P10008 (2008), http://arxiv.org/abs/0803.0476
def _community_optimal_modularity(graph, *args, **kwds):

计算图的最佳模块化分数和相应的社区结构。

此函数使用 GNU 线性规划工具包来解决大型整数优化问题,以便找到最佳模块度分数和相应的社区结构,因此它不太可能适用于大于几个(小于一百个)顶点的图。 如果你有这么大的图,请考虑使用一种启发式方法。

返回值
计算出的成员向量和元组中相应的模块化。
def _community_spinglass(graph, *args, **kwds):

根据 Reichardt & Bornholdt 的自旋玻璃社区检测方法查找图的社区结构。

参数
未归档
*args未归档
**kwds未归档
weights要使用的边权重。 可以是序列或可迭代对象,甚至可以是边属性名称。
spins整数,要使用的自旋数。这是社区数的上限。在这里提供(合理)大的数字没有问题,在这种情况下,某些自旋状态将不会被填充。
parupdate是否并行(同步)更新顶点的自旋
start_temp起始温度
stop_temp停止温度
cool_fact模拟退火的冷却因子
update_rule指定模拟的零模型。可能的值为"config"(具有与输入图相同的顶点度的随机图)或"simple"(具有相同数量边的随机图)
gamma算法的 gamma 参数,指定社区内存在边和缺失边之间的重要性平衡。默认值 1.0 为两者分配相同的重要性。
implementation当前 igraph 包含 spinglass 社群检测算法的两个实现。更快的原始实现是默认设置。另一个实现能够考虑负权重,可以通过设置来选择implementation"neg"
lambda_算法的 lambda 参数,它指定了社区内存在和缺失的负加权边的重要性之间的平衡。 lambda 值越小,社区内的负连接性越小。 如果参数为零,则该算法会简化为图形着色算法,使用自旋数作为颜色。 如果使用原始实现,则此参数将被忽略。 请注意参数名称末尾的下划线; 这是因为 lambda 是 Python 中的保留关键字。
返回值
一个适当的 VertexClustering 对象。
未知字段:newfield
ref参考
未知字段:ref
Reichardt J 和 Bornholdt S:社区检测的统计力学。 Phys Rev E 74:016110 (2006)。 http://arxiv.org/abs/cond-mat/0603718
Traag VA 和 Bruggeman J:具有正负链接的网络中的社区检测。 Phys Rev E 80:036115 (2009)。 http://arxiv.org/abs/0811.2329
def _community_walktrap(graph, weights=None, steps=4):

Latapy & Pons 的社区检测算法,基于随机游走。

该算法的基本思想是,短随机游走往往会停留在同一个社群中。聚类的结果将表示为树状图。

参数
未归档
weights边属性的名称或包含边权重的列表
steps要执行的随机游走的长度
返回值
一个 VertexDendrogram 对象,最初在最大模块度处被切割。
未知字段:newfield
ref参考
未知字段:ref
Pascal Pons, Matthieu Latapy:使用随机游走计算大型网络中的社区,http://arxiv.org/abs/physics/0512106
def _k_core(graph, *args):

返回图的一些 k 核。

该方法接受任意数量的参数,这些参数表示要返回的 k-cores 的所需索引。 参数也可以是列表或元组。 如果仅给出一个整数参数,则结果是单个 Graph 对象,否则结果是 Graph 对象的列表,这些对象表示按指定参数顺序排列的所需 k-cores。 如果没有给出任何参数,则按 k 的递增顺序返回所有 k-cores。

def _modularity(self, membership, weights=None):

计算图相对于给定聚类的模块化分数。

图的模块度 w.r.t. 一些划分衡量了划分的好坏,或者不同顶点类型彼此分离的程度。 它被定义为 Q = 1 ⁄ (2m)*sum(Aij − ki*kj ⁄ (2m)delta(ci, cj), i, j)m 是边的数量,Aij 是第 A 个邻接矩阵中第 i 行和第 j 列的元素,ki 是节点 i 的度,kj 是节点 j 的度,并且 Cicj是两个顶点的类型(ij)。 delta(x, y)x = y 时为 1,否则为 0。

如果给出了边权重,则模块度的定义修改如下:Aij 变为相应边的权重,ki 是与顶点 i 相邻的边的总权重,kj 是与顶点 j 相邻的边的总权重,并且 m 是图中的总边权重。

参数
self未归档
membership成员资格列表或 VertexClustering 对象
weights可选的边权重或None如果所有边的权重相等。也允许属性名称。
返回值
模块度得分
未知字段:newfield
ref参考
未知字段:ref
MEJ Newman 和 M Girvan: Finding and evaluating community structure in networks. Phys Rev E 69 026113, 2004.