[英]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.