(1)读取网络

def load_graph(file_path):
    with open(file_path, "r") as fd:
        data = fd.readlines()
    # 分离出标题和数据行,如果没有标题,用#号注释掉下面这两行)
    title = data[0]
    data = data[1:]
    # 从数据中提取边,建立一个空的有向图G
    edges = [it.strip().strip(",").split(",")[:2] for it in data]
    G = nx.DiGraph()
    G.add_edges_from(edges)
    return G

(2)各种指标

nx.degree(G)           # 计算节点的度。
计算图的密度,其值为边数m除以图中可能边数(即n(n-1)/2)
nx.clustering(G)       # 网络节点的聚类系数。计算公式为:节点u的两个邻居节点间的边数除以((d(u)(d(u)-1)/2)。
nx.degree_centrality(G)    # 节点度中心系数。通过节点的度表示节点在图中的重要性,默认情况下会进行归一化,其值表达为节点度d(u)除以n-1(其中n-1就是归一化使用的常量)。这里由于可能存在循环,所以该值可能大于1.

 nx.closeness_centrality(G)     # 节点距离中心系数。通过距离来表示节点在图中的重要性,一般是指节点到其他节点的平均路径的倒数,这里还乘以了n-1。该值越大表示节点到其他节点的距离越近,即中心性越高。

 nx.betweenness_centrality(G)    # 节点介数中心系数。在无向图中,该值表示为节点作占最短路径的个数除以((n-1)(n-2)/2);在有向图中,该值表达为节点作占最短路径个数除以((n-1)(n-2))。

 nx.transitivity(G)        # 图或网络的传递性。即图或网络中,认识同一个节点的两个节点也可能认识双方,计算公式为3*图中三角形的个数/三元组个数(该三元组个数是有公共顶点的边对数,这样就好数了)。nx.diameter(G)        # 网络直径’
nx.average_shortest_path_length(G)    # 网络最短路径
def graph_index(G):
    # G = nx.random_graphs.barabasi_albert_graph(1000, 3)  # 生成一个n=1000,m=3的BA无标度网络
    print("节点总数:", G.number_of_nodes())
    print("边总数:", G.number_of_edges())
    print("平均聚类系数(average clustering): ", nx.average_clustering(G))
    print("网络传递性(transitivity): ", nx.transitivity(G))
    print("网络直径(diameter): ", nx.diameter(G))
    print("平均最短路径(average shortest path length): ", nx.average_shortest_path_length(G))


    degree_centrality = nx.degree_centrality(G)
    closeness_centrality = closeness_centrality.values()
    betweenness_centrality = betweenness_centrality.values()
    print("平均度中心性(degree centrality): ", np.average(degree_centrality.values()))
    print("平均距离中心性(closeness centrality): ", np.average(closeness_centrality.values()))
    print("平均介数中心性(betweenness centrality): ", np.average(betweenness_centrality.values()))
    # NetworkX 还提供了常用的图论经典算法,例如DFS、BFS、最短路、最小生成树、最大流等等
    # path = nx.all_pairs_shortest_path(G)  # 调用多源最短路径算法,计算图G所有节点间的最短路径
    # print(path[0][2])  # 输出节点0、2之间的最短路径序列: [0, 1, 2]

(3)更多分析算法

中文教程:https://www.osgeo.cn/networkx/reference/algorithms/index.html