首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

数据分析学习札记(三)-NetworkX的使用

2013-01-23 
数据分析学习笔记(三)-NetworkX的使用?创建简单的空图形(没有边和点)? ??????import networkx as nx? ? g

数据分析学习笔记(三)-NetworkX的使用

?

创建简单的空图形(没有边和点)? ??????import networkx as nx
? ? g = nx.Graph();
????? ? h = nx.Graph( g); ? ?#可以在构建Graph对象时指定值来构造一个新的Graph对象

? ? f = nx.Graph( [ (1,2),(2,3),(1,3)]); ?#可以在构建Graph对象时指定node关系的数组来构建Graph对象

????根据定义,一个Graph就是一个所有nodes的集合。在NetworkX中,nodes能够代表任何对象,例如一个文本,一个图片,一个xml对象或者另外一个Graph,一个自定义的对象等等。? ? 由于NetworkX提供了多种Graph对象生成方法,并且体痛了读写方法来读写多种格式,所以Graph对象能够使用多种方式创建。

----------------------Nodes????
? ? graph对象能够添加node(节点)

? ? g.add_node(1); ? #添加一个节点????
? ? g.add_nodes_from( [2,3]) ? #添加一个节点列表
? ??? ? h =?nx.path_graph(10)????g.add_nodes_from( h) ?#添加一个能够迭代的集合(例如:list, set, graph, file等等),这样g中包含了h中的元素
? ? g.add_node( h) ? ?#这是将h作为一个node添加到g中
? ? g.add_nodes_from( 'span'); ? #将span拆分为一个字符数组,然后添加node

? ? Note: 最后,h是一个graph对象,将h最为g的node,是一个很灵活的特性。这样节点可以是graph中的graph,files中的graphs,method中的graph等等。值得思考的是,如果结构化你的应用使得那些node都是有用的实体。如果你愿意,你还可以是g对应一个唯一的表示,每个node对应一个被表示的key。如果node对应的是对象中的内容,那么当内容变化是,不应该修改对象,应该修改node对应的内容(有点绕)。
-----------------------Edges
? ? graph对象中还能够添加edges(边);
????
? ? g.add_edge(1,2) ? ?# 添加一个1和2之间的edge
? ? e=(2,3) ? ? ? ? ? ? ? ? ? #定义个关系
? ? g.add_edge( *e) ? ?#添加关系对象

? ? g.add_edges_from([(1,2),(2,3)]) ?#添加一个edge数组
? ? g.add_edges_from( h.edges()); ? #h.edges()返回的h的包含所有edge的数组

? ? #拆除graph对象中的node和edge可以使用如下方法
? ? g.remove_node()
? ? g.remove_nodes_from()
? ? g.remove_edge()? ? g.remove_edges_from()

? ? #删除所有的node和edge
? ? g.clear();

? ? #如果重复添加相同的node和edge,NetworkX将会将会忽略那些重复的内容。? ? g.add_nodes_from("span");? ? g.add_node( "s");
????
? ? #获取一个Graph对象中node和edge的数量
? ? g.number_of_nodes();
? ? g.number_of_edges();

? ? #获取一个Graph对象中的node数组或者edge数组
? ? g.nodes();
? ? g.edges();

? ? g.neighbors(1); ? #获取与node为1相邻的node是节点
? ? g.remove_edge( 1,2); ? #删除node1和node2之间的edge,自此node1和node2不再为相邻的node


------------------------------如何使用nodes和edges?????
? ? 获取你已经注意到了node和edge并不是Graph的对象。这就能够使你更加灵活的使用node和edge,如果在python中使用string和number。node可以为任何hashable对象(除了Node),edge还可以和其他Graph对象中的node建立关联。例如:

????? ? g.add_node( n1, n2, Graph=x);

????? ? 例如,n1,n2可以代表生物蛋白质资料库中两种蛋白质对象,x可以是代表一个观察实验出版物中的xml片段记录。????????
????? ? 如果熟悉他们,那么他们会非常有用。如果滥用也会带来意想不到的结果。如有疑问可以通过convert_node_labels_to_integers()方法来获得更多的有整数组成的传统图形。

-------------------------除了使用上面提到的方法外,可以使用索引下标来访问edge????
? ? >>>g[1]
? ? {2,{}}
? ? >>>g[1][1]
? ? {}
????
? ? Note:不要修改返回到额字典结构,它是graph固有的一部分,直接修改会导致不一致的状态

? ? 同样通过下标可以设置edge的属性
????
? ? g.add_edge( 1, 3)
? ? g[1][1][ "color"] = "blue"

? ? 通过迭代快速查找所有的edge
"path.to.file")
--------------Analyzing graphs(分析图)
? ? 结构话的praph能够使用提供的方法来进行分析:

????? ? g = nx.Graph()????? ? g.add_edges_from( [(1,2),(1,3)])
????? ? g.add_node( "spam")

????? ? nx.connected_components( g) ? #将node有关联的显示一个数组中。返回的为一个数组
????? ? 打印: [ [1,2,3], [ "spam"]]

????? ? sorted( nx.degree( g).values())
????? ? 打印: [ 0, 1, 1, 2]

????? ? nx.clustering( g) ? #聚合
????? ? 打印: { 1 : 0.0, 2:0.0 , 3: 0.0 . "spam":0.0}

????? ? nx.degree( g) ? ? ? ?#显示等级
????? ? 打印:{1:2, 2:1,3:1,"spam":0}

????????
????? ? 对于特殊的node,可以将一个单独的node或者node集合作为参数。如果传入一个独立的node,那么返回一个独立的值,如果传入一个node集合,这个方法将返回一个字典类型的数据????
????????
????? ? nx.degree(g,1)????? ? #返回第一个node的值
????? ? 2
????????
????? ? g.degree( 1) ? ? ? ? ? #返回第一个node的值
????? ? 2

????? ? g.degree( 1, 2) ? ? ? #返回从第一个node开始,前两个node的值
????? ? {1:2, 2:1}
????? ? sorted( g.degree( [ 1, 2]).values()) ?#返回1和2并排序输出结果????? ? [1,2]

????? ? sorted( g.degree().values()) ? ? ? ? ? ?#返回g中node的权重,并排序输出结果

????? ? 想要了解更加详细的算法只是,参考:算法

---------------------Drawing Praphs(绘制图形)????
????? ? NetworkX并不是首选的图形绘制包,但是它包含了基本的图形绘制工具开源包Matplotlib。如果需要的话可以引入network.drawing包。(更详细的文档参考:Drawing)
????? ? 注意: NetworkX中的绘图包不和Python3兼容
????????
????? ? 首先引入 Matplotlib的plot接口

????? ? import matplotlib.pyplot as plt

????? ? 如果成功引入 networkx.drawing那么可以使用下面的方法绘制graph对象
????? ? nx.draw( g)????? ? nx.draw_random( g)
????? ? nx.draw_circular( g)
????? ? nx.draw_spectral( g)

????? ? 将绘制的内容保存的一个文件中使用下面的方法
????? ? nx.draw( g)
????? ? plt.savefig( "path.png")

数据分析学习笔记(四)-使用NetworkX进行数据分析的实例

热点排行