ComeçarComece de graça

Encontrar usuários semelhantes

Agora você vai aproveitar o que aprendeu até aqui para escrever uma função chamada most_similar_users() que encontra os usuários mais semelhantes a um determinado usuário.

O começo dessa função já foi escrito para você. Foi criada uma lista de nós, user_nodes, que contém todos os usuários, exceto o usuário fornecido que foi passado para a função. Sua tarefa é completar a função de modo que ela encontre os usuários mais semelhantes a esse usuário fornecido. Você usará sua função user_similarity() do exercício anterior para ajudar nisso.

Um dicionário chamado similarities foi configurado, no qual as chaves são as pontuações e a lista de valores são os nós. Se você nunca viu um defaultdict antes, não se preocupe — você aprenderá mais sobre isso no Capítulo 3! Ele funciona exatamente como um dicionário comum do Python.

Este exercício faz parte do curso

Análise de Redes Intermediária em Python

Ver curso

Instruções do exercício

  • Itere sobre user_nodes e calcule a similaridade entre user e cada user_node (n) usando sua função user_similarity(). Armazene o resultado em similarity.
  • Adicione a pontuação e o nó ao dicionário similarities. A chave é a pontuação — similarity — e o valor é o nó — n.
  • Calcule a pontuação de similaridade máxima. Para isso, primeiro acesse as chaves (que contêm as pontuações) de similarities usando o método .keys() e depois use a função max(). Armazene o resultado em max_similarity.
  • Retorne a lista de usuários que têm similaridade máxima. Essa lista de usuários é o valor da chave max_similarity de similarities.
  • Use sua função most_similar_users() para imprimir a lista de usuários mais semelhantes ao usuário 'u4560'.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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(____)
Editar e executar o código