Team Ai
Apppublic

MSK34/formula1-data-visualization

sourceHugging Facemitupdated 4mo agoView on Hugging Face
0likes
streamlit_app.py198 linesDownload Raw Back to src
1import streamlit as st2import pandas as pd3import matplotlib.pyplot as plt4 5 6st.set_page_config(7    page_title="Formula 1 Data Visualization",8    page_icon="🏎️",9    layout="wide"10)11 12st.title("🏎️ Formula 1 Data Visualization")13 14st.write(15    "Bu uygulama, 1950-2024 yılları arasındaki Formula 1 verilerini kullanarak "16    "pilotlar, takımlar, yarışlar ve pistler üzerine görselleştirmeler sunar."17)18 19 20@st.cache_data21def load_data():22    drivers = pd.read_csv("src/drivers.csv")23    constructors = pd.read_csv("src/constructors.csv")24    races = pd.read_csv("src/races.csv")25    results = pd.read_csv("src/results.csv")26    circuits = pd.read_csv("src/circuits.csv")27    return drivers, constructors, races, results, circuits28 29 30drivers, constructors, races, results, circuits = load_data()31 32 33st.sidebar.title("Grafik Seçimi")34 35grafik = st.sidebar.selectbox(36    "Bir grafik seçin:",37    [38        "Yıllara Göre Yarış Sayısı",39        "En Çok Yarış Kazanan Pilotlar",40        "En Başarılı Takımlar",41        "Pilot Milliyetleri",42        "Yarış Düzenleyen Ülkeler",43        "Start Pozisyonu ve Yarış Sonucu",44        "En Çok Yarış Düzenlenen Pistler"45    ]46)47 48 49if grafik == "Yıllara Göre Yarış Sayısı":50    st.subheader("Yıllara Göre Formula 1 Yarış Sayısı")51 52    race_count = races.groupby("year")["raceId"].count()53 54    fig, ax = plt.subplots(figsize=(12, 5))55    ax.plot(race_count.index, race_count.values)56    ax.set_xlabel("Yıl")57    ax.set_ylabel("Yarış Sayısı")58    ax.set_title("Yıllara Göre Formula 1 Yarış Sayısı")59 60    st.pyplot(fig)61 62 63elif grafik == "En Çok Yarış Kazanan Pilotlar":64    st.subheader("En Çok Yarış Kazanan Pilotlar")65 66    wins = results[results["positionOrder"] == 1]67 68    driver_wins = wins.groupby("driverId").size().reset_index(name="wins")69 70    driver_wins = driver_wins.merge(71        drivers,72        on="driverId"73    )74 75    driver_wins["pilot"] = (76        driver_wins["forename"] + " " + driver_wins["surname"]77    )78 79    top_drivers = driver_wins.sort_values(80        "wins",81        ascending=False82    ).head(15)83 84    fig, ax = plt.subplots(figsize=(10, 6))85    ax.barh(top_drivers["pilot"], top_drivers["wins"])86    ax.set_xlabel("Galibiyet Sayısı")87    ax.set_title("En Çok Yarış Kazanan 15 Pilot")88    ax.invert_yaxis()89 90    st.pyplot(fig)91 92 93elif grafik == "En Başarılı Takımlar":94    st.subheader("En Başarılı Takımlar")95 96    wins = results[results["positionOrder"] == 1]97 98    team_wins = wins.groupby("constructorId").size().reset_index(name="wins")99 100    team_wins = team_wins.merge(101        constructors,102        on="constructorId"103    )104 105    top_teams = team_wins.sort_values(106        "wins",107        ascending=False108    ).head(10)109 110    fig, ax = plt.subplots(figsize=(10, 6))111    ax.barh(top_teams["name"], top_teams["wins"])112    ax.set_xlabel("Galibiyet Sayısı")113    ax.set_title("En Başarılı 10 Formula 1 Takımı")114    ax.invert_yaxis()115 116    st.pyplot(fig)117 118 119elif grafik == "Pilot Milliyetleri":120    st.subheader("Pilot Milliyetleri Dağılımı")121 122    top_nations = drivers["nationality"].value_counts().head(10)123 124    fig, ax = plt.subplots(figsize=(8, 8))125    ax.pie(126        top_nations,127        labels=top_nations.index,128        autopct="%1.1f%%"129    )130    ax.set_title("Pilot Milliyetleri Dağılımı")131 132    st.pyplot(fig)133 134 135elif grafik == "Yarış Düzenleyen Ülkeler":136    st.subheader("En Çok Yarış Düzenleyen Ülkeler")137 138    country_count = circuits["country"].value_counts().head(15)139 140    fig, ax = plt.subplots(figsize=(10, 6))141    ax.barh(country_count.index, country_count.values)142    ax.set_xlabel("Pist Sayısı")143    ax.set_title("En Çok Formula 1 Pisti Bulunan Ülkeler")144    ax.invert_yaxis()145 146    st.pyplot(fig)147 148 149elif grafik == "Start Pozisyonu ve Yarış Sonucu":150    st.subheader("Start Pozisyonu ve Yarış Sonucu")151 152    sample_results = results[153        results["grid"] > 0154    ][["grid", "positionOrder"]].sample(155        5000,156        random_state=42157    )158 159    fig, ax = plt.subplots(figsize=(8, 6))160    ax.scatter(161        sample_results["grid"],162        sample_results["positionOrder"],163        alpha=0.4164    )165    ax.set_xlabel("Grid Pozisyonu")166    ax.set_ylabel("Yarış Sonucu")167    ax.set_title("Start Pozisyonu ve Yarış Sonucu")168 169    st.pyplot(fig)170 171    st.write(172        "Grafik, ön sıralardan başlayan pilotların yarışları üst sıralarda "173        "bitirme eğiliminin daha yüksek olduğunu göstermektedir."174    )175 176 177elif grafik == "En Çok Yarış Düzenlenen Pistler":178    st.subheader("En Çok Yarış Düzenlenen Pistler")179 180    circuit_count = races.groupby("circuitId").size().reset_index(name="race_count")181 182    circuit_count = circuit_count.merge(183        circuits,184        on="circuitId"185    )186 187    top_circuits = circuit_count.sort_values(188        "race_count",189        ascending=False190    ).head(15)191 192    fig, ax = plt.subplots(figsize=(10, 6))193    ax.barh(top_circuits["name"], top_circuits["race_count"])194    ax.set_xlabel("Yarış Sayısı")195    ax.set_title("En Çok Yarış Düzenlenen Pistler")196    ax.invert_yaxis()197 198    st.pyplot(fig)