使用 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}

更新於: 2023年8月7日

875 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告