Raj086 commited on
Commit
a4e51d1
·
1 Parent(s): 7494954

Upload 5 files

Browse files
Files changed (5) hide show
  1. app.py +263 -0
  2. books.pkl +3 -0
  3. final.pkl +3 -0
  4. pt.pkl +3 -0
  5. similarity.pkl +3 -0
app.py ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import requests
5
+
6
+
7
+ df = pd.read_pickle('popular.pkl')
8
+
9
+ books = pd.read_pickle('books.pkl')
10
+ similarity_scores = pd.read_pickle('similarity.pkl')
11
+ pt = pd.read_pickle('pt.pkl')
12
+ final_books = pd.read_pickle("final.pkl")
13
+
14
+
15
+
16
+ def recommend_book(book_name):
17
+ # fetch index
18
+ index = np.where(pt.index==book_name)[0][0]
19
+
20
+ similar_items = sorted(list(enumerate(similarity_scores[index])),key=lambda x:x[1],reverse=True)[1:6]
21
+
22
+ data=[]
23
+ for i in similar_items:
24
+ item=[]
25
+ temp_df = books[books['Book-Title'] == pt.index[i[0]]]
26
+ item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Title'].values))
27
+ item.extend(list(temp_df.drop_duplicates('Book-Title')['Book-Author'].values))
28
+ item.extend(list(temp_df.drop_duplicates('Book-Title')['Image-URL-M'].values))
29
+
30
+
31
+ data.append(item)
32
+ return data
33
+
34
+ def fetch_book_details(book_name):
35
+ url = 'https://www.googleapis.com/books/v1/volumes?q={}'.format(book_name)
36
+ response=requests.get(url)
37
+ obj=response.json()
38
+ book_details=[]
39
+ ids = [id['id'] for id in obj['items']]
40
+ ids = ids[0]
41
+ title = obj['items'][0]['volumeInfo']['title']
42
+ author = obj['items'][0]['volumeInfo']['authors'][0]
43
+ publish_date= obj['items'][0]['volumeInfo']['publishedDate']
44
+ image = obj['items'][0]['volumeInfo']['imageLinks']['thumbnail']
45
+ preview_link = obj['items'][0]['volumeInfo']['previewLink']
46
+ info = obj['items'][0]['volumeInfo']['infoLink']
47
+ book_details.append(ids)
48
+ book_details.append(title)
49
+
50
+ book_details.append(author)
51
+
52
+ book_details.append(publish_date)
53
+ book_details.append(preview_link)
54
+ book_details.append(info)
55
+ book_details.append(image)
56
+ print(book_details)
57
+ return book_details
58
+
59
+
60
+
61
+ menu = ['top20','recommender','about']
62
+
63
+ option = st.sidebar.selectbox("Select One: ",menu)
64
+
65
+ if option == 'top20':
66
+ st.title("Top 20 Books")
67
+ st.text("")
68
+ col1,col2,col3,col4=st.columns(4)
69
+ with col1:
70
+ st.image(df['Image-URL-M'][0])
71
+ st.markdown(f"[{df['Book-Title'][0]}]({fetch_book_details(df['Book-Title'][0])[5]})")
72
+
73
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][0]}",unsafe_allow_html=True)
74
+ st.markdown(f"Votes - {df['num_ratings'][0]}")
75
+ st.markdown(f"rating - {round(df['avg_ratings'][0],2)}")
76
+ with col2:
77
+ st.image(df['Image-URL-M'][3])
78
+ st.markdown(f"[{df['Book-Title'][3]}]({fetch_book_details(df['Book-Title'][3])[5]})")
79
+
80
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][3]}",unsafe_allow_html=True)
81
+ st.markdown(f"Votes - {df['num_ratings'][3]}")
82
+ st.markdown(f"rating - {round(df['avg_ratings'][3],2)}")
83
+ with col3:
84
+ st.image(df['Image-URL-M'][5])
85
+ st.markdown(f"[{df['Book-Title'][5]}]({fetch_book_details(df['Book-Title'][5])[5]})")
86
+
87
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][5]}",unsafe_allow_html=True)
88
+ st.markdown(f"Votes - {df['num_ratings'][5]}")
89
+ st.markdown(f"rating - {round(df['avg_ratings'][5],2)}")
90
+ with col4:
91
+ st.image(df['Image-URL-M'][9])
92
+ st.markdown(f"[{df['Book-Title'][9]}]({fetch_book_details(df['Book-Title'][9])[5]})")
93
+
94
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][9]}",unsafe_allow_html=True)
95
+ st.markdown(f"Votes - {df['num_ratings'][9]}")
96
+ st.markdown(f"rating - {round(df['avg_ratings'][9],2)}")
97
+
98
+ st.text("")
99
+ col1,col2,col3,col4=st.columns(4)
100
+ with col1:
101
+ st.image(df['Image-URL-M'][13])
102
+ st.markdown(f"[{df['Book-Title'][13]}]({fetch_book_details(df['Book-Title'][13])[5]})")
103
+ st.markdown(df['Book-Title'][13][0:40])
104
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][13]}",unsafe_allow_html=True)
105
+ st.markdown(f"Votes - {df['num_ratings'][13]}")
106
+ st.markdown(f"rating - {round(df['avg_ratings'][13],2)}")
107
+ with col2:
108
+ st.image(df['Image-URL-M'][16])
109
+ st.markdown(f"[{df['Book-Title'][16]}]({fetch_book_details(df['Book-Title'][16])[5]})")
110
+
111
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][16]}",unsafe_allow_html=True)
112
+ st.markdown(f"Votes - {df['num_ratings'][16]}")
113
+ st.markdown(f"rating - {round(df['avg_ratings'][16],2)}")
114
+ with col3:
115
+ st.image(df['Image-URL-M'][17])
116
+ st.markdown(f"[{df['Book-Title'][17]}]({fetch_book_details(df['Book-Title'][17])[5]})")
117
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][17]}",unsafe_allow_html=True)
118
+ st.markdown(f"Votes - {df['num_ratings'][17]}")
119
+ st.markdown(f"rating - {round(df['avg_ratings'][17],2)}")
120
+ with col4:
121
+ st.image(df['Image-URL-M'][26])
122
+ st.markdown(f"[{df['Book-Title'][26]}]({fetch_book_details(df['Book-Title'][26])[5]})")
123
+ st.markdown(df['Book-Title'][26][0:40])
124
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][26]}",unsafe_allow_html=True)
125
+ st.markdown(f"Votes - {df['num_ratings'][26]}")
126
+ st.markdown(f"rating - {round(df['avg_ratings'][26],2)}")
127
+
128
+ st.text("")
129
+ col1,col2,col3,col4=st.columns(4)
130
+ with col1:
131
+ st.image(df['Image-URL-M'][28])
132
+ st.markdown(f"[{df['Book-Title'][17]}]({fetch_book_details(df['Book-Title'][17])[5]})")
133
+
134
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][28]}",unsafe_allow_html=True)
135
+ st.markdown(f"Votes - {df['num_ratings'][28]}")
136
+ st.markdown(f"rating - {round(df['avg_ratings'][28],2)}")
137
+ with col2:
138
+ st.image(df['Image-URL-M'][39])
139
+ st.markdown(f"[{df['Book-Title'][39]}]({fetch_book_details(df['Book-Title'][39])[5]})")
140
+
141
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][39]}",unsafe_allow_html=True)
142
+ st.markdown(f"Votes - {df['num_ratings'][39]}")
143
+ st.markdown(f"rating - {round(df['avg_ratings'][39],2)}")
144
+ with col3:
145
+ st.image(df['Image-URL-M'][47])
146
+ st.markdown(f"[{df['Book-Title'][47]}]({fetch_book_details(df['Book-Title'][47])[5]})")
147
+
148
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][47]}",unsafe_allow_html=True)
149
+ st.markdown(f"Votes - {df['num_ratings'][47]}")
150
+ st.markdown(f"rating - {round(df['avg_ratings'][47],2)}")
151
+ with col4:
152
+ st.image(df['Image-URL-M'][53])
153
+ st.markdown(f"[{df['Book-Title'][53]}]({fetch_book_details(df['Book-Title'][53])[5]})")
154
+
155
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][53]}",unsafe_allow_html=True)
156
+ st.markdown(f"Votes - {df['num_ratings'][53]}")
157
+ st.markdown(f"rating - {round(df['avg_ratings'][53],2)}")
158
+
159
+ st.text("")
160
+ col1,col2,col3,col4=st.columns(4)
161
+ with col1:
162
+ st.image(df['Image-URL-M'][55])
163
+ st.markdown(f"[{df['Book-Title'][55]}]({fetch_book_details(df['Book-Title'][55])[5]})")
164
+
165
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][55]}",unsafe_allow_html=True)
166
+ st.markdown(f"Votes - {df['num_ratings'][55]}")
167
+ st.markdown(f"rating - {round(df['avg_ratings'][55],2)}")
168
+ with col2:
169
+ st.image(df['Image-URL-M'][62])
170
+ st.markdown(f"[{df['Book-Title'][62]}]({fetch_book_details(df['Book-Title'][62])[5]})")
171
+
172
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][62]}",unsafe_allow_html=True)
173
+ st.markdown(f"Votes - {df['num_ratings'][62]}")
174
+ st.markdown(f"rating - {round(df['avg_ratings'][62],2)}")
175
+ with col3:
176
+ st.image(df['Image-URL-M'][63])
177
+ st.markdown(f"[{df['Book-Title'][63]}]({fetch_book_details(df['Book-Title'][63])[5]})")
178
+
179
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][63]}",unsafe_allow_html=True)
180
+ st.markdown(f"Votes - {df['num_ratings'][63]}")
181
+ st.markdown(f"rating - {round(df['avg_ratings'][63],2)}")
182
+ with col4:
183
+ st.image(df['Image-URL-M'][72])
184
+ st.markdown(f"[{df['Book-Title'][72]}]({fetch_book_details(df['Book-Title'][72])[5]})")
185
+
186
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][72]}",unsafe_allow_html=True)
187
+ st.markdown(f"Votes - {df['num_ratings'][72]}")
188
+ st.markdown(f"rating - {round(df['avg_ratings'][72],2)}")
189
+
190
+
191
+ st.text("")
192
+ col1,col2,col3,col4=st.columns(4)
193
+ with col1:
194
+ st.image(df['Image-URL-M'][73])
195
+ st.markdown(f"[{df['Book-Title'][73]}]({fetch_book_details(df['Book-Title'][73])[5]})")
196
+
197
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][73]}",unsafe_allow_html=True)
198
+ st.markdown(f"Votes - {df['num_ratings'][73]}")
199
+ st.markdown(f"rating - {round(df['avg_ratings'][73],2)}")
200
+ with col2:
201
+ st.image(df['Image-URL-M'][78])
202
+ st.markdown(f"[{df['Book-Title'][78]}]({fetch_book_details(df['Book-Title'][78])[5]})")
203
+
204
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][78]}",unsafe_allow_html=True)
205
+ st.markdown(f"Votes - {df['num_ratings'][78]}")
206
+ st.markdown(f"rating - {round(df['avg_ratings'][78],2)}")
207
+ with col3:
208
+ st.image(df['Image-URL-M'][84])
209
+ st.markdown(f"[{df['Book-Title'][84]}]({fetch_book_details(df['Book-Title'][84])[5]})")
210
+
211
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][84]}",unsafe_allow_html=True)
212
+ st.markdown(f"Votes - {df['num_ratings'][84]}")
213
+ st.markdown(f"rating - {round(df['avg_ratings'][84],2)}")
214
+ with col4:
215
+ st.image(df['Image-URL-M'][85])
216
+ st.markdown(f"[{df['Book-Title'][85]}]({fetch_book_details(df['Book-Title'][85])[5]})")
217
+
218
+ st.markdown(f"<b>Author:<b>{df['Book-Author'][85]}",unsafe_allow_html=True)
219
+ st.markdown(f"Votes - {df['num_ratings'][85]}")
220
+ st.markdown(f"rating - {round(df['avg_ratings'][85],2)}")
221
+
222
+ elif option=='recommender':
223
+ st.title("Books Recommender System")
224
+ book_list = final_books['Book-Title'].values
225
+ selected_book = st.selectbox("Select your book ",book_list)
226
+ if st.button("show recommendation"):
227
+ st.header("Recommend For You....")
228
+ st.text("")
229
+ data=recommend_book(selected_book)
230
+ col1,col2,col3,col4=st.columns(4)
231
+
232
+ with col1:
233
+ st.image(fetch_book_details(data[0][0])[6])
234
+ st.markdown(f"[{data[0][0]}]({fetch_book_details(data[0][0])[5]})")
235
+
236
+
237
+ with col2:
238
+ st.image(fetch_book_details(data[1][0])[6])
239
+ st.markdown(f"[{data[1][0]}]({fetch_book_details(data[1][0])[5]})")
240
+
241
+ with col3:
242
+ st.image(fetch_book_details(data[2][0])[6])
243
+ st.markdown(f"[{data[2][0]}]({fetch_book_details(data[2][0])[5]})")
244
+
245
+
246
+ with col4:
247
+ st.image(fetch_book_details(data[3][0])[6])
248
+ st.markdown(f"[{data[3][0]}]({fetch_book_details(data[3][0])[5]})")
249
+
250
+
251
+ elif option=="about":
252
+ st.title("Book Recommendation Engine V-2.0")
253
+ st.markdown("This Engine Developed by <a href='https://github.com/datamind321'>DataMind Platform</a>",unsafe_allow_html=True)
254
+ st.subheader("if you have any query Contact us on : [email protected]")
255
+ st.markdown("More on : ")
256
+
257
+
258
+ st.markdown("[![Linkedin](https://content.linkedin.com/content/dam/me/business/en-us/amp/brand-site/v2/bg/LI-Bug.svg.original.svg)](https://www.linkedin.com/in/rahul-rathour-402408231/)",unsafe_allow_html=True)
259
+
260
+
261
+ st.markdown("[![Instagram](https://img.icons8.com/color/1x/instagram-new.png)](https://instagram.com/_technical__mind?igshid=YmMyMTA2M2Y=)")
262
+
263
+
books.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:016d6dfd03e12b3ea03e517b958bd9057027c6b4358f171731ce13471e9299de
3
+ size 71737055
final.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eafc2fcb1b9ed77c9c705e150802bc3693300e42dffcc4e028028e9191526940
3
+ size 194208
pt.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9dc904c5ae29c70eedbc05cf3a04bf5a0f5d8b61ec9b8896c3b18169a721af6e
3
+ size 4601037
similarity.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:46ab3e5bb4fdf61ad7306384fc20e4eac45dfc823639b0f78859462d43556edb
3
+ size 3987651