Consigliare co-editor che non hanno ancora modificato insieme
Infine, sfrutterai il concetto di triangoli aperti per consigliare su GitHub utenti che dovrebbero collaborare!
Questo esercizio fa parte del corso
Introduzione all'analisi delle reti in Python
Istruzioni dell'esercizio
- Compila un elenco di utenti GitHub a cui consigliare di collaborare tra loro. Per farlo:
- Nel primo ciclo
for, itera su tutti i nodi inG, includendo i metadati (specificandodata=True). - Nel secondo ciclo
for, itera su tutte le possibili combinazioni di triangoli, che puoi individuare con la funzionecombinations()impostandosizea2. - Se tra
n1en2non esiste un arco, la collaborazione tra questi due nodi (utenti) dovrebbe essere consigliata; in tal caso incrementa il valore(n1), (n2)del dizionariorecommended. Puoi verificare se tran1en2esiste un arco usando il metodo.has_edge().
- Nel primo ciclo
- Usando una list comprehension, individua le 10 coppie di utenti a cui consigliare la collaborazione. L'iterable deve essere l'insieme delle coppie chiave-valore del dizionario
recommended(accessibile con il metodo.items()), mentre la condizione deve essere soddisfatta secountè maggiore del valore di soglia per le prime 10 inall_counts. Nota cheall_countsè ordinato in modo crescente, quindi puoi accedere alle prime 10 conall_counts[-10].
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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)