Nechba commited on
Commit
a3ddd02
·
verified ·
1 Parent(s): ceee38b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -47
app.py CHANGED
@@ -1,47 +1,47 @@
1
- import streamlit as st
2
- import pandas as pd
3
- from utils import *
4
-
5
- # Assuming data is loaded and matrices are prepared as discussed
6
- def load_data():
7
- ratings = pd.read_csv('./data/collaborative_books_df.csv', index_col=0)
8
- books = pd.read_csv('./data/collaborative_book_metadata.csv', index_col=0)
9
- # book_titles=pd.read_csv('./data/book_titles.csv', index_col=0)
10
- # book_titles = book_titles.reset_index()
11
-
12
- # Merge data
13
- ratings = ratings.merge(books, on='book_id')
14
- book_titles = dict(zip(ratings['book_id'], ratings['title_x']))
15
- return ratings, books,book_titles
16
-
17
- def initialize_session_state():
18
- if "ratings" not in st.session_state:
19
- st.session_state.ratings, st.session_state.books, st.session_state.book_titles = load_data()
20
- st.session_state.X, st.session_state.user_mapper, st.session_state.book_mapper, st.session_state.user_inv_mapper, st.session_state.book_inv_mapper = create_matrix(st.session_state.ratings)
21
- st.session_state.book_id_mapping = pd.Series( st.session_state.books.book_id.values, index= st.session_state.books.title).to_dict()
22
-
23
- initialize_session_state()
24
- # Streamlit interface for book recommendation
25
- st.title('Book Recommender System')
26
-
27
- # User inputs
28
- title_input = st.selectbox('Select or type a book title', st.session_state.books['title'].unique())
29
- k_input = st.number_input('How many recommendations do you want?', min_value=1, max_value=20, value=5)
30
-
31
- if st.button('Find Similar Books'):
32
-
33
- if title_input in st.session_state.book_id_mapping:
34
- book_id = st.session_state.book_id_mapping[title_input]
35
- distances, similar_ids = find_similar_books(book_id, st.session_state.X, k=k_input,book_mapper= st.session_state.book_mapper,book_inv_mapper= st.session_state.book_inv_mapper)
36
- similar_books = pd.DataFrame({
37
- 'Book Title': [ st.session_state.book_titles[ids] for ids in similar_ids],
38
- 'Distance': distances[0][1:]
39
- })
40
-
41
- st.write(f"Books similar to {title_input}:")
42
- st.dataframe(similar_books.sort_values(by='Distance', ascending=True))
43
- else:
44
- st.error("Book title not found. Please check the spelling or try another title.")
45
-
46
-
47
-
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ from utils import *
4
+
5
+ # Assuming data is loaded and matrices are prepared as discussed
6
+ def load_data():
7
+ ratings = pd.read_csv('./collaborative_books_df.csv', index_col=0)
8
+ books = pd.read_csv('./collaborative_book_metadata.csv', index_col=0)
9
+ # book_titles=pd.read_csv('./data/book_titles.csv', index_col=0)
10
+ # book_titles = book_titles.reset_index()
11
+
12
+ # Merge data
13
+ ratings = ratings.merge(books, on='book_id')
14
+ book_titles = dict(zip(ratings['book_id'], ratings['title_x']))
15
+ return ratings, books,book_titles
16
+
17
+ def initialize_session_state():
18
+ if "ratings" not in st.session_state:
19
+ st.session_state.ratings, st.session_state.books, st.session_state.book_titles = load_data()
20
+ st.session_state.X, st.session_state.user_mapper, st.session_state.book_mapper, st.session_state.user_inv_mapper, st.session_state.book_inv_mapper = create_matrix(st.session_state.ratings)
21
+ st.session_state.book_id_mapping = pd.Series( st.session_state.books.book_id.values, index= st.session_state.books.title).to_dict()
22
+
23
+ initialize_session_state()
24
+ # Streamlit interface for book recommendation
25
+ st.title('Book Recommender System')
26
+
27
+ # User inputs
28
+ title_input = st.selectbox('Select or type a book title', st.session_state.books['title'].unique())
29
+ k_input = st.number_input('How many recommendations do you want?', min_value=1, max_value=20, value=5)
30
+
31
+ if st.button('Find Similar Books'):
32
+
33
+ if title_input in st.session_state.book_id_mapping:
34
+ book_id = st.session_state.book_id_mapping[title_input]
35
+ distances, similar_ids = find_similar_books(book_id, st.session_state.X, k=k_input,book_mapper= st.session_state.book_mapper,book_inv_mapper= st.session_state.book_inv_mapper)
36
+ similar_books = pd.DataFrame({
37
+ 'Book Title': [ st.session_state.book_titles[ids] for ids in similar_ids],
38
+ 'Distance': distances[0][1:]
39
+ })
40
+
41
+ st.write(f"Books similar to {title_input}:")
42
+ st.dataframe(similar_books.sort_values(by='Distance', ascending=True))
43
+ else:
44
+ st.error("Book title not found. Please check the spelling or try another title.")
45
+
46
+
47
+