Recomendar coeditores que aún no han editado juntos
Por último, vas a aprovechar el concepto de triángulos abiertos para recomendar usuarios de GitHub que colaboren.
Este ejercicio forma parte del curso
Introducción al análisis de redes en Python
Instrucciones del ejercicio
- Compila una lista de usuarios de GitHub a los que se debería recomendar colaborar entre sí. Para hacerlo:
- En el primer bucle
for, itera por todos los nodos deG, incluida la metainformación (especificandodata=True). - En el segundo bucle
for, itera por todas las combinaciones posibles de triángulos, que puedes identificar con la funcióncombinations()con unsizede2. - Si
n1yn2no tienen una arista entre ellos, se debería recomendar la colaboración entre estos dos nodos (usuarios), así que incrementa el valor(n1), (n2)del diccionariorecommendeden ese caso. Puedes comprobar sin1yn2tienen una arista entre ellos usando el método.has_edge().
- En el primer bucle
- Usando una lista por comprensión, identifica las 10 parejas principales de usuarios a los que se debería recomendar colaborar. El iterable deben ser los pares clave-valor del diccionario
recommended(a los que puedes acceder con el método.items()), mientras que la condición se debe cumplir sicountes mayor que el top 10 enall_counts. Ten en cuenta queall_countsestá ordenado de forma ascendente, por lo que puedes acceder al top 10 conall_counts[-10].
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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)