图的性质
距离(distance) :两点之间最短路径。
最短路径
无权图:一个顶点到另一个顶点所经过的边数最少的那条路径。
有权图:带权长度最短,所经过的边的权值之和为该路径的带权路径长度。
直径(diameter) :所有节点对之间的最短路径的最大值。
子图(subgraph) :节点集和边集分别是某一图的节点集的子集和边集的子集的图。
连通分量(connected component) :无向图的极大连通子图。
连通图(connected graph) :一个图只包含一个连通分量,即其自身 。
聚类系数(Clustering Coefficient):邻域互连紧密度。
网络的聚类系数即平均聚类系数。
案例:求节点的集聚系数的平均值
average_clustering()
import matplotlib.pyplot as plt
import networkx as nx
# 绘制空手道俱乐部图
def draw_karate_club_graph():
# 创建空手道俱乐部图
G = nx.karate_club_graph()
# 显示图的类型
print(type(G))
# 绘制图,并显示节点标签
nx.draw(G, with_labels=True)
plt.show()
return G
def average_clustering_coefficient(G):
# 计算图G的每个节点的聚类系数
avg_cluster_coef = nx.average_clustering(G)
# 保留两位小数
avg_cluster_coef = round(avg_cluster_coef, 2)
# 返回平均聚类系数
return avg_cluster_coef
# 调用函数绘制空手道俱乐部图
G = draw_karate_club_graph()
# 计算并打印空手道俱乐部网络的平均度
avg_cluster_coef = average_clustering_coefficient(G)
print("空手道俱乐部网络平均聚类系数:{}".format(avg_cluster_coef))
<class 'networkx.classes.graph.Graph'>
空手道俱乐部网络平均聚类系数:0.57
接近中心性(closeness centrality):该节点与图中所有其他节点之间的最短路径长度之和的倒数
案例:求接近中心度
import matplotlib.pyplot as plt
import networkx as nx
# 绘制空手道俱乐部图
def draw_karate_club_graph():
# 创建空手道俱乐部图
G = nx.karate_club_graph()
# 绘制图,并显示节点标签
nx.draw(G, with_labels=True)
plt.show()
return G
def closeness_centrality(G, node=5):
path_length_total = 0
for path in list(nx.single_source_shortest_path(G, node).values())[1:]:
path_length_total += len(path) - 1
closeness = 1 / path_length_total
closeness = round(closeness, 2)
return closeness
node = 5
# 调用函数绘制空手道俱乐部图
G = draw_karate_club_graph()
closeness = closeness_centrality(G, node=node)
print("接近中心度 {:.2f}".format(closeness))
closeness = nx.closeness_centrality(G, node)
print("接近中心度(归一){:.2f}".format(closeness))
接近中心度 0.01
接近中心度(归一)0.38