File size: 1,807 Bytes
d07986d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
56
57
58
import gradio as gr
from fastai.learner import load_learner
import pandas as pd
import numpy as np

# Modelo
learn = load_learner('anime_rec.pkl')

# Ids para usar
id_data = pd.read_csv('dataset.csv')
id_data = id_data.sort_values('id_user', ascending=True)
id_list = list(map(str, id_data['id_user'].unique().tolist()))

# Dados originais
data = pd.read_csv('dataset.csv')

def get_anime_names_by_ids(id_animes):
    # Filtrar as linhas correspondentes aos id_animes
    anime_names = data.loc[data['id_anime'].isin(id_animes), ['id_anime', 'name']]
    # Remover duplicatas
    anime_names = anime_names.drop_duplicates(subset='id_anime')
    return anime_names


def preds(id_user):
    id_user = int(id_user)

    itens = pd.Series(learn.dls.classes['id_anime']).unique()
    itens_series = pd.Series(itens)
    classifications = data.loc[(data['id_user'] == id_user) & (data['Overall Rating'] > 0), 'id_anime']
    
    # Transformar itens em uma Series do Pandas
    no_classifications = itens_series[~itens_series.isin(classifications)]

    df = pd.DataFrame({'id_user': [id_user] * len(no_classifications), 'id_anime': no_classifications})

    preds, _ = learn.get_preds(dl=learn.dls.test_dl(df))

    df[['prediction']] = preds.numpy()

    top_5 = df.nlargest(5, 'prediction')

    # Obter os nomes dos animes correspondentes aos id_anime
    result = get_anime_names_by_ids(top_5['id_anime'].astype(int).tolist())
    result_str = result.apply(lambda x: f"{x['id_anime']}: {x['name']}", axis=1).tolist()

    return '\n'.join(result_str)

iface = gr.Interface(
    fn=preds, 
    inputs=gr.Dropdown(choices=id_list), 
    outputs="text", 
    title="Recomendador de Animes",
    description="Esse modelo é capaz de recomendar animes através de um Id de usuário",
)

iface.launch(share=True)