networkx学习与使用——(1)节点和边的增删查改
简介
去年和师兄一起做社交网络分析的时候发现了networkx这个python工具包。这个工具包对于图数据的分析非常的方便,不需要自己再去定义一些数据结构,里面也集成了很多的算法,如bfs和dfs等。
使用的环境主要是Anaconda3集成的。
基本的图创建
在学习的过程中和大多数Python的工具包一样,代码实例和使用手册一起食用会更香哦。
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)
稍微复杂点的画图
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()
我们将同样的代码使用在G2上会得到下图,重边图稍微有点复杂,之后会结合知识图谱的数据来结合使用。
完整代码资源
参考
networkx官网地址:https://networkx.org/
Original: https://blog.csdn.net/m0_37427515/article/details/109872978
Author: 我的手机半斤重
Title: networkx学习与使用——(1)节点和边的增删查改
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/595446/
转载文章受原作者版权保护。转载请注明原作者出处!