Spaces:
Sleeping
Sleeping
File size: 7,556 Bytes
5450dc1 5fd0bf8 5450dc1 5fd0bf8 5450dc1 5fd0bf8 5450dc1 5fd0bf8 5450dc1 |
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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
import gradio as gr
import pandas as pd
import os
from component import *
from GameRecommender import *
import gc
from sklearn.model_selection import train_test_split
from huggingface_hub import snapshot_download
from sklearn.preprocessing import MultiLabelBinarizer,LabelEncoder,MinMaxScaler
DATA_BASE_PATH = 'data'
# MODEL_BASE_PATH = 'models'
MODEL_BASE_PATH = snapshot_download(
repo_id="VJyzCELERY/SteamGameRecommender",
repo_type="model",
allow_patterns=["GameRecommender/*"]
)
SEED = 42
RAW_GAMES_DATAPATH = os.path.join(DATA_BASE_PATH,'converted.csv')
GAMES_DATAPATH = os.path.join(DATA_BASE_PATH,'Cleaned_games.csv')
REVIEWS_DATAPATH = os.path.join(DATA_BASE_PATH,'MergedFragmentData_SAMPLE.csv')
TRIMMED_REVIEW_DATAPATH = os.path.join(DATA_BASE_PATH,'Trimmed_Dataset.csv')
USER_PREFERENCE_DATAPATH = os.path.join(DATA_BASE_PATH,'UserPreferenceDF.csv')
MODEL_PATH = os.path.join(MODEL_BASE_PATH,'GameRecommender')
from datasets import load_dataset
GAMES_DS = load_dataset("VJyzCELERY/Cleaned_games")
# load dataset
model = GameRecommendationEnsemble.load(MODEL_PATH)
vectorizer=model.text_based_recommender.vectorizer
review_app_id_encoder=model.text_based_recommender.app_id_encoder
genres = model.game_content_recommeder.genre_encoder.classes_.tolist()
genres = [genre for genre in genres if genre != 'Unknown']
categories = model.game_content_recommeder.category_encoder.classes_.tolist()
categories = [cat for cat in categories if cat != 'Unknown']
price_ranges = model.game_content_recommeder.price_range_encoder.classes_.tolist()
selectable_app_ids = list(model.collaborative_recommender.item_to_index.keys())
# df_games = pd.read_csv(GAMES_DATAPATH,index_col=False)
df_games = GAMES_DS['train'].to_pandas()
available_names = df_games[df_games['app_id'].astype(str).isin(selectable_app_ids)]['Name'].tolist()
def recommend_game(description=None, app_name=None, price_range=None, year_release=None,
excpected_playtime=None, game_score=None, dlc_count=None,
genres=None, categories=None, top_n=5,weight_text=1.0, weight_collab=1.0, weight_content=1.0):
if app_name:
if isinstance(app_name, (str)):
app_name = [app_name]
app_ids = df_games[df_games['Name'].isin(app_name)]['app_id'].astype(str).tolist()
else:
app_ids = None
prediction = model.predict(description=description,app_ids=app_ids,price_range=price_range,year_release=year_release,average_playtime=excpected_playtime,game_score=game_score,
dlc_count=dlc_count,genres=genres,categories=categories,top_n=top_n,weight_text=weight_text,weight_collab=weight_collab,weight_content=weight_content)
app_ids = prediction['app_id'].tolist()
output = df_games.loc[df_games['app_id'].astype(str).isin(app_ids)].reset_index()
return gr.DataFrame(value=output)
# Load external CSS file
with open('style.css', 'r') as f:
custom_css = f.read()
"""
MAIN DEMO
"""
with gr.Blocks(css = custom_css) as demo:
# container
with gr.Row(elem_classes="container"):
with gr.Column(elem_id="system", elem_classes='content-section', visible=True) as system_section:
# special for this section
gr.HTML('<h1 class="header-title">Game Recommendation System</h1>', elem_id='system')
with gr.Row():
with gr.Column(min_width=500, elem_classes='input-column'):
app_name = input_choice(
Label='Select games that you liked',
Choices=available_names,
Multiselect=True
)
year = input_number(
Label='Year Release',
Precision=0,
minimum=0
)
expected_playtime = input_number(
Label='Expected Playtime (Hours)',
Precision=2,
minimum=0
)
expected_score = input_number(
Label='Expected Score (% Positive)',
Precision=2,
minimum=0
)
dlc_count = input_number(
Label='DLC Count',
Precision=0,
minimum=0
)
description = input_paragaph_textbox('Description', 'Describe the game (max 1200 characters)...')
genre = input_choice(
Label="Select Your Genre (Multiple Choice)",
Choices=genres,
Multiselect=True
)
categories = input_choice(
Label="Select Your Categories (Multiple Choice)",
Choices=categories,
Multiselect=True
)
# single selection (multiselect=False)
price_range = input_choice(
Label="Select Your Price Range (Only Single Choice)",
Choices=price_ranges,
Multiselect=False
)
top_n= input_number(
Label='Output amount',
Precision=0,
minimum=0,
value=10
)
weight_text = input_number(
Label='Weight Text',
Precision=2,
minimum=0,
maximum=1,
value=0.5,
step=0.01
)
weight_collab = input_number(
Label='Weight Of Collaborative Model',
Precision=2,
minimum=0,
maximum=1,
value=0.5,
step=0.01
)
weight_content = input_number(
Label='Weight Of Content Based Model',
Precision=2,
minimum=0,
maximum=1,
value=0.5,
step=0.01
)
submit_btn = gr.Button("Get Recommendations", variant="primary", elem_id="submit-btn")
# Results column
with gr.Column(min_width=500, elem_classes='results-column'):
h2('Result')
with gr.Column(elem_id='Output'):
# Results column using the modular component
h2('Recommended Game')
recommended_game = gr.DataFrame()
# click button logic
submit_btn.click(
fn=recommend_game,
inputs=[description,app_name,price_range,year,expected_playtime,expected_score,dlc_count, genre, categories,top_n,weight_text,weight_collab,weight_content],
outputs=recommended_game
)
demo.launch() |