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
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 emG, incluindo os metadados (especificandodata=True). - No segundo
for, itere sobre todas as combinações de triângulos possíveis, que podem ser identificadas usando a funçãocombinations()comsizeigual a2. - Se
n1en2nã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áriorecommendednesse caso. Você pode verificar se existe uma aresta entren1en2usando o método.has_edge().
- No primeiro
- 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 secountfor maior do que o top 10 emall_counts. Note queall_countsestá em ordem crescente, então você pode acessar o top 10 comall_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)