ComeçarComece de graça

Recomendando coeditores que ainda não editaram juntos

Por fim, você vai aproveitar o conceito de triângulos abertos para recomendar usuários no GitHub a colaborarem!

Este exercício faz parte do curso

Introdução à Análise de Redes em Python

Ver curso

Instruções do exercício

  • Compile uma lista de usuários do GitHub que devem ser recomendados a colaborar entre si. Para isso:
    • No primeiro for, itere sobre todos os nós em G, incluindo os metadados (especificando data=True).
    • No segundo for, itere sobre todas as combinações de triângulos possíveis, que podem ser identificadas usando a função combinations() com size igual a 2.
    • Se n1 e n2 não tiverem uma aresta entre eles, uma colaboração entre esses dois nós (usuários) deve ser recomendada; portanto, incremente o valor (n1), (n2) do dicionário recommended nesse caso. Você pode verificar se existe uma aresta entre n1 e n2 usando o método .has_edge().
  • Usando uma compreensão de lista, identifique os 10 principais pares de usuários que devem ser recomendados a colaborar. O iterável deve ser os pares chave-valor do dicionário recommended (acessados com o método .items()), enquanto a condição deve ser satisfeita se count for maior do que o top 10 em all_counts. Note que all_counts está em ordem crescente, então você pode acessar o top 10 com all_counts[-10].

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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)
Editar e executar o código