Ähnliche Nutzer finden
Du baust jetzt auf dem auf, was du bisher gelernt hast, und schreibst eine Funktion namens most_similar_users(), die die Nutzer findet, die einem gegebenen Nutzer am ähnlichsten sind.
Der Anfang dieser Funktion wurde bereits für dich geschrieben. Es wurde eine Liste von Knoten user_nodes erstellt, die alle Nutzer enthält, außer dem gegebenen Nutzer, der an die Funktion übergeben wurde. Deine Aufgabe ist es, die Funktion so zu vervollständigen, dass sie die Nutzer findet, die diesem gegebenen Nutzer am ähnlichsten sind. Dabei verwendest du deine Funktion user_similarity() aus der vorherigen Übung.
Ein Dictionary namens similarities wurde eingerichtet, in dem die Schlüssel die Scores und die Werte Listen von Knoten sind. Wenn du noch nie von einem defaultdict gehört hast, keine Sorge – in Kapitel 3 lernst du mehr darüber! Es funktioniert genau wie ein normales Python-Dictionary.
Diese Übung ist Teil des Kurses
Fortgeschrittene Netzwerkanalyse in Python
Anleitung zur Übung
- Iteriere über
user_nodesund berechne mit deiner Funktionuser_similarity()die Ähnlichkeit zwischenuserund jedemuser_node(n). Speichere das Ergebnis alssimilarity. - Hänge den Score und den Knoten an das Dictionary
similaritiesan. Der Schlüssel ist der Score –similarity– und der Wert ist der Knoten –n. - Berechne den maximalen Ähnlichkeits-Score. Greife dazu zuerst mit der Methode
.keys()auf die Schlüssel (die die Scores enthalten) vonsimilaritieszu und verwende anschließend die Funktionmax(). Speichere das Ergebnis alsmax_similarity. - Gib die Liste der Nutzer zurück, die die maximale Ähnlichkeit teilen. Diese Liste ist der Wert des Schlüssels
max_similarityinsimilarities. - Verwende deine Funktion
most_similar_users(), um die Liste der Nutzer auszugeben, die dem Nutzer'u4560'am ähnlichsten sind.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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(____)