




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
复杂网络分析库NetworkX学习笔记(1):入门NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。我已经用了它一段时间了,感觉还不错(除了速度有点慢),下面介绍我的一些使用经验,与大家分享。一、NetworkX及Python开发环境的安装首先到/pypi/networkx/下载networkx-1.1-py2.6.egg,至U/projects/pywin32/下载pywin32-214.win32-py2.6.exe。如果要用Networkx的制图功能,还要去下载matplotlib和numpy,地址分别在/projects/matplotlib/和/projects/numpy/files/。注意都要用Python2.6版本的。上边四个包中,pywin32、matplotlib和numpy是exe文件,按提示一路next,比较容易安装。而NetworkX是个egg文件,安装稍微麻烦,需要用easyinstall安装。具体方法:启动DOS控制台(在“运行”里输入cmd),输入C:\Python26\Lib\site-packages\easy_install.pyC:\networkx-1.1-py2.6.egg,回车后会自动执行安装。注意我是把networkx-1.1-py2.6.egg放到了C盘根目录,读者在安装时应该具体根据情况修改路径。安装完成后,启动“开始-程序-ActiveStateActivePython2.6(32-bit)-PythonWinEditor”,在shell中输入:importnetworkxasnxprintnx如果能输出:<module'networkx'from'C:\Python26\lib\site-packages\networkx-1.1-py2.6.egg\networkx\__init—.pyc'>说明Networkx已经安装好了,可以正常调用。关于Python语言,如果没有接触过可以找一本Python的语法书来看看(推荐《Python精要参考(第二版)》,网上有电子版)。这个语言很简单易学,只要有点编程基础,几天就可以学会它,然后就可以自如的运用它调用NetworkX了。二、建立图或网络1、无向图在PythonWin的Shell里输入:importnetworkxasnx#导入NetworkX包,为了少打几个字母,将其重命名为nx
G=nx.Graph()G.add_node(1)G.add_edge(2,3)了两个节点G=nx.Graph()G.add_node(1)G.add_edge(2,3)了两个节点2、3)G.add_edge(3,2)被认为是一条边printG.nodes()printG.edges()printG.number_of_edges()#建立一个空的无向图G#添加一个节点1#添加一条边2-3(隐含着添加#对于无向图,边3-2与边2-3#输出全部的节点:[1,2,3]#输出全部的边:[(2,3)]#输出边的数量:12、有向图有向图的建立方式和无向图基本类似,只是在上述代码的第二行,将G=nx.Graph()改为G=nx.DiGraph()。需要注意的是,此时再添加边3-2与边2-3,则被认为是两条不同的边(可以试着运行上述代码,自己查看结果)。同时,有向图和无向图是可以相互转化的,分别用到Graph.to_undirected()和Graph.to_directed()两个方法。3、加权图(网络)有向图和无向图都可以给边赋予权重,用到的方法是add_weighted_edges_from,它接受1个或多个三元组[u,v,w}作为参数,其中u是起点,v是终点,w是权重。例如:G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)])添加0-1和1-2两条边,权重分别是3.0和7.5。如果想读取权重,可以使用get_edge_data方法,它接受两个参数u和v,即边的起讫点。例如:printG.get_edge_data(1,2)#输出{'weight':7.5),这是一个字典结构,可以查看python语法了解它的用法。三、调用图算法NetworkX提供了常用的图论经典算法,例如DFS、BFS、最短路、最小生成树、最大流等等,非常丰富,如果不做复杂网络,只作图论方面的工作,也可以应用NetworkX作为基本的开发包。具体的算法调用方法我就不——介绍了,可以浏览NX的在线手册/reference/algorithms.html,对每个算法都提供了详细的帮助文档和示例。下面只给出一个最短路算法的例子:path=nx.all_pairs_shortest_path(G)#调用多源最短路径算法,计算图G所有节点间的最短路径printpath[0][2]#输出节点0、2之间的最短路径序列:[0,1,2]四、小结作为NetworkX学习笔记的第一部分,今天先简单介绍下NetworkX的安装与基本使用方法。后边有时间会陆续介绍:用NetworkX进行复杂网络拓扑结构统计指标计算、典型复杂网络建模(随机图、小世界、无标度等)以及复杂网络可视化的方法等,请感兴趣的朋友关注并提出批评与意见。本文引用地址:/m/usercontent.aspx?id=337442*本文仅代表博主个人观点,与科学网无关。本文标签:复杂网络NetworkX相关文章:[转载]复杂网络常见的数据和程序代码网站[转载]复杂网络资源会议视频分享:Multi-disciplinaryapproachofcomplexity,...节点度相关性对无标度网络上随机游走的影响.[转载]幂率分布研究的实验数据一一圣达菲研究所[转载]第六届全国复杂网络学术会议[大会日程安排].一类复杂网络的新家族:广义Farey树网络及其三维金字塔[转载]复杂网络的新应用(结构力学)揭示复杂性:从经典分形到复杂网络人群密集经济是“万堵之源”!当前推荐数:2推荐人:zhaoxingfangjinqin推荐到博客首页评论顺排[11]标题:发表评论人:[游客]binggan[2010-9-2617:32:59]ip:202.117.58.*有些人在照闫老师的方法安装的时候,可能找不到easy-install,我也是,真的没有的,就自己去下载安装一下,安装后可能也不是在Lib\site-packages目录下,我的是在scripts目录下面的easy_install。博主回复:谢谢补充,其实python的软件安装比较乱一些,可能会出现各种情况,我也没办法写得太详细了。总之祝大家好运吧,有的时候摸索还是必要的:)[10]标题:发表评论人:jgshuhaihua[2010-9-2516:52:57]老师,你说的“pywin32、matplotlib和numpy是exe文件”为什么我按照你贴出的地址下载的文件都是.py文件,点击setup后就是控制台一闪就没有了?是我下载的文件不对吗?博主回复:可能是,我下载的都是forwin版本的,一般他都会提供两三个平台的版本。你再试一下,而且隔这么久了,版本可能会有变化,不过安装方法应该不会差别太大。祝你好运![9]标题:发表评论人:[游客]chenziheziye[2010-7-211:54:59]ip:123.101.231.*闰老师好,我在研究通信网络,希望能用networkx做一些计算和展示,networkx有直接计算最短路径矩阵,或连接路径权矩阵的函数呀?博主回复:用shortest_path_length(G,source=None,target=None,weighted=False)方法,返回一个二维数组,如果weighted=True,输出的就是权矩阵。详见:/reference/generatedZnetworkx.shortest_path_length.html[8]标题:发表评论人:[游客]nyjyrff[2010-7-1910:27:06]ip:125.44.152.*闫老师您好:我的系统是XP的安装pywin32、matplotlib和numpy时都提示找不到注册表,请问这个该咋办。多谢了博主回复:这个问题我都没遇到过,估计是系统本身的问题,是不是安装了一写不允许访问注册表的软件,如360等?你自己再排查一下,正常在xp上装是没有问题的。[7]标题:发表评论人:[游客]fjf[2010-7-122:28:51]ip:159.226.161.*谢谢你,我是中科院理论物理研究所的学生,现在我们组里对于复杂网络这一块很感兴趣,导师希望我做一些调研,希望与我们现在的研究项目结合起来,希望能多交流。博主回复:别客气,我的email:kaiseryxy@163.com[6]标题:发表评论人:[游客]fjf[2010-7-118:44:19]ip:159.226.161.*你好,请问这个工具能不能统计复杂网络中的最大cluster内包含的节点数啊?博主回复:可以的,详细请看它文档的cluster部分,任何返回一个图G的方法都可以统计节点和边的数量。[5]标题:发表评论人:[游客]蝶梦中[2010-7-19:40:18]ip:219.239.227.*非常感谢哦,我现在做毕业设计,基本上每次来您这都能找到有用的材料~博主回复:)[4]标题:发表评论人:amazon[2010-6-2119:27:48]http://pypi.python.Org/pypi/setuptools#files需要单独安装easy_install工具setuptools-0.6c11.win32-py2-6.exe(md5)MSWindowsinstaller2.6博主回复:如果是在xp下,pywin是自带easy_install的,但版本可能较旧,win7下安装可能会有问题。[3]标题:发表评论人:amazon[2010-6-2119:15:28]我是windows764位。安装python-2.6.5.amd64后,安装pywin32、matplotlib和numpy,提示注册表找不到python.改安装pywin32-214.win32-py2.6,安装pywin32、matplotlib和numpy,成功。但是C:\Python26\Lib\site-packages\easy_install.py提示C:\Python26\Lib\site-packages\easy_install.pyisnotrecognizedasaninternalorexternalcommand,operableprogramorbatchfile.博主回复:不好意思,我还没用过win7,所以不好回答您的问题。抱歉[2]标题:发表评论人:[游客]kxx167[2010-6-2118:02:13]ip:219.218.100.*阎老师的共享精神真值得好好学习博主回复:不敢当,科学网博客是个很好的交流平台,希望大家都能把自己的宝贝拿出来:)复杂网络分析库NetworkX学习笔记(2):统计指标计算无论是实际网络还是对模型网络进行分析,都离不开对网络拓扑统计指标的计算。反映网络结构与动力学特性的统计指标有很多,Costa等的CharacterizationofComplexNetworks:ASurveyofmeasurements一文对此有全面的综述,本文仅介绍一些常用的统计指标在NetworkX中如何计算。一、度、度分布NetworkX可以用来统计图中每个节点的度,并生成度分布序列。下边是一段示例代码(这段代码可以在Shell里一行一行的输入,也可以将其保存为一个以py结尾的纯文本文件后直接运行),注意看注释部分:importnetworkxasnxG=nx.random_graphs.barabasi_albert_graph(1000,3)#生成一个n=1000,m=3的BA无标度网络printG.degree(0)#返回某个节点的度printG.degree()#返回所有节点的度printnx.degree_histogram(G)#返回图中所有节点的度分布序列(从1至最大度的出现频次)对上述结果稍作处理,就可以在Origin等软件里绘制度分布曲线了,当然也可以用matplotlib直接作图,在上述代码后接着输入:importmatplotlib.pyplotasplt#导入科学绘图的matplotlib包degree=nx.degree_histogram(G)#返回图中所有节点的度分布序列x=range(len(degree))#生成x轴序列,从1到最大度y=[z/float(sum(degree))forzindegree]#将频次转换为频率,这用到Python的一个小技巧:列表内涵,Python的确很方便:)plt.loglog(x,y,color="blue”,linewidth=2)#在双对数坐标轴上绘制度分布曲线plt.show()#显示图表二、群聚系数这个在NetworkX里实现起来很简单,只需要调用方法nx.average_clustering(G)就可以完成平均群聚系数的计算,而调用nx.clustering(G)则可以计算各个节点的群聚系数。三、直径和平均距离nx.diameter(G)返回图G的直径(最长最短路径的长度),而nx.average_shortest_path_length(G)则返回图G所有节点间平均最短路径长度。四、匹配性这个也比较简单,调用nx.degree_assortativity(G)方法可以计算一个图的度匹配性。五、中心性这个我大部分不知道怎么翻译,直接上NX的帮助文档吧,需要计算哪方面的centrality自己从里边找:)Degreecentralitymeasures.(点度中心性?)degree_centrality(G)Computethedegreecentralityfornodes.in_degree_centrality(G)Computethein-degreecentralityfornodes.out_degree_centrality(G)Computetheout-degreecentralityfornodes.Closenesscentralitymeasures.(紧密中心性?)closeness_centrality(G[,v,weighted_edges])Computeclosenesscentralityfornodes.Betweennesscentralitymeasures.(介数中心性?)betweenness_centrality(G[,normalized,...])Computebetweennesscentralityfornodes.edge_betweenness_centrality(G[,normalized,...])Computebetweennesscentralityforedges.Current-flowclosenesscentralitymeasures.(流紧密中心性?)current_flow_closeness_centrality(G[,...])Computecurrent-flowclosenesscentralityfornodes.Current-FlowBetweennessCurrent-flowbetweennesscentralitymeasures.(流介数中心性?)current_flow_betweenness_centrality(G[,...])Computecurrent-flowbetweennesscentralityfornodes.edge_current_flow_betweenness_centrality(G)Computecurrent-flowbetweennesscentralityforedges.Eigenvectorcentrality.(特征向量中心性?)eigenvector_centrality(G[,max_iter,tol,...])ComputetheeigenvectorcentralityforthegraphG.eigenvector_centrality_numpy(G)ComputetheeigenvectorcentralityforthegraphG.Loadcentrality.(彻底晕菜—)load_centrality(G[,v,cutoff,normalized,...])Computeloadcentralityfornodes.edge_load(G[,nodes,cutoff])Computeedgeload.六、小结上边介绍的统计指标只是NetworkX能计算的指标中的一小部分内容,除此之外NetworkX还提供了很多(我还没有用到过的)统计指标计算方法,感兴趣的朋友可以去查NetworkX的在线帮助文档:/reference/index.htmlo对于加权图的统计指标计算,NetworkX似乎没有直接提供方法(也可能是我没找到),估计需要自己动手编制一些程序来完成。本文引用地址:/im/usercontent.aspx7ick337511*本文仅代表博主个人观点,与科学网无关。本文标签:复杂网络NetworkX相关文章:[转载]复杂网络常见的数据和程序代码网站[转载]复杂网络资源会议视频分享:Multi-disciplinaryapproachofcomplexity,,节点度相关性对无标度网络上随机游走的影响
.[转载]幂率分布研究的实验数据一一圣达菲研究所.[转载]第六届全国复杂网络学术会议[大会日程安排]一类复杂网络的新家族:广义Farey树网络及其三维金字塔[转载]复杂网络的新应用(结构力学)■揭示复杂性:从经典分形到复杂网络人群密集经济是“万堵之源”!当前推荐数:1推荐人:ljxue推荐到博客首页评论顺排|[3]标题:发表评论人:[游客]jamie_luo[2010-9-2916:44:45]ip:59.78.91.*请问对局域世界的BA模型有相关networkx的函数吗,如何对原BA模型改进呢?谢谢指点!博主回复:好像没有直接提供,但可以自己改写原来的函数(在原文件中复制一份后改下函数名】局域世界的BA应该是随机从巳存在的节点中选一部分出来吧,这块改动一下就可以了应该。[2]标题:发表评论人:[游客]蝶梦中[2010-7-110:47:14]ip:219.239.227.*不好意思=。=在您后面的文件中看到了,麻烦啦~~博主回复:别客气,祝你做出好成果![1]标题:发表评论人:[游客]蝶梦中[2010-7-110:45:18]ip:219.239.227.*闫老师,您好,我现在做的东西有一部分是对BA模型进行的改良,不能直接使用networkx的函数。我想看一下它实现BA模型的源代码,请问您知道在哪个文件里吗?我没有找到哎。复杂网络分析库NetworkX学习笔记(3):网络演化模型NetworkX提供了4种常见网络的建模方法,分别是:规则图,ER随机图,WS小世界网络和BA无标度网络。本文首先介绍在NetworkX生成这些网络模型的方法,然后以BA无标度网络的建模为例,分析利用NetworkX进行复杂网络演化模型设计的基本思路,以便将来开发出我们自己的模型。同时这篇文章里还涉及到一点复杂网络可视化的方法(后边有时间会另文介绍网络可视化的方法)。一、规则图规则图差不多是最没有复杂性的一类图了,在NetworkX中,用random_graphs.random_regular_graph(d,n)方法可以生成一个含有n个节点,每个节点有d个邻居节点的规则图。下面是一段示例代码,生成了包含20个节点、每个节点有3个邻居的规则图:importnetworkxasnximportmatplotlib.pyplotaspltRG=nx.random_graphs.random_regular_graph(3,20)#生成包含20个节点、每个节点有3个邻居的规则图RG_pos=nx.spectral_layout(RG)#定义一个布局,此处采用了spectral布局方式,后变还会介绍其它布局方式,注意图形上的区别nx.draw(RG,pos,with_labels=False,node_size=30)#绘制规则图的图形,with_labels决定节点是非带标签(编号),node_size是节点的直径plt.show()#显示图形图1NetworkX生成的规则图二、ER随机图ER随机图是早期研究得比较多的一类“复杂”网络,这个模型的基本思想是以概率p连接N个节点中的每一对节点。在NetworkX中,可以用random_graphs.erdos_renyi_graph(n,p)方法生成一个含有n个节点、以概率p连接的ER随机图:importnetworkxasnximportmatplotlib.pyplotaspltER=nx.random_graphs.erdos_renyi_graph(20,0.2)#生成包含20个节点、以概率0.2连接的随机图pos=nx.shell_layout(ER)#定义一个布局,此处采用了shell布局方式nx.draw(ER,pos,with_labels=False,node_size=30)plt.show()图2NetworkX生成的随机图三、WS小世界网络在NetworkX中,可以用random_graphs.watts_strogatz_graph(n,k,p)方法生成一个含有n个节点、每个节点有k个邻居、以概率p随机化重连边的WS小世界网络,下面是一个例子:importnetworkxasnximportmatplotlib.pyplotaspltWS=nx.random_graphs.watts_strogatz_graph(20,4,0.3)#生成包含20个节点、每个节点4个近邻、随机化重连概率为0.3的小世界网络pos=nx.circular_layout(WS)#定义一个布局,此处采用了circular布局方式nx.draw(WS,pos,with_labels=False,node_size=30)#绘制图形plt.show()运行结果如下:图3NetworkX生成的WS小世界网络四、BA无标度网络在NetworkX中,可以用random_graphs.barabasi_albert_graph(n,m)方法生成一个含有n个节点、每次加入m条边的BA无标度网络,下面是一个例子:importnetworkxasnximportmatplotlib.pyplotaspltBA=nx.random_graphs.barabasi_albert_graph(20,1)#生成n=20、m=1的BA无标度网络_pos=nx.spring_layout(BA)#定义一个布局,此处采用了spring布局方式nx.draw(BA,pos,with_labels=False,node_size=30)#绘制图形plt.show()运行结果如下:图4NetworkX生成的BA无标度网络五、对BA模型实现代码的分析前面我们介绍了NetworkX提供的4种网络演化模型的应用方法,但仅停留在使用已有的模型是不够的,实际工作中我们可能会自己开发一些网络演化模型。利用NetworkX提供的数据结构,我们可以比较方便的完成这一工作。下面以NetworkX中BA模型的实现代码为例,分析用NetworkX开发网络演化模型的一般思路。NetworkX中关于网络建模的代码在random_graphs.py这个文件中,可以用记事本打开它。为了叙述简便起见,我删掉了原始代码中的一些错误处理与初始条件定义的语句,红色部分是翻译后的注释。#定义一个方法,它有两个参数:n-网络节点数量;m-每步演化加入的边数量defbarabasi_albert_graph(n,m):#生成一个包含m个节点的空图(即BA模型中t=0时的m0个节点)G=empty_graph(m)#定义新加入边要连接的m个目标节点targets=range(m)#将现有节点按正比于其度的次数加入到一个数组中,初始化时的m个节点度均为0,所以数组为空repeated_nodes=[]#添加其余的n-m个节点,第一个节点编号为m(Python的数组编号从0开始)source=m#循环添加节点whilesource<n:#从源节点连接m条边到选定的m个节点targets上(注意targets是上一步生成的)G.add_edges_from(zip([source]*m,targets))#对于每个被选择的节点,将它们加入到repeated_nodes数组中(它们的度增加了1)repeated_nodes.extend(targets)#将源点m次加入到repeated_nodes数组中(它的度增加了m)repeated_nodes.extend([source]*m)#从现有节点中选取m个节点,按正比于度的概率(即度优先连接)targets=set()whilelen(targets)<m:#按正比于度的概率随机选择一个节点,见注释1x=random.choice(repeated_nodes)#将其添加到目标节点数组targets中targets.add(x)#挑选下一个源点,转到循环开始,直到达到给定的节点数nsource+=1#返回所得的图GreturnG注释1:此步是关键,random.choice方法是从一个数组中随机地挑选一个元素。由于repeated_nodes数组中的节点出现次数是正比于节点度的,所以这样处理可以保证按度大小的概率选出节点,即实现了度优先连接。如果是按正比于节点适应性等非整数值优先连接,可以参考我的另一篇博文《根据值的大小随机取数组元素的方法》。六、小结NetworkX的优势之一就是开源,这也是所有Python库的优势(Python是脚本语言,它没有办法隐藏源代码)。NetworkX的源代码结构清晰,风格简练,注释详尽,是学习、研究复杂网络不错的参考资料。当然在这方面我也是初学者,更多的功能还需要在实际应用中不断去发掘和领会本文引用地址:/m/usercontent.aspx?id=337689*本文仅代表博主个人观点,与科学网无关。本文标签:复杂网络NetworkX相关文章:[转载]复杂网络常见的数据和程序代码网站[转载]复杂网络资源会议视频分享;Multi-disciplinaryapproachofcomplexity,...节点度相关性对无标度网络上随机游走的影响[转载]幂率分布研究的实验数据一一圣达菲研究所[转载]第六届全国复杂网络学术会议[大会日程安排].一类复杂网络的新家族:广义Farey树网络及其三维金字塔[转载]复杂网络的新应用(结构力学)揭示复杂,件:从经典分形到复杂网络人群密集经济是“万堵之源”!当前推荐数:2推荐人:huangfuqiangyizhenzhong[推荐到博客首页评论顺排[5]标题:发表评论人:[游客]amazon[2010-6-290:15:47]ip:158.132.150.*1、Networkx的图采用了字典-字典-字典结构,这个很特殊,不是邻接矩阵或链表。请老师举例讲一下,比如对于一个三角形,3个点,3个边,或者4个点全连接,对应的G的数据结构是什么样子的。举例有助于快速理解。2。G.add_edges_from(zip([source]*m,targets))这个不理解。zip函数像C++java一样也是返回值的吗?返回的难道是一个二维数组?比如zip([44],[02])产生:【44;02】add_edges_from又具体是怎么弄?估计前提得理解G的“字典-字典-字典”博主回复:1、例如对于图A-B-C,它的数据结构是(A:(B:{}},C:(B:{}},B:(A:{},C:{}}}(注意每个字母前后都有单引号,这回复有问题,把引号给过滤掉了,详细说明请参见/reference/introduction.html)2、zip([4,4],[0,2])返回[(4,0),(4,2)],zip([1,2,3],[4,5,6])返回[(1,4),(2,5),(3,6)]3、add_edges_from((4,0),(4,2))相当于依次运行:add_edge(4,0)和add_edge(4,2),它的含义是从一个二元组构成的数组中依次将每个二元组作为一条边添加到图中。希望以上回答你能满意。另外如果你对这个库感兴趣,建议你装一个Python和NX自己编几行代码,很快就会熟悉它。光看代码有时候难以体会含义,要先熟悉Python的元组(Tuple,相当于不可变数组)、列表(List,相当于可变数组)和字典(Dict,就是哈希表)这三种基本数据结构,以及Python的函数编程思想。[4]标题:发表评论人:[游客]amazon[2010-6-2822:50:25]ip:158.132.150.*对python语法不懂推测:#类似于C++的函数defbarabasi_albert_graph(n,m):#生成一个包含m个节点的空图----猜:G不是一个邻接矩阵呢,也不是一个链表的数据结构,更可能是一个类的对象,G=empty_graph(m)range(5)函数的结果是一个数组:【01234】,和matlab的:0:1:4一样targets=range(m)#提供一个摸彩票用的黑箱子,开始是空的,repeated_nodes=[]补注repeated_nodes#以后会装2个黄球,5个红球,12个蓝球,胳膊申请去,闭上眼睛摸球。。。要摸出m个球。如果node-0的degree是2,node-1的degree是5,node-2的degree是7,则repeated_nodes=[00111112222222],#这样等概率随机选择时,node2被选中的概率高。#repeated_nodes最大是一个n*m*2大小的数组,内存消耗,超出了栈的大小,可能影响速度#开始有了m个节点,分别是:012...m-1,所以下一个要添加的是m,最后一个是n-1Python的数组编号从0开始source=m#循环添加节点,python的while不用大括号,不用end完全靠对齐?whilesource<n:#从源节点连接m条边到选定的m个节点targets上(注意targets是上一步生成的)猜测是从empty_graph类中继承了一个method:add_edges_from#但是不知道zip([source]*m,targets)是什么意思,[source]*m似乎是source执行m次python特殊的语法习惯?G.add_edges_from(zip([source]*m,targets))extend是数组自有的一个功能,把某个数复制几个,加到数组里,默认复制一个。repeated_nodes.extend(targets)repeated_nodes.extend([source]*m)#清空箱子targets=set()然后挑m个新的node装到箱子里,为下一轮连接m条边用whilelen(targets)<m:#真正的闭上眼睛随便x=random.choice(repeated_nodes)targets.add(x)----换成targets.extend(x)似乎也对。#挑选下一个源点,转到循环开始,直到达到给定的节点数nsource+=1#返回所得的图GreturnG博主回复:你分析得很正确。Python是很怪,但是很简单,你和我一开始一样,受C++毒害太深了,嘿嘿,不好转变过来:)其实Python很简单优美。回答你的一些问题(可能我理解的也不对):1、Networkx的图采用了字典-字典-字典结构,这个很特殊,不是邻接矩阵或链表。2、Python完全靠缩进定义代码快,所以程序可读性很好(因为是强制的,不像C++等语言不同人会写出不同风格的代码来)3、Zip是拉链函数,它把两个数组的元素一对一的对应起来组成一个二维数组(想象一下拉链的样子)。4、[source]*m是生成一个含有m个source的数组5、extend是扩展数组,它接受另一个数组作为参数6、add也是扩展数组,但它只接受一个元素作为参数[3]标题:发表评论人:[游客]jery761210[2010-6-2521:52:18]ip:222.18.40.*这是在python上运行的吗博主回复:是的,请看我的第一篇笔记/m/user_content.aspx?id=337442,有详细的安装和运行说明。上个问题理解错了,抱歉:)[2]标题:发表评论人:[游客]jery761210[2010-6-2420:47:26]ip:221.182.46.*这些代码是在哪运行的博主回复:电脑上。在手机里也可以,装Pys60[1]标题:发表评论人:yizhenzhong[2010-6-2214:55:40]这些东西看似基础,但是往往是初学者的一道门槛,这三篇博文很好啊!!!博主回复:谢谢鼓励,后便还有,呵呵。复杂网络分析库NetworkX学习笔记(4):网络可视化科学可视化是利用计算机图形学来创建视觉图像,帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。对于复杂网络研究来说,可视化技术同样重要,它有助于呈现或解释复杂网络数据和模型,进而从中发现(或许是从数据中不易发现的)各种模式、特点和关系。在我的另一篇博文《推荐一个复杂网络可视化的网站》中,介绍了这个网站,上边有大量复杂网络和复杂系统的图片,五彩缤纷,令人叹为观止。有的朋友可能会想,这些图形是否都是使用一些专业的平面设计软件制作的呢?其实,通过使用NetworkX,我们同样可以制作出精美的复杂网络图形,它提供了非常丰富的网络可视化功能。下边这幅动画就是用从NetworkX网站上下载的图片拼合而成的,感兴趣的朋友可以到/gallery.html这个地址去查看生成这些图形的源代码。在这篇笔记中,我将简单地介绍使用NetworkX绘制复杂网络图形的基本方法。当然在这方面我也是初学,只略懂一些皮毛,希望能起到抛砖引玉的作用:)一、基本绘图流程在NetworkX中,绘制一个网络使用nx.draw()方法,它至少接受一个参数:即你希望绘制的网络G。实际上这个方法非常复杂,它可以指定20多个关键字参数,后边会介绍一些常用的参数,我们先从最简单的情况入手,看看下边的例子:importnetworkxasnx#导入networkx包importmatplotlib.pyplotasplt#导入绘图包matplotlib(需要安装,方法见第一篇笔记)G=nx.random_graphs.barabasi_albert_graph(100,1)#生成一个BA无标度网络Gnx.draw(G)#绘制网络G
plt.savefig("ba.png")plt.show()#输出方式1:将图像存为一个png格式的图片文件#输出方式2:plt.savefig("ba.png")plt.show()运行上述代码的结果如下:这样,用短短的几行代码就完成了一个最基本的网络图形绘制,而且生成了一个功能丰富的窗体。窗口左下方的工具栏可以对图像进行放大、缩小、平移、保存等操作,可以自己动手试一下。同时,在源文件的目录下还生成了一个png格式的图片文件,可以把它插入报告或论文中,是不是很方便呢?二、运用样式上边的代码虽然简单,但生成的图形略显单调。NetworkX提供了一系列样式参数,可以用来修饰和美化图形,达到我们想要的效果。常用的参数包括:-'node_size':指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)-'node_color':指定节点的颜色(默认是红色,可以用字符串简单标识颜色,例如'r'为红色,'b'为绿色等,具体可查看手册)-'node_shape':节点的形状(默认是圆形,用字符串'o'标识,具体可查看手册)-'alpha':透明度(默认是1.0,不透明,0为完全透明)-'width':边的宽度(默认为1.0)-'edge_color':边的颜色(默认为黑色)-'style':边的样式(默认为实现,可选:solid|dashed|dotted,dashdot)-'with_labels':节点是否带标签(默认为True)-'font_size':节点标签字体大小(默认为12)-'font_color':节点标签字体颜色(默认为黑色)灵活运用上述参数,可以绘制不同样式的网络图形,例如:nx.draw(G,node_size=30,with_labels=False)是绘制节点尺寸为30、不带标签的网络图。三、运用布局NetworkX在绘制网络图形方面提供了布局的功能,可以指定节点排列的形式。这些布局包括:circular_layout:节点在一个圆环上均匀分布random_layout:节点随机分布shell_layout:节点在同心圆上分布spring_layout:用Fruchterman-Reingold算法排列节点(这个算法我不了解,样子类似多中心放射状)spectral_layout:根据图的拉普拉斯特征向量排列节点?我也不是太明白布局用pos参数指定,例如:nx.draw(G,pos=nx.circular_layout(G))。在上一篇笔记中,四个不同的模型分别是用四种布局绘制的,可以到那里去看一下效果,此处就不再重复写代码了。另外,也可以单独为图中的每个节点指定一个位置(x、y坐标),不过比较复杂,我还没有这样做过。感兴趣的朋友可以看一下NetworkX文档中的一个例子:/examples/drawing/knuthmiles.htmI。四、添加文本用plt.title()方法可以为图形添加一个标题,该方法接受一个字符串作为参数,fontsize参数用来指定标题的大小。例如:plt.title("BANetworks",fontsize=20)。如果要在任意位置添加文本,则可以采用plt.text()方法。事实上这些功能(包括前边的图形保存等功能)并不是由NetworkX提供的,从包的名字上可以看出,这些绘图函数都是由matplotlib这个包提供的。NetworkX只是把与复杂网络绘图相关的功能重新包装了一下,让用户调用更方便而已。需要补充的一点是,matplotlib并不直接支持中文文本,如果想输出中文,走正规方法还是挺麻烦的(见/KongDong/archive/2009/07/10/4338826.aspx)。不过有聪明的网友提出了一种偷梁换柱的解决方案:换字体。只要把一个中文字体文件(ttf文件)更名为Vera.ttf,拷贝到matplotlib的字体目录中覆盖原有文件,就可以输出中文了,具体细节见/ucherish/blog/item/63155e52b68c90070df3e3ff.html五、小结这篇笔记简单介绍了用NetworkX绘制复杂网络图形的方法,实际上NetworkX的制图能力是很强的(主要是matplotlib的功劳),本文所介绍的功能只是其中最基础的一部分,更多功能还有待我们一起去发掘。再次推荐/gallery.html上的绘图示例代码,能看懂弄清这些代码,用NetworkX绘图应该就难不住你了:)本文引用地址:/m/usercontent.aspx?id=337865*本文仅代表博主个人观点,与科学网无关。本文标签:
复杂网络NetworkX相关文章:[转载]复杂网络常见的数据和程序代码网站[转载]复杂网络资源会议视频分享:Multi-disciplinaryapproachofcomplexity,...节点度相关性对无标度网络上随机游走的影响.[转载]幂率分布研究的实验数据一一圣达菲研究所[转载]第六届全国复杂网络学术会议[大会日程安排].一类复杂网络的新家族:广义Farey树网络及其三维金字塔[转载]复杂网络的新应用(结构力学)揭示复杂性:从经典分形到复杂网络.人群密集经济是“万堵之源”!当前推荐数:1推荐人:IjXUfi推荐到博客首页评论顺排|[5]标题:发表评论人:[游客]chenziheziye[2010-8-292:46:43]ip:123.101.245.*嗯,看来也只有这样了,谢谢。[4]标题:发表评论人:[游客]chenziheziye[2010-8-281:38:25]ip:123.101.189.*闫老师,你好。看了你的文章获取了很多的信息量,帮助值非常大。现在我在做关键点选取的问题,我想产生两幅数据和图形都相同的图,不同的是标识出哪些点是关键点,用不同颜色代表。可是我发现图形的产生每次图形布局都在变呀,怎么都能让同样的数据每次都产生布局相同的图呀?博主回复:你要为每个点事先定义xy坐标。如果点比较多,就在第一次绘图的时候把每个点的坐标存在一个文件里,以后绘图读取就可以。[3]标题:发表评论人:babyann519[2010-7-21:00:39]闫老师,这个软件能够处理多大的网络?博主回复:文档里似乎没有上限。但过1万个节点似乎很慢很慢,考验人的耐心:)[2]标题:发表评论人:ljxue[2010-6-2310:11:17]如果不想写代码,Cytoscape是不错的可视化工具。博主回复:谢谢推荐,刚才看了一下相关资料,这个软件的确不错,还有中文帮助(/p/cytoscape-cn/),有机会我会尝试一下。复杂网络分析库NetworkX学习笔记(5):二分图二分图又称二部图,是图论中的一种特殊模型,它的顶点可分割为两个互不相交的子集,并且图中的每条边所关联的两个顶点分别属于这两个不同的顶点集。二分图在复杂网络分析中有很多应用,例如科学家合作网络(作者和论文)、商品网络(商品和购买者)、城市公交网络(线路和站点)等都可以用二分图来进行描述。NetworkX提供了一些基本的二分图建模与分析功能,下面对这些功能作一个简单的介绍。一、建立二分图建立二分图与建立普通的图方法比较类似,需要注意的是,边只能在不同类节点之间添加,同类节点之间不要添加边就可以。下面是一个简单的例子(本例中用1开头的编号表示项目节点,用2开头的编号表示参与者节点):importnetworkxasnxB=nx.Graph()#添加一个项目101,它有3个参与者:201,202,203B.add_edge(101,201)B.add_edge(101,202)B.add_edge(101,203)#添加一个项目102,它有2个参与者:203,202,2034B.add_edge(102,203)B.add_edge(102,204)此外,NetworkX还提供了多种二分图演化模型的建立方法,在这里把它们列出来供大家参考:--plete_bipartite_graph(n1,n2,create_using=None)建立一个完全二分图--networkx.generators.bipartite.bipartite_configuration_model(aseq,bseq,create_using=None,seed=None)根据两个度序列建立一个二分图--networkx.generators.bipartite.bipartite_random_regular_graph(d,n,create_using=None,seed=None)建立一个随机的规则二分图--networkx.generators.bipartite.bipartite_preferential_attachment_graph(aseq,p,create_using=None,seed=None)建立一个优先连接的二分图--networkx.generators.bipartite.bipartite_havel_hakimi_graph(aseq,bseq,create_using=None)根据两个度序列建立一个Havel-Hakimi模式的二分图(下面两个模型类似,我没有接触过这个模型,不太理解具体含义)--networkx.generators.bipartite.bipartite_reverse_havel_hakimi_graph(aseq,bseq,create_using=None)--networkx.generators.bipartite.bipartite_alternating_havel_hakimi_graph(aseq,bseq,create_using=None)二、检测图的二分性用networkx.is_bipartite()方法可以检测一个图是否是二分图。例如对上边代码建立的二分图,nx.is_bipartite(B)返回的结果是True,而对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《CB-T 3875-1999船用一般吊杆》新解读
- 政治●重庆卷丨2022年重庆市普通高中学业水平选择性考试政治试卷及答案
- 泥砖工日清卡
- 2024年度中小企业发展环境评估报告
- 云杉花墨天牛寄主识别的关键信息物质研究
- 汽车传感器与检测技术电子教案:制冷剂压力传感器
- 汽车传感器与检测技术电子教案:卡尔曼涡流式空气流量传感器
- 温州市河道生态建设技术研究招标文件
- 地震预警终端管理制度
- 中考地理复习教案第5课时 天气和气候
- 人教版数学五年级上册-42可能性的大小-教学课件
- 【MOOC】循证医学-南通大学 中国大学慕课MOOC答案
- 《安全事故案例》课件
- 皮瓣移植护理个案
- 《中央企业安全生产管理评价办法》专题培训
- XX机械公司员工手册可编辑范本
- 专项15-分式方程的解法-专题训练(50道)
- 2024至2030年中国环保化粪池数据监测研究报告
- 2024年特岗教师招聘考试-幼儿特岗教师招聘考试近5年真题集锦(频考类试题)带答案
- Python试题库(附参考答案)
- 甘肃省兰州市甘肃一中2025届高考物理押题试卷含解析
评论
0/150
提交评论