book-rec / app.py
PRASHANTH REDDY
Rec sys
1032d23
import streamlit as st
import pickle
import pandas as pd
import numpy as np
popular_dict = pickle.load(open('popular_dict.pkl', 'rb'))
pt = pickle.load(open('pt.pkl', 'rb'))
books_dict = pickle.load(open('books_dict.pkl', 'rb'))
similarity_scores = pickle.load(open('similarity_scores.pkl', 'rb'))
popular_df = pd.DataFrame(popular_dict)
books = pd.DataFrame(books_dict)
st.title('Book Recommendation System')
st.write('This is a simple book recommendation system based on the content of the book and the popularity of the book. '
'Select a book from the dropdown below to get recommendations.')
def recommend_books(book_name):
if book_name not in pt.index:
return []
index = np.where(pt.index == book_name)[0][0]
similar_items = sorted(list(enumerate(similarity_scores[index])), key=lambda x: x[1], reverse=True)[1:5]
data = []
for i in similar_items:
item = []
temp_df = books[books['Book-Title'] == pt.index[i[0]]]
popular_df1 = popular_df[popular_df['Book-Title'] == pt.index[i[0]]]
item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Title'].values))
item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Author'].values))
item.extend(list(temp_df.drop_duplicates('Book-Title')['Image-URL-L'].values))
if not popular_df1.empty:
item.extend(list(popular_df1.drop_duplicates('Book-Title')['num_ratings'].values))
item.extend(list(popular_df1.drop_duplicates('Book-Title')['avg_rating'].values.round(2)))
else:
item.extend([None, None]) # Placeholder for missing ratings and avg_rating
data.append(item)
return data
book_name = st.selectbox('Select a book', pt.index)
recommendations = recommend_books(book_name)
if recommendations:
st.write(f"Recommendations based on '{book_name}':")
for i in recommendations:
st.image(i[2], caption=i[0])
st.write('Author:', i[1])
st.write('Number of Ratings:', i[3] if i[3] is not None else 'Not Available')
st.write('Average Rating:', i[4] if i[4] is not None else 'Not Available')
st.write('---------------------------------')
else:
st.write(f"No recommendations found for '{book_name}'.")