Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

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 for thứ nhất, lặp qua tất cả các node trong G, gồm cả metadata (bằng cách đặt data=True).
    • Ở vòng lặp for thứ hai, lặp qua mọi tổ hợp tam giác có thể có, có thể xác định bằng hàm combinations() với size2.
    • Nếu n1n2 khô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 dictionary recommended trong trường hợp này. Bạn có thể kiểm tra n1n2 có cạnh nối hay không bằng phương thức .has_edge().
  • 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ếu count lớn hơn top 10 trong all_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ằng all_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)
Chỉnh sửa và Chạy Mã