Рекомендации соавторам, которые ещё не редактировали вместе
Теперь вы воспользуетесь концепцией открытых треугольников, чтобы рекомендовать пользователям 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)