Nevidu's picture
Update app.py
309800b verified
import gradio as gr
import numpy as np
import pandas as pd
import pickle
import xgboost as xgb
from catboost import CatBoostRegressor
def predict(team, inning, venue, hits, errors, lob, runs, opp_team, opp_runs, opp_hits):
data = [team, opp_team, inning, venue, hits, opp_hits, errors, runs, opp_runs, lob]
df_main = pd.read_csv("Score_prediction_dataset_11th_July.csv")
df_main = df_main.drop(columns=['Final_Score', 'Opp_LOB'])
df_main = pd.get_dummies(df_main, columns=['Team_Name', 'Opposition_Team'])
df = pd.DataFrame([data], columns=["Team_Name", "Opposition_Team", "Inning", "Home/Away", "Hits", "Opp_Hits", "Errors", "Runs", "Opp_Runs", "LOB"])
df = pd.get_dummies(df, columns=['Team_Name', 'Opposition_Team'])
df = df.reindex(columns=df_main.columns, fill_value=0)
# print(df.columns)
# print(len(df.columns))
xgb_model = xgb.XGBRegressor()
xgb_model.load_model('xgbr1_exp10_model.json')
with open('pca_model7.pkl', 'rb') as f:
pca = pickle.load(f)
# with open('label_encoder_teams_xgbr1_exp3.pkl', 'rb') as f:
# label_encoder = pickle.load(f)
home_away_status = {'Home': 0, 'Away': 1}
df['Home/Away'] = df['Home/Away'].map(home_away_status)
df = df.astype(int)
df = pca.transform(df)
score = xgb_model.predict(df)
if score[0] < 0:
score = np.clip(score[0], a_min=0, a_max=None)
return np.round(score,1)
if score[0] < runs:
score = runs
return score
return np.round(score[0],1)
def predict_2(team, inning, venue, hits, errors, lob, runs, opp_team, opp_runs, opp_hits):
data = [team, opp_team, inning, venue, hits, opp_hits, errors, runs, opp_runs, lob]
df_main = pd.read_csv("Score_prediction_dataset_11th_July.csv")
df_main = df_main.drop(columns=['Final_Score', 'Opp_LOB'])
df_main = pd.get_dummies(df_main, columns=['Team_Name', 'Opposition_Team'])
df = pd.DataFrame([data], columns=["Team_Name", "Opposition_Team", "Inning", "Home/Away", "Hits", "Opp_Hits", "Errors", "Runs", "Opp_Runs", "LOB"])
df = pd.get_dummies(df, columns=['Team_Name', 'Opposition_Team'])
df = df.reindex(columns=df_main.columns, fill_value=0)
cat_model = CatBoostRegressor()
cat_model.load_model('catbr1_exp11_model.json')
# with open('label_encoder_teams_catbr1_exp1.pkl', 'rb') as f:
# label_encoder = pickle.load(f)
# df['Team_Name'] = label_encoder.transform(df['Team_Name'])
# df['Opposition_Team'] = label_encoder.transform(df['Opposition_Team'])
home_away_status = {'Home': 0, 'Away': 1}
df['Home/Away'] = df['Home/Away'].map(home_away_status)
df = df.astype(int)
# print(df)
with open('pca_model7.pkl', 'rb') as f:
pca = pickle.load(f)
df = pca.transform(df)
score = cat_model.predict(df)
if score[0] < 0:
score = np.clip(score[0], a_min=0, a_max=None)
return np.round(score,1)
if score[0] < runs:
score = runs
return score
return np.round(score[0],1)
team_names = ["Arizona Diamondbacks",
"Atlanta Braves",
"Baltimore Orioles",
"Boston Red Sox",
"Chicago Cubs",
"Chicago White Sox",
"Cincinnati Reds",
"Cleveland Guardians",
"Colorado Rockies",
"Detroit Tigers",
"Houston Astros",
"Kansas City Royals",
"Los Angeles Angels",
"Los Angeles Dodgers",
"Miami Marlins",
"Milwaukee Brewers",
"Minnesota Twins",
"New York Mets",
"New York Yankees",
"Oakland Athletics",
"Philadelphia Phillies",
"Pittsburgh Pirates",
"San Diego Padres",
"San Francisco Giants",
"Seattle Mariners",
"St. Louis Cardinals",
"Tampa Bay Rays",
"Texas Rangers",
"Toronto Blue Jays",
"Washington Nationals"]
with gr.Blocks() as demo:
# gr.Image("../Documentation/Context Diagram.png", scale=2)
# gr(title="Your Interface Title")
gr.Markdown("""
<center>
<span style='font-size: 50px; font-weight: Bold; font-family: "Graduate", serif'>
MLB Score Predictor
</span>
</center>
""")
# gr.Markdown("""
# <center>
# <span style='font-size: 30px; line-height: 0.1; font-weight: Bold; font-family: "Graduate", serif'>
# Admin Dashboard
# </span>
# </center>
# """)
with gr.Row():
inning = gr.Number(None, label="Inning", minimum = 1, maximum = 8, scale=1)
with gr.Row():
with gr.Column():
venue = gr.Dropdown(choices = ["Home", "Away"], value="Away", max_choices = 1, label="Home/Away Status", scale=1)
with gr.Column():
opp_venue = gr.Dropdown(choices = ["Home", "Away"], value="Home", max_choices = 1, label="Opposition Home/Away Status", scale=1)
with gr.Row():
with gr.Column():
team = gr.Dropdown(choices = team_names, max_choices = 1, label="Team", scale=1)
with gr.Column():
opp_team = gr.Dropdown(choices = team_names, max_choices = 1, label="Opposition Team", scale=1)
with gr.Row():
with gr.Column():
hits = gr.Number(None, minimum=0, label="Hits - (H)", scale=1)
with gr.Column():
opp_hits = gr.Number(None, minimum=0, label="Opposition Hits - (H)", scale=1)
# summarize_btn = gr.Button(value="Summarize Text", size = 'sm')
with gr.Row():
with gr.Column():
errors = gr.Number(None, minimum=0, label="Errors - (E)", scale=2)
with gr.Column():
opp_errors = gr.Number(None, minimum=0, label="Opposition Errors - (E)", scale=2)
# runs = gr.Number(None, minimum=0, label="Runs - (R)", scale=1)
with gr.Row():
with gr.Column():
lob = gr.Number(None, minimum=0, label="Left on Base - (LOB)", scale=1)
with gr.Column():
opp_lob = gr.Number(None, minimum=0, label="Opposition Left on Base - (LOB)", scale=1)
with gr.Row():
with gr.Column():
runs = gr.Number(None, minimum=0, label="Runs - (R)", scale=1)
with gr.Column():
opp_runs = gr.Number(None, minimum=0, label="Opposition Runs - (R)", scale=1)
with gr.Row():
predict_btn = gr.Button(value="Predict", size = 'sm')
with gr.Row():
with gr.Column():
final_score_away1 = gr.Textbox(label="Predicted Score Model XGB", scale=1)
with gr.Column():
final_score_home1 = gr.Textbox(label="Opposition Predicted Score Model XGB", scale=1)
with gr.Row():
with gr.Column():
final_score_away2 = gr.Textbox(label="Predicted Score Model CATB", scale=1)
with gr.Column():
final_score_home2 = gr.Textbox(label="Opposition Predicted Score Model CATB", scale=1)
# patent_doc.upload(document_to_text, inputs = [patent_doc, slider, select_model], outputs=summary_doc)
predict_btn.click(predict, inputs=[team, inning, venue, hits, errors, lob, runs, opp_team, opp_runs, opp_hits], outputs=final_score_away1)
predict_btn.click(predict, inputs=[opp_team, inning, opp_venue, opp_hits, opp_errors, opp_lob, opp_runs, team, runs, hits], outputs=final_score_home1)
predict_btn.click(predict_2, inputs=[team, inning, venue, hits, errors, lob, runs, opp_team, opp_runs, opp_hits], outputs=final_score_away2)
predict_btn.click(predict_2, inputs=[opp_team, inning, opp_venue, opp_hits, opp_errors, opp_lob, opp_runs, team, runs, hits], outputs=final_score_home2)
demo.launch(inline=False)