Python Networkx基础知识及使用总结

简介: 钱学森给出了复杂网络的一个较严格的定义:具有自组织、自相似、吸引子、小世界、无标度中部分或全部性质的网络称为复杂网络。

一、图的基础知识

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()

结果为

2345_image_file_copy_52.jpg

三、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):返回图中不存在的边。
相关文章
|
7月前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
247 2
|
7月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析入门:基础知识与必备工具
【4月更文挑战第12天】Python是大数据时代数据分析的热门语言,以其简单易学和丰富库资源备受青睐。本文介绍了Python数据分析基础,包括Python语言特点、数据分析概念及其优势。重点讲解了NumPy、Pandas、Matplotlib、Seaborn和Scikit-learn等必备工具,它们分别用于数值计算、数据处理、可视化和机器学习。此外,还概述了数据分析基本流程,从数据获取到结果展示。掌握这些知识和工具,有助于初学者快速入门Python数据分析。
154 2
|
6月前
|
设计模式 开发者 Python
探索Python中的异步编程:从基础知识到实践应用
【6月更文挑战第6天】本文旨在深入探讨Python中的异步编程概念,包括其背后的原理、常用的库和框架以及如何在实际项目中应用这些知识。文章将通过具体的代码示例和场景分析,帮助读者理解异步编程在提升程序性能和处理并发任务中的重要性。
|
5月前
|
存储 人工智能 数据挖掘
十分钟学习Python基础知识
Python是一种高效、易学且功能强大的编程语言,广泛应用于数据分析、人工智能、Web开发等领域。如果你是编程新手,想要快速入门Python,那么这篇文章将是你的最佳选择。我将在十分钟内带你了解Python的基础知识。
|
6月前
|
索引 Python
Python考试基础知识
Python考试基础知识
|
6月前
|
关系型数据库 MySQL 数据库
探索Python中的异步编程:从基础知识到高级应用
【6月更文挑战第8天】随着技术的进步,异步编程已经成为现代软件开发中不可或缺的一部分。本文将深入探讨Python中的异步编程,包括其基础知识、常用库和框架,以及一些高级应用。我们将通过实例来展示如何有效地使用异步编程来提高程序的性能和响应性。无论你是初学者还是经验丰富的开发者,这篇文章都会为你提供有价值的见解和技巧。
59 2
|
6月前
|
存储 关系型数据库 API
探索Python中的异步编程:从基础知识到实际应用
【6月更文挑战第6天】在本文中,我们将深入探讨Python中的异步编程,这是一种强大的编程技术,可以帮助我们更有效地处理并发任务。我们将从基础知识开始,然后逐步深入到实际应用,包括异步I/O操作、异步Web请求和异步数据库操作等。最后,我们将通过一个实际的项目案例,展示如何在Python中使用异步编程来提高程序的性能和效率。
|
6月前
|
Python
Python包 - networkx详细拆解
Python包 - networkx详细拆解
53 0
|
6月前
|
JavaScript 前端开发 Java
python的入门基础知识和一些小技巧
python的入门基础知识和一些小技巧
36 0
|
6月前
|
算法 Python
Python基础教程(第3版)中文版 第一章 快速上手:基础知识(笔记)
Python基础教程(第3版)中文版 第一章 快速上手:基础知识(笔记)