File size: 2,262 Bytes
1032d23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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}'.")