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)