Hugo Lindgren
year
b4d6be3
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()