在图上进行查询
既然您已经了解了图的一些基本属性,并练习使用 NetworkX 的绘图功能来可视化其组成部分,现在是时候学习如何在图中查询节点和边了。具体来说,您将查找"感兴趣的节点"和"感兴趣的边"。为此,您将使用视频中 Eric 讲解过的 .nodes() 和 .edges() 方法。.nodes() 方法返回一个节点视图可迭代对象,而 .edges() 方法返回一个边视图可迭代对象,每个元组显示该边所连接的节点。请记住,在这些方法中传入关键字参数 data=True,还能同时取回与节点和边相关的元数据。
您将编写列表推导式,用一行代码高效完成这些查询。若需回顾列表推导式,请参阅 DataCamp 的 Python Data Science Toolbox 课程的第 2 部分。列表推导式的写法如下:
[ 输出表达式 for 迭代变量 in 可迭代对象 if 谓词表达式 ]。
您需要填写的是 可迭代对象 和 谓词表达式。在提交答案之前,您可以先在 IPython Shell 中探索该图,作为原型验证您的思路。
本练习是课程的一部分
Python 网络分析入门
练习说明
- 使用列表推导式,从图
T中获取具有'occupation'标签且值为'scientist'的节点列表。- 已为您指定 输出表达式
n,以及 迭代变量n和d。您的任务是填写 可迭代对象 和 条件表达式。 - 使用
T的.nodes()方法访问其节点,并确保指定data=True以获取节点的元数据。 - 迭代变量
d是一个字典。此处关注的键为'occupation',对应的值应为'scientist'。
- 已为您指定 输出表达式
- 使用列表推导式,从图
T中获取形成时间至少为 6 年、也就是早于 2010 年 1 月 1 日 的边列表。- 同样需要您填写 可迭代对象 和 条件表达式。
- 使用
T的.edges()方法访问其边,并确保同时获取边的元数据。 - 日期以
datetime.date对象的形式存储在元数据字典d中,键为'date'。例如,要表示 2009 年 1 月 1 日,可使用字典值date(2009, 1, 1)。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Use a list comprehension to get the nodes of interest: noi
noi = [n for n, d in ____ if d['____'] == '____']
# Use a list comprehension to get the edges of interest: eoi
eoi = [(u, v) for u, v, d in ____ if ____ < ____]