当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX snap_aggregation用法及代码示例


本文简要介绍 networkx.algorithms.summarization.snap_aggregation 的用法。

用法:

snap_aggregation(G, node_attributes, edge_attributes=(), prefix='Supernode-', supernode_attribute='group', superedge_attribute='types')

基于属性和连通性创建摘要图。

此函数使用通过对属性和成对边分组节点 (SNAP) 算法进行汇总,通过按节点属性及其边属性将节点分组到汇总图中的超节点来汇总给定图。不应将此名称 SNAP 与斯坦福网络分析项目 (SNAP) 混淆。

这是该算法如何工作的高级视图:

  1. 按节点属性值对节点进行分组。

2)迭代分裂组,直到每个组中的所有节点都具有到同一组中的节点的边。也就是说,直到所有组的成员节点与其他组的边都是同质的。例如,如果 A 组中的所有节点只与 B 组中的节点有边,则该组是同构的,不需要分裂。如果组 B 中的所有节点都与组 {A, C} 中的节点有边,但有些节点也与 B 中的其他节点有边,则组 B 不是齐次的,需要拆分为具有 {A, C} 边的组和一组具有 {A, B, C} 边的节点。这样,摘要图的查看者可以假设组中的所有节点都具有完全相同的节点属性和完全相同的边。

3) 构建输出汇总图,其中组由super-nodes 表示。边表示在每个相应组中的所有节点之间共享的边。

SNAP 摘要图可用于可视化太大而无法显示或直观分析的图,或根据图中指定的节点和/或边属性有效地识别具有与其他相似节点集相似连接模式的相似节点集.

参数

G: graph

Networkx Graph 待总结

edge_attributes: iterable, optional

总结过程中考虑的边属性的可迭代。如果提供,将使用图中找到的属性值的唯一组合来确定图中的边类型。如果未提供,则所有边都被视为同一类型。

prefix: str

用于在摘要图中表示超级节点的前缀。默认为“超级节点-”。

supernode_attribute: str

记录节点的超级节点分组的节点属性。默认为‘group’。

superedge_attribute: str

用于记录多条边的边类型的边属性。默认为‘types’。

返回

networkx.Graph:摘要图

注意

生成的摘要图称为最大 Attribute-edge 兼容 (AR-compatible) 分组。根据[1],AR-compatible分组意味着每组中的所有节点与同一组中的一个或多个节点具有相同的精确节点属性值以及相同的精确边和边类型。最大AR-compatible分组是具有最小基数的分组。

AR-compatible 分组是任何 SNAP 算法提供的最详细的分组。

参考

1

Y. Tian, R. A. Hankins, and J. M. Patel. Efficient aggregation for graph summarization. In Proc. 2008 ACM-SIGMOD Int. Conf. Management of Data (SIGMOD’08), pages 567-580, Vancouver, Canada, June 2008.

例子

SNAP 聚合获取图并在用户提供的节点和边属性的上下文中对其进行汇总,以便查看者可以更轻松地提取和分析图表示的信息

>>> nodes = {
...     "A": dict(color="Red"),
...     "B": dict(color="Red"),
...     "C": dict(color="Red"),
...     "D": dict(color="Red"),
...     "E": dict(color="Blue"),
...     "F": dict(color="Blue"),
... }
>>> edges = [
...     ("A", "E", "Strong"),
...     ("B", "F", "Strong"),
...     ("C", "E", "Weak"),
...     ("D", "F", "Weak"),
... ]
>>> G = nx.Graph()
>>> for node in nodes:
...     attributes = nodes[node]
...     G.add_node(node, **attributes)
...
>>> for source, target, type in edges:
...     G.add_edge(source, target, type=type)
...
>>> node_attributes = ('color', )
>>> edge_attributes = ('type', )
>>> summary_graph = nx.snap_aggregation(G, node_attributes=node_attributes, edge_attributes=edge_attributes)

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.summarization.snap_aggregation。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。