Trouver des utilisateurs similaires
Vous allez maintenant mettre à profit ce que vous avez appris pour écrire une fonction appelée most_similar_users() qui trouve les utilisateurs les plus similaires à un utilisateur donné.
Le début de cette fonction a été préparé pour vous. Une liste de nœuds, user_nodes, a été créée ; elle contient tous les utilisateurs, sauf l'utilisateur passé à 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é mis en place, 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 en faites pas — vous en apprendrez davantage au chapitre 3 ! Il fonctionne exactement comme un dictionnaire Python ordinaire.
Cette activité fait partie du cours
Analyse de réseaux intermédiaire en Python
Instructions de l’exercice
- Parcourez
user_nodeset calculez la similarité entreuseret chaqueuser_node(n) au moyen de votre fonctionuser_similarity(). Enregistrez 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 ce faire, accédez d'abord aux clés (qui contiennent les scores) de
similaritiesavec la méthode.keys(), puis utilisez la fonctionmax(). Enregistrez 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_similaritydesimilarities. - 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 ce code d’exemple.
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(____)