开始使用免费开始使用

查找相似用户

现在,您将在已有知识的基础上,编写一个名为 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(____)
编辑并运行代码