시작하기무료로 시작하기

유사한 사용자 찾기

지금까지 배운 내용을 바탕으로, 특정 사용자와 가장 유사한 사용자를 찾아주는 most_similar_users() 함수를 만들어 보겠습니다.

함수의 기본 골격은 이미 작성되어 있어요. 함수에 전달된 대상 사용자를 제외한 모든 사용자를 담은 노드 목록 user_nodes가 준비되어 있습니다. 이 함수를 완성해, 주어진 사용자와 가장 유사한 사용자를 찾도록 하세요. 이를 위해 이전 연습 문제에서 만든 user_similarity() 함수를 활용합니다.

또한 similarities라는 사전이 준비되어 있는데, 키는 점수이고 값은 노드 목록입니다. defaultdict가 낯설더라도 걱정하지 마세요. 3장에서 더 자세히 배웁니다! 일반적인 Python 딕셔너리와 동일하게 동작합니다.

이 연습은 강의의 일부입니다

Python 중급 네트워크 분석

강의 보기

연습 안내

  • user_nodes를 순회하면서, 각 user_node(즉 n)와 user 간의 유사도를 user_similarity() 함수로 계산하세요. 결과를 similarity에 저장합니다.
  • 계산한 점수와 노드를 similarities 사전에 추가하세요. 키는 점수(similarity), 값은 노드(n)입니다.
  • 최대 유사도 점수를 계산하세요. 이를 위해 먼저 .keys() 메서드로 similarities의 키(점수)를 가져온 뒤 max() 함수를 사용합니다. 결과를 max_similarity에 저장하세요.
  • 최대 유사도를 공유하는 사용자 목록을 반환하세요. 이 목록은 similarities에서 키 max_similarity에 해당하는 값입니다.
  • 작성한 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(____)
코드 편집 및 실행