ComenzarEmpieza gratis

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

Ver curso

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 de G, incluida la metainformación (especificando data=True).
    • En el segundo bucle for, itera por todas las combinaciones posibles de triángulos, que puedes identificar con la función combinations() con un size de 2.
    • Si n1 y n2 no 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 diccionario recommended en ese caso. Puedes comprobar si n1 y n2 tienen una arista entre ellos usando el método .has_edge().
  • 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 si count es mayor que el top 10 en all_counts. Ten en cuenta que all_counts está ordenado de forma ascendente, por lo que puedes acceder al top 10 con all_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)
Editar y ejecutar código