Harika22 commited on
Commit
814ec7b
ยท
verified ยท
1 Parent(s): 70f49ec

Update pages/2_Players_Comparison.py

Browse files
Files changed (1) hide show
  1. pages/2_Players_Comparison.py +60 -69
pages/2_Players_Comparison.py CHANGED
@@ -6,10 +6,6 @@ import joblib
6
  import cv2
7
  from PIL import Image
8
 
9
- # ----------------------------
10
- # Utility Functions
11
- # ----------------------------
12
-
13
  @st.cache_data
14
  def load_data():
15
  return pd.read_csv("cric_final.csv")
@@ -37,6 +33,26 @@ def detect_face_and_predict(image_file, model, encoder, face_detector):
37
  except Exception as e:
38
  return None, f"Error processing image: {e}"
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  def summarize_player(player_data, formats):
41
  return {
42
  "Total Runs": sum(player_data.get(f'batting_Runs_{fmt}', 0) for fmt in formats),
@@ -44,24 +60,15 @@ def summarize_player(player_data, formats):
44
  "Best SR": max(player_data.get(f'batting_SR_{fmt}', 0) for fmt in formats)
45
  }
46
 
47
- # ----------------------------
48
- # App Configuration
49
- # ----------------------------
50
-
51
  st.set_page_config(page_title="Cricket Player Comparison", layout="centered")
52
  st.header("๐Ÿ :rainbow[Face-Based Recognition and Stats Analysis of Cricket Players]")
53
 
54
- # Load Data & Models
55
  df = load_data()
56
  model, label_encoder, face_cascade = load_models()
57
 
58
  formats = ['Test', 'ODI', 'T20', 'IPL']
59
  indian_players = sorted(df[df['Player_Team'] == 'India']['Player'].unique())
60
 
61
- # ----------------------------
62
- # Image Upload & Player Override
63
- # ----------------------------
64
-
65
  col1, col2 = st.columns(2)
66
  with col1:
67
  img1 = st.file_uploader("Upload First Player Image", type=["jpg", "jpeg", "png"], key="img1")
@@ -98,10 +105,6 @@ if p1_name not in df['Player'].values or p2_name not in df['Player'].values:
98
  st.error("Selected players not found in dataset.")
99
  st.stop()
100
 
101
- # ----------------------------
102
- # Player Data & Comparison Metrics
103
- # ----------------------------
104
-
105
  p1_data = df[df['Player'] == p1_name].iloc[0]
106
  p2_data = df[df['Player'] == p2_name].iloc[0]
107
 
@@ -121,57 +124,45 @@ with col2:
121
  st.metric("Total Wickets", p2_summary["Total Wickets"])
122
  st.metric("Best Strike Rate", f"{p2_summary['Best SR']:.2f}")
123
 
124
- # ----------------------------
125
- # Visualization Tabs
126
- # ----------------------------
127
-
128
  st.subheader("๐Ÿ“Š Player Comparison Dashboard")
129
- tabs = st.tabs(["๐Ÿ Batting", "๐ŸŽฏ Bowling", "โšก Strike Rate", "๐Ÿ† Milestones", "๐Ÿงฉ Matches"])
130
-
131
- with tabs[0]:
132
- st.markdown("### Batting Summary")
133
- bat_df = pd.DataFrame({
134
- "Format": formats,
135
- p1_name: [p1_data.get(f'batting_Runs_{fmt}', 0) for fmt in formats],
136
- p2_name: [p2_data.get(f'batting_Runs_{fmt}', 0) for fmt in formats]
137
- }).set_index("Format")
138
- st.bar_chart(bat_df)
139
-
140
- with tabs[1]:
141
- st.markdown("### Bowling Summary")
142
- bowl_df = pd.DataFrame({
143
- "Format": formats,
144
- p1_name: [p1_data.get(f'bowling_{fmt}_Wickets', 0) for fmt in formats],
145
- p2_name: [p2_data.get(f'bowling_{fmt}_Wickets', 0) for fmt in formats]
146
- }).set_index("Format")
147
- st.bar_chart(bowl_df)
148
-
149
- with tabs[2]:
150
- st.markdown("### Strike Rate vs Runs")
151
- sr_data = pd.DataFrame({
152
- "Format": formats * 2,
153
- "Player": [p1_name] * 4 + [p2_name] * 4,
154
- "Runs": [p1_data.get(f'batting_Runs_{fmt}', 0) for fmt in formats] + [p2_data.get(f'batting_Runs_{fmt}', 0) for fmt in formats],
155
- "SR": [p1_data.get(f'batting_SR_{fmt}', 0) for fmt in formats] + [p2_data.get(f'batting_SR_{fmt}', 0) for fmt in formats]
156
- })
157
- fig = px.scatter(sr_data, x="Runs", y="SR", color="Player", text="Format", title="Strike Rate vs Runs by Format")
158
- st.plotly_chart(fig, use_container_width=True)
 
 
 
 
 
 
 
 
 
 
159
 
