NetworkX入门教程

简介: NetworkX是复杂网络研究领域中的常用Python包。本文旨在通过介绍NetworkX中常用的方法等内容,为新手提供一个NetworkX的入门教程。

1. Graph Types


Graph Types文档

允许以可哈希的object作为节点,任何Python object作为边属性。

如何选择使用哪种图:

image.png


2. 图数据的创建、属性与常用方法


Graph文档

  1. 创建一个空的图
  • 无向图:G = nx.Graph()
  • 有向图:DG = nx.DiGraph()


  1. 将有向图转换为无向图:G = nx.Graph(DG)
  2. 图是否有向:G.is_directed() 返回布尔值


  1. 添加节点
  • 直接添加一个节点(任何object都可以作为节点,包括另一个图)G.add_node(1) G.add_node(DG)
  • 从任何容器加点:a list, dict, set or even the lines from a file or the nodes from another graph

G.add_nodes_from() 或 nx.path_graph() path_graph()文档(相当于生成一条线)


添加节点 示例代码:

G.add_nodes_from([2, 3])
G.add_nodes_from(range(100, 110))
H = nx.path_graph(10)
G.add_nodes_from(H)
G.add_node('spam')       # adds node "spam"
G.add_nodes_from('spam') # adds 4 nodes: 's', 'p', 'a', 'm'


  1. 添加边
  • 添加一条边 G.add_edge(u, v)
  • 添加一个边的列表 G.add_edges_from([(1, 2), (1, 3)])
  • 添加一个边的collection G.add_edges_from(H.edges)
  • 如果添加的边的点不存在于图中,会自动添上相应节点而不报错


  1. 属性attribute
  • 图的节点/边/图都可以在关联的attribute字典中以键值对key/value形式存储attribute(key一定要是可哈希的)
  • 默认情况下属性字典是空的
  • 可以通过 add_edge() add_node() 方法或直接操作分别名为graph edges nodes的属性字典来进行操作


示例代码:图

创建带属性的图

G = nx.Graph(day="Friday")
G.graph  #输出:{'day': 'Friday'}


为图赋属性(也是修改属性的方法)

G = nx.Graph()
G.graph["Name"] = "Bar"
print(G.graph)  #输出:{'Name': 'Bar'}


示例代码:节点

创建含属性的节点,为节点赋属性、删除节点属性,迭代输出节点及其属性数据

G.add_node(1, time="5pm")
G.add_nodes_from([3], time="2pm")
G.nodes[1]  #输出:{'time': '5pm'}
G.nodes[1]["room"] = 714  # node must exist already to use G.nodes
del G.nodes[1]["room"]  # remove attribute
list(G.nodes(data=True))  #输出:[(1, {'time': '5pm'}), (3, {'time': '2pm'})]
list(G)  #G也可以作为G节点的迭代器


添加多个带属性节点

# Add multiple nodes with attributes
G.add_nodes_from([
  (1, {"feature": 1, "label": 1}),
  (2, {"feature": 2, "label": 2})
])


示例代码:边

添加带属性的边,添加多个带属性的边,为边的属性赋值,迭代输出边及其属性数据

G.add_edge(1, 2, weight=4.7)
G.add_edges_from([(3, 4), (4, 5)], color="red")
G.add_edges_from([(1, 2, {"color": "blue"}), (2, 3, {"weight": 8})])
G[1][2]["weight"] = 4.7
G.edges[1, 2]["weight"] = 4
G.edges[(1, 2)]["weight"] = 4
list(G.edges(data=True))  #跟上面的G.nodes()类似


注意:G.edges属性是只读的,但是可以更改类似G.edges[1, 2]这种object里的属性,举例:G.edges[1, 2]['weight'] = 4

(对multigraph:MG.edges[u, v, key][name] = value)

添加含weight属性的边 add_weighted_edges_from()函数文档

G.add_weighted_edges_from([(0, 1, 3.0), (1, 2, 7.5)])


注意:如果在Graph/DiGraph中添加两次相同的边会仅更新weight;如果在MultiGraph/MultiDiGraph中则会储存多此边


  1. 兼容Python语法的捷径

示例代码:

1 in G  # check if node in graph
[n for n in G if n < 3]  # iterate through nodes
len(G)  # number of nodes in graph


  1. 节点数量 G.number_of_nodes()

边数量 G.number_of_edges()


  1. 可视化 nx.draw(G, with_labels = True)

image.png


  1. 节点特征
  • 度数:G.degree[node_id] G.out_degree(node_id) G.in_degree(node_id)

