Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import plotly.express as px | |
# Import des données | |
results = pd.read_csv(r"./data/results.csv", sep=',') | |
races = pd.read_csv(r"./data/races.csv", sep=',') | |
circuits = pd.read_csv(r"./data/circuits.csv", sep=',') | |
constructors_st = pd.read_csv(r"./data/constructor_standings.csv", sep=',') | |
constructors = pd.read_csv(r"./data/constructors.csv", sep=',') | |
drivers = pd.read_csv(r"./data/drivers.csv", sep=',') | |
drivers_st = pd.read_csv(r"./data/driver_standings.csv", sep=',') | |
df1 = pd.merge(results[['driverId', 'constructorId', 'raceId', 'grid', 'positionOrder']], races[['raceId', 'year', 'circuitId']], on = 'raceId') | |
df3 = pd.merge(df1, circuits[['circuitId','country', 'name']], on = 'circuitId') | |
infos_pilotes = pd.merge(drivers_st, drivers, on=["driverId"]) | |
#%% | |
infos_pilotes = infos_pilotes.rename(columns={'points' : 'points_pilotes', | |
'position' : 'position_pilotes', | |
'nationality' : 'nationality_pilotes', | |
'wins': 'wins_pilotes'}) | |
#%% | |
col_pilotes = ["raceId", "driverId", "points_pilotes", "position_pilotes", "wins_pilotes", 'forename', 'surname'] | |
#%% | |
infos_pilotes = pd.merge(infos_pilotes, races[["year", "name", "raceId"]], on=["raceId"]) | |
infos_constructors = pd.merge(constructors_st, constructors, on=["constructorId"]) | |
#%% | |
col_cons = ['raceId', 'constructorId', 'points_constructor', | |
'position_constructor', 'wins_constructor', 'name_cons'] | |
#%% | |
infos_constructors = infos_constructors.rename(columns={'points' : 'points_constructor', | |
'position' : 'position_constructor', | |
'nationality' : 'nationality_constructor', | |
'wins': 'wins_constructor', | |
'name' : 'name_cons'}) | |
#%% | |
infos_constructors = pd.merge(infos_constructors[col_cons], races[["year", "name", "raceId"]], on=["raceId"]) | |
st.set_page_config( | |
page_title="Data visualisation F1", | |
) | |
st.sidebar.title("Mais qui gagnera !") | |
with st.sidebar: | |
add_radio = st.radio( | |
"Chapitres", | |
("Chapitre 1 : Histoire de la F1", "Chapitre 2 : 2020 une année importante", "Chapitre 3 : 2021 !") | |
) | |
if add_radio == "Chapitre 1 : Histoire de la F1": | |
st.markdown( | |
""" | |
# Chapitre 1 : Histoire de la F1 | |
## Les débuts | |
La Formule 1 trouve ses racines dans les années 1950, lorsque la Fédération Internationale de l'Automobile (FIA) établit un championnat du monde de courses automobiles. La première saison officielle de la Formule 1 a lieu en 1950, avec le Grand Prix de Grande-Bretagne comme événement inaugural. | |
""" | |
) | |
intro_image_url = "https://static-images.lpnt.fr/cd-cw1618/images/2019/04/13/18392932lpw-18392936-article-silverstone-gp-histoire-jpg_6132152_660x287.jpg" | |
st.image(intro_image_url, | |
caption="Juan Manuel Fangio au volant de son Alfa Romeo à Silverstone, lors du premier Grand Prix de l'histoire de la Formule 1.", | |
use_column_width=True) | |
st.markdown( | |
""" | |
## L'ère des légendes | |
Dans les années 1950 et 1960, la Formule 1 voit émerger des pilotes légendaires tels que Juan Manuel Fangio, Alberto Ascari et Stirling Moss. Ces années sont marquées par des rivalités intenses entre écuries et des courses épiques sur des circuits légendaires comme Monza, Monaco et Spa-Francorchamps. | |
Les années 1990 et 2000 sont dominées par des écuries comme Williams, Ferrari et McLaren, et des pilotes emblématiques tels que Ayrton Senna, Alain Prost, Michael Schumacher et Lewis Hamilton. Ferrari en particulier connaît une période de domination avec Michael Schumacher, remportant de nombreux championnats constructeurs et pilotes. | |
""" | |
) | |
col1, col2 = st.columns(2) | |
with col1: | |
intro_image_url = "https://cdn.ferrari.com/cms/network/media/img/resize/5e3ac213e015050ac0c4f12a-ferrari-hero-fangio-career-full-focus-1?" | |
st.image(intro_image_url, caption="Juan Manuel Fangio", use_column_width=True) | |
with col2: | |
intro_image_url = "https://static1.purepeople.com/people/1/95/1/@/128138-michael-schumacher-200x200-2.jpg" | |
st.image(intro_image_url, caption="michael schumacher", use_column_width=True) | |
st.markdown( | |
""" | |
## Aujourd'hui ! | |
Aujourd'hui, la Formule 1 reste l'une des compétitions sportives les plus regardées au monde, attirant des millions de fans passionnés chaque année. C'est une discipline qui incarne la vitesse, la technologie et le glamour, tout en conservant un héritage riche et une histoire fascinante qui continue de captiver les esprits à travers le monde. | |
""" | |
) | |
elif add_radio == "Chapitre 2 : 2020 une année importante": | |
st.markdown( | |
""" | |
# Chapitre 2 : 2020 une année importante | |
""") | |
lineup = "https://www.lsp-pilotage.com/wp-content/uploads/2020/03/3y1ipq61yh141.jpg" | |
st.image(lineup, | |
caption="Line Up des Pilotes 2020", | |
use_column_width=True) | |
st.markdown( | |
""" | |
## Présentation des Grand Prix""") | |
#### MAP PAR ANNÉE #### | |
years = list(df3['year'].unique()) | |
years = sorted(years, reverse=True) | |
years = years[2:] | |
year_choice = st.selectbox("Sélectionnez l'année des circuits à afficher :", | |
options=years, | |
) | |
list_circuits = list(df3[df3['year'] == year_choice]["name"].unique()) | |
circuits_filtered = circuits[circuits['name'].isin(list_circuits)] | |
# Création du graphique scatter_mapbox avec Plotly Express | |
fig_new = px.scatter_mapbox(circuits_filtered, lat="lat", lon="lng", hover_name="name", | |
color_discrete_sequence=["red"], zoom=2, | |
title=f"Emplacements des Grands Prix de Formule 1 - {year_choice}") | |
fig_new.update_layout(mapbox_style="open-street-map") | |
fig_new.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0}) | |
# Affichage du graphique dans Streamlit | |
st.plotly_chart(fig_new, use_container_width=True) | |
st.markdown(""" | |
#### On a donc 22 grand prix réparti dans une dizaines de pays à travers le monde ! | |
""" | |
) | |
st.markdown(""" | |
## Résultats par pilotes et par constructeurs | |
""" | |
) | |
last_GP = infos_pilotes.groupby("year")["name"].last() | |
temp_pilotes = infos_pilotes[infos_pilotes["year"] == year_choice][ | |
infos_pilotes["name"] == last_GP.loc[year_choice]] | |
fig = px.bar(temp_pilotes.sort_values(by='points_pilotes', ascending=False), x='surname', y='points_pilotes', | |
hover_data=['surname', 'position_pilotes', 'name'], | |
color='points_pilotes', | |
labels={'points_pilotes': 'Nombre de Points', 'surname': 'Nom'}, | |
title='Classement des Pilotes par Nombre de Points') | |
st.plotly_chart(fig, use_container_width=True) | |
st.markdown(""" | |
#### On remarque ici une nette domination de Lewis Hamilton. Cette domination n'est pas nouvelle, il remporte cette année la son 7ème titre de champion du monde. Son coéquipier Valtteri Bottas le suit à la deuxième position étant très proche de Max Verstappen. | |
""" | |
) | |
temp_ecurie = infos_constructors[infos_constructors["year"] == year_choice][ | |
infos_constructors["name"] == last_GP.loc[year_choice]] | |
# %% | |
fig_ecurie = px.bar(temp_ecurie.sort_values(by='points_constructor', ascending=False), x='name_cons', | |
y='points_constructor', | |
hover_data=['name_cons', 'position_constructor', 'name'], | |
color='points_constructor', | |
labels={'points_constructor': 'Nombre de Points', 'name_cons': 'Nom'}, | |
title='Classement des Constructeurs par Nombre de Points') | |
st.plotly_chart(fig_ecurie, use_container_width=True) | |
st.markdown(""" | |
#### On voit donc la domination claire de Mercedes au classement des constructeurs, suivi de RedBull avec près de deux fois moins de points. | |
""" | |
) | |
st.markdown(""" | |
## Gagnants de chaque course de la saison | |
""" | |
) | |
temp_courses = infos_pilotes[infos_pilotes["year"] == year_choice][infos_pilotes["position_pilotes"] == 1] | |
temp_courses["nom_complet"] = temp_courses["forename"] + ' ' + temp_courses["surname"] | |
temp_courses = temp_courses[["name", "nom_complet"]] | |
temp_courses = temp_courses.rename(columns={"name" : "Grand Prix", "nom_complet" : "Gagnant"}) | |
st.dataframe(temp_courses) | |
elif add_radio == "Chapitre 3 : 2021 !": | |
st.markdown( | |
""" | |
# Chapitre 3 : 2021 ! | |
##### Hamilton vient de remporter son 7ème titre de Champion du Monde, égalisant le record historique de la discipline détenu par Michaël Schumacher. Il va donc tenter cette année de battre un nouveau record : le premier coureur çà être 8 fois champion du monde ! | |
##### Cependant, un pilote fait beaucoup parler de lui cette année : Max Verstappen. De part sa performance et ses capacités, il est l'un des favoris pour le titre de 2021. | |
""" | |
) | |
MV = "https://cdn-2.motorsport.com/images/mgl/6D1XbeV0/s800/max-verstappen-red-bull-racing.jpg" | |
st.image(MV, | |
caption="Max Verstappen", | |
use_column_width=True) | |
st.markdown(""" | |
**Max Verstappen** : | |
Victoires en Grand Prix : 21 | |
Podiums : 61 | |
Pole positions : 10 | |
""") | |
LH = "https://cdn-7.motorsport.com/images/mgl/YEQ1pGwY/s8/lewis-hamilton-mercedes.jpg" | |
st.image(LH, | |
caption="Lewis Hamilton", | |
use_column_width=True) | |
st.markdown(""" | |
**Lewis Hamilton** : | |
Victoires en Grand Prix : 103 (record) | |
Podiums : 181 | |
Pole positions : 103 (record) | |
Sept fois champion du monde de Formule 1 (2008, 2014, 2015, 2017, 2018, 2019, 2020) | |
Le pilote ayant remporté le plus de victoires, de pole positions et de podiums de l'histoire de la Formule 1 | |
#### Max Verstappen va t-il mettre un terme au règne de Lewis Hamilton . Lewis Hamilton va t-il détenir le record absolu en gagnant la saison 2021 ? Pour répondre à ces questions, nous allons construire un modèle prédictif afin de déterminer qui gagnera chaque Grand Prix et donc le titre de champion de monde de Formule 1 2021. | |
""") |