python画网络关系 节点和边存在文件里_python复杂网络分析库NetworkX
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相关推荐
- python绘制网络关系图
import networkx as nx# 数据准备 G = nx.DiGraph() # 单边有向图G.add_edges_from([(1,2), ('x','y'), (2,3)...]) # ...
- 一文读懂Python复杂网络分析库networkx | CSDN博文精选
作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...
- python日志内容存储到文件里_Python中如何实现将logging日志保存到文件中
Python中如何实现将logging日志保存到文件中 发布时间:2020-11-09 17:03:14 来源:亿速云 阅读:66 今天就跟大家聊聊有关Python中如何实现将logging日志保存到 ...
- python画父子关系图_将有父子关系的一维数组转换成树形结构(多维)数据
先来个函数注释 : /** * 将有父子关系的一维数组转换成树形结构(多维)数据 * console.log(JSON.stringify(setTreeData(data), null, 2)); ...
- 如何用python画一束花_如何在AI里绘制一束春天的花朵
What You'll Be Creating 春天正在到来,是的,不管暴风雪如何肆意狂虐.很快,我们将看到第一波花朵盛开.让我们试着在画板上复刻春天之美吧~ 在此教程中,你将会学习如何创建特殊的画笔 ...
- networkx edge 属性_一文读懂Python复杂网络分析库networkx | CSDN博文精选
作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...
- Python复杂网络分析库networkx 看这一篇就够了
文章目录 1 基础知识 1.1 简介 1.2 Graph 添加节点 访问节点 删除节点 添加边 访问边 遍历边 生成小世界网络 生成规则网络 另一种规则图 ER随即图 BA无标度网络 喜欢的话请关注我 ...
- 运行python程序的两种方式交互式和文件式_Python基础知识2
运行Python程序的两种方式 小白学习,如有错误欢迎指点 一.每位小白写的第一个Python程序 1.运行Python程序的两种方式 1.1 交互式模式(即时对话) 打开cmd,打开Python解释 ...
- 十分钟用Python画一片雪花
引言 在MOOC上看到一个好玩的实例--"用Python绘制科赫雪花小包裹",挺有意思,也不难,尝试一下把它实现出来了,先上效果图(来源:中国大学慕课"Python语言程 ...
最新文章
- jQuery中选择器加尖括号的区别
- O(N) 求 1~N 逆元 模板及证明
- Xshell操控kali-linux虚拟机
- git revert和reset区别
- idea上一步下一步快捷键_【MySQL】一步一步的教你在windows下安装MySQL5.7
- 在外围类作用域之外引用外围类的静态成员,类型名和枚举名都要求有解析操作符...
- 微型计算机原理及应用是啥,微型计算机原理及应用技术(第3版)
- UI中经常出现的下拉框下拉自动筛选效果的实现
- android仿qq聊天界面版带表情、相册、照相
- 王道考研——操作系统(第一章 计算机系统概述)
- 计算机网络-超网聚合(子网合并)
- IT桔子IT互联网公司产品数据库及商业信息服务
- mule seda的学习一
- iOS连接外设的几种方式
- java获取内容为空_Java使用POI读取Word文档时如果文档内容为空时出现异常
- CTF-MISC隐写总结
- ChinaJoy揭晓十大网游盗号木马黑榜
- 头插法创建链表并输出所有元素
- MSN pk QQ - 看软件重点用户体验
- 响铃:厉害了中国古人!原来,我们3000年前就有了机器人
热门文章
- 沈抚新区机器人产业园怎么_“智慧物流智能AGV技术交流峰会”在长春中日智能制造产业园成功举办...
- spirng 如何把404转到特定的页面展示
- 函数如何实现“多个返回值”?
- IDEA Terminal命令行运行javac时,一个类运用另一个类的方法找不到符号的问题
- python微信验证码收不到_给微信回复消息收不到(Python)
- Python如何发布程序
- Tiniux 3.0 / Memory.c / OSMemFree
- php7协程通信使用,PHP7下的协程实现
- oracle 表分析 影响,oracle 表分析
- MTK平台APP层 通过INvram获取SN号