Busca usuarios similares
Ahora vas a construir sobre lo que has aprendido para escribir una función llamada most_similar_users() que encuentre los usuarios más similares a otro usuario dado.
Ya tienes el inicio de esta función. Se ha creado una lista de nodos, user_nodes, que contiene a todos los usuarios excepto el usuario proporcionado que se pasa a la función. Tu tarea es completar la función para que encuentre los usuarios más similares a ese usuario dado. Para ello, usarás tu función user_similarity() del ejercicio anterior.
Se ha configurado un diccionario llamado similarities, en el que las claves son las puntuaciones y la lista de valores son los nodos. Si no has visto nunca un defaultdict, no te preocupes: aprenderás más sobre ello en el Capítulo 3. Funciona exactamente igual que un diccionario normal de Python.
Este ejercicio forma parte del curso
Análisis de redes intermedio en Python
Instrucciones del ejercicio
- Itera sobre
user_nodesy calcula la similitud entreusery cadauser_node(n) usando tu funciónuser_similarity(). Guarda el resultado comosimilarity. - Añade la puntuación y el nodo al diccionario
similarities. La clave es la puntuación (similarity) y el valor es el nodo (n). - Calcula la puntuación máxima de similitud. Para ello, primero accede a las claves (que contienen las puntuaciones) de
similaritiesusando el método.keys()y luego utiliza la funciónmax(). Guarda el resultado comomax_similarity. - Devuelve la lista de usuarios que comparten la similitud máxima. Esta lista de usuarios es el valor de la clave
max_similaritydesimilarities. - Usa tu función
most_similar_users()para imprimir la lista de usuarios más similares al usuario'u4560'.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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(____)