ayoni02
requirements.txt file
8bf3838
raw
history blame
1.79 kB
import gradio as gr
import random
import pandas as pd
from surprise import Dataset, Reader
from surprise import KNNBasic
def opendata(a, nrows):
df = pd.read_csv(a, nrows=nrows, sep=';', encoding='ISO-8859-1')
return df
def split(df):
n=len(df)
N=list(range(n))
random.seed(2023)
random.shuffle(N)
train=df.iloc[N[0:(n*4)//5]]
test=df.iloc[N[(n*4)//5:]]
return train, test
def red(df):
reader = Reader(rating_scale=(1,10)) # rating scale range
trainset = Dataset.load_from_df(df[['User-ID','ISBN','Book-Rating']],reader).build_full_trainset()
items = trainset.build_anti_testset()
return trainset, items
def mod(df, user, items):
algo = KNNBasic()
algo.fit(df)
user_items = list(filter(lambda x: x[0] == user, items))
recommendations = algo.test(user_items)
recommendations.sort(key=operator.itemgetter(3), reverse=True)
return recommendations
def gl(num):
data = opendata('Book reviews\BX-Book-Ratings.csv', nrows=20_000)
books = opendata('Book reviews\BX_Books.csv', nrows=None)
mapping_dict = books.set_index("ISBN")["Book-Title"].to_dict()
train, test = split(data)
users=test['User-ID'].tolist()
trainset, items = red(train)
user = users[int(num)]
recommendations = mod(trainset, user, items)
op = []
for r in recommendations[0:5]:
try:
op.append(f"{mapping_dict[r[1]]} with Estimated Rating {round(r[3],3)}")
except:
continue
return ('\n\n'.join(map(str, op)))
text = gr.components.Number(label="pick a number between 1 and 1000")
label = gr.components.Text(label="Picked User Top 5 Recommendations:")
example = [2, 3]
intf = gr.Interface(fn=gl, inputs=text, outputs=label, examples=example)
intf.launch(inline=False)