Рекомендації співредакторів, які ще не працювали разом
Нарешті, ви застосуєте концепцію відкритих трикутників, щоб рекомендувати користувачів 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)