目录
- 背景
- 第一部分
argparse
包介绍 - 第二部分 源码分析
- 参考文献及资料
背景
NetworkX提供:
- 研究社会,生物和基础设施网络的结构和动态的工具;
- 适用于许多应用的标准编程接口和图形实现;
- 一个快速发展的多学科项目的环境;
- 现有数值算法的接口和用C,C ++和FORTRAN编写的代码;和
- 能够无痛地处理大型非标准数据集。
- 使用NetworkX,您可以以标准和非标准数据格式加载和存储网络,生成多种类型的随机和经典网络,分析网络结构,构建网络模型,设计新的网络算法,绘制网络等等。
环境部署
1 |
本文运行环境:
- win7
- python=3.8.8
- networkx=2.5(依赖包:decorator=4.4.2)
第一部分 图简单实现
1.1 创建图
通过实例化创建图对象:
1 | import networkx as nx |
1.2 添加和删除节点
单个节点添加:
向图
graph
中添加一个名称为node1
的节点。
1 | graph.add_node("node1") |
多节点添加:
向图
graph
中添加名称为node2
、node3
的节点。向图
graph
中添加名称为node4
的节点,并且增加该节点的一个属性信息:'id': 1
1 | graph.add_nodes_from(["node2", "node3"]) |
删除节点
单节点和多节点删方法:
1 | graph.remove_node("node1") |
1.3 添加和删除边
添加节点和边
如果边的节点不存在会自动创建相应的节点。
1 | graph.add_edge('node5', "node6") |
- 批量添加边
1 | graph.add_edges_from([('node2', "node3"), ('node3', "node4")]) |
1.4 图可视化
networkx
的可视化通过matplotlib
包依赖实现。
1 | import matplotlib.pyplot as plt |
1.5 图属性查询
四个基本图形属性有:G.nodes,G.edges,G.adj和G.degree。这些是图中节点,边,邻居(邻接)和节点度的集合。
目前为止, 查看一下图中到底有多少个节点和边:
1 | g.number_of_nodes() |
1 | g.number_of_edges() |
第二部分 进阶使用
2.1 有向图
1 | DiGraph |
报错汇总
1、在使用networkx的时候,在一台电脑上可以运行相关代码,而另一台则报错,出现如下错误:
“networkx.exception.NetworkXError: random_state_index is incorrect”
原因:
其实是decorator版本问题,报错电脑上的decorator的版本是5.0,而没有报错的版本为4.4.2,注意,我的networkx版本为2.5.
解决办法:
将decorator版本降为4.4.2
输入下面代码安装即可
pip install decorator==4.4.2
最后问题得到解决。
第三部分 图算法实现
图表也可以使用传统方法进行分析。这些方法通常是算法。它们包括:
- 最短路径算法,例如Dijkstra 算法
- 搜索算法,例如广度优先搜索算法
- 生成树算法,例如Prim 算法
图数据集
数据集
练习中使用了Stanford大型网络数据集集合(Leskovec和Krevl 2014)的3个数据集:
- 从2003年3月2日开始的Amazon产品共同购买网络,26.2万个节点,120万个边缘
- Google的网络图,875k节点,边长5.1m
- Pokec在线社交网络,160万个节点,30.6m的边缘
尽管最容易根据算法的运行时间对软件包进行排名,但这只是构成一个好的软件包的众多考虑因素之一。我会根据我在这些软件包中的经验尝试提供更主观的观点。
参考文章
1、networkx项目主页,链接:https://networkx.org/