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()