簡體   English   中英

Networkx-使用節點屬性的子圖

[英]Networkx - Subgraphs using node attributes

我有一組數據,其中節點具有一個屬性,這些屬性顯示它們所屬的團隊的名稱。 我想計算出a)整個網絡的統計數據,然后b)每個團隊的統計數據,比較他們的連通性等。(比如說,我是在比較誰向誰發送電子郵件,從而比較團隊的聯系程度。)是我的示例代碼:

ST = nx.Graph()
ST.add_node('A',role = 'sales1')
ST.add_node('B',role = 'sales1')
ST.add_node('C',role = 'sales1')
ST.add_node('D',role = 'sales1')
ST.add_node('E',role = 'sales2')
ST.add_node('F',role = 'sales2')
ST.add_node('G',role = 'sales2')
ST.add_node('H',role = 'sales2')

ST.add_edges_from([('A','B'),
                   ('A','C'),
                   ('A','D'),
                   ('B','D'),
                   ('B','C'),
                   ('C','D'),
                   ('E','F'),
                   ('E','G'),
                   ('E','H'),
                   ('F','H'),
                   ('G','H'),
                   ('A','E'),
                   ('G','D')])

我知道我可以形成如下子圖:

H = ST.subgraph(['A','B','C','D'])

是否有通過引用node屬性設置節點的簡便方法?

您可以使用itertools.groupby

from itertools import groupby

# Sort the nodes by their role (this is required for the groupby to work)
sorted_by_role = sorted(ST.nodes(data=True), key=lambda node_data: node_data[1]["role"])
# Group objects with same role together
grouped = groupby(sorted_by_role, key=lambda node_data: node_data[1]["role"])

subgraphs = dict()
for key, group in grouped:
     nodes_in_group, _ = zip(*list(group))  # We don't care about the data here, only the node names
     subgraphs[key] = ST.subgraph(nodes_in_group)

現在, subgraphs字典包含圖中存在的每個不同角色的子圖。 這適用於任意數量的角色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM