Python NetworkX – Python图形库
Python NetworkX模块允许我们创建,操纵和研究复杂网络的结构,功能和动态。
1. Python NetworkX
NetworkX适用于现实世界中的图形问题,也擅长处理大数据。
由于该库纯粹是用python制作的,因此这一事实使它同时具有高度的可伸缩性,可移植性和合理的效率。
它是开源的,并根据3条款BSD许可发布。
2.为什么选择NetworkX?
NetworkX为您提供了很多使用它的理由。
以下是NetworkX使其与之配套的一些功能:
- NetworkX具有众多标准图形算法
- 它支持图,有向图和多图的数据结构
- 它提供了各种网络结构和分析措施
- 使用软件包中提供的生成器,制作经典/随机图和合成网络要容易得多
- 网络或者图中的节点绝对可以是任何东西,可以是图像,XML数据或者其他任何东西
- 边缘还可以保存任意数据,例如时间戳和权重
- 它已经过良好的测试,大约90%的代码覆盖率
除此之外,它还具有其他优势,因为它基于纯Python,因此,它具有快速原型语法并且非常易于学习。
让我们开始吧!
3. NetworkX入门
NetworkX需要在计算机上安装Python> = 2.7。
首先,让我们完成安装。
3.1)安装NetworkX模块
我们可以使用Python Package Index(pip)安装NetworkX:
pip install networkx
如果在使用pip安装软件包时遇到任何问题,请使用git命令从GitHub安装它:
pip install git://github.com/networkx/networkx.git
3.2)使用NetworkX
现在我们已经在计算机上安装了NetworkX,我们可以使用以下import语句在任何脚本中使用它:
import networkx
3.3)创建图
由于NetworkX库用于使用Graph结构管理关系,因此我们可以从创建没有节点和边的图开始:
import networkx graph = networkx.Graph()
由于没有节点或者边,因此我们看不到图形,因此让我们使用闲置来检查是否已创建图形:
3.4)将节点添加到图形
添加和检查节点非常简单,可以通过以下方式完成:
graph.add_node(1)
或者将列表用作:
graph.add_nodes_from([2,3])
并查看现有图中的节点:
graph.nodes()
运行这些命令集时,我们将看到以下输出:到目前为止,系统中确实存在一个图,但图的节点尚未连接。
这可以通过在两个图节点之间建立路径的图边缘来完成。
3.5)在节点之间添加边
添加和检查边缘也非常简单,可以通过以下方式完成:
graph.add_edge(1,2)
或者将列表用作:
graph.add_edges_from([(1,2),(2,3)])
为了查看现有图形中的节点,我们可以再次打印图形对象的边缘:
graph.edges()
运行这些命令集时,将看到以下输出:
4.属性
图形是数据结构,用于连接相关数据并通过权重显示它们之间的关系。
该权重可以称为图中两个节点的关系的属性。
同样,要显示节点或者边线或者图形本身的属性,我们也可以使用属性。
4.1)图形属性
通过将图形属性添加到Graph对象,我们可以将元数据分配给Graph。
让我们看一下如何做到这一点的代码片段:
graph.graph["day"]="Monday" graph.graph
4.2)节点属性
其中我们将属性添加到Graph对象的节点:
graph.add_node(1, time='5pm') graph.add_nodes_from([3], time='2pm') graph.node[1] graph.node[1]['room'] = 714 graph.nodes(data=True)
4.3)边缘属性
最后,我们将一些属性分配给Graph对象的边缘。
分配边缘属性:
graph.add_edge(1, 2, weight=4.7 ) graph.add_edges_from([(3,4),(4,5)], color='red') graph.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})]) graph[1][2]['weight'] = 4.7 graph.edge[1][2]['weight'] = 4
将属性添加到图,节点和边后,我们最终可以打印所有数据:
5.有向图
在上一节中,我们看到可以将属性分配给Graph的边缘。
我们可以创建一个有向图并添加加权边,如下所示。
DG=networkx.DiGraph() DG.add_weighted_edges_from([(1,2,0.5), (3,1,0.75)]) DG.out_degree(1,weight='weight') DG.degree(1,weight='weight') DG.successors(1) DG.neighbors(1)
一旦运行了这些命令,我们将能够看到我们刚刚制作的图的邻居和后继者:
6.绘图图
到目前为止,我们一直在对图形执行各种操作,但无法可视化任何操作。
现在,让我们尝试形象化它们。
为此,我们需要matplotlib库的帮助:
import matplotlib.pyplot as plt networkx.draw(graph) networkx.draw_random(graph) networkx.draw_circular(graph) networkx.draw_spectral(graph) plt.show()