CommencezCommencez gratuitement

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

Voir le cours

Instructions de l’exercice

  • Parcourez user_nodes et calculez la similarité entre user et chaque user_node (n) au moyen de votre fonction user_similarity(). Enregistrez le résultat dans similarity.
  • 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 similarities avec la méthode .keys(), puis utilisez la fonction max(). Enregistrez le résultat dans max_similarity.
  • Retournez la liste des utilisateurs qui partagent la similarité maximale. Cette liste d'utilisateurs correspond à la valeur de la clé max_similarity de similarities.
  • 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(____)
Modifier et exécuter le code