Sathwikchowdary commited on
Commit
4ce3f06
Β·
verified Β·
1 Parent(s): 0393698

Update pages/2player_comparison.py

Browse files
Files changed (1) hide show
  1. pages/2player_comparison.py +85 -49
pages/2player_comparison.py CHANGED
@@ -3,6 +3,7 @@ import pandas as pd
3
  import pickle
4
  import matplotlib.pyplot as plt
5
  import seaborn as sns
 
6
 
7
  # Load model and encoder
8
  @st.cache_resource
@@ -19,67 +20,102 @@ def load_data():
19
  df = pd.read_csv('Reduced_final_teams.csv')
20
  return df
21
 
22
- # Main App
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  def main():
24
- st.set_page_config(layout="centered")
25
  st.title("Cricket Player Comparison Tool 🏏")
26
- st.write("Upload images and manually select the players you want to compare.")
27
 
28
  df = load_data()
29
  model, encoder = load_model_and_encoder()
 
30
 
31
- # Upload player images
32
- st.subheader("Step 1: Upload Player Images")
33
  col1, col2 = st.columns(2)
34
  with col1:
35
  img1 = st.file_uploader("Upload Image for Player 1", type=['png', 'jpg', 'jpeg'], key='img1')
36
  with col2:
37
  img2 = st.file_uploader("Upload Image for Player 2", type=['png', 'jpg', 'jpeg'], key='img2')
38
 
39
- st.subheader("Step 2: Select Players from the Dropdown")
40
- player_names = df['Player'].unique().tolist()
41
- col3, col4 = st.columns(2)
42
- with col3:
43
- player1_name = st.selectbox("Select Player 1", player_names, key='player1')
44
- with col4:
45
- player2_name = st.selectbox("Select Player 2", player_names, key='player2')
46
-
47
- if player1_name and player2_name and player1_name != player2_name:
48
- player1_data = df[df['Player'] == player1_name].squeeze()
49
- player2_data = df[df['Player'] == player2_name].squeeze()
50
-
51
- st.success(f"Comparing **{player1_name}** vs **{player2_name}**")
52
-
53
- # Combine data for comparison
54
- comparison_df = pd.DataFrame([player1_data, player2_data])
55
- comparison_df.set_index('Player', inplace=True)
56
-
57
- # Show images if uploaded
58
- col5, col6 = st.columns(2)
59
- with col5:
60
- if img1:
61
- st.image(img1, caption=player1_name, use_column_width=True)
62
- with col6:
63
- if img2:
64
- st.image(img2, caption=player2_name, use_column_width=True)
65
-
66
- # Show key metrics
67
- st.subheader("πŸ“‹ Key Metrics")
68
- st.dataframe(comparison_df.T)
69
-
70
- # Plot visual comparison
71
- st.subheader("πŸ“Š Stat Comparison Graph")
72
- num_cols = comparison_df.select_dtypes(include='number').columns.tolist()
73
-
74
- plt.figure(figsize=(10, 6))
75
- comparison_df[num_cols].T.plot(kind='bar')
76
- plt.title(f"{player1_name} vs {player2_name} - Performance Comparison")
77
- plt.ylabel("Value")
78
- plt.xticks(rotation=45)
79
- plt.tight_layout()
80
- st.pyplot(plt.gcf())
81
- elif player1_name == player2_name:
82
- st.warning("Please select two different players.")
83
 
84
  if __name__ == "__main__":
85
  main()
 
3
  import pickle
4
  import matplotlib.pyplot as plt
5
  import seaborn as sns
6
+ import numpy as np
7
 
8
  # Load model and encoder
9
  @st.cache_resource
 
20
  df = pd.read_csv('Reduced_final_teams.csv')
21
  return df
22
 
