當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。