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

Tìm thành viên chung: Chuyển vị

Có thể bạn đã nhận ra: khi chuyển sang biểu diễn ma trận thưa, bạn sẽ mất metadata từ đồ thị. Bây giờ bạn sẽ học cách gán lại metadata để có thể khám phá thêm về thành viên chung.

user_matrix mà bạn đã tính ở bài trước đã được nạp sẵn vào không gian làm việc của bạn.

Ở đây, hàm np.where() sẽ rất hữu ích. Cách hoạt động như sau: với một mảng, ví dụ a = [1, 5, 9, 5], nếu bạn muốn lấy các chỉ số có giá trị bằng 5, bạn có thể dùng idxs = np.where(a == 5). Kết quả trả về là một mảng trong một tuple, (array([1, 3]),). Để truy cập các chỉ số đó, bạn cần đánh chỉ mục vào tuple như idxs[0].

Bài tập này là một phần của khóa học

Phân tích mạng nâng cao với Python

Xem khóa học

Hướng dẫn bài tập

  • Tìm tên những người là thành viên của nhiều câu lạc bộ nhất.
    • Để làm điều này, trước tiên tính diag bằng phương thức .diagonal() trên user_matrix.
    • Sau đó, dùng np.where() để chọn các chỉ số nơi diag bằng diag.max(). Hàm này trả về một tuple: Hãy chắc rằng bạn truy cập đúng các chỉ số bằng cách đánh chỉ mục vào tuple với [0].
    • Lặp qua indices và in ra từng chỉ số i của people_nodes bằng hàm print() đã cho.
  • Đặt đường chéo về 0 và chuyển nó sang "định dạng ma trận tọa độ". Đoạn mã này đã được cung cấp sẵn trong phần đáp án.
  • Tìm các cặp người dùng có số câu lạc bộ chung nhiều nhất.
    • Dùng np.where() để lấy các chỉ số mà users_coo.data bằng users_coo.data.max().
    • Lặp qua indices2 và in ra từng chỉ số idx của users_coo.rowusers_coo.col trong people_node.

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 numpy as np

# Find out the names of people who were members of the most number of clubs
diag = ____ 
indices = np.where(____ == ____)[0]  
print('Number of clubs: {0}'.format(diag.max()))
print('People with the most number of memberships:')
for i in indices:
    print('- {0}'.format(____))

# Set the diagonal to zero and convert it to a coordinate matrix format
user_matrix.setdiag(0)
users_coo = user_matrix.tocoo()

# Find pairs of users who shared membership in the most number of clubs
indices2 = np.where(____ == ____)[0]
print('People with most number of shared memberships:')
for idx in indices2:
    print('- {0}, {1}'.format(people_nodes[____.____[____]], people_nodes[____.____[____]]))  
Chỉnh sửa và Chạy Mã