NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。networkx支持创建简单无向图、有向图和多重图(multigraph);内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用。

引入模块

importnetworkx as nxprint nx

无向图

例1:

#!-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.pyplot as plt

G= nx.Graph() #建立一个空的无向图G

G.add_node(1) #添加一个节点1

G.add_edge(2,3) #添加一条边2-3(隐含着添加了两个节点2、3)

G.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_edges() #输出边的数量:1

nx.draw(G)

plt.savefig("wuxiangtu.png")

plt.show()

输出

nodes: [1, 2, 3]

edges: [(2, 3)]

number of edges: 1

例2:

#-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.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(1,3)

G.add_edges_from([(3,5),(3,6),(6,7)]) #加边集合

nx.draw(G)

plt.savefig("youxiangtu.png")

plt.show()

有向图

例1:

#!-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.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(1,3)

G.add_edges_from([(3,5),(3,6),(6,7)])

nx.draw(G)

plt.savefig("youxiangtu.png")

plt.show()

注:有向图和无向图可以互相转换,使用函数:

Graph.to_undirected()

Graph.to_directed()

例2,例子中把有向图转化为无向图:

#!-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.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(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-*-

importnetworkx as nximportmatplotlib.pyplot as plt

G=nx.DiGraph()

road_nodes= {'a': 1, 'b': 2, 'c': 3}#road_nodes = {'a':{1:1}, 'b':{2:2}, 'c':{3:3}}

road_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-*-

importnetworkx as nximportmatplotlib.pyplot as plt

G=nx.DiGraph()#road_nodes = {'a': 1, 'b': 2, 'c': 3}

road_nodes = {'a':{1:1}, 'b':{2:2}, 'c':{3:3}}

road_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:

#!-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.pyplot as plt

G= nx.Graph() #建立一个空的无向图G

G.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被认为是一条边

print G.get_edge_data(2, 3)print G.get_edge_data(3, 4)print G.get_edge_data(3, 5)

nx.draw(G)

plt.savefig("wuxiangtu.png")

plt.show()

输出

{}

{'weight': 3.5}

{'weight': 7.0}

经典图论算法计算

计算1:求无向图的任意两点间的最短路径

#-*- coding: cp936 -*-

importnetworkx as nximportmatplotlib.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)print path[1]

计算2:找图中两个点的最短路径

importnetworkx 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)printnexceptnx.NetworkXNoPath:print 'No path'

强连通、弱连通

强连通:有向图中任意两点v1、v2间存在v1到v2的路径(path)及v2到v1的路径。

弱联通:将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。

距离

例1:弱连通

#-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.pyplot as plt#G = nx.path_graph(4, create_using=nx.Graph())#0 1 2 3

G = nx.path_graph(4, create_using=nx.DiGraph()) #默认生成节点0 1 2 3,生成有向变0->1,1->2,2->3

G.add_path([7, 8, 3]) #生成有向边:7->8->3

for c innx.weakly_connected_components(G):printcprint [len(c) for c in sorted(nx.weakly_connected_components(G), key=len, reverse=True)]

nx.draw(G)

plt.savefig("youxiangtu.png")

plt.show()

执行结果

set([0, 1, 2, 3, 7, 8])

[6]

例2:强连通

#-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.pyplot as plt#G = nx.path_graph(4, create_using=nx.Graph())#0 1 2 3

G = 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_components(G), key=len, reverse=True)]

con=nx.strongly_connected_components(G)printconprinttype(con)printlist(con)

nx.draw(G)

plt.savefig("youxiangtu.png")

plt.show()

执行结果

[set([8, 1, 2, 3]), set([0])]

子图

#-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.pyplot as plt

G=nx.DiGraph()

G.add_path([5, 6, 7, 8])

sub_graph= G.subgraph([5, 6, 8])#sub_graph = G.subgraph((5, 6, 8)) #ok 一样

nx.draw(sub_graph)

plt.savefig("youxiangtu.png")

plt.show()

条件过滤

#原图

#-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.pyplot as plt

G=nx.DiGraph()

road_nodes= {'a':{'id':1}, 'b':{'id':1}, 'c':{'id':3}, 'd':{'id':4}}

road_edges= [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'd')]

G.add_nodes_from(road_nodes)

G.add_edges_from(road_edges)

nx.draw(G)

plt.savefig("youxiangtu.png")

plt.show()

#过滤函数

#-*- coding:utf8-*-

importnetworkx as nximportmatplotlib.pyplot as plt

G=nx.DiGraph()defflt_func_draw():

flt_func= lambda d: d['id'] != 1

returnflt_func

road_nodes= {'a':{'id':1}, 'b':{'id':1}, 'c':{'id':3}, 'd':{'id':4}}

road_edges= [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'd')]

G.add_nodes_from(road_nodes.iteritems())

G.add_edges_from(road_edges)

flt_func=flt_func_draw()

part_G= G.subgraph(n for n, d in G.nodes_iter(data=True) ifflt_func(d))

nx.draw(part_G)

plt.savefig("youxiangtu.png")

plt.show()

pred,succ

#-*- coding:utf8-*-import networkxasnx

import matplotlib.pyplotasplt

G=nx.DiGraph()

road_nodes= {'a':{'id':1}, 'b':{'id':1}, 'c':{'id':3}}

