Spaces:
Sleeping
Sleeping
Update pages/2player_comparison.py
Browse files- pages/2player_comparison.py +31 -5
pages/2player_comparison.py
CHANGED
@@ -33,6 +33,7 @@ def plot_horizontal_bar(df, player1, player2):
|
|
33 |
num_cols = df.select_dtypes(include='number').columns
|
34 |
df_num = df[num_cols].T
|
35 |
df_num.columns = [player1, player2]
|
|
|
36 |
df_num = df_num.sort_values(by=player1, ascending=False).head(15)
|
37 |
|
38 |
fig, ax = plt.subplots(figsize=(10, 7))
|
@@ -49,8 +50,17 @@ def plot_pie_charts(player1_data, player2_data, player1, player2):
|
|
49 |
col1, col2 = st.columns(2)
|
50 |
|
51 |
for col, player_data, player_name in zip([col1, col2], [player1_data, player2_data], [player1, player2]):
|
52 |
-
batting_total =
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
|
55 |
labels = ['Batting', 'Bowling']
|
56 |
sizes = [batting_total, bowling_total]
|
@@ -68,7 +78,7 @@ def plot_bowling_comparison(df, player1, player2):
|
|
68 |
bowling_cols = [col for col in df.columns if 'Wickets' in col or 'Economy' in col or 'Bowling_Average' in col]
|
69 |
df_bowling = df[bowling_cols].T
|
70 |
df_bowling.columns = [player1, player2]
|
71 |
-
df_bowling = df_bowling.
|
72 |
|
73 |
fig, ax = plt.subplots(figsize=(10, 6))
|
74 |
df_bowling.plot(kind='bar', ax=ax)
|
@@ -78,6 +88,18 @@ def plot_bowling_comparison(df, player1, player2):
|
|
78 |
ax.legend(loc="upper right")
|
79 |
st.pyplot(fig)
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
# Main app
|
82 |
def main():
|
83 |
st.set_page_config(layout="wide")
|
@@ -102,8 +124,8 @@ def main():
|
|
102 |
player2_name = get_matching_player(name2_raw, player_list)
|
103 |
|
104 |
if player1_name and player2_name and player1_name != player2_name:
|
105 |
-
player1_data = df[df['Player'].str.lower() == player1_name.lower()].squeeze()
|
106 |
-
player2_data = df[df['Player'].str.lower() == player2_name.lower()].squeeze()
|
107 |
|
108 |
st.success(f"Comparing **{player1_name}** vs **{player2_name}**")
|
109 |
|
@@ -119,6 +141,10 @@ def main():
|
|
119 |
st.subheader("π Full Stats Table")
|
120 |
st.dataframe(comparison_df.T)
|
121 |
|
|
|
|
|
|
|
|
|
122 |
# Visualizations
|
123 |
plot_horizontal_bar(comparison_df, player1_name, player2_name)
|
124 |
plot_pie_charts(player1_data, player2_data, player1_name, player2_name)
|
|
|
33 |
num_cols = df.select_dtypes(include='number').columns
|
34 |
df_num = df[num_cols].T
|
35 |
df_num.columns = [player1, player2]
|
36 |
+
df_num = df_num.fillna(0)
|
37 |
df_num = df_num.sort_values(by=player1, ascending=False).head(15)
|
38 |
|
39 |
fig, ax = plt.subplots(figsize=(10, 7))
|
|
|
50 |
col1, col2 = st.columns(2)
|
51 |
|
52 |
for col, player_data, player_name in zip([col1, col2], [player1_data, player2_data], [player1, player2]):
|
53 |
+
batting_total = sum([
|
54 |
+
player_data.get('Runs_ODI', 0) or 0,
|
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]
|
|
|
78 |
bowling_cols = [col for col in df.columns if 'Wickets' in col or 'Economy' in col or 'Bowling_Average' in col]
|
79 |
df_bowling = df[bowling_cols].T
|
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)
|
|
|
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)
|
95 |
+
col1.metric("Wickets (ODI)", int(player_data.get("Wickets_ODI", 0) or 0))
|
96 |
+
col2.metric("Wickets (T20)", int(player_data.get("Wickets_T20", 0) or 0))
|
97 |
+
col3.metric("Wickets (Test)", int(player_data.get("Wickets_Test", 0) or 0))
|
98 |
+
|
99 |
+
col4, col5 = st.columns(2)
|
100 |
+
col4.metric("Economy (ODI)", round(player_data.get("Economy_ODI", 0) or 0, 2))
|
101 |
+
col5.metric("Bowling Avg (Test)", round(player_data.get("Bowling_Average_Test", 0) or 0, 2))
|
102 |
+
|
103 |
# Main app
|
104 |
def main():
|
105 |
st.set_page_config(layout="wide")
|
|
|
124 |
player2_name = get_matching_player(name2_raw, player_list)
|
125 |
|
126 |
if player1_name and player2_name and player1_name != player2_name:
|
127 |
+
player1_data = df[df['Player'].str.lower() == player1_name.lower()].fillna(0).squeeze()
|
128 |
+
player2_data = df[df['Player'].str.lower() == player2_name.lower()].fillna(0).squeeze()
|
129 |
|
130 |
st.success(f"Comparing **{player1_name}** vs **{player2_name}**")
|
131 |
|
|
|
141 |
st.subheader("π Full Stats Table")
|
142 |
st.dataframe(comparison_df.T)
|
143 |
|
144 |
+
# Stats summaries
|
145 |
+
show_bowling_summary(player1_data, player1_name)
|
146 |
+
show_bowling_summary(player2_data, player2_name)
|
147 |
+
|
148 |
# Visualizations
|
149 |
plot_horizontal_bar(comparison_df, player1_name, player2_name)
|
150 |
plot_pie_charts(player1_data, player2_data, player1_name, player2_name)
|