Download src/streamlit_app.py from MSK34/formula1-data-visualization: direct link, hf CLI and curl.
- Browser
- Download file 5.15 kB
-
https://huggingface.co/spaces/MSK34/formula1-data-visualization/resolve/main/src/streamlit_app.py
- Command line
-
hf download hf://spaces/MSK34/formula1-data-visualization/src/streamlit_app.py
-
curl -L -o streamlit_app.py https://huggingface.co/spaces/MSK34/formula1-data-visualization/resolve/main/src/streamlit_app.py
5.15 kB
| import streamlit as st | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| st.set_page_config( | |
| page_title="Formula 1 Data Visualization", | |
| page_icon="🏎️", | |
| layout="wide" | |
| ) | |
| st.title("🏎️ Formula 1 Data Visualization") | |
| st.write( | |
| "Bu uygulama, 1950-2024 yılları arasındaki Formula 1 verilerini kullanarak " | |
| "pilotlar, takımlar, yarışlar ve pistler üzerine görselleştirmeler sunar." | |
| ) | |
| def load_data(): | |
| drivers = pd.read_csv("src/drivers.csv") | |
| constructors = pd.read_csv("src/constructors.csv") | |
| races = pd.read_csv("src/races.csv") | |
| results = pd.read_csv("src/results.csv") | |
| circuits = pd.read_csv("src/circuits.csv") | |
| return drivers, constructors, races, results, circuits | |
| drivers, constructors, races, results, circuits = load_data() | |
| st.sidebar.title("Grafik Seçimi") | |
| grafik = st.sidebar.selectbox( | |
| "Bir grafik seçin:", | |
| [ | |
| "Yıllara Göre Yarış Sayısı", | |
| "En Çok Yarış Kazanan Pilotlar", | |
| "En Başarılı Takımlar", | |
| "Pilot Milliyetleri", | |
| "Yarış Düzenleyen Ülkeler", | |
| "Start Pozisyonu ve Yarış Sonucu", | |
| "En Çok Yarış Düzenlenen Pistler" | |
| ] | |
| ) | |
| if grafik == "Yıllara Göre Yarış Sayısı": | |
| st.subheader("Yıllara Göre Formula 1 Yarış Sayısı") | |
| race_count = races.groupby("year")["raceId"].count() | |
| fig, ax = plt.subplots(figsize=(12, 5)) | |
| ax.plot(race_count.index, race_count.values) | |
| ax.set_xlabel("Yıl") | |
| ax.set_ylabel("Yarış Sayısı") | |
| ax.set_title("Yıllara Göre Formula 1 Yarış Sayısı") | |
| st.pyplot(fig) | |
| elif grafik == "En Çok Yarış Kazanan Pilotlar": | |
| st.subheader("En Çok Yarış Kazanan Pilotlar") | |
| wins = results[results["positionOrder"] == 1] | |
| driver_wins = wins.groupby("driverId").size().reset_index(name="wins") | |
| driver_wins = driver_wins.merge( | |
| drivers, | |
| on="driverId" | |
| ) | |
| driver_wins["pilot"] = ( | |
| driver_wins["forename"] + " " + driver_wins["surname"] | |
| ) | |
| top_drivers = driver_wins.sort_values( | |
| "wins", | |
| ascending=False | |
| ).head(15) | |
| fig, ax = plt.subplots(figsize=(10, 6)) | |
| ax.barh(top_drivers["pilot"], top_drivers["wins"]) | |
| ax.set_xlabel("Galibiyet Sayısı") | |
| ax.set_title("En Çok Yarış Kazanan 15 Pilot") | |
| ax.invert_yaxis() | |
| st.pyplot(fig) | |
| elif grafik == "En Başarılı Takımlar": | |
| st.subheader("En Başarılı Takımlar") | |
| wins = results[results["positionOrder"] == 1] | |
| team_wins = wins.groupby("constructorId").size().reset_index(name="wins") | |
| team_wins = team_wins.merge( | |
| constructors, | |
| on="constructorId" | |
| ) | |
| top_teams = team_wins.sort_values( | |
| "wins", | |
| ascending=False | |
| ).head(10) | |
| fig, ax = plt.subplots(figsize=(10, 6)) | |
| ax.barh(top_teams["name"], top_teams["wins"]) | |
| ax.set_xlabel("Galibiyet Sayısı") | |
| ax.set_title("En Başarılı 10 Formula 1 Takımı") | |
| ax.invert_yaxis() | |
| st.pyplot(fig) | |
| elif grafik == "Pilot Milliyetleri": | |
| st.subheader("Pilot Milliyetleri Dağılımı") | |
| top_nations = drivers["nationality"].value_counts().head(10) | |
| fig, ax = plt.subplots(figsize=(8, 8)) | |
| ax.pie( | |
| top_nations, | |
| labels=top_nations.index, | |
| autopct="%1.1f%%" | |
| ) | |
| ax.set_title("Pilot Milliyetleri Dağılımı") | |
| st.pyplot(fig) | |
| elif grafik == "Yarış Düzenleyen Ülkeler": | |
| st.subheader("En Çok Yarış Düzenleyen Ülkeler") | |
| country_count = circuits["country"].value_counts().head(15) | |
| fig, ax = plt.subplots(figsize=(10, 6)) | |
| ax.barh(country_count.index, country_count.values) | |
| ax.set_xlabel("Pist Sayısı") | |
| ax.set_title("En Çok Formula 1 Pisti Bulunan Ülkeler") | |
| ax.invert_yaxis() | |
| st.pyplot(fig) | |
| elif grafik == "Start Pozisyonu ve Yarış Sonucu": | |
| st.subheader("Start Pozisyonu ve Yarış Sonucu") | |
| sample_results = results[ | |
| results["grid"] > 0 | |
| ][["grid", "positionOrder"]].sample( | |
| 5000, | |
| random_state=42 | |
| ) | |
| fig, ax = plt.subplots(figsize=(8, 6)) | |
| ax.scatter( | |
| sample_results["grid"], | |
| sample_results["positionOrder"], | |
| alpha=0.4 | |
| ) | |
| ax.set_xlabel("Grid Pozisyonu") | |
| ax.set_ylabel("Yarış Sonucu") | |
| ax.set_title("Start Pozisyonu ve Yarış Sonucu") | |
| st.pyplot(fig) | |
| st.write( | |
| "Grafik, ön sıralardan başlayan pilotların yarışları üst sıralarda " | |
| "bitirme eğiliminin daha yüksek olduğunu göstermektedir." | |
| ) | |
| elif grafik == "En Çok Yarış Düzenlenen Pistler": | |
| st.subheader("En Çok Yarış Düzenlenen Pistler") | |
| circuit_count = races.groupby("circuitId").size().reset_index(name="race_count") | |
| circuit_count = circuit_count.merge( | |
| circuits, | |
| on="circuitId" | |
| ) | |
| top_circuits = circuit_count.sort_values( | |
| "race_count", | |
| ascending=False | |
| ).head(15) | |
| fig, ax = plt.subplots(figsize=(10, 6)) | |
| ax.barh(top_circuits["name"], top_circuits["race_count"]) | |
| ax.set_xlabel("Yarış Sayısı") | |
| ax.set_title("En Çok Yarış Düzenlenen Pistler") | |
| ax.invert_yaxis() | |
| st.pyplot(fig) |