Co-Editoren empfehlen, die noch nicht zusammen editiert haben
Zum Abschluss nutzt du das Konzept offener Dreiecke, um GitHub-Nutzern Zusammenarbeit zu empfehlen!
Diese Übung ist Teil des Kurses
Einstieg in die Netzwerkanalyse mit Python
Anleitung zur Übung
- Stelle eine Liste von GitHub-Nutzern zusammen, die zur Zusammenarbeit miteinander empfohlen werden sollten. Gehe dazu so vor:
- Iteriere im ersten
for-Loop über alle Knoten inG, inklusive der Metadaten (durch Angabe vondata=True). - Iteriere im zweiten
for-Loop über alle möglichen Dreiecks-Kombinationen. Diese kannst du mit der Funktioncombinations()und einersizevon2ermitteln. - Falls
n1undn2keine Kante zwischen sich haben, sollte eine Zusammenarbeit zwischen diesen beiden Knoten (Nutzern) empfohlen werden. Erhöhe in diesem Fall den Wert(n1), (n2)im Dictionaryrecommended. Obn1undn2eine Kante zwischen sich haben, kannst du mit der Methode.has_edge()prüfen.
- Iteriere im ersten
- Ermittle mit einer Listenkomprehension die Top 10 Nutzerpaare, denen eine Zusammenarbeit empfohlen werden sollte. Das iterable sollen die Schlüssel-Wert-Paare des Dictionaries
recommendedsein (zugänglich über die Methode.items()), während die Bedingung erfüllt ist, wenncountgrößer ist als die Top 10 inall_counts. Beachte, dassall_countsaufsteigend sortiert ist, sodass du die Top 10 mitall_counts[-10]erhältst.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Import necessary modules
from itertools import combinations
from collections import defaultdict
# Initialize the defaultdict: recommended
recommended = defaultdict(int)
# Iterate over all the nodes in G
for n, d in ____:
# Iterate over all possible triangle relationship combinations
for n1, n2 in ____(list(G.neighbors(n)), ____):
# Check whether n1 and n2 do not have an edge
if not G.has_edge(____, ____):
# Increment recommended
____[(____, ____)] += 1
# Identify the top 10 pairs of users
all_counts = sorted(recommended.values())
top10_pairs = [pair for pair, count in ____ if ____ > ____]
print(top10_pairs)