Networkx入门指南——图分析之聚类系数

  Networkx通过封装和集成丰富的图论算法来支持用户自由地进行图分析(Graph Analysis)。下面一些在风控和反欺诈场景下比较常见的集中算法进行演示,具体的图算法可参考networkx的官方文档。

聚类系数

  图中的聚类性质主要通过三角形(triangle)和三元组(triplet)的数量及他们直接的比例来衡量的,具体算法可以参考直观理解:图算法之Triangle Count和Clustering Coefficient,本文只演示如何通过networkx去得到相应的结果。Networkx中与聚类相关的方法有如下几个:

方法名称 用途描述
triangles(G[, nodes]) 计算图G中三角形的个数
transitivity(G) 计算图的传递性,即图G中所有可能三角形的比例
clustering(G[, nodes, weight]) 计算节点的聚类系数
average_clustering(G[, nodes, weight, ...]) 计算图G的平均聚类系数
square_clustering(G[, nodes]) 计算节点的平方聚类系数
generalized_degree(G[, nodes]) 计算节点的广义度

  下面直接开始coding,注释很详尽,应该都能看得懂。

import networkx as nx
import networkx.algorithms as algos
import matplotlib.pyplot as plt

#创建一个watts_strogatz小世界网络图
G = nx.watts_strogatz_graph(10, 4, 0.3)
nx.draw(G, with_labels = True)

生成如下图所示的图G

#展示顶点0的三角形计数
print(nx.triangles(G, 0))
#result: 5

#展示图中所有顶点的三角形计数
print(nx.triangles(G))
#result: {0: 5, 1: 5, 2: 3, 3: 1, 4: 2, 5: 3, 6: 3, 7: 3, 8: 6, 9: 5}

#计算图的传递性
print(nx.transitivity(G))
#result: 0.5625

#计算顶点0的聚类系数
print(nx.clustering(G, 0))
#result: 0.8333333333333334

#计算图G中每个顶点的聚类系数
print(nx.clustering(G))
#result: {0: 0.8333333333333334, 1: 0.8333333333333334, 2: 0.5, 3: 1.0, 4: 0.6666666666666666, 
#        5: 0.5, 6: 0.3, 7: 0.5, 8: 0.6, 9: 0.5}

#计算图G的平局聚类系数
print(nx.average_clustering(G))
#result: 0.6233333333333333

#计算顶点0的平方聚类系数
print(nx.square_clustering(G, 0))
#result: 0.45454545454545453

#计算图G中每个顶点的平方聚类系数
nx.square_clustering(G)
#result: {0: 0.45454545454545453, 1: 0.45454545454545453, 2: 0.38461538461538464, 3: 0.5,
# 4: 0.2, 5: 0.14285714285714285, 6: 0.17391304347826086, 7: 0.18181818181818182,
# 8: 0.3333333333333333,9: 0.28888888888888886}

#计算顶点0的广义度
print(nx.generalized_degree(G, 0))
#result: Counter({3: 2, 2: 2})

#计算图中所有顶点的广义度
print(nx.generalized_degree(G))
#result: {0: Counter({3: 2, 2: 2}), 1: Counter({3: 2, 2: 2}), 2: Counter({2: 3, 0: 1}), 3: Counter({1: 2}), 4: Counter({1: 2, 2: 1}), 5: Counter({1: 2, 2: 2}), 6: Counter({1: 2, 2: 2, 0: 1}), 7: Counter({1: 2, 2: 2}), 8: Counter({3: 3, 2: 1, 1: 1}), 9: Counter({2: 3, 1: 1, 3: 1})}

你可能感兴趣的:(Networkx入门指南——图分析之聚类系数)