使用 Python Networkx 的聚類、連通性和其他圖屬性
Python NetworkX 是一個流行的開源 Python 庫,用於建立、操作和分析複雜的網路或圖。它提供了廣泛的工具、演算法和函式來處理圖,使其成為網路分析和研究的寶貴資源。
Python NetworkX 允許我們表示和處理不同型別的圖,例如有向圖、無向圖、多重圖(節點之間有多條邊的圖)和加權圖(具有邊權重的圖)。它還提供了一個簡單直觀的介面來建立、新增節點和邊,以及對圖執行各種操作。
NetworkX 的安裝和匯入
要使用 NetworkX,我們必須使用 Python 包管理器 pip 安裝它,在命令提示符中執行以下命令。
pip install networkx
一旦 NetworkX 安裝在我們的 Python 環境中,我們就可以在 Python 指令碼或互動式環境中匯入該庫,並透過執行以下命令開始使用其功能。
import networkx as nx
NetworkX 庫提供了廣泛的屬性,例如聚類、連通性和其他圖屬性,讓我們在本文中詳細瞭解它們。
聚類係數
聚類係數是衡量圖中節點聚集在一起程度的指標。它量化了圖中三角形的數量,其中三角形由三個相互連線的節點組成。較高的聚類係數表示圖中的節點更有可能形成緊密連線的叢集。
在 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}