เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ค้นหาการเป็นสมาชิกร่วมกัน: การ Transposition

อย่างที่สังเกตได้ เมื่อแปลงกราฟไปเป็น sparse matrix จะทำให้ข้อมูล metadata ของกราฟหายไป ในแบบฝึกหัดนี้จะได้เรียนรู้วิธีนำ metadata กลับคืนมา เพื่อให้สามารถวิเคราะห์การเป็นสมาชิกร่วมกันได้อย่างละเอียดขึ้น

user_matrix ที่คำนวณไว้ในแบบฝึกหัดก่อนหน้าได้ถูกโหลดเข้า workspace แล้ว

ในที่นี้ ฟังก์ชัน np.where() จะเป็นเครื่องมือที่มีประโยชน์มาก ตัวอย่างการใช้งาน: สมมติว่ามีอาร์เรย์ a = [1, 5, 9, 5] หากต้องการหาดัชนีที่มีค่าเท่ากับ 5 ให้ใช้ idxs = np.where(a == 5) ซึ่งจะคืนค่าเป็นอาร์เรย์ในรูป tuple ได้แก่ (array([1, 3]),) และหากต้องการเข้าถึงดัชนีเหล่านั้น ให้ index เข้าไปใน tuple ด้วย idxs[0]

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การวิเคราะห์เครือข่ายระดับกลางใน Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • ค้นหาชื่อของบุคคลที่เป็นสมาชิกในชมรมมากที่สุด
    • เริ่มต้นด้วยการคำนวณ diag โดยใช้เมธอด .diagonal() กับ user_matrix
    • จากนั้นใช้ np.where() เพื่อเลือกดัชนีที่ diag มีค่าเท่ากับ diag.max() ซึ่งจะได้ผลลัพธ์เป็น tuple: อย่าลืม index เข้าไปใน tuple ด้วย [0] เพื่อเข้าถึงดัชนีที่ต้องการ
    • วนซ้ำ indices แล้วพิมพ์ค่า people_nodes ในแต่ละดัชนี i โดยใช้ฟังก์ชัน print() ที่เตรียมไว้ให้
  • กำหนดค่า diagonal เป็นศูนย์และแปลงเป็น "coordinate matrix format" โดยโค้ดส่วนนี้ได้เตรียมไว้ให้แล้วในคำตอบ
  • ค้นหาคู่ผู้ใช้ที่มีการเป็นสมาชิกร่วมกันในชมรมมากที่สุด
    • ใช้ np.where() เพื่อเข้าถึงดัชนีที่ users_coo.data มีค่าเท่ากับ users_coo.data.max()
    • วนซ้ำ indices2 แล้วพิมพ์ค่า users_coo.row และ users_coo.col ของ people_nodes ในแต่ละดัชนี idx

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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[____.____[____]]))  
แก้ไขและรันโค้ด