一、图的基础知识
1.复杂网络(Complex Network)定义与特性
钱学森给出了复杂网络的一个较严格的定义:具有自组织、自相似、吸引子、小世界、无标度中部分或全部性质的网络称为复杂网络。
复杂网络一般具有的特性:
(1)小世界。大多数网络尽管规模很大但是任意两个节点间却又一条相当短的路径。
(2)集群即集聚程度(Clustering coefficient)。也就是网络集团化的程度,这是一种网络的内聚倾向。联通集团概念反映的是一个大网络中各集聚的小网络分布的相关联系状况。例如朋友圈中的一个小团体与另一个小团体之间的相互关系。
(3)幂律(Power law)的度分布概念。度的相关性反映顶点之间关系的联系紧密性。
2.网络结构的相关度量
度(Degree)——连接在某个节点上的边的数量。度描述的是节点的连接情况。一个网络的度是它包含的所有节点的度的平均数。(计算方法:网络中边数量的2倍除以节点数)
有向图中顶点入度之和等于顶点出度之和。
路径长度(Path length)——节点与节点之间的距离,即两节点间所需经过的最小边数。
平均路径长度——网络中所有成对节点之间的路径总数除以网络中所有成对节点的数目(节点的对数),就是平均路路径长度。
联通度(Connectivity)——图中的这样的k个节点,从图中去掉所有的这些节点以及它们关联的所有边后,所得到的图不再是连通图或是平凡图,称k为图的节点连通度。
集聚系数(Clustering coefficient)——图中所有构成的三角形个数除以由节点构成三角形的最大可能数(最大可能数是n*(n-1)(n-2)/321=n(n-1)*(n-2)/6)。
3.Gephi中的统计
平均度(degree)——计算每个节点的度,并统计相同度的节点数量。有向图的平均度:所有点的度数总和/节点数*2;无向图:所有点的度数总和/节点数。节点的度越高,连接它的点就越多,说明该点越关键。
平均加权度(weighted degree)——权重是指,取得某个点的一条边,如果该边的源为该节点,则该边的权重为加权出度,反之为加权入度。加权度为加权出度和加权入度的总和。有向图的平均加权度:加权度总和/2*节点数;无向图的平均加权度:加权度总和/节点数。
网络直径(graph distance)——网络中任意两结点间距离的最大值。
图密度(graph density)——有向图:边数/(节点数节点数-节点数);无向图:边数2/(节点数节点数-节点数)。其中(节点数节点数-节点数)即为n*(n-1),也就是n个节点可能产生的最大边数(有向图,若是无向图则要除以2)。图密度就是用实际边数除以可能产生的最大边数,结果越大表示图中节点连接越紧密。
模块化(modularity)——一种聚类方式。
二、Python中networkx模块的使用
1.建立图
import networkx as nx G=nx.Graph()#创建空的简单图 G=nx.DiGraph()#创建空的简单有向图 G=nx.MultiGraph()#创建空的多图 G=nx.MultiDiGraph()#创建空的有向多图
2.加点、加边
G.add_node(1)#加1这个点 G.add_node(1,1)#用(1,1)这个坐标加点 G.add_nodes_from([2,3])#加列表中的点 G.add_edge(1,2)#加边,起点是1终点是2 G.add_weight_edge(1,2,3.0)#第三个是权值 G.add_edges_from(list)#添加列表中的边 G.add_weight_edges_from(list)
3.删除点和边
G.remove_node() G.remove_nodes_from() G.remove_edge() G.remove_edges_from() G.clear()
4.遍历点和边
G.add_nodes_from([1,2,3]) for n in G.nodes(): print(n) G.add_edges_from([(1,2),(1,3)]) for e in G.edges(): print(e) print(G.degree())
打印
1 2 3 (1, 2) (1, 3) [(1, 2), (2, 1), (3, 1)]#1这个点有两条边连着,2、3只有一条边连着
5.画网络图
from matplotlib import pyplot as plt import networkx as nx G=nx.Graph() G.add_nodes_from([1,2,3]) G.add_edges_from([(1,2),(1,3)]) nx.draw_networkx(G) plt.show()
结果为
三、networkx模块常用的属性和方法
1.图
degree(G[, nbunch, weight]):返回单个节点或nbunch节点的度数视图。 degree_histogram(G):返回每个度值的频率列表。 density(G):返回图的密度。 info(G[, n]):打印图G或节点n的简短信息摘要。 create_empty_copy(G[, with_data]):返回图G删除所有的边的拷贝。 is_directed(G):如果图是有向的,返回true。 add_star(G_to_add_to, nodes_for_star, **attr):在图形G_to_add_to上添加一个星形。 add_path(G_to_add_to, nodes_for_path, **attr):在图G_to_add_to中添加一条路径。 add_cycle(G_to_add_to, nodes_for_cycle, **attr):向图形G_to_add_to添加一个循环。
2.节点
nodes(G):在图节点上返回一个迭代器。 number_of_nodes(G):返回图中节点的数量。 all_neighbors(graph, node):返回图中节点的所有邻居。 non_neighbors(graph, node):返回图中没有邻居的节点。 common_neighbors(G, u, v):返回图中两个节点的公共邻居。
3.边
edges(G[, nbunch]):返回与nbunch中的节点相关的边的视图。 number_of_edges(G):返回图中边的数目。 non_edges(graph):返回图中不存在的边。