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)构建输出汇总图,其中组由超级节点表示。边表示在每个相应组中的所有节点之间共享的边。

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

参数
G: graph

要汇总的Networkx图表

edge_attributes: iterable, optional

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

prefix: str

用于表示汇总图中的超节点的前缀。默认为‘Supernode-’。

supernode_attribute: str

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

superedge_attribute: str

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

返回
网络x.Graph:摘要图

笔记

生成的汇总图称为最大属性-边兼容(AR-Compatible)分组。根据 [1], AR兼容分组意味着每个组中的所有节点对同一组中的一个或多个节点具有相同的完全相同的节点属性值以及相同的边和边类型。最大AR相容群是基数最小的群。

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

工具书类

1

首页--期刊主要分类--期刊细介绍--期刊题录与文摘--文摘内容用于图形摘要的高效聚合。正在进行中。2008 ACM-SIGMOD接口电话会议数据管理(SIGMOD‘08),第567-580页,加拿大温哥华,2008年6月。

实例

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

>>> 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)