ค้นหาผู้ใช้ที่คล้ายกัน
ถึงเวลาต่อยอดสิ่งที่เรียนรู้มาทั้งหมด โดยจะเขียนฟังก์ชันชื่อ most_similar_users() เพื่อค้นหาผู้ใช้ที่มีความคล้ายคลึงกับผู้ใช้ที่กำหนดให้มากที่สุด
โครงสร้างเริ่มต้นของฟังก์ชันนี้ถูกเขียนไว้ให้แล้ว รายการโหนด user_nodes ถูกสร้างขึ้นโดยมีรายชื่อผู้ใช้ทั้งหมด ยกเว้น ผู้ใช้ที่ส่งเข้ามาในฟังก์ชัน งานของคุณคือทำให้ฟังก์ชันนี้สมบูรณ์เพื่อค้นหาผู้ใช้ที่คล้ายกับผู้ใช้ที่กำหนดมากที่สุด โดยจะนำฟังก์ชัน user_similarity() จากแบบฝึกหัดก่อนหน้ามาช่วยในการคำนวณ
มีการเตรียม dictionary ชื่อ similarities ไว้ให้แล้ว โดย key คือคะแนนความคล้ายคลึง และ value คือรายการโหนด หากไม่เคยใช้ defaultdict มาก่อน ไม่ต้องกังวล จะได้เรียนรู้เพิ่มเติมในบทที่ 3 มันทำงานเหมือน Python dictionary ทั่วไปทุกประการ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์เครือข่ายระดับกลางใน Python
คำแนะนำการฝึกหัด
- วน iterate ใน
user_nodesแล้วคำนวณความคล้ายคลึงระหว่างuserกับuser_nodeแต่ละตัว (n) โดยใช้ฟังก์ชันuser_similarity()แล้วเก็บผลลัพธ์ไว้ในsimilarity - เพิ่มคะแนนและโหนดเข้าไปใน dictionary
similaritiesโดย key คือคะแนน —similarity— และ value คือโหนด —n - คำนวณคะแนนความคล้ายคลึงสูงสุด โดยเข้าถึง key ของ
similaritiesด้วยเมธอด.keys()แล้วส่งผลลัพธ์เป็นอาร์กิวเมนต์ให้ฟังก์ชันmax()แล้วเก็บผลลัพธ์ไว้ในmax_similarity - Return รายชื่อผู้ใช้ที่มีความคล้ายคลึงสูงสุด ซึ่งก็คือ value ของ key
max_similarityในsimilarities - ใช้ฟังก์ชัน
most_similar_users()เพื่อแสดงรายชื่อผู้ใช้ที่คล้ายกับผู้ใช้'u4560'มากที่สุด
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
from collections import defaultdict
def most_similar_users(G, user, user_nodes, proj_nodes):
# Data checks
assert G.nodes[user]['bipartite'] == 'users'
# Get other nodes from user partition
user_nodes = set(user_nodes)
user_nodes.remove(user)
# Create the dictionary: similarities
similarities = defaultdict(list)
for n in ____:
similarity = ____(____, ____, ____, ____)
____[____].____
# Compute maximum similarity score: max_similarity
max_similarity = ____
# Return list of users that share maximal similarity
return ____[____]
user_nodes = get_nodes_from_partition(G, 'users')
project_nodes = get_nodes_from_partition(G, 'projects')
print(____)