NetworkX 是一个用于创建、操作和研究复杂网络(图)的 Python 库。提供了丰富的数据结构和算法,适用于图论、社交网络分析、生物信息学、地理信息系统等多个领域。NetworkX 的设计目标是灵活、高效,并且易于扩展。
1. 创建图
NetworkX 支持创建多种类型的图,包括无向图(Graph)、有向图(DiGraph)、多重图(MultiGraph)和多重有向图(MultiDiGraph)。
import networkx as nx
# 创建无向图
G = nx.Graph()
# 创建有向图
D = nx.DiGraph()
# 创建多重图
MG = nx.MultiGraph()
# 创建多重有向图
MD = nx.MultiDiGraph()
2. 添加节点和边
可以向图中添加节点和边,节点可以是任何可哈希的对象,边可以带有权重和其他属性。
# 添加节点
G.add_node(1)
G.add_nodes_from([2, 3])
# 添加边
G.add_edge(1, 2)
G.add_edges_from([(2, 3), (3, 1)])
# 添加带权重的边
G.add_edge(1, 2, weight=0.5)
G.add_edges_from([(2, 3, {'weight': 0.3}), (3, 1, {'weight': 0.2})])
3. 图的属性和方法
NetworkX 提供了许多方法来查询和操作图的属性。
# 获取节点和边的数量
num_nodes = G.number_of_nodes()
num_edges = G.number_of_edges()
# 获取图的邻接矩阵
adj_matrix = nx.adjacency_matrix(G)
# 获取图的度
degrees = G.degree()
# 获取图的连通分量
connected_components = list(nx.connected_components(G))
4. 图的遍历
NetworkX 支持多种图遍历算法,包括深度优先搜索(DFS)和广度优先搜索(BFS)。
# 深度优先搜索
dfs_path = nx.dfs_tree(G, source=1)
# 广度优先搜索
bfs_path = nx.bfs_tree(G, source=1)
5. 最短路径和中心性
NetworkX 提供了多种最短路径算法和中心性度量。
# 最短路径
shortest_path = nx.shortest_path(G, source=1, target=3)
# 最短路径长度
shortest_path_length = nx.shortest_path_length(G, source=1, target=3)
# 介数中心性
betweenness_centrality = nx.betweenness_centrality(G)
# 接近中心性
closeness_centrality = nx.closeness_centrality(G)
6. 图的可视化
NetworkX 可以与 Matplotlib 结合使用,方便地进行图的可视化。
import matplotlib.pyplot as plt
# 绘制图
nx.draw(G, with_labels=True)
plt.show()
7. 图的生成和分析
NetworkX 提供了多种图生成器和分析工具,例如随机图、小世界网络、无标度网络等。
# 生成随机图
ER = nx.erdos_renyi_graph(10, 0.5)
# 生成小世界网络
WS = nx.watts_strogatz_graph(10, 4, 0.1)
# 生成无标度网络
BA = nx.barabasi_albert_graph(10, 3)
8. 导入和导出图
NetworkX 支持多种图格式,可以方便地导入和导出图数据。
# 导出图到 GEXF 格式
nx.write_gexf(G, "graph.gexf")
# 从 GEXF 格式导入图
G = nx.read_gexf("graph.gexf")
安装
可以通过 pip 安装 NetworkX:
pip install networkx