Spaces:
Sleeping
Sleeping
Update pages/2player_comparison.py
Browse files- pages/2player_comparison.py +19 -9
pages/2player_comparison.py
CHANGED
@@ -19,7 +19,7 @@ def load_model_and_encoder():
|
|
19 |
def load_data():
|
20 |
return pd.read_csv('Reduced_final_teams.csv')
|
21 |
|
22 |
-
#
|
23 |
def get_matching_player(name_from_file, player_list):
|
24 |
name_lower = name_from_file.lower()
|
25 |
for player in player_list:
|
@@ -44,7 +44,7 @@ def plot_horizontal_bar(df, player1, player2):
|
|
44 |
ax.legend(loc="lower right")
|
45 |
st.pyplot(fig)
|
46 |
|
47 |
-
# Pie chart
|
48 |
def plot_pie_charts(player1_data, player2_data, player1, player2):
|
49 |
st.subheader("π₯§ Batting vs Bowling Contribution")
|
50 |
col1, col2 = st.columns(2)
|
@@ -55,12 +55,16 @@ def plot_pie_charts(player1_data, player2_data, player1, player2):
|
|
55 |
player_data.get('Runs_T20', 0) or 0,
|
56 |
player_data.get('Runs_Test', 0) or 0
|
57 |
])
|
58 |
-
|
59 |
bowling_total = sum([
|
60 |
player_data.get('Wickets_ODI', 0) or 0,
|
61 |
player_data.get('Wickets_T20', 0) or 0,
|
62 |
player_data.get('Wickets_Test', 0) or 0
|
63 |
])
|
|
|
|
|
|
|
|
|
|
|
64 |
|
65 |
labels = ['Batting', 'Bowling']
|
66 |
sizes = [batting_total, bowling_total]
|
@@ -71,7 +75,7 @@ def plot_pie_charts(player1_data, player2_data, player1, player2):
|
|
71 |
col.pyplot(fig)
|
72 |
col.caption(f"{player_name}'s Batting vs Bowling")
|
73 |
|
74 |
-
# Bowling
|
75 |
def plot_bowling_comparison(df, player1, player2):
|
76 |
st.subheader("π― Bowling Metrics Comparison")
|
77 |
|
@@ -80,6 +84,10 @@ def plot_bowling_comparison(df, player1, player2):
|
|
80 |
df_bowling.columns = [player1, player2]
|
81 |
df_bowling = df_bowling.fillna(0).sort_values(by=player1, ascending=False)
|
82 |
|
|
|
|
|
|
|
|
|
83 |
fig, ax = plt.subplots(figsize=(10, 6))
|
84 |
df_bowling.plot(kind='bar', ax=ax)
|
85 |
ax.set_title("Bowling Stats")
|
@@ -88,7 +96,7 @@ def plot_bowling_comparison(df, player1, player2):
|
|
88 |
ax.legend(loc="upper right")
|
89 |
st.pyplot(fig)
|
90 |
|
91 |
-
# Bowling stats summary
|
92 |
def show_bowling_summary(player_data, player_name):
|
93 |
st.subheader(f"π³ Bowling Summary: {player_name}")
|
94 |
col1, col2, col3 = st.columns(3)
|
@@ -97,8 +105,10 @@ def show_bowling_summary(player_data, player_name):
|
|
97 |
col3.metric("Wickets (Test)", int(player_data.get("Wickets_Test", 0) or 0))
|
98 |
|
99 |
col4, col5 = st.columns(2)
|
100 |
-
|
101 |
-
|
|
|
|
|
102 |
|
103 |
# Main app
|
104 |
def main():
|
@@ -135,13 +145,13 @@ def main():
|
|
135 |
with col4:
|
136 |
st.image(img2, caption=player2_name, use_container_width=True)
|
137 |
|
138 |
-
#
|
139 |
comparison_df = pd.DataFrame([player1_data, player2_data])
|
140 |
comparison_df.set_index('Player', inplace=True)
|
141 |
st.subheader("π Full Stats Table")
|
142 |
st.dataframe(comparison_df.T)
|
143 |
|
144 |
-
#
|
145 |
show_bowling_summary(player1_data, player1_name)
|
146 |
show_bowling_summary(player2_data, player2_name)
|
147 |
|
|
|
19 |
def load_data():
|
20 |
return pd.read_csv('Reduced_final_teams.csv')
|
21 |
|
22 |
+
# Match player name exactly (case-insensitive)
|
23 |
def get_matching_player(name_from_file, player_list):
|
24 |
name_lower = name_from_file.lower()
|
25 |
for player in player_list:
|
|
|
44 |
ax.legend(loc="lower right")
|
45 |
st.pyplot(fig)
|
46 |
|
47 |
+
# Pie chart with NaN-safe checks
|
48 |
def plot_pie_charts(player1_data, player2_data, player1, player2):
|
49 |
st.subheader("π₯§ Batting vs Bowling Contribution")
|
50 |
col1, col2 = st.columns(2)
|
|
|
55 |
player_data.get('Runs_T20', 0) or 0,
|
56 |
player_data.get('Runs_Test', 0) or 0
|
57 |
])
|
|
|
58 |
bowling_total = sum([
|
59 |
player_data.get('Wickets_ODI', 0) or 0,
|
60 |
player_data.get('Wickets_T20', 0) or 0,
|
61 |
player_data.get('Wickets_Test', 0) or 0
|
62 |
])
|
63 |
+
total = batting_total + bowling_total
|
64 |
+
|
65 |
+
if total == 0 or np.isnan(total):
|
66 |
+
col.warning(f"β οΈ Not enough data to plot pie chart for {player_name}")
|
67 |
+
continue
|
68 |
|
69 |
labels = ['Batting', 'Bowling']
|
70 |
sizes = [batting_total, bowling_total]
|
|
|
75 |
col.pyplot(fig)
|
76 |
col.caption(f"{player_name}'s Batting vs Bowling")
|
77 |
|
78 |
+
# Bowling metrics bar chart
|
79 |
def plot_bowling_comparison(df, player1, player2):
|
80 |
st.subheader("π― Bowling Metrics Comparison")
|
81 |
|
|
|
84 |
df_bowling.columns = [player1, player2]
|
85 |
df_bowling = df_bowling.fillna(0).sort_values(by=player1, ascending=False)
|
86 |
|
87 |
+
if df_bowling.empty:
|
88 |
+
st.warning("β οΈ No bowling metrics available for comparison.")
|
89 |
+
return
|
90 |
+
|
91 |
fig, ax = plt.subplots(figsize=(10, 6))
|
92 |
df_bowling.plot(kind='bar', ax=ax)
|
93 |
ax.set_title("Bowling Stats")
|
|
|
96 |
ax.legend(loc="upper right")
|
97 |
st.pyplot(fig)
|
98 |
|
99 |
+
# Bowling stats summary per player
|
100 |
def show_bowling_summary(player_data, player_name):
|
101 |
st.subheader(f"π³ Bowling Summary: {player_name}")
|
102 |
col1, col2, col3 = st.columns(3)
|
|
|
105 |
col3.metric("Wickets (Test)", int(player_data.get("Wickets_Test", 0) or 0))
|
106 |
|
107 |
col4, col5 = st.columns(2)
|
108 |
+
economy = player_data.get("Economy_ODI", 0)
|
109 |
+
bowling_avg = player_data.get("Bowling_Average_Test", 0)
|
110 |
+
col4.metric("Economy (ODI)", f"{economy:.2f}" if pd.notna(economy) else "N/A")
|
111 |
+
col5.metric("Avg (Test)", f"{bowling_avg:.2f}" if pd.notna(bowling_avg) else "N/A")
|
112 |
|
113 |
# Main app
|
114 |
def main():
|
|
|
145 |
with col4:
|
146 |
st.image(img2, caption=player2_name, use_container_width=True)
|
147 |
|
148 |
+
# Full Stats Table
|
149 |
comparison_df = pd.DataFrame([player1_data, player2_data])
|
150 |
comparison_df.set_index('Player', inplace=True)
|
151 |
st.subheader("π Full Stats Table")
|
152 |
st.dataframe(comparison_df.T)
|
153 |
|
154 |
+
# Stat Summaries
|
155 |
show_bowling_summary(player1_data, player1_name)
|
156 |
show_bowling_summary(player2_data, player2_name)
|
157 |
|