Trouver des utilisateurs similaires
Vous allez maintenant vous appuyer sur ce que vous avez appris pour écrire une fonction appelée most_similar_users() qui trouve les utilisateurs les plus similaires à un utilisateur donné.
Les premières lignes de cette fonction ont été préparées pour vous. Une liste de nœuds, user_nodes, a été créée ; elle contient tous les utilisateurs, à l’exception de l’utilisateur fourni en argument à la fonction. Votre tâche est de compléter la fonction afin qu’elle trouve les utilisateurs les plus similaires à cet utilisateur. Vous utiliserez votre fonction user_similarity() de l’exercice précédent pour vous aider.
Un dictionnaire appelé similarities a été configuré, dans lequel les clés sont les scores et les valeurs sont des listes de nœuds. Si vous n’avez jamais vu de defaultdict, ne vous inquiétez pas — vous en apprendrez davantage au chapitre 3 ! Il fonctionne exactement comme un dictionnaire Python classique.
Cet exercice fait partie du cours
Analyse de réseaux intermédiaire en Python
Instructions
- Itérez sur
user_nodeset calculez la similarité entreuseret chaqueuser_node(n) à l’aide de votre fonctionuser_similarity(). Stockez le résultat danssimilarity. - Ajoutez le score et le nœud au dictionnaire
similarities. La clé est le score —similarity— et la valeur est le nœud —n. - Calculez le score de similarité maximal. Pour cela, accédez d’abord aux clés (qui contiennent les scores) de
similaritiesà l’aide de la méthode.keys(), puis utilisez la fonctionmax(). Stockez le résultat dansmax_similarity. - Retournez la liste des utilisateurs qui partagent la similarité maximale. Cette liste d’utilisateurs correspond à la valeur de la clé
max_similaritydanssimilarities. - Utilisez votre fonction
most_similar_users()pour afficher la liste des utilisateurs les plus similaires à l’utilisateur'u4560'.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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(____)