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

ค้นหาผู้ใช้ที่คล้ายกัน

ถึงเวลาต่อยอดสิ่งที่เรียนรู้มาทั้งหมด โดยจะเขียนฟังก์ชันชื่อ 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(____)
แก้ไขและรันโค้ด