Recommander des co-éditeurs qui n’ont pas encore collaboré
Pour finir, vous allez exploiter le concept de triangles ouverts pour recommander des collaborations entre utilisateurs sur GitHub !
Cet exercice fait partie du cours
Introduction à l’analyse de réseaux en Python
Instructions
- Établissez une liste d’utilisateurs GitHub à recommander pour collaborer entre eux. Pour cela :
- Dans la première boucle
for, itérez sur tous les nœuds deG, y compris les métadonnées (en spécifiantdata=True). - Dans la seconde boucle
for, parcourez toutes les combinaisons possibles de triangles, que vous pouvez obtenir avec la fonctioncombinations()et unesizede2. - Si
n1etn2n’ont pas d’arête entre eux, une collaboration entre ces deux nœuds (utilisateurs) devrait être recommandée ; incrémentez donc la valeur(n1), (n2)du dictionnairerecommendeddans ce cas. Vous pouvez vérifier sin1etn2ont une arête entre eux avec la méthode.has_edge().
- Dans la première boucle
- À l’aide d’une compréhension de liste, identifiez les 10 paires d’utilisateurs à recommander en priorité. L’itérable doit être les paires clé-valeur du dictionnaire
recommended(accessibles avec la méthode.items()), et la condition doit être vraie sicountest strictement supérieur au top 10 deall_counts. Notez queall_countsest trié par ordre croissant, vous pouvez donc accéder au top 10 avecall_counts[-10].
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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)