formula1-data-visualization / src /streamlit_app.py
MSK34's picture
Update src/streamlit_app.py
2ba232b verified
Raw
History Blame Contribute Delete
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."
)
@st.cache_data
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)