Rekomendowanie współedytorów, którzy jeszcze nie współpracowali
Na koniec wykorzystasz koncepcję otwartych trójkątów, aby rekomendować użytkownikom GitHub potencjalnych współpracowników!
To ćwiczenie jest częścią kursu
Wprowadzenie do analizy sieci w Pythonie
Instrukcje do ćwiczenia
- Utwórz listę użytkowników GitHub, którym warto zarekomendować wzajemną współpracę. W tym celu:
- W pierwszej pętli
foriteruj po wszystkich węzłach grafuG, uwzględniając metadane (przekazującdata=True). - W drugiej pętli
foriteruj po wszystkich możliwych kombinacjach tworzących trójkąty, korzystając z funkcjicombinations()z argumentemsizerównym2. - Jeśli między
n1an2nie istnieje krawędź, współpraca tych dwóch węzłów (użytkowników) powinna zostać zarekomendowana – zwiększ wtedy wartość klucza(n1), (n2)w słownikurecommended. Do sprawdzenia, czy krawędź istnieje, użyj metody.has_edge().
- W pierwszej pętli
- Za pomocą wyrażenia listowego wyłoń 10 najlepszych par użytkowników do zarekomendowania. Iterowalnym powinny być pary klucz-wartość słownika
recommended(dostępne przez metodę.items()), a warunek powinien być spełniony, gdycountjest większe niż dziesiąta najwyższa wartość wall_counts. Pamiętaj, żeall_countsjest posortowane rosnąco, więc dziesiątą najwyższą wartość możesz odczytać jakoall_counts[-10].
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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)