유사한 사용자 찾기
지금까지 배운 내용을 바탕으로, 특정 사용자와 가장 유사한 사용자를 찾아주는 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(____)