《python复杂网络分析库NetworkX》由会员分享,可在线阅读,更多相关《python复杂网络分析库NetworkX(15页珍藏版)》请在金锄头文库上搜索。
1、python 简单网络分析库 NetworkX阅读名目 无向图 有向图 加权图 经典图论算法计算 强连通、弱连通 子图 条件过滤 pred,succNetworkX 是一个用 Python 语言开发的图论与简单网络建模工具,内置了常用的图与简单网络分析算法,可以便利的进展简单网络数据分析、仿真建模等工作。networkx 支持创立简洁无向图、有向图和多重图multigraph;内置很多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简洁易用。引入模块import networkx as nx print nx无向图例 1:#!-*- coding:utf8-*- import
2、networkx as nximport matplotlib.pyplot as plt回到顶部G = nx.Graph()#建立一个空的无向图 GG.add_node(1)#添加一个节点 1G.add_edge(2,3)#添加一条边 2-3隐含着添加了两个节点 2、3G.add_edge(3,2)#对于无向图,边 3-2 与边 2-3 被认为是一条边print “nodes:“, G.nodes()#输出全部的节点: 1, 2, 3 print “edges:“, G.edges()#输出全部的边:(2, 3)print “number of edges:“, G.number_of_ed
3、ges()#输出边的数量:1 nx.draw(G)plt.savefig(“wuxiangtu.png“) plt.show()输出123nodes: 1, 2, 3edges: (2, 3) number of edges: 1例 2:#-*- coding:utf8-*- import networkx as nximport matplotlib.pyplot as plt G = nx.DiGraph()G.add_node(1)G.add_node(2)#加点G.add_nodes_from(3,4,5,6)#加点集合G.add_cycle(1,2,3,4)#加环G.add_edge
4、(1,3) G.add_edges_from(3,5),(3,6),(6,7) #加边集合nx.draw(G)plt.savefig(“youxiangtu.png“) plt.show()回到顶部有向图例 1:#!-*- coding:utf8-*- import networkx as nximport matplotlib.pyplot as pltG = nx.DiGraph() G.add_node(1) G.add_node(2)G.add_nodes_from(3,4,5,6) G.add_cycle(1,2,3,4) G.add_edge(1,3) G.add_edges_fr
5、om(3,5),(3,6),(6,7) nx.draw(G) plt.savefig(“youxiangtu.png“) plt.show()注:有向图和无向图可以相互转换,使用函数: Graph.to_undirected() Graph.to_directed()例 2,例子中把有向图转化为无向图:#!-*- coding:utf8-*-import networkx as nximport matplotlib.pyplot as pltG = nx.DiGraph()G.add_node(1) G.add_node(2)G.add_nodes_from(3,4,5,6) G.add_c
6、ycle(1,2,3,4) G.add_edge(1,3) G.add_edges_from(3,5),(3,6),(6,7) G = G.to_undirected()nx.draw(G) plt.savefig(“wuxiangtu.png“) plt.show()留意区分以下 2 例例 3-1#-*- coding:utf8-*- import networkx as nximport matplotlib.pyplot as pltG = nx.DiGraph()road_nodes = ”a”: 1, ”b”: 2, ”c”: 3 #road_nodes = ”a”:1:1, ”b”
7、:2:2, ”c”:3:3road_edges = (”a”, ”b”), (”b”, ”c”)G.add_nodes_from(road_nodes.iteritems() G.add_edges_from(road_edges)nx.draw(G) plt.savefig(“youxiangtu.png“) plt.show()例 3-2#-*- coding:utf8-*- import networkx as nximport matplotlib.pyplot as plt G = nx.DiGraph()#road_nodes = ”a”: 1, ”b”: 2, ”c”: 3 ro
8、ad_nodes = ”a”:1:1, ”b”:2:2, ”c”:3:3road_edges = (”a”, ”b”), (”b”, ”c”)G.add_nodes_from(road_nodes.iteritems() G.add_edges_from(road_edges)nx.draw(G) plt.savefig(“youxiangtu.png“) plt.show()加权图回到顶部有向图和无向图都可以给边赐予权重,用到的方法是 add_weighted_edges_from,它承受 1 个或多个三元组u,v,w作为参数,其中 u 是起点,v 是终点,w 是权重。例 1:#!-*- c
9、oding:utf8-*- import networkx as nximport matplotlib.pyplot as pltG = nx.Graph()#建立一个空的无向图 GG.add_edge(2,3)#添加一条边 2-3隐含着添加了两个节点 2、3 G.add_weighted_edges_from(3, 4, 3.5),(3, 5, 7.0) #对于无向图,边 3-2 与边 2-3 被认为是一条边printG.get_edge_data(2,3)printG.get_edge_data(3,4)printG.get_edge_data(3,5)nx.draw(G) plt.sa
10、vefig(“wuxiangtu.png“) plt.show()输出”weight”: 3.5”weight”: 7.0回到顶部经典图论算法计算计算 1:求无向图的任意两点间的最短路径# -*- coding: cp936 -*- import networkx as nximport matplotlib.pyplot as plt#计算 1:求无向图的任意两点间的最短路径G = nx.Graph()G.add_edges_from(1,2),(1,3),(1,4),(1,5),(4,5),(4,6),(5,6)path = nx.all_pairs_shortest_path(G) pr
11、int path1计算 2:找图中两个点的最短路径import networkx as nx G=nx.Graph() G.add_nodes_from(1,2,3,4) G.add_edge(1,2) G.add_edge(3,4)try:n=nx.shortest_path_length(G,1,4)强连通:有向图中任意两点 v1、v2 间存在 v1 到 v2 的路径path及 v2 到 v1 的路径。弱联通:将有向图的全部的有向边替换为无向边,所得到的图称为原图的基图。假设一个有向图的基图是连通图,那么有向图是弱连通图。执行结果set(0, 1, 2, 3, 7, 8)6例 2:强连通#
12、-*- coding:utf8-*- import networkx as nximport matplotlib.pyplot as plt#G = nx.path_graph(4, create_using=nx.Graph() #0 1 2 3G = nx.path_graph(4, create_using=nx.DiGraph() G.add_path(3, 8, 1)#for c in nx.strongly_connected_components(G):#print c #print len(c) for c in sorted(nx.strongly_connected_co
13、mponents(G), key=len, reverse=True)con = nx.strongly_connected_components(G) print conprint type(con) print list(con)nx.draw(G) plt.savefig(“youxiangtu.png“) plt.show()执行结果set(8, 1, 2, 3), set(0)回到顶部子图#-*- coding:utf8-*- import networkx as nximport matplotlib.pyplot as plt G = nx.DiGraph() G.add_path(5, 6, 7, 8)sub_graph = G.subgraph(5,