160
- with tabs[3]:
161
- st.markdown("### Milestones")
162
- for fmt in formats:
163
- col1, col2 = st.columns(2)
164
- col1.metric(f"{p1_name} - 50s ({fmt})", p1_data.get(f"batting_50s_{fmt}", 0))
165
- col2.metric(f"{p2_name} - 50s ({fmt})", p2_data.get(f"batting_50s_{fmt}", 0))
166
- col1.metric(f"{p1_name} - 100s ({fmt})", p1_data.get(f"batting_100s_{fmt}", 0))
167
- col2.metric(f"{p2_name} - 100s ({fmt})", p2_data.get(f"batting_100s_{fmt}", 0))
168
- col1.metric(f"{p1_name} - 200s ({fmt})", p1_data.get(f"batting_200s_{fmt}", 0))
169
- col2.metric(f"{p2_name} - 200s ({fmt})", p2_data.get(f"batting_200s_{fmt}", 0))
170
-
171
- with tabs[4]:
172
- st.markdown("### Match Distribution")
173
- col1, col2 = st.columns(2)
174
- for i, (player, pdata, col) in enumerate(zip([p1_name, p2_name], [p1_data, p2_data], [col1, col2])):
175
- match_counts = {fmt: pdata.get(f"Matches_{fmt}", 0) for fmt in formats}
176
- fig = px.pie(values=list(match_counts.values()), names=list(match_counts.keys()), title=f"{player}'s Match Distribution")
177
- col.plotly_chart(fig, use_container_width=True)
 
6
  import cv2
7
  from PIL import Image
8
 
 
 
 
 
9
  @st.cache_data
10
  def load_data():
11
  return pd.read_csv("cric_final.csv")
 
33
  except Exception as e:
34
  return None, f"Error processing image: {e}"
35
 
36
+ def plot_bar_comparison(formats, p1_vals, p2_vals, p1, p2, title, yaxis):
37
+ df = pd.DataFrame({
38
+ "Format": formats * 2,
39
+ "Player": [p1]*len(formats) + [p2]*len(formats),
40
+ yaxis: p1_vals + p2_vals
41
+ })
42
+ fig = px.bar(df, x="Format", y=yaxis, color="Player", barmode="group", text=yaxis,
43
+ title=title, height=400)
44
+ st.plotly_chart(fig, use_container_width=True)
45
+
46
+ def plot_line_comparison(formats, p1_vals, p2_vals, p1, p2, title, yaxis):
47
+ df = pd.DataFrame({
48
+ "Format": formats * 2,
49
+ "Player": [p1]*len(formats) + [p2]*len(formats),
50
+ yaxis: p1_vals + p2_vals
51
+ })
52
+ fig = px.line(df, x="Format", y=yaxis, color="Player", markers=True, text=yaxis,
53
+ title=title, height=400)
54
+ st.plotly_chart(fig, use_container_width=True)
55
+
56
  def summarize_player(player_data, formats):