road_edges= [('a', 'b'), ('a', 'c'), ('c', 'd')]

G.add_nodes_from(road_nodes.iteritems())

G.add_edges_from(road_edges)

print G.nodes()

print G.edges()

print"a's pred", G.pred['a']

print"b's pred", G.pred['b']

print"c's pred", G.pred['c']

print"d's pred", G.pred['d']

print"a's succ", G.succ['a']

print"b's succ", G.succ['b']

print"c's succ", G.succ['c']

print"d's succ", G.succ['d']

nx.draw(G)

plt.savefig("wuxiangtu.png")

plt.draw()

结果

['a', 'c', 'b', 'd']

[('a', 'c'), ('a', 'b'), ('c', 'd')]

a's pred {}

b's pred {'a': {}}

c's pred {'a': {}}

d's pred {'c': {}}

a's succ {'c': {}, 'b': {}}

b's succ {}

c's succ {'d': {}}

d's succ {}

python画网络关系 节点和边存在文件里_python复杂网络分析库NetworkX相关推荐

  1. python绘制网络关系图

    import networkx as nx# 数据准备 G = nx.DiGraph() # 单边有向图G.add_edges_from([(1,2), ('x','y'), (2,3)...]) # ...

  2. 一文读懂Python复杂网络分析库networkx | CSDN博文精选

    作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...

  3. python日志内容存储到文件里_Python中如何实现将logging日志保存到文件中

    Python中如何实现将logging日志保存到文件中 发布时间:2020-11-09 17:03:14 来源:亿速云 阅读:66 今天就跟大家聊聊有关Python中如何实现将logging日志保存到 ...

  4. python画父子关系图_将有父子关系的一维数组转换成树形结构(多维)数据

    先来个函数注释 : /** * 将有父子关系的一维数组转换成树形结构(多维)数据 * console.log(JSON.stringify(setTreeData(data), null, 2)); ...

  5. 如何用python画一束花_如何在AI里绘制一束春天的花朵

    What You'll Be Creating 春天正在到来,是的,不管暴风雪如何肆意狂虐.很快,我们将看到第一波花朵盛开.让我们试着在画板上复刻春天之美吧~ 在此教程中,你将会学习如何创建特殊的画笔 ...

  6. networkx edge 属性_一文读懂Python复杂网络分析库networkx | CSDN博文精选

    作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...

  7. Python复杂网络分析库networkx 看这一篇就够了

    文章目录 1 基础知识 1.1 简介 1.2 Graph 添加节点 访问节点 删除节点 添加边 访问边 遍历边 生成小世界网络 生成规则网络 另一种规则图 ER随即图 BA无标度网络 喜欢的话请关注我 ...

  8. 运行python程序的两种方式交互式和文件式_Python基础知识2

    运行Python程序的两种方式 小白学习,如有错误欢迎指点 一.每位小白写的第一个Python程序 1.运行Python程序的两种方式 1.1 交互式模式(即时对话) 打开cmd,打开Python解释 ...

  9. 十分钟用Python画一片雪花

    引言 在MOOC上看到一个好玩的实例--"用Python绘制科赫雪花小包裹",挺有意思,也不难,尝试一下把它实现出来了,先上效果图(来源:中国大学慕课"Python语言程 ...

最新文章

  1. jQuery中选择器加尖括号的区别
  2. O(N) 求 1~N 逆元 模板及证明
  3. Xshell操控kali-linux虚拟机
  4. git revert和reset区别
  5. idea上一步下一步快捷键_【MySQL】一步一步的教你在windows下安装MySQL5.7
  6. 在外围类作用域之外引用外围类的静态成员,类型名和枚举名都要求有解析操作符...
  7. 微型计算机原理及应用是啥,微型计算机原理及应用技术(第3版)
  8. UI中经常出现的下拉框下拉自动筛选效果的实现
  9. android仿qq聊天界面版带表情、相册、照相
  10. 王道考研——操作系统(第一章 计算机系统概述)
  11. 计算机网络-超网聚合(子网合并)
  12. IT桔子IT互联网公司产品数据库及商业信息服务
  13. mule seda的学习一
  14. iOS连接外设的几种方式
  15. java获取内容为空_Java使用POI读取Word文档时如果文档内容为空时出现异常
  16. CTF-MISC隐写总结
  17. ChinaJoy揭晓十大网游盗号木马黑榜
  18. 头插法创建链表并输出所有元素
  19. MSN pk QQ - 看软件重点用户体验
  20. 响铃:厉害了中国古人!原来,我们3000年前就有了机器人

热门文章

  1. 沈抚新区机器人产业园怎么_“智慧物流智能AGV技术交流峰会”在长春中日智能制造产业园成功举办...
  2. spirng 如何把404转到特定的页面展示
  3. 函数如何实现“多个返回值”?
  4. IDEA Terminal命令行运行javac时,一个类运用另一个类的方法找不到符号的问题
  5. python微信验证码收不到_给微信回复消息收不到(Python)
  6. Python如何发布程序
  7. Tiniux 3.0 / Memory.c / OSMemFree
  8. php7协程通信使用,PHP7下的协程实现
  9. oracle 表分析 影响,oracle 表分析
  10. MTK平台APP层 通过INvram获取SN号