НачатьНачать бесплатно

Рекомендации соавторам, которые ещё не редактировали вместе

Теперь вы воспользуетесь концепцией открытых треугольников, чтобы рекомендовать пользователям GitHub сотрудничество друг с другом!

Это упражнение является частью курса

Введение в анализ сетей на Python

Посмотреть курс

Инструкции к упражнению

  • Составьте список пользователей GitHub, которым стоит порекомендовать совместную работу. Для этого:
    • В первом цикле for переберите все узлы графа G, включая метаданные (укажите data=True).
    • Во втором цикле for переберите все возможные комбинации для треугольников — используйте функцию combinations() с размером size, равным 2.
    • Если между n1 и n2 нет ребра, значит, сотрудничество между этими двумя узлами (пользователями) следует рекомендовать — увеличьте значение (n1), (n2) в словаре recommended. Проверить наличие ребра между n1 и n2 можно с помощью метода .has_edge().
  • С помощью генератора списка определите 10 лучших пар пользователей, которым стоит рекомендовать сотрудничество. Итерируемым объектом должны быть пары ключ-значение словаря recommended (доступны через метод .items()), а условие должно выполняться, если count больше значения для топ-10 в all_counts. Обратите внимание: all_counts отсортирован по возрастанию, поэтому топ-10 доступен через all_counts[-10].

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# 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)
Редактировать и запускать код