Tryfonas's picture
Upload 7 files
bcb0385 verified
import streamlit as st
import pandas as pd
from data_fetcher import get_last_n_races_results, get_next_race_info
from feature_engineering import FeatureEngineer
from model_trainer import ModelTrainer
st.title("๐Ÿ F1 Simple Race Predictor")
n_races = st.number_input("๐Ÿ”ข How many past races should the model use?", min_value=1, max_value=10, value=5)
if st.button(f"Fetch Last {n_races} Race Results"):
race_results = get_last_n_races_results(n_races)
if not race_results.empty:
st.session_state['race_results'] = race_results
st.success("โœ… Race results fetched!")
st.dataframe(race_results)
unique_circuits = race_results['CircuitName'].unique()
st.info(f"โ„น๏ธ Using results from **{len(unique_circuits)} different circuits**.")
else:
st.error("โŒ No race results found.")
if 'race_results' in st.session_state:
fe = FeatureEngineer(n_races=n_races)
try:
features, labels = fe.prepare_features(st.session_state['race_results'])
st.session_state['features'] = features
st.session_state['labels'] = labels
except Exception as e:
st.error(f"โŒ Error preparing features: {e}")
if st.button("Train Model"):
trainer = ModelTrainer()
try:
X = st.session_state['features']
y = st.session_state['labels']
trainer.train(X, y)
st.session_state['trainer'] = trainer
st.success("โœ… Model trained successfully!")
except Exception as e:
st.error(f"โŒ Error during training: {e}")
if 'trainer' in st.session_state and st.button("Predict Next Race"):
next_race = get_next_race_info()
if next_race is not None and 'EventName' in next_race:
race_name = next_race['EventName']
st.subheader(f"๐ŸŽ๏ธ Predictions for: {race_name}")
st.info(f"๐Ÿ”ฎ Predicting race results for **{race_name}**!")
else:
st.subheader("๐ŸŽ๏ธ Predictions for: (Unknown Upcoming Race)")
st.warning("โš ๏ธ Next race information is missing.")
try:
prediction_features = fe.prepare_prediction_features(st.session_state['race_results'])
preds = st.session_state['trainer'].predict(prediction_features)
drivers = st.session_state['race_results']['DriverId'].unique()
prediction_df = pd.DataFrame({
'Driver': drivers,
'Predicted Finish Position': preds
}).sort_values('Predicted Finish Position')
st.write("### ๐Ÿ Predicted Race Results")
st.dataframe(prediction_df)
except Exception as e:
st.error(f"โŒ Error during prediction: {e}")