【Python】networkxネットワーク分析に関するいくつかの指標


(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の2つの隣接ノード間の辺数を((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)#図またはネットワークの伝達性.すなわち、図またはネットワークでは、同じノードを認識する2つのノードが両方を認識する可能性もあり、計算式は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