文章目录
最近在做东西时学到了厉害的库——networkx ,记录一下。感受是有些厉害的东西不是因为你不会,而是你对他没有认知,不要胆怯,不要畏惧,不会都是正常的,扩大接触,持续学习,终有一日会连点成面。
学习过程中看到的一些文章
networkx,一个超强的Python库!
1. networkx 介绍
NetworkX是一个用Python语言开发的图论与复杂网络建模分析工具。用于创建、操作和研究复杂网络的结构、动力学和功能,它可以帮助我们创建、操作和研究复杂网络的结构和动态特性。
🎯 networkx 的核心优势在于:
- 易用性: 纯Python,API直观,学习成本低。
- 灵活性: 节点/边可以是任意对象并携带丰富属性,支持多种图类型。
- 丰富性:提供海量的内置图算法和分析工具。
- 互操作性: 与Python数据科学生态(Pandas, NumPy,SciPy)和多种文件格式无缝集成。
- 社区: 开源免费,社区庞大活跃,文档优秀。
2. networkx 的核心功能
图的创建与操作:
- 轻松创建空图、有向图、无向图、多重图(允许节点间有多条边)等。
- 添加/删除节点和边。
- 为节点和边添加任意属性(如权重、标签、颜色、大小等)。
- 高效的图结构操作(合并图、子图提取、图转换等)。
图结构分析:
- 节点分析: 计算度(连接的边数)、邻居节点、中心性度量(度中心性、接近中心性、中介中心性、特征向量中心性等)。
- **边分析:**查询边的存在、属性。
- 图整体分析: 计算图的密度、直径、平均路径长度、连通分量、聚类系数、同构检查等。
- **路径与搜索:*寻找最短路径(Dijkstra, A)、所有简单路径、连通分量、最小生成树等。
- **图算法:**实现了大量经典图算法(遍历如DFS/BFS、流计算、社区检测算法如Louvain、Girvan-Newman等、图嵌入、链接预测等)。
图的输入/输出:
- 支持多种文件格式读写图数据(如GraphML, GML, GEXF, Pajek NET, JSON, Edge List等)。
- 方便地与Pandas DataFrame、NumPy数组、SciPy稀疏矩阵等数据结构进行转换。
图的绘制与可视化 (基础功能):
- 提供使用matplotlib进行基本绘图的接口。
- 可以设置节点位置、颜色、大小、标签以及边的样式、宽度、颜色等。
- 注意:对于高度定制化或交互式可视化,通常结合专门的库如matplotlib, pygraphviz, graph-tool, plotly, bokeh或Gephi(通过文件导出)使用。
3. 各种图类型Python代码实现

3.1 有向无环图(Directed acyclic graph, DAG)
指一个没有环的有向图。
def plot_DiGraph(edges, title="有向无环图", node_color='skyblue', figsize=(4, 3), seed=42):
"""
绘制有向无环图
参数:
edges (list of tuples): 因果边,形如 [('A', 'B'), ('B', 'C')]
title (str): 图标题
node_color (str): 节点颜色
figsize (tuple): 图像大小
seed (int): 随机种子,控制布局稳定性
返回:
networkx.DiGraph: 构建的有向图对象
"""
DAG = nx.DiGraph()
DAG.add_edges_from(edges)
plt.figure(figsize=figsize)
pos = nx.spring_layout(DAG, seed=seed)
nx.draw(DAG, pos, with_labels=True, node_color=node_color,
node_size=2000, edge_color='gray', font_size=10)
plt.title(title)
plt.show()
return DAG
edges_0 = [
('A', 'B'),
('C', 'B'),
('C', 'D'),
('B', 'D'),
('A', 'C'),
('D', 'A'),
]
DAG = plot_DiGraph(edges_0, title="有向无环图(DAG)")
edges_df = pd.DataFrame(DAG.edges(), columns=["Source", "Target"])
edges_df

3.2 无向图
核心特性
- 无向性:所有边都没有方向,连接是双向的 (A, B) 等价于 (B, A) 表示对称关系(如好友关系、合作网络)
- 简单图:不允许自环(节点不能连接自身) 相同节点间最多只有一条边(无多重边)
- 灵活性:节点可以是任意可哈希对象(字符串、数字、元组、自定义对象等) 边可以携带任意属性字典
Python代码示例
def plot_Graph(nodes,edges, title="无向图", seed=18):
"""
绘制无向图
参数:
nodes :节点,添加指定节点
edges (list of tuples): 边,形如 [('A', 'B'), ('B', 'C')]
title (str): 图标题
node_color (str): 节点颜色
figsize (tuple): 图像大小
seed (int): 随机种子,控制布局稳定性
返回:
networkx.Graph: 构建的无向图对象
"""
G = nx.Graph()
G.add_nodes_from

最低0.47元/天 解锁文章
1554

被折叠的 条评论
为什么被折叠?