23
+ def get_matching_player(name_from_file, player_list):
24
+ name_lower = name_from_file.lower()
25
+ for player in player_list:
26
+ if player.lower() == name_lower:
27
+ return player
28
+ return None
29
+
30
+ def plot_horizontal_bar(df, player1, player2):
31
+ st.subheader("πŸ“Š Stat Comparison - Horizontal Bar Chart")
32
+ num_cols = df.select_dtypes(include='number').columns
33
+ df_num = df[num_cols].T
34
+ df_num.columns = [player1, player2]
35
+ df_num = df_num.sort_values(by=player1, ascending=False).head(15) # top 15 metrics
36
+
37
+ fig, ax = plt.subplots(figsize=(10, 7))
38
+ df_num.plot(kind='barh', ax=ax)
39
+ ax.set_title(f"{player1} vs {player2} - Key Stats")
40
+ ax.set_xlabel("Value")
41
+ ax.set_ylabel("Metric")
42
+ ax.legend(loc="lower right")
43
+ st.pyplot(fig)
44
+
45
+ def plot_radar_chart(player1_data, player2_data, player1, player2):
46
+ st.subheader("πŸ•Έ Radar Chart Comparison")
47
+ categories = ['Matches_ODI', 'Runs_ODI', 'Batting_Average_ODI', 'Strike_Rate_ODI', 'Wickets_ODI', 'Economy_ODI']
48
+ categories = [cat for cat in categories if cat in player1_data.index]
49
+
50
+ values1 = [player1_data[cat] for cat in categories]
51
+ values2 = [player2_data[cat] for cat in categories]
52
+
53
+ angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
54
+ values1 += values1[:1]
55
+ values2 += values2[:1]
56
+ angles += angles[:1]
57
+
58
+ fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
59
+ ax.plot(angles, values1, label=player1, linewidth=2)
60
+ ax.fill(angles, values1, alpha=0.25)
61
+
62
+ ax.plot(angles, values2, label=player2, linewidth=2)
63
+ ax.fill(angles, values2, alpha=0.25)
64
+
65
+ ax.set_thetagrids(np.degrees(angles[:-1]), categories)
66
+ ax.set_title("Overall Performance Comparison")
67
+ ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1))
68
+ st.pyplot(fig)
69
+
70
  def main():
71
+ st.set_page_config(layout="wide")
72
  st.title("Cricket Player Comparison Tool 🏏")
 
73
 
74
  df = load_data()
75
  model, encoder = load_model_and_encoder()
76
+ player_list = df['Player'].tolist()
77
 
78
+ # Upload images
 
79
  col1, col2 = st.columns(2)
80
  with col1:
81
  img1 = st.file_uploader("Upload Image for Player 1", type=['png', 'jpg', 'jpeg'], key='img1')
82
  with col2:
83
  img2 = st.file_uploader("Upload Image for Player 2", type=['png', 'jpg', 'jpeg'], key='img2')
84
 
85
+ if img1 and img2:
86
+ name1_raw = img1.name.rsplit('.', 1)[0]
87
+ name2_raw = img2.name.rsplit('.', 1)[0]
88
+
89
+ player1_name = get_matching_player(name1_raw, player_list)
90
+ player2_name = get_matching_player(name2_raw, player_list)
91
+
92
+ if player1_name and player2_name and player1_name != player2_name:
93
+ player1_data = df[df['Player'].str.lower() == player1_name.lower()].squeeze()
94
+ player2_data = df[df['Player'].str.lower() == player2_name.lower()].squeeze()
95
+
96
+ st.success(f"Comparing **{player1_name}** vs **{player2_name}**")
97
+
98
+ col3, col4 = st.columns(2)
99
+ with col3:
100
+ st.image(img1, caption=player1_name, use_container_width=True)
101
+ with col4:
102
+ st.image(img2, caption=player2_name, use_container_width=True)
103
+
104
+ # Comparison DataFrame
105
+ comparison_df = pd.DataFrame([player1_data, player2_data])
106
+ comparison_df.set_index('Player', inplace=True)
107
+
108
+ st.subheader("πŸ“‹ Detailed Stats")
109
+ st.dataframe(comparison_df.T)
110
+
111
+ # Plot visualizations
112
+ plot_horizontal_bar(comparison_df, player1_name, player2_name)
113
+ plot_radar_chart(player1_data, player2_data, player1_name, player2_name)
114
+
115
+ else:
116
+ st.error("Player names from image files don't match or are the same. Please check file names.")
117
+ else:
118
+ st.info("Please upload two player images to continue.")
 
 
 
 
 
 
 
 
 
 
119
 
120
  if __name__ == "__main__":
121
  main()