collaborative-filtering-python
def manhattan(rating1, rating2):
distance = 0
for key in rating1:
if key in rating2:
distance += abs(rating1[key] - rating2[key])
return distance
def computeNearestNeighbor(username, users):
distances = []
for user in users:
if user != username:
distance = manhattan(users[user], users[username])
distances.append((distance, user))
distances.sort()
return distances
def recommend(username, users):
nearest = computeNearestNeighbor(username, users)[0][1]
recommendations = []
neighborRatings = users[nearest]
userRatings = users[username]
for artist in neighborRatings:
if not artist in userRatings:
recommendations.append((artist, neighborRatings[artist]))
return sorted(recommendations, key=lambda recommend: recommend[1], reverse=True)
print(recommend('Hailey',users))
And you can run it easy (python3 collaborative-filtering.py) :)