如何使用 Python 获取存储在字典中的边列表中节点的三角形计数和局部聚类系数?
How to get triangle count and local clustering coefficient of nodes in edge lists stored in dictionary using 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 中的每个节点,我想获得每个节点所属的三角形的数量及其局部聚类系数。
结果格式可以是字典、列表或pandas数据框。
提前致谢!
在您提供的数据中,您的数据实际上没有任何三角形(三个节点上的完整子图),但这里有一个带有附加边列表的示例。请注意,networkx.from_edgelist
函数接受边缘列表作为元组列表而不是列表列表,因此我不得不更改它们。 networkx.triangles
函数 returns 一个由每个节点键入的字典,提供使用该节点的三角形的计数。我们可以将该字典的值相加并除以三来确定三角形的实际数量 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}
我有一个字典,其中包含许多具有以下格式的边缘列表:
{'0': [[0, 2],
[1, 2],
[3, 4],
[5, 6]],
'1': [[1, 6],
[2, 6],
[3, 4],
[0, 3],
[2, 4]]}
我想先得到每个边列表 0 和 1 的三角形总数。
然后,对于边列表 0 和 1 中的每个节点,我想获得每个节点所属的三角形的数量及其局部聚类系数。
结果格式可以是字典、列表或pandas数据框。
提前致谢!
在您提供的数据中,您的数据实际上没有任何三角形(三个节点上的完整子图),但这里有一个带有附加边列表的示例。请注意,networkx.from_edgelist
函数接受边缘列表作为元组列表而不是列表列表,因此我不得不更改它们。 networkx.triangles
函数 returns 一个由每个节点键入的字典,提供使用该节点的三角形的计数。我们可以将该字典的值相加并除以三来确定三角形的实际数量 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}