IniziaInizia gratis

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

Visualizza il corso

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 in G, includendo i metadati (specificando data=True).
    • Nel secondo ciclo for, itera su tutte le possibili combinazioni di triangoli, che puoi individuare con la funzione combinations() impostando size a 2.
    • Se tra n1 e n2 non esiste un arco, la collaborazione tra questi due nodi (utenti) dovrebbe essere consigliata; in tal caso incrementa il valore (n1), (n2) del dizionario recommended. Puoi verificare se tra n1 e n2 esiste un arco usando il metodo .has_edge().
  • 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 se count è maggiore del valore di soglia per le prime 10 in all_counts. Nota che all_counts è ordinato in modo crescente, quindi puoi accedere alle prime 10 con all_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)
Modifica ed esegui il codice