File size: 10,635 Bytes
3b184f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
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. 
    """)