ค้นหาการเป็นสมาชิกร่วมกัน: การ 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[____.____[____]]))