File size: 2,861 Bytes
55e0091
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import pandas as pd
import numpy as np
import pickle
import json

with open('model_lin_reg.pkl', 'rb') as file_1:
  model_lin_reg = pickle.load(file_1)

with open('model_scaler.pkl', 'rb') as file_2:
  model_scaler = pickle.load(file_2)

with open('model_encoder.pkl','rb') as file_3:
  model_encoder = pickle.load(file_3)

with open('list_num_cols.txt', 'r') as file_4:
  list_num_cols = json.load(file_4)

with open('list_cat_cols.txt', 'r') as file_5:
  list_cat_cols = json.load(file_5)

def run():
  st.title("FIFA Player Rating Prediction")

  with st.form("form_fifa"):
      name = st.text_input("Name", value="")
      age = st.number_input("Age", min_value=16, max_value=60, value=25, step=1, help="Usia Pemain")
      weight = st.number_input("Weight", min_value=50, max_value=150, value=75)
      height = st.slider("Height", 140, 250, 170)
      price = st.number_input("Price", min_value=0, max_value=1000000000, value=0)
      st.markdown("---")

      attackingWorkRate = st.selectbox("AttackingWorkRate", ("Low", "Medium", "High"), index=1)
      defensiveWorkRate = st.selectbox("DefensiveWorkRate", ("Low", "Medium", "High"), index=1)
      st.markdown("---")

      pace = st.number_input("Pace", min_value=0, max_value=100, value=50)
      shooting = st.number_input("Shooting", min_value=0, max_value=100, value=50)
      passing = st.number_input("Passing", min_value=0, max_value=100, value=50)
      dribbling = st.number_input("Dribbling", min_value=0, max_value=100, value=50)
      defending = st.number_input("Defending", min_value=0, max_value=100, value=50)
      physicality = st.number_input("Physicality", min_value=0, max_value=100, value=50)

      submitted = st.form_submit_button("Predict")

  dataInference = {
      "Name": name,
      "Age": age,
      "Height": height,
      "Weight": weight,
      "Price": price,
      "AttackingWorkRate": attackingWorkRate,
      "DefensiveWorkRate": defensiveWorkRate,
      "PaceTotal": pace,
      "ShootingTotal": shooting,
      "PassingTotal": passing,
      "DribblingTotal": dribbling,
      "DefendingTotal": defending,
      "PhysicalityTotal": physicality
  }

  dfInference = pd.DataFrame([dataInference])
  st.dataframe(dfInference)

  if submitted:
      #Split between Numerical and Categorical Columns
      data_inf_num = dfInference[list_num_cols]
      data_inf_cat = dfInference[list_cat_cols]

      #Feature Preprocessing (Scaling and Encoding)
      data_inf_num_scaled = model_scaler.transform(data_inf_num)
      data_inf_cat_encoded = model_encoder.transform(data_inf_cat)
      data_inf_final = np.concatenate([data_inf_num_scaled, data_inf_cat_encoded], axis=1)

      #Prediction
      y_pred_inf = model_lin_reg.predict(data_inf_final)

      st.write("## Rating: ", str(int(y_pred_inf)))

if __name__ == "__main__":
    run()