import gradio as gr import numpy as np import pandas as pd import pickle import xgboost as xgb from catboost import CatBoostRegressor import mlbstatsapi import tensorflow as tf pd.set_option('display.max_columns', None) # pd.set_option('display.max_rows', None) def predict(inning, game_id): if inning == "Seven": inning = 7 elif inning == "Eight": inning = 8 elif inning == "Five": inning = 5 elif inning == "Six": inning = 6 df = data_retrieve(inning, game_id) # print(df) df_home = df[df['Home/Away'] == "Home"] df_away = df[df['Home/Away'] == "Away"] if (len(df_home) < inning) or (len(df_away) < inning): return [None, None] # print(df_home) df_main = pd.read_csv("Score_prediction_dataset_25th_August_TS_3seas.csv") df_main = df_main.drop(columns=['Opp_LOB']) df_main = df_main[(df_main['Inning'] <= inning)] df_main = df_main[df_main['Team_Name'].isin(team_names)] df_main = df_main[df_main['Opposition_Team'].isin(team_names)] df_main = df_main[(df_main['Team_Name'] != 'American League All-Stars') & (df_main['Team_Name'] != 'National League All-Stars')] df_main = df_main.dropna() df_main = df_main.drop_duplicates() df_main = df_main.pivot(index=['Game_ID', 'Team_Name', 'Opposition_Team', 'Home/Away', 'Final_Score'], columns='Inning', values=['Hits', 'Opp_Hits', 'Errors', 'Runs', 'Opp_Runs', 'LOB']) df_main.columns = [f'{feature}_{inning}' for feature, inning in df_main.columns] df_main = df_main.reset_index() df_main = df_main.drop(columns=['Final_Score']) 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"]) pivoted_df_home = df_home.pivot(index=['Game_ID', 'Team_Name', 'Opposition_Team', 'Home/Away', 'Final_Score'], columns='Inning', values=['Hits', 'Opp_Hits', 'Errors', 'Runs', 'Opp_Runs', 'LOB']) pivoted_df_home.columns = [f'{feature}_{inning}' for feature, inning in pivoted_df_home.columns] # print(pivoted_df_home) pivoted_df_home = pivoted_df_home.reset_index() pivoted_df_home = pd.get_dummies(pivoted_df_home, columns=['Team_Name', 'Opposition_Team']) pivoted_df_home = pivoted_df_home.reindex(columns=df_main.columns, fill_value=0) pivoted_df_away = df_away.pivot(index=['Game_ID', 'Team_Name', 'Opposition_Team', 'Home/Away', 'Final_Score'], columns='Inning', values=['Hits', 'Opp_Hits', 'Errors', 'Runs', 'Opp_Runs', 'LOB']) pivoted_df_away.columns = [f'{feature}_{inning}' for feature, inning in pivoted_df_away.columns] pivoted_df_away = pivoted_df_away.reset_index() pivoted_df_away = pd.get_dummies(pivoted_df_away, columns=['Team_Name', 'Opposition_Team']) pivoted_df_away = pivoted_df_away.reindex(columns=df_main.columns, fill_value=0) print(pivoted_df_home) home_away_status = {'Home': 0, 'Away': 1} pivoted_df_home['Home/Away'] = pivoted_df_home['Home/Away'].map(home_away_status) pivoted_df_away['Home/Away'] = pivoted_df_away['Home/Away'].map(home_away_status) pivoted_df_home = pivoted_df_home.astype(int) pivoted_df_away = pivoted_df_away.astype(int) pivoted_df_home = pivoted_df_home.drop(['Game_ID'], axis=1) pivoted_df_away = pivoted_df_away.drop(['Game_ID'], axis=1) # return # print(len(df.columns)) if inning == 8: model = tf.keras.models.load_model('ANNR_ts_CLAS_inn8_exp8_model.keras') elif inning ==7: model = tf.keras.models.load_model('ANNR_ts_CLAS_inn7_exp11_model.keras') elif inning ==6: model = tf.keras.models.load_model('ANNR_ts_CLAS_inn6_exp7_model.keras') elif inning ==5: model = tf.keras.models.load_model('ANNR_ts_CLAS_inn5_exp4_model.keras') # with open('pca_model4.pkl', 'rb') as f: # pca = pickle.load(f) # with open('label_encoder_teams_xgbr1_exp3.pkl', 'rb') as f: # label_encoder = pickle.load(f) # print(pivoted_df_home) # df = pca.transform(df) # return winner_prob_1 = model.predict(pivoted_df_home) winner__prob_2 = model.predict(pivoted_df_away) if winner_prob_1 < winner__prob_2: winner = 'Home_Team' else: winner = 'Away_Team' # return score_1 return winner def data_retrieve(inning, game_id): mlb = mlbstatsapi.Mlb() df = pd.DataFrame(columns = ["Game_ID", "Team_Name", "Opposition_Team", "Inning", "Home/Away", "Hits", "Opp_Hits", "Errors", "Runs", "Opp_Runs", "LOB", "Opp_LOB", "Final_Score"]) try: linescore = mlb.get_game_line_score(game_id, verify = False) except: gr.Info("Error retrieving data!!!") home_runs = 0 away_runs = 0 home_hits = 0 away_hits = 0 home_errors = 0 away_errors = 0 home_leftonbase = 0 away_leftonbase = 0 count = 0 for i in range(inning): try: inning = linescore.innings[i].num home_team_name = mlb.get_game_box_score(game_id, verify = False).teams.home.team.name away_team_name = mlb.get_game_box_score(game_id, verify = False).teams.away.team.name home_runs += linescore.innings[i].home.runs away_runs += linescore.innings[i].away.runs home_hits += linescore.innings[i].home.hits away_hits += linescore.innings[i].away.hits home_errors += linescore.innings[i].home.errors away_errors += linescore.innings[i].away.errors home_leftonbase += linescore.innings[i].home.leftonbase away_leftonbase += linescore.innings[i].away.leftonbase home_score = linescore.teams.home.runs away_score = linescore.teams.away.runs except: gr.Info(f"Error retrieving inning {i+1} data!!!") continue home_dict = {"Game_ID": game_id, "Team_Name": home_team_name, "Opposition_Team": away_team_name, "Inning": inning, "Home/Away": 'Home', "Hits": home_hits, "Opp_Hits": away_hits, "Errors": home_errors, "Runs": home_runs, "Opp_Runs": away_runs, "LOB": home_leftonbase, "Opp_LOB": away_leftonbase, "Final_Score": home_score} away_dict = {"Game_ID": game_id, "Team_Name": away_team_name, "Opposition_Team": home_team_name, "Inning": inning, "Home/Away": 'Away', "Hits": away_hits, "Opp_Hits": home_hits, "Errors": away_errors, "Runs": away_runs, "Opp_Runs": home_runs, "LOB": away_leftonbase, "Opp_LOB": home_leftonbase, "Final_Score": away_score} #print(home_dict) home_df = pd.DataFrame([home_dict]) away_df = pd.DataFrame([away_dict]) df = pd.concat([df,home_df], ignore_index=True) df = pd.concat([df,away_df], ignore_index=True) count += 1 if count != inning: gr.Info("All reuiqred innings are not available!!!") return df 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("""