networkx学习与使用——(1)节点和边的增删查改

networkx学习与使用——(1)节点和边的增删查改

简介

去年和师兄一起做社交网络分析的时候发现了networkx这个python工具包。这个工具包对于图数据的分析非常的方便,不需要自己再去定义一些数据结构,里面也集成了很多的算法,如bfs和dfs等。
使用的环境主要是Anaconda3集成的。

基本的图创建

在学习的过程中和大多数Python的工具包一样,代码实例和使用手册一起食用会更香哦。

networkx学习与使用——(1)节点和边的增删查改

networkx官网地址:https://networkx.org/

; 图的生成

在数据结构中,图是一种多对多逻辑的数据结构。以往说的图大多是不含自环和重边的图,按方向主要区分为有向图和无向图。但现实中的图数据是更为复杂的数据,例如知识图谱就是一个有向重边图。

networkx对此也非常人性化的对此以区分。下面是四种图的构造:

import networkx as nx
import matplotlib.pyplot as plt
G1 = nx.Graph()
G2 = nx.DiGraph()
G3 = nx.MultiGraph()
G4 = nx.MultiDiGraph()

我们生成了四种不同的图,它们现在没有边,没有节点。

print(G1.number_of_nodes(), G1.number_of_nodes())

输出结果

0 0

添加节点和边

主要使用以下函数进行添加


G1.add_node(1)

G1.add_nodes_from([2,3])

G1.add_edge(3,4)

G1.add_edges_from([(1,3),(3,5)])

将上述代码的add改为remove就能把添加改为删除,

我们可以用以下方式查看一下graph生成的结果


print(G1.nodes())

out:
[1, 2, 3, 4, 5]

print(G1.edges())

out:
[(1, 3), (3, 4), (3, 5)]

print(G1[1])
print(G1[2])

out:
{3: {}}
{}

可以看到1和3有连边,2没有任何的连边


print(G1[1][3])
print(G1.has_edge(1,2))
print(G1.has_node(2))

out:
{}
False
True

这里1和2并没有边,直接索引会报错
索引1和3的边输出空字典,这是因为边没有任何属性
使用has_edge函数检测边是否存在
使用has_node函数检测节点是否存在

画图

简单的画图
我们可以看到,仅有一个点没有与其他点连接,根据代码可以推测出,节点2是没有与其他点连接的,并且可以看到节点3与其他点都进行了连接。

nx.draw(G1)

networkx学习与使用——(1)节点和边的增删查改
稍微复杂点的画图

labels={}
for node in G1.nodes():
    labels[node]=str(node)

pos=nx.kamada_kawai_layout(G1)

plt.rcParams['figure.figsize']= (6, 4)

nx.draw_networkx_nodes(G1,pos)

nx.draw_networkx_edges(G1,pos)

nx.draw_networkx_labels(G1,pos,labels)

plt.savefig("temp.png")
plt.show()

networkx学习与使用——(1)节点和边的增删查改
我们将同样的代码使用在G2上会得到下图,重边图稍微有点复杂,之后会结合知识图谱的数据来结合使用。
networkx学习与使用——(1)节点和边的增删查改

完整代码资源

networkx学习(1)

参考

networkx官网地址:https://networkx.org/

Original: https://blog.csdn.net/m0_37427515/article/details/109872978
Author: 我的手机半斤重
Title: networkx学习与使用——(1)节点和边的增删查改

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/595446/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球