微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

我想首先获得每个边列表 0 和 1 的三角形总数。

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

结果格式可以是字典、列表或熊猫数据框。

提前致谢!

解决方法

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

import networkx as nx
dat = {'0': [[0,2],[1,[3,4],[5,6]],'1': [[1,6],[2,[0,3],4]],# adding a graph with two triangles
       '2': [[0,1],0],[4,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,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}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。