Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import seaborn as sns | |
import matplotlib.pyplot as plt | |
import plotly.express as px | |
# Load the dataset | |
df = pd.read_csv("cric_final.csv") | |
st.title("π Player Performance Dashboard") | |
# Dropdown to Select Player | |
selected_player = st.selectbox("Select a Player", df["Player"].unique()) | |
# Get Player Data | |
player_data = df[df["Player"] == selected_player] | |
if not player_data.empty: | |
# Replace None/NaN with "-" only in batting and bowling columns | |
batting_cols = [col for col in df.columns if "batting" in col.lower()] | |
bowling_cols = [col for col in df.columns if "bowling" in col.lower()] | |
player_data[batting_cols] = player_data[batting_cols].fillna("-") | |
player_data[bowling_cols] = player_data[bowling_cols].fillna("-") | |
# Only 2 tabs now: Batting Performance and Bowling Performance | |
tab1, tab2 = st.tabs(["π Batting Performance", "π― Bowling Performance"]) | |
with tab1: | |
st.write("### π Batting Performance") | |
# Bar Chart for Batting Runs | |
fig, ax = plt.subplots(figsize=(7, 5)) | |
sns.barplot( | |
x=["Test", "ODI", "T20", "IPL"], | |
y=player_data.iloc[0][["batting_Runs_Test", "batting_Runs_ODI", "batting_Runs_T20", "batting_Runs_IPL"]], | |
palette="magma", | |
ax=ax | |
) | |
ax.set_ylabel("Total Runs", fontsize=14) | |
ax.set_title(f"Batting Performance of {selected_player}", fontsize=16) | |
ax.grid(True, axis='y', linestyle='--', alpha=0.7) | |
st.pyplot(fig) | |
# Side-by-Side Bar Chart for 50s & 100s | |
st.write("### Half-Centuries (50s) vs Centuries (100s)") | |
fig, ax = plt.subplots(figsize=(7, 5)) | |
x_labels = ["Test", "ODI", "T20", "IPL"] | |
x = range(len(x_labels)) | |
fifties = player_data.iloc[0][["batting_50s_Test", "batting_50s_ODI", "batting_50s_T20", "batting_50s_IPL"]] | |
hundreds = player_data.iloc[0][["batting_100s_Test", "batting_100s_ODI", "batting_100s_T20", "batting_100s_IPL"]] | |
width = 0.4 | |
ax.bar([i - width/2 for i in x], fifties, width=width, label="50s", color="skyblue") | |
ax.bar([i + width/2 for i in x], hundreds, width=width, label="100s", color="orange") | |
ax.set_xticks(x) | |
ax.set_xticklabels(x_labels) | |
ax.set_ylabel("Count", fontsize=14) | |
ax.set_title(f"50s vs 100s of {selected_player}", fontsize=16) | |
ax.legend() | |
ax.grid(axis="y", linestyle="--", alpha=0.7) | |
st.pyplot(fig) | |
# Pie Chart for Batting Runs Distribution | |
st.write("### Batting Runs Distribution") | |
runs = player_data.iloc[0][["batting_Runs_Test", "batting_Runs_ODI", "batting_Runs_T20", "batting_Runs_IPL"]] | |
labels = ["Test", "ODI", "T20", "IPL"] | |
fig_pie = px.pie(values=runs, names=labels, title="Batting Runs Distribution", color=labels) | |
st.plotly_chart(fig_pie) | |
# Line Chart for Batting Averages | |
st.write("### Batting Averages Over Different Formats") | |
batting_averages = player_data.iloc[0][["batting_Average_Test", "batting_Average_ODI", "batting_Average_T20", "batting_Average_IPL"]] | |
fig_line, ax = plt.subplots(figsize=(7, 5)) | |
ax.plot(["Test", "ODI", "T20", "IPL"], batting_averages, marker='o', color='tab:blue') | |
ax.set_ylabel("Batting Average", fontsize=14) | |
ax.set_title(f"Batting Averages of {selected_player}", fontsize=16) | |
ax.grid(True, axis='y', linestyle='--', alpha=0.7) | |
st.pyplot(fig_line) | |
with tab2: | |
st.write("### π― Bowling Performance") | |
# Bar Chart for Bowling Wickets | |
fig, ax = plt.subplots(figsize=(7, 5)) | |
sns.barplot( | |
x=["Test", "ODI", "T20", "IPL"], | |
y=player_data.iloc[0][["bowling_Test_Wickets", "bowling_ODI_Wickets", "bowling_T20_Wickets", "bowling_IPL_Wickets"]], | |
palette="coolwarm", | |
ax=ax | |
) | |
ax.set_ylabel("Total Wickets", fontsize=14) | |
ax.set_title(f"Bowling Performance of {selected_player}", fontsize=16) | |
ax.grid(True, axis='y', linestyle='--', alpha=0.7) | |
st.pyplot(fig) | |
# Pie Chart for Bowling Wickets Distribution | |
st.write("### Bowling Wickets Distribution") | |
wickets = player_data.iloc[0][["bowling_Test_Wickets", "bowling_ODI_Wickets", "bowling_T20_Wickets", "bowling_IPL_Wickets"]] | |
labels = ["Test", "ODI", "T20", "IPL"] | |
fig_pie_bowl = px.pie(values=wickets, names=labels, title="Bowling Wickets Distribution", color=labels) | |
st.plotly_chart(fig_pie_bowl) | |
# Line Chart for Bowling Average | |
st.write("### Bowling Averages Over Different Formats") | |
bowling_averages = player_data.iloc[0][["bowling_Test_Avg", "bowling_ODI_Avg", "bowling_T20_Avg", "bowling_IPL_Avg"]] | |
fig_line_bowl, ax = plt.subplots(figsize=(7, 5)) | |
ax.plot(["Test", "ODI", "T20", "IPL"], bowling_averages, marker='o', color='tab:green') | |
ax.set_ylabel("Bowling Average", fontsize=14) | |
ax.set_title(f"Bowling Averages of {selected_player}", fontsize=16) | |
ax.grid(True, axis='y', linestyle='--', alpha=0.7) | |
st.pyplot(fig_line_bowl) | |
else: | |
st.warning("β οΈ Player not found in the dataset.") | |