marianeft's picture
Initial commit
1dd612a
import streamlit as st
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import LabelEncoder
def predict_grand_prix_winner(previous_season_data):
"""
Predicts the grand prix winner for the 2025 season based on previous season data.
Args:
previous_season_data (pd.DataFrame): DataFrame containing previous season results.
Returns:
pd.DataFrame: DataFrame containing predicted results for the 2025 season.
"""
# Preprocessing
le_driver = LabelEncoder()
le_team = LabelEncoder()
previous_season_data['Driver_encoded'] = le_driver.fit_transform(previous_season_data['Driver'])
previous_season_data['Team_encoded'] = le_team.fit_transform(previous_season_data['Team'])
# Feature Engineering
features = ['Driver_encoded', 'Team_encoded', 'Points', 'Starting Grid']
target = 'Position'
# Model Training
model = LinearRegression()
model.fit(previous_season_data[features], previous_season_data[target])
# Create a DataFrame for 2025 predictions
last_race = previous_season_data.groupby('Driver').last().reset_index()
# Predict positions for 2025
predictions = model.predict(last_race[features])
last_race['Predicted_Position'] = predictions
last_race['Predicted_Position'] = last_race['Predicted_Position'].round().astype(int)
# Decode labels back to original names
last_race['Driver'] = le_driver.inverse_transform(last_race['Driver_encoded'])
last_race['Team'] = le_team.inverse_transform(last_race['Team_encoded'])
# Sort by predicted position
predicted_results = last_race[['Driver', 'Team', 'Predicted_Position']].sort_values(by='Predicted_Position')
return predicted_results
def main():
st.title("2025 Grand Prix Winner Prediction")
st.write("Upload the previous season's results (CSV format).")
# Modified file_uploader to accept CSV
uploaded_file = st.file_uploader("Choose a CSV file", type="csv")
# Input for GP name and date
gp_name = st.text_input("Enter the Grand Prix Name (e.g., Australian Grand Prix):")
gp_date = st.date_input("Enter the Date of the Grand Prix:")
if uploaded_file is not None:
try:
previous_season_data = pd.read_csv(uploaded_file)
st.write("Uploaded data:")
st.dataframe(previous_season_data)
# Ensure necessary columns exist
required_columns = ['Driver', 'Team', 'Points', 'Position', 'Starting Grid']
if not all(col in previous_season_data.columns for col in required_columns):
st.error(f"Error: CSV must contain the following columns: {', '.join(required_columns)}")
return
if st.button("Predict 2025 Winners"):
predicted_results = predict_grand_prix_winner(previous_season_data)
st.write("Predicted 2025 Grand Prix Results:")
st.dataframe(predicted_results)
if not predicted_results.empty:
winner = predicted_results.iloc[0]['Driver']
team = predicted_results.iloc[0]['Team']
# Display the prediction with GP name and date
st.success(f"2025 {gp_name} Winner ({gp_date.strftime('%Y-%m-%d')}): {winner} from team {team}")
except Exception as e:
st.error(f"An error occurred: {e}")
else:
st.info("Please upload a CSV file with the previous season's results.")
if __name__ == "__main__":
main()