Recomandarea co-editorilor care nu au colaborat încă
În cele din urmă, vei folosi conceptul de triunghiuri deschise pentru a recomanda utilizatorilor GitHub cu cine să colaboreze!
Acest exercițiu face parte din cursul
Introducere în analiza rețelelor în Python
Instrucțiuni pentru exercițiu
- Alcătuiește o listă de utilizatori GitHub cărora ar trebui să li se recomande să colaboreze între ei. Pentru aceasta:
- În primul
for, iterează peste toate nodurile dinG, inclusiv metadatele (specificânddata=True). - În al doilea
for, iterează peste toate combinațiile posibile de triunghiuri, care pot fi identificate folosind funcțiacombinations()cu unsizede2. - Dacă
n1șin2nu au o muchie între ele, o colaborare între aceste două noduri (utilizatori) ar trebui recomandată, deci incrementează valoarea cheii(n1), (n2)din dicționarulrecommended. Poți verifica dacăn1șin2au sau nu o muchie între ele folosind metoda.has_edge().
- În primul
- Folosind un list comprehension, identifică primele 10 perechi de utilizatori cărora ar trebui să li se recomande colaborarea. Iterabilul ar trebui să fie perechile cheie-valoare din dicționarul
recommended(accesibile cu metoda.items()), iar condiția trebuie să fie îndeplinită dacăcounteste mai mare decât al 10-lea cel mai mare element dinall_counts. Reține căall_countseste sortat în ordine crescătoare, deci poți accesa primele 10 cuall_counts[-10].
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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)