如何使用Python获取字典中存储的边列表中节点的三角形计数和局部聚类系数?

2024-06-02 06:22:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,其中包含许多具有以下格式的边缘列表:

{'0': [[0, 2],
  [1, 2],
  [3, 4],
  [5, 6]],
 '1': [[1, 6],
  [2, 6],
  [3, 4],
  [0, 3],
  [2, 4]]}

我想首先得到每个边列表0&;的三角形总数;1.

然后,对于边列表中的每个节点0&;1,我想得到每个节点所属的三角形的#及其局部聚类系数

结果格式可以是字典、列表或数据帧

提前谢谢


Tags: 数据列表字典节点格式局部聚类边缘
1条回答
网友
1楼 · 发布于 2024-06-02 06:22:13

在您提供的数据中,您的数据实际上没有任何三角形(三个节点上的完整子图),但下面是一个示例,其中包含一个附加的边列表。注意,networkx.from_edgelist函数接受一个edgelist作为元组列表,而不是列表列表,因此我不得不更改它们。networkx.triangles函数返回由每个节点键入的字典,该字典提供使用此节点的三角形计数。我们可以将该dict的值求和并除以3来确定三角形的实际数目see docs

import networkx as nx
dat = {'0': [[0, 2],[1, 2],
             [3, 4],[5, 6]],
       '1': [[1, 6],[2, 6],
             [3, 4],[0, 3],[2, 4]],
       # adding a graph with two triangles
       '2': [[0,1],[1,2],
             [2,0],[3,4],
             [4,5],[5,3]]}

graphs = {key:nx.from_edgelist([(v[0],v[1]) for v in value]) for key,value in dat.items()}

# count number of triangles per node
node_triangle_counts = {key:nx.triangles(graph) for key,graph in graphs.items()}
print(node_triangle_counts)
# {'0': {0: 0, 2: 0, 1: 0, 3: 0, 4: 0, 5: 0, 6: 0},
#  '1': {1: 0, 6: 0, 2: 0, 3: 0, 4: 0, 0: 0},
#  '2': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1}}

# sum the node counts and divide by three because each triangle is counted for all three nodes in the triangle
num_triangles_per_graph = {key:sum(val_dict.values()) / 3
                           for key,val_dict in node_triangle_counts.items()}

# {'0': 0, '1': 0, '2': 2}

相关问题 更多 >