0% found this document useful (0 votes)
8 views

Code2pdf 66714d844f78a

Uploaded by

maniratnam
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

Code2pdf 66714d844f78a

Uploaded by

maniratnam
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

# importing required libraries.

import streamlit as st
import pickle
import numpy as np
import pandas as pd

st.set_page_config(layout="wide")

st.header("Book Recommender System")


st.markdown('''
##### This site has the book recomentation system where you can select a book from our catlog and it will suggest books accordingly.
##### Based on our data we have the top 50 books based on the user feedback.
##### The Recomender system is based on Colloborative filtering.
''')

# Importing models and dataframe.


popular = pickle.load(open('popular.pkl','rb'))
books = pickle.load(open('books.pkl','rb'))
pt = pickle.load(open('pt.pkl','rb'))
similarity_score = pickle.load(open('similarity_scores.pkl','rb'))

# Streamlit sidebar header


st.sidebar.title("Top 50 Books")

# Display books in a grid layout if the 'SHOW' button is clicked


if st.sidebar.button("SHOW"):
cols_per_row = 5 # Number of columns per row

# Calculate number of rows needed


num_rows = (len(popular) + cols_per_row - 1) // cols_per_row

# Loop through each row


for row in range(num_rows):
cols = st.columns(cols_per_row) # Create columns for the current row

# Loop through each column in the current row


for col in range(cols_per_row):
book_idx = row * cols_per_row + col

if book_idx < len(popular):


with cols[col]:
st.image(popular.iloc[book_idx]['Image-URL-M']) # Display book cover image directly from DataFrame
st.text(popular.iloc[book_idx]['Book-Title']) # Display book title
st.text(popular.iloc[book_idx]['Book-Author']) # Display book author
st.text(f"Ratings: {popular.iloc[book_idx]['num_ratings']}") # Display total ratings
st.text(f"Avg. Rating: {round(popular.iloc[book_idx]['avg_rating'], 2)}") # Display average rating

# Code for recommender system :


def recommend(book_name):
# Fetch the index of the given book name in the pivot table (pt)
index = np.where(pt.index == book_name)[0][0]

# Get the similarity scores for the given book and sort them in descending order
# We use enumerate to get the index and similarity score
# We skip the first item ([1:5]) since it's the book itself (highest similarity score)
similar_items = sorted(list(enumerate(similarity_score[index])), key=lambda x: x[1], reverse=True)[1:6]

# Initialize an empty list to store the data of similar books


data = []
for i in similar_items:
item = []
# Get the DataFrame rows for the book corresponding to the current index
temp_df = books[books['Book-Title'] == pt.index[i[0]]]

# Add the book title to the item list, ensuring no duplicates


item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Title'].values))

# Add the book author to the item list, ensuring no duplicates


item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Author'].values))

# Uncomment the following line to add the book image URL to the item list, if needed
item.extend(list(temp_df.drop_duplicates('Book-Title')['Image-URL-M'].values))

# Append the item (containing book title and author) to the data list
data.append(item)

# Return the list of similar books with their titles and authors
return data

# this is the valus in our dropdown list.


book_list = pt.index.values # Extracting the index (assumed to be 'Book-Title') as a list of book titles

# Streamlit sidebar for recommending books


st.sidebar.title("Recommend Books")
selected_book = st.sidebar.selectbox("Type or select a book from the dropdown", book_list) # Dropdown to select a book

if st.sidebar.button("Recommend Me"): # Button to trigger recommendation


book_recommended = recommend(selected_book) # Get recommended books based on selected book

# Display recommended books in 5 columns


cols = st.columns(5) # Create 5 columns using Streamlit

# Loop through each column


for col_idx in range(5):
with cols[col_idx]:
if col_idx < len(book_recommended):
st.image(book_recommended[col_idx][2]) # Display book cover image
st.text(book_recommended[col_idx][0]) # Display book title
st.text(book_recommended[col_idx][1]) # Display book author

You might also like