Gợi ý đồng biên tập viên chưa từng chỉnh sửa cùng nhau
Cuối cùng, bạn sẽ tận dụng khái niệm tam giác mở để gợi ý người dùng trên GitHub hợp tác với nhau!
Bài tập này là một phần của khóa học
Nhập môn Phân tích Mạng bằng Python
Hướng dẫn bài tập
- Biên soạn danh sách người dùng GitHub nên được gợi ý hợp tác với nhau. Thực hiện như sau:
- Ở vòng lặp
forthứ nhất, lặp qua tất cả các node trongG, gồm cả metadata (bằng cách đặtdata=True). - Ở vòng lặp
forthứ hai, lặp qua mọi tổ hợp tam giác có thể có, có thể xác định bằng hàmcombinations()vớisizelà2. - Nếu
n1vàn2không có cạnh nối giữa chúng, thì nên gợi ý hợp tác giữa hai node (người dùng) này, vì vậy hãy tăng giá trị(n1), (n2)trong dictionaryrecommendedtrong trường hợp này. Bạn có thể kiểm tran1vàn2có cạnh nối hay không bằng phương thức.has_edge().
- Ở vòng lặp
- Dùng list comprehension để xác định 10 cặp người dùng hàng đầu nên được gợi ý hợp tác. Iterable nên là các cặp khóa-giá trị của dictionary
recommended(có thể truy cập bằng.items()), còn điều kiện thỏa nếucountlớn hơn top 10 trongall_counts. Lưu ýall_countsđược sắp xếp tăng dần, nên bạn có thể truy cập top 10 bằngall_counts[-10].
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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)