File size: 4,616 Bytes
d757d64
 
 
 
 
 
 
 
 
b4d6be3
d757d64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0796ac7
57a986f
 
0796ac7
87f9277
 
1d4b55c
57a986f
b75872d
57a986f
1d4b55c
57a986f
1d4b55c
57a986f
1d4b55c
57a986f
1d4b55c
2b7564e
1d4b55c
b75872d
 
 
 
 
 
 
 
 
1d4b55c
 
7575093
 
 
 
 
 
 
 
 
 
 
 
 
341740c
b75872d
 
 
 
1d4b55c
 
 
87f9277
 
 
57a986f
87f9277
d757d64
6a1e1c5
 
d757d64
 
 
6a1e1c5
57a986f
d757d64
 
 
 
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
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()