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
Instruções do exercício
- Itere sobre
user_nodese calcule a similaridade entreusere cadauser_node(n) usando sua funçãouser_similarity(). Armazene o resultado emsimilarity. - 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
similaritiesusando o método.keys()e depois use a funçãomax(). Armazene o resultado emmax_similarity. - Retorne a lista de usuários que têm similaridade máxima. Essa lista de usuários é o valor da chave
max_similaritydesimilarities. - 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(____)