1. NetworkX 套件概述 簡介: NetworkX 是一個 Python 套件,用來建立、操作及分析圖資料結構與網絡。 支援多種圖類型與豐富的圖論演算法(例如最短路徑、中心性分析等)。 官方文件與教程: NetworkX 官方文件 NetworkX Tutorial 安裝方式: pip install networkx 2. NetworkX 基本操作 2.1 建立與操作圖 建立一個簡單的無向圖: import networkx as nx import matplotlib.pyplot as plt # 建立無向圖 G = nx.Graph() # 新增節點 G.add_node("A") G.add_nodes_from(["B", "C", "D"]) # 新增邊 (可同時新增節點) G.add_edge("A", "B") G.add_edges_from([("A", "C"), ("B", "D")]) # 顯示圖形 nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray') plt.show() 2.2 設定節點與邊的屬性 為節點與邊添加屬性: # 節點屬性 G.nodes["A"]['role'] = "中心節點" # 邊屬性 G["A"]["B"]['weight'] = 2.5 # 查詢屬性 print(G.nodes(data=True)) print(G.edges(data=True)) 3. 進階圖論操作與分析 3.1 常見圖論算法 最短路徑: # 計算從 A 到 D 的最短路徑 path = nx.shortest_path(G, source="A", target="D") print("最短路徑:", path) 中心性分析: # 計算各節點的度中心性 degree_centrality = nx.degree_centrality(G) print("度中心性:", degree_centrality) 圖遍歷(例如 BFS): bfs_nodes = list(nx.bfs_tree(G, source="A")) print("BFS 遍歷結果:", bfs_nodes) 3.2 實戰案例:知識圖譜構建 案例背景: 建立一個電影知識圖譜,包含電影、演員與導演三種實體及其關係 實作範例: # 建立有向圖 (知識圖譜通常會使用有向圖表達關係) KG = nx.DiGraph() # 新增節點(實體) KG.add_node("電影A", type="電影") KG.add_node("導演X", type="導演") KG.add_node("演員Y", type="演員") KG.add_node("演員Z", type="演員") # 新增邊(關係) KG.add_edge("導演X", "電影A", relation="執導") KG.add_edge("演員Y", "電影A", relation="主演") KG.add_edge("演員Z", "電影A", relation="配角") # 可視化知識圖譜 pos = nx.spring_layout(KG) nx.draw(KG, pos, with_labels=True, node_color='lightgreen', arrows=True) # 顯示邊的標籤 edge_labels = nx.get_edge_attributes(KG, 'relation') nx.draw_networkx_edge_labels(KG, pos, edge_labels=edge_labels) plt.show() 4. 圖形視覺化與佈局調整 不同佈局方式: Spring Layout(彈簧佈局) Circular Layout(圓形佈局) Shell Layout(同心圓佈局) 調整視覺化參數: pos = nx.spring_layout(G) nx.draw_networkx(G, pos, node_color='lightblue', edge_color='gray', node_size=800, font_size=12) plt.title("NetworkX 圖形示例") plt.show() 互動視覺化工具: 可考慮結合 Plotly、Bokeh 或其他互動式視覺化工具,提供動態圖形展示 5. 延伸應用與實際案例 5.1 資料預處理與匯入 從 CSV、JSON 或資料庫讀取圖資料: import csv G_data = nx.Graph() with open('edges.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: node1, node2 = row[0], row[1] G_data.add_edge(node1, node2) 5.2 與其他圖資料庫的比較 NetworkX vs Neo4j: NetworkX 適合用於記憶體中圖資料的處理與分析 Neo4j 適合大規模、持久化的圖資料管理 5.3 實戰專案 專案設計: 選取一個主題(如社群網絡、知識圖譜、網絡爬蟲) 從網路或公開資料集中擷取資料,進行預處理後利用 NetworkX 建構圖 分析圖中關鍵節點、社群結構或路徑信息,並製作報告 6. 參考資源與延伸閱讀 官方文件: NetworkX Documentation 線上文章: 搜尋關鍵字:「Python NetworkX 教學」、「NetworkX 實例」等,可參考 Medium、CSDN 等平台上的實作文章 影片教學: YouTube 搜尋「NetworkX 教學」或「Python 網絡分析」,例如 Data Science 或 Python 教學頻道 GitHub 專案: 搜尋「NetworkX tutorial」、「NetworkX examples」,參考實作案例與完整範例程式碼 書籍推薦: “Network Science” by Albert-László Barabási(輔助理解圖論概念) 與 Python 相關的圖論與網絡分析書籍(書中通常附有 NetworkX 的案例)