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

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

简介

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

基本的图创建

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

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

图的生成

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

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

import networkx as nx               #载入networkx包
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])
# 添加一条边,若边中的节点不在图中将会自动添加节点
# 如节点3已在图中,但节点4不在图中,节点4会被自动添加
G1.add_edge(3,4)
# 同理,添加一些边
G1.add_edges_from([(1,3),(3,5)])

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

# G1.remove_node(1)
# G1.remove_nodes_from([2,3])
# G1.remove_edge(3,4)
# G1.remove_edges_from([(1,3),(3,5)])

我们可以用以下方式查看一下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)

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.axis('on') 
# 去掉坐标刻度 
# plt.xticks([]) 
# plt.yticks([]) 

# 保存并显示图片
plt.savefig("temp.png")
plt.show()

在这里插入图片描述
我们将同样的代码使用在G2上会得到下图,重边图稍微有点复杂,之后会结合知识图谱的数据来结合使用。
在这里插入图片描述

完整代码资源

networkx学习(1)

参考

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的手机半斤重

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值