Cricket_data / pages /Player Comparision.py
Adityaganesh's picture
Update pages/Player Comparision.py
6396724 verified
import streamlit as st
import pandas as pd
import plotly.graph_objects as go
st.title("🀝 Cricket Player Comparison")
# Load data with caching
@st.cache_data
def load_batting_data():
return pd.read_csv("Batting_10_Teams_Final.csv")
@st.cache_data
def load_bowling_data():
return pd.read_csv("Bowling_10_Teams_Final.csv")
try:
batting_df = load_batting_data()
bowling_df = load_bowling_data()
except FileNotFoundError as e:
st.error(f"File not found: {e}")
st.stop()
# Show bowling columns to debug (optional)
# st.write("Bowling columns:", bowling_df.columns.tolist())
# Select two players for comparison
player1 = st.selectbox("Select First Player", sorted(batting_df["player_name"].unique()), key="p1")
player2 = st.selectbox("Select Second Player", sorted(batting_df["player_name"].unique()), key="p2")
# Filter batting data and fill NaNs
bat1 = batting_df[batting_df["player_name"] == player1].fillna(0)
bat2 = batting_df[batting_df["player_name"] == player2].fillna(0)
# Filter bowling data and fill NaNs
bowl1 = bowling_df[bowling_df["player_name"] == player1].fillna(0)
bowl2 = bowling_df[bowling_df["player_name"] == player2].fillna(0)
# Batting metrics based on your CSV columns
batting_metrics = ["Runs", "Average", "SR", "Fours", "Sixes"]
# Bowling metrics - check which columns exist in bowling_df before using
possible_bowling_metrics = ["Wickets", "Eco", "Average", "SR"]
bowling_metrics = [col for col in possible_bowling_metrics if col in bowling_df.columns]
# Function to safely get average values
def get_avg(df, cols):
existing_cols = [c for c in cols if c in df.columns]
if df.empty or not existing_cols:
return pd.Series({col: 0 for col in cols})
avg_series = df[existing_cols].mean()
# Fill missing cols with zero
for c in cols:
if c not in avg_series:
avg_series[c] = 0
return avg_series[cols]
bat1_avg = get_avg(bat1, batting_metrics)
bat2_avg = get_avg(bat2, batting_metrics)
bowl1_avg = get_avg(bowl1, bowling_metrics)
bowl2_avg = get_avg(bowl2, bowling_metrics)
# Batting Comparison Plot
st.subheader("🏏 Batting Stats Comparison")
fig_bat = go.Figure()
fig_bat.add_trace(go.Bar(x=batting_metrics, y=bat1_avg, name=player1))
fig_bat.add_trace(go.Bar(x=batting_metrics, y=bat2_avg, name=player2))
fig_bat.update_layout(barmode='group', yaxis_title='Value', title='Batting Metrics Comparison')
st.plotly_chart(fig_bat)
# Bowling Comparison Plot (only if bowling_metrics exist)
if bowling_metrics:
st.subheader("🎯 Bowling Stats Comparison")
fig_bowl = go.Figure()
fig_bowl.add_trace(go.Bar(x=bowling_metrics, y=bowl1_avg, name=player1))
fig_bowl.add_trace(go.Bar(x=bowling_metrics, y=bowl2_avg, name=player2))
fig_bowl.update_layout(barmode='group', yaxis_title='Value', title='Bowling Metrics Comparison')
st.plotly_chart(fig_bowl)
else:
st.info("Bowling stats columns missing or not found in the dataset.")