Spaces:
Sleeping
Sleeping
import pandas as pd | |
import numpy as np | |
from scipy.sparse import csr_matrix | |
from sklearn.neighbors import NearestNeighbors | |
# Define create_matrix function | |
def create_matrix(df): | |
# Adapt the function to match your DataFrame's column names and structure | |
N = len(df['user_id_mapping'].unique()) # Adjusted to 'user_id_mapping' | |
M = len(df['book_id'].unique()) # Adjusted to 'book_id' | |
# Map IDs to indices | |
user_mapper = dict(zip(np.unique(df["user_id_mapping"]), list(range(N)))) | |
book_mapper = dict(zip(np.unique(df["book_id"]), list(range(M)))) | |
# Map indices to IDs | |
user_inv_mapper = dict(zip(list(range(N)), np.unique(df["user_id_mapping"]))) | |
book_inv_mapper = dict(zip(list(range(M)), np.unique(df["book_id"]))) | |
user_index = [user_mapper[i] for i in df['user_id_mapping']] # Adjusted to 'user_id_mapping' | |
book_index = [book_mapper[i] for i in df['book_id']] # Adjusted to 'book_id' | |
# Use 'Actual Rating' for the matrix values; corrected data handling for sparse matrix creation | |
X = csr_matrix((df["Actual Rating"], (book_index, user_index)), shape=(M, N)) | |
return X, user_mapper, book_mapper, user_inv_mapper, book_inv_mapper | |
""" | |
Find similar books using KNN | |
""" | |
# Define find_similar_books function - Source - https://www.geeksforgeeks.org/recommendation-system-in-python/?ref=rp | |
def find_similar_books(book_id, X, k,book_mapper,book_inv_mapper, metric='cosine'): | |
neighbour_ids = [] | |
book_ind = book_mapper[book_id] | |
book_vec = X[book_ind] | |
k+=1 | |
kNN = NearestNeighbors(n_neighbors=k, algorithm="brute", metric=metric) | |
kNN.fit(X) | |
book_vec = book_vec.reshape(1,-1) | |
distances, indices = kNN.kneighbors(book_vec, return_distance=True) | |
for i in range(0,k): | |
n = indices.item(i) | |
neighbour_ids.append(book_inv_mapper[n]) | |
neighbour_ids.pop(0) | |
return distances, neighbour_ids | |