可选参数:weight

  • 邻居:
  1. 无向图:G.neighbors(node_id) 返回迭代器
  2. 有向图:
  • G.successors(node_id)(node_id指向的节点)
  • G.predecessors(node_id)(指向node_id的节点)
  1. 另一种访问邻居的方式是通过G.adj(adjacency list,详情见后文)

G[node_id]

G.adj[node_id]

  • PageRank:nx.pagerank(G) 返回PageRank向量 pagerank()文档


  1. 删除数据
  • 删除节点:G.remove_node(n)
  • 删除所有节点和边:G.clear()


  1. 图表示
  • adjacency list

1.G.adj

返回值示例:AdjacencyView({1: {2: {'weight': 0.125}, 3: {'weight': 0.75}}, 2: {1: {'weight': 0.125}, 4: {'weight': 1.2}}, 3: {1: {'weight': 0.75}, 4: {'weight': 0.375}}, 4: {2: {'weight': 1.2}, 3: {'weight': 0.375}}})

2.G.adjacency()

返回一个迭代器,每个元素示例格式:(1, {2: {'weight': 0.125}, 3: {'weight': 0.75}})

3.用类似 G[1] 的方法也可以访问(相当于 G.adj[1]),返回值示例:AtlasView({2: {'weight': 0.125}, 3: {'weight': 0.75}})


3. 除文中已列出的NetworkX官方文档外,其他使用到的参考资料


  1. cs224w课程的colab0
  • 原始文件下载地址
  • 我上传到GitHub的文件网址,已添加过部分私人注释
  1. cs224w课程的colab0的参考文件
  • 原始文件下载地址 有过时语法
  • 我把这个文件代码改了后跑通了,放到了Google Drive上公开。可以上的如需可资借鉴:“NetworkX.ipynb”的副本 但是没什么新东西,所以下不了也无所谓,我就不放在GitHub之类更容易登入的地方了。如需找我。
相关文章
|
3天前
|
算法 Serverless Python
《Numpy 简易速速上手小册》第8章:Numpy 和 SciPy 的交互(2024 最新版)
《Numpy 简易速速上手小册》第8章:Numpy 和 SciPy 的交互(2024 最新版)
35 0
|
3天前
|
自然语言处理 数据可视化 Java
用Python手把手教你WordCloud可视化
用Python手把手教你WordCloud可视化
|
8月前
|
编译器 Linux C语言
[Eigen中文文档] 从入门开始...
这是一个非常简短的Eigen入门文章。该文章有两层目的。对于想要尽快开始编码的人来说,该文章是对Eigen库的最简单介绍。你可以把该文章作为教程的第一部分,这更加详细的解释了Eigen库。看完这个教程后可以继续阅读 The Matrix class教程。
255 0
|
机器学习/深度学习 数据可视化 数据挖掘
PyTorch Geometric (PyG) 入门教程
PyTorch Geometric是PyTorch1的几何图形学深度学习扩展库。本文旨在通过介绍PyTorch Geometric(PyG)中常用的方法等内容,为新手提供一个PyG的入门教程。
PyTorch Geometric (PyG) 入门教程
BXA
|
12月前
|
并行计算 数据可视化 数据挖掘
Python可视化:Matplotlib基础教程
Matplotlib是一个用于创建静态、动态、交互性可视化图表的开源库,具有如下特点: * 可以创建2D或3D的图形,包括线性图、条形图、散点图、饼图、直方图等 * 可定制图形的各个属性,包括图形的大小、颜色、线型、标签、注释等 * 支持多种底层绘图库,包括Tkinter、wxPython、Qt、GTK等
BXA
145 0
|
XML 数据格式 Python
Python networkx tutorial教程
Python networkx tutorial教程
|
机器学习/深度学习 JSON 数据可视化
Pytorch的可视化工具visdom的基本使用
Pytorch的可视化工具visdom的基本使用
880 0
Pytorch的可视化工具visdom的基本使用
|
存储 搜索推荐 数据挖掘
Python数据分析之Numpy初体验
NumPy是一个用于科学计算的Python库,主要用于快速操作数组和矩阵。NumPy提供了许多实用的函数和方法,可以大大简化科学计算的代码。
171 0
|
Python
numpy实战笔记(进阶篇)
未公开版本(忘了发出)因为ipynb格式没办法上传,现在想起来了,也只好用图片截出来给小伙伴们看看了
88 0
|
数据挖掘 Python
Python Networkx基础知识及使用总结
钱学森给出了复杂网络的一个较严格的定义:具有自组织、自相似、吸引子、小世界、无标度中部分或全部性质的网络称为复杂网络。
Python Networkx基础知识及使用总结