import gradio as gr from PIL import Image import requests import hopsworks import joblib import pandas as pd import datetime import os year = datetime.date.today().year - 1 project = hopsworks.login() fs = project.get_feature_store() mr = project.get_model_registry() model_url = f"valuation_model_v{year-1}_{year}" model = mr.get_model(model_url) model_dir = model.download() model = joblib.load(f"{model_dir}/valuation_model.pkl") scaler = joblib.load(f"{model_dir}/scaler.pkl") #Get data that has not been trained on fg = fs.get_or_create_feature_group( name='prediction_valuation_fg', version=1, description='Feature group containing X_test and y_test data for model performance measurement', primary_key=['player_id', 'date'] # Replace with your primary key column name(s) ) def valuation_predictor(goals, assists, y_cards, r_cards, m_played, height, age, mo_left, t_made_goals, t_conceded_goals, t_clean_sheets, pos, league): features_for_prediction = [ y_cards, r_cards, goals, assists, m_played, height, age, mo_left, t_made_goals, t_conceded_goals, t_clean_sheets, league=="La Liga", league=="League 1", league=="Premier league", league=="Serie A", league=="Bundesliga", pos=="Attack", pos=="Defender", pos=="Goalkeeper", pos=="Midfield" ] column_names = [ "yellow_cards", "red_cards", "goals", "assists", "minutes_played", "height_in_cm", "age", "months_left", "own_goals", "opponent_goals", "clean_sheets", "league_es1","league_fr1", "league_gb1","league_it1","league_l1", "position_attack","position_defender", "position_goalkeeper","position_midfield" ] # Create DataFrame from the input features X_predict = pd.DataFrame([features_for_prediction], columns=column_names) # Apply the scaler to the relevant columns scaled_columns = ['age', 'height_in_cm', 'minutes_played'] X_predict[scaled_columns] = scaler.transform(X_predict[scaled_columns]) estimated_valuation = model.predict(X_predict) # Reformatting to the nearest thousand with commas formatted_output_thousand = f"{round(estimated_valuation[0], -3):,} EUR" return formatted_output_thousand df = pd.DataFrame(fg.read()) df = df.drop(columns=["player_id", "date"]) print(df) new_rows = [] for index, row in df.iterrows(): league = "" pos = "" if row['league_es1']: league = "La Liga" elif row['league_fr1']: league = "League 1" elif row['league_gb1']: league = "Premier League" elif row['league_it1']: league = "Serie A" elif row['league_l1']: league = "Bundesliga" if row['position_attack']: pos = "Attack" elif row['position_defender']: pos = "Defender" elif row['position_goalkeeper']: pos = "Goalkeeper" elif row['position_midfield']: pos = "Midfield" new_row = { "Player name": row["player_name"], "League": league, "Goals": row["goals"], "Assists": row["assists"], "Yellow cards": row["yellow_cards"], "Red cards": row["red_cards"], "Minutes played": row["minutes_played"], "Height": row["height_in_cm"], "Age": row["age"], "Months left on contract": row["months_left"], "Team made goals": row["own_goals"], "Team conceded goals": row["opponent_goals"], "Team clean sheets": row["clean_sheets"], "Actual market value (EUR)": f"{round(float(row['market_value_in_eur']), -3):,} EUR", "Model predicted market value (EUR)": valuation_predictor( row["goals"], row["assists"], row["yellow_cards"], row["red_cards"], row["minutes_played"], row["height_in_cm"], row["age"], row["months_left"], row["own_goals"], row["opponent_goals"], row["clean_sheets"], pos, league ) } # Append new row to df_present new_rows.append(new_row) #predicted_value = valuation_predictor() df_present = pd.DataFrame(new_rows, columns=["Player name", "League", "Goals", "Assists", "Yellow cards", "Red cards", "Minutes played", "Height (cm)", "Age", "Months left on contract", "Team made goals", "Team conceded goals", "Team clean sheets", "Actual market value (EUR)", "Model predicted market value (EUR)"]) print(df_present) with gr.Blocks(theme=gr.themes.Soft()) as demo: with gr.Row(): gr.Label(value="Latest predictions", show_label=False) with gr.Row(): gr.DataFrame(value=df_present) demo.launch()