57
  return {
58
  "Total Runs": sum(player_data.get(f'batting_Runs_{fmt}', 0) for fmt in formats),
 
60
  "Best SR": max(player_data.get(f'batting_SR_{fmt}', 0) for fmt in formats)
61
  }
62
 
 
 
 
 
63
  st.set_page_config(page_title="Cricket Player Comparison", layout="centered")
64
  st.header("๐Ÿ :rainbow[Face-Based Recognition and Stats Analysis of Cricket Players]")
65
 
 
66
  df = load_data()
67
  model, label_encoder, face_cascade = load_models()
68
 
69
  formats = ['Test', 'ODI', 'T20', 'IPL']
70
  indian_players = sorted(df[df['Player_Team'] == 'India']['Player'].unique())
71
 
 
 
 
 
72
  col1, col2 = st.columns(2)
73
  with col1:
74
  img1 = st.file_uploader("Upload First Player Image", type=["jpg", "jpeg", "png"], key="img1")
 
105
  st.error("Selected players not found in dataset.")
106
  st.stop()
107
 
 
 
 
 
108
  p1_data = df[df['Player'] == p1_name].iloc[0]
109
  p2_data = df[df['Player'] == p2_name].iloc[0]
110
 
 
124
  st.metric("Total Wickets", p2_summary["Total Wickets"])
125
  st.metric("Best Strike Rate", f"{p2_summary['Best SR']:.2f}")
126
 
 
 
 
 
127
  st.subheader("๐Ÿ“Š Player Comparison Dashboard")
128
+ show_bat = st.checkbox("Show Batting Comparison", value=True)
129
+ show_bowl = st.checkbox("Show Bowling Comparison", value=True)
130
+
131
+ if show_bat:
132
+ st.markdown(f"### Batting Comparison: {p1_name} vs {p2_name}")
133
+ for metric, prefix in {
134
+ "Runs": "batting_Runs_",
135
+ "50s": "batting_50s_",
136
+ "100s": "batting_100s_"
137
+ }.items():
138
+ p1_vals = [p1_data.get(f"{prefix}{fmt}", 0) for fmt in formats]
139
+ p2_vals = [p2_data.get(f"{prefix}{fmt}", 0) for fmt in formats]
140
+ plot_bar_comparison(formats, p1_vals, p2_vals, p1_name, p2_name, f"{metric} by Format", metric)
141
+
142
+ for metric, prefix in {
143
+ "Average": "batting_Average_",
144
+ "Strike Rate": "batting_SR_"
145
+ }.items():
146
+ p1_vals = [p1_data.get(f"{prefix}{fmt}", 0) for fmt in formats]
147
+ p2_vals = [p2_data.get(f"{prefix}{fmt}", 0) for fmt in formats]
148
+ plot_line_comparison(formats, p1_vals, p2_vals, p1_name, p2_name, f"{metric} by Format", metric)
149
+
150
+ if show_bowl:
151
+ st.markdown(f"### Bowling Comparison: {p1_name} vs {p2_name}")
152
+ for metric, suffix in {
153
+ "Wickets": "_Wickets",
154
+ "Maidens": "_Maidens",
155
+ "Economy": "_Eco"
156
+ }.items():
157
+ p1_vals = [p1_data.get(f"bowling_{fmt}{suffix}", 0) for fmt in formats]
158
+ p2_vals = [p2_data.get(f"bowling_{fmt}{suffix}", 0) for fmt in formats]
159
+ plot_bar_comparison(formats, p1_vals, p2_vals, p1_name, p2_name, f"{metric} by Format", metric)
160
+
161
+ for metric, suffix in {
162
+ "Average": "_Avg",
163
+ "Strike Rate": "_SR"
164
+ }.items():
165
+ p1_vals = [p1_data.get(f"bowling_{fmt}{suffix}", 0) for fmt in formats]
166
+ p2_vals = [p2_data.get(f"bowling_{fmt}{suffix}", 0) for fmt in formats]
167
+ plot_line_comparison(formats, p1_vals, p2_vals, p1_name, p2_name, f"{metric} by Format", metric)
168