Sathwikchowdary commited on
Commit
da0865c
Β·
verified Β·
1 Parent(s): b4cda43

Update pages/2player_comparison.py

Browse files
Files changed (1) hide show
  1. 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
- # Fuzzy match player name
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 comparison
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 metric bar chart
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
- 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():
@@ -135,13 +145,13 @@ def main():
135
  with col4:
136
  st.image(img2, caption=player2_name, use_container_width=True)
137
 
138
- # Display comparison table
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
- # Stats summaries
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