ウェブサイト検索

Python Networkx を使用したクラスタリング、接続性、その他のグラフ プロパティ


Python NetworkX は、複雑なネットワークやグラフの作成、操作、分析に使用される人気のオープンソース Python ライブラリです。グラフを操作するための幅広いツール、アルゴリズム、関数が提供されており、ネットワーク分析と研究にとって貴重なリソースとなっています。

Python NetworkX を使用すると、有向グラフ、無向グラフ、マルチグラフ (ノード間に複数のエッジがあるグラフ)、重み付きグラフ (エッジの重みがあるグラフ) など、さまざまなタイプのグラフを表現し、操作することができます。また、ノードとエッジを作成、追加し、グラフ上でさまざまな操作を実行するためのシンプルで直感的なインターフェイスも提供します。

NetworkX のインストールとインポート

NetworkX を使用するには、コマンド プロンプトで次のコマンドを実行し、Python パッケージ マネージャー pip を使用して NetworkX をインストールする必要があります。

pip install networkx

NetworkX を Python 環境にインストールしたら、Python スクリプトまたは対話型環境にライブラリをインポートし、以下のコマンドを実行してその機能の使用を開始できます。

import networkx as nx

NetworkX ライブラリは、クラスタリング、接続、その他のグラフ プロパティなどの幅広いプロパティを提供します。この記事でそれらについて詳しく説明します。

クラスタリング係数

クラスタリング係数は、グラフ内のノードがどの程度クラスタ化する傾向があるかを示す尺度です。これは、グラフ内の三角形の存在を定量化します。三角形は、すべて相互に接続された 3 つのノードで構成されます。クラスタリング係数が高いということは、グラフ内のノードが緊密に接続されたクラスターを形成する可能性が高いことを示します。

NetworkX では、average_clustering() 関数を使用してグラフの平均クラスタリング係数を取得するか、clustering() 関数 を使用してクラスタリング係数を計算できます。個々のノードの。

平均クラスタリング係数

NetworkX の average_clustering() 関数は、グラフの平均クラスタリング係数を計算します。グラフ内のすべてのノードにわたる平均クラスタリング係数を表す単一の値を返します。平均クラスタリング係数を計算する式は、各ノードのローカル クラスタリング係数とノード数に基づいています。

この例では、 nx.Graph() 関数を使用して単純な無向グラフを作成し、add_edges_from() 関数を使用してエッジを追加しています。次に、nx.average_clustering() を使用して平均クラスタリング係数を計算し、 nx.draw_network() 関数を使用してグラフをプロットするとともに結果を出力します。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_edges_from([(1, 2), (1, 3), (2, 3), (2, 4), (3, 4), (4, 5), (4, 6)])
avg_clustering = nx.average_clustering(G)
nx.draw_networkx(G, with_labels = True, node_color ='green')
print("Average Clustering Coefficient:", avg_clustering)

出力

Average Clustering Coefficient: 0.4166666666666666

ノードクラスタリング係数

NetworkX の clustering() 関数は、グラフ内の個々のノードのクラスタリング係数を計算します。これは、キーがグラフ内のノードであり、値が対応するクラスタリング係数である辞書を返します。

ノードのクラスタリング係数は、可能な接続の総数に対するノードの隣接ノード間の接続数の比率として計算されます。

この例では、グラフを作成し、エッジを追加します。次に、nx.clustering() を使用して各ノードのクラスタリング係数を計算し、ループを使用して結果を出力します。

import networkx as nx
import matplotlib.pyplot as plt

# Create a graph
G = nx.Graph()
G.add_edges_from([(1, 2), (1, 3), (2, 3), (2, 4), (3, 4), (4, 5), (4, 6)])
# Calculate the clustering coefficient of each node
node_clustering = nx.clustering(G)
print("Node Clustering Coefficients:")
for node, clustering_coefficient in node_clustering.items():
   print(f"Node {node}: {clustering_coefficient}")
nx.draw_networkx(G, with_labels = True, node_color ='green')

出力

Node Clustering Coefficients:
Node 1: 1.0
Node 2: 0.6666666666666666
Node 3: 0.6666666666666666
Node 4: 0.16666666666666666
Node 5: 0
Node 6: 0

接続性

接続性とは、すべてのノードが他のノードから到達可能かどうかを決定するグラフのプロパティを指します。 NetworkX は、is_connected() や is_strongly_connected() など、グラフの接続性を決定する関数を提供します。

この例では、グラフを作成し、エッジを追加します。次に、nx.is_connected() を使用して、グラフが接続されているかどうかを確認します。この関数は、すべてのノードが他のノードから到達可能な場合は True を返し、それ以外の場合は False を返します。

import networkx as nx
import matplotlib.pyplot as plt

# Create a graph
G = nx.Graph()
G.add_edges_from([(1, 2), (2, 3)])
# Check if the graph is connected
connected = nx.is_connected(G)
print("Is Graph Connected?", connected)
nx.draw_networkx(G, with_labels = True, node_color ='green')

出力

Is Graph Connected? True

度の中心性

次数中心性は、次数、つまり接続数に基づいてノードの重要性または中心性を定量化する尺度です。 NetworkX は、グラフ内のノードの次数中心性を計算するdegree_centrality() 関数を提供します。

この例では、グラフを作成し、エッジを追加しています。次に、nx.degree_centrality() を使用して次数中心性を計算し、結果を出力します。これにより、ノードとそれに対応する次数中心性値の辞書が得られます。

import networkx as nx
import matplotlib.pyplot as plt

# Create a graph
G = nx.Graph()
G.add_edges_from([(1, 2), (2, 3), (2, 4), (3, 4), (4, 5), (4, 6)])
# Calculate degree centrality
centrality = nx.degree_centrality(G)
print("Degree Centrality:", centrality)
nx.draw_networkx(G, with_labels = True, node_color ='blue')

出力

Degree Centrality: {1: 0.2, 2: 0.6000000000000001, 3: 0.4, 4: 0.8, 5: 0.2, 6: 0.2}