查找相似用户
现在,您将在已有知识的基础上,编写一个名为 most_similar_users() 的函数,用于查找与给定用户最相似的其他用户。
该函数的开头部分已为您写好。我们已经创建了一个节点列表 user_nodes,其中包含除传入函数的给定用户之外的所有用户。您的任务是完成该函数,使其能够找到与该给定用户最相似的用户。您将使用上一练习中实现的 user_similarity() 函数来完成此任务。
我们还设置了一个名为 similarities 的字典,其中键是分数,值的列表是节点。如果您之前从未见过 defaultdict,别担心——您会在第 3 章学到更多!它的行为与普通的 Python 字典完全相同。
本练习是课程的一部分
Python 网络分析中级
练习说明
- 遍历
user_nodes,使用您的user_similarity()函数计算给定user与每个user_node(记作n)之间的相似度。将结果存为similarity。 - 将分数与节点添加到
similarities字典中。键是分数(similarity),值是节点(n)。 - 计算最大相似度分数。为此,先使用
.keys()方法访问similarities的键(即分数),再使用max()函数。将结果存为max_similarity。 - 返回具有最大相似度的用户列表。该用户列表就是
similarities中键为max_similarity的值。 - 使用您的
most_similar_users()函数,打印与用户'u4560'最相似的用户列表。
交互式实操练习
通过完成这段示例代码来试试这个练习。
from collections import defaultdict
def most_similar_users(G, user, user_nodes, proj_nodes):
# Data checks
assert G.nodes[user]['bipartite'] == 'users'
# Get other nodes from user partition
user_nodes = set(user_nodes)
user_nodes.remove(user)
# Create the dictionary: similarities
similarities = defaultdict(list)
for n in ____:
similarity = ____(____, ____, ____, ____)
____[____].____
# Compute maximum similarity score: max_similarity
max_similarity = ____
# Return list of users that share maximal similarity
return ____[____]
user_nodes = get_nodes_from_partition(G, 'users')
project_nodes = get_nodes_from_partition(G, 'projects')
print(____)