Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Utwórz listę użytkowników GitHub, którym warto zarekomendować wzajemną współpracę. W tym celu:
    • W pierwszej pętli for iteruj po wszystkich węzłach grafu G, uwzględniając metadane (przekazując data=True).
    • W drugiej pętli for iteruj po wszystkich możliwych kombinacjach tworzących trójkąty, korzystając z funkcji combinations() z argumentem size równym 2.
    • Jeśli między n1 a n2 nie 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łowniku recommended. Do sprawdzenia, czy krawędź istnieje, użyj metody .has_edge().
  • 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, gdy count jest większe niż dziesiąta najwyższa wartość w all_counts. Pamiętaj, że all_counts jest posortowane rosnąco, więc dziesiątą najwyższą wartość możesz odczytać jako all_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)
Edytuj i uruchom kod