Recommander des coéditeurs qui n'ont pas encore collaboré
Pour terminer, vous allez mettre à profit le concept des triangles ouverts afin de recommander des utilisateurs GitHub pour collaborer!
Cette activité fait partie du cours
Introduction à l'analyse des réseaux en Python
Instructions de l’exercice
- Dressez une liste d'utilisateurs GitHub à qui recommander de collaborer entre eux. Pour ce faire :
- Dans la première boucle
for, itérez sur tous les nœuds deG, métadonnées incluses (en précisantdata=True). - Dans la deuxième boucle
for, parcourez toutes les combinaisons possibles de triangles, qu'on peut obtenir avec la fonctioncombinations()et unesizede2. - Si
n1etn2n'ont pas d'arête entre eux, il faut recommander une collaboration entre ces deux nœuds (utilisateurs). Dans ce cas, incrémentez la valeur(n1), (n2)du dictionnairerecommended. Vous pouvez vérifier sin1etn2ont une arête entre eux à l'aide de la méthode.has_edge().
- Dans la première boucle
- À l'aide d'une compréhension de liste, repérez les 10 meilleures paires d'utilisateurs à qui recommander de collaborer. L'itérable doit être les paires clé-valeur du dictionnaire
recommended(accessibles avec la méthode.items()), et la condition doit être satisfaite sicountest supérieur aux 10 meilleurs deall_counts. Notez queall_countsest trié par ordre croissant; vous pouvez donc accéder aux 10 premiers avecall_counts[-10].
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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)