Spaces:
Sleeping
Sleeping
Update pages/2player_comparison.py
Browse files- pages/2player_comparison.py +71 -0
pages/2player_comparison.py
CHANGED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
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
|
9 |
+
def load_model_and_encoder():
|
10 |
+
with open('best_rf_pipeline.pkl', 'rb') as f:
|
11 |
+
model = pickle.load(f)
|
12 |
+
with open('label_encoder.pkl', 'rb') as f:
|
13 |
+
encoder = pickle.load(f)
|
14 |
+
return model, encoder
|
15 |
+
|
16 |
+
# Load player dataset
|
17 |
+
@st.cache_data
|
18 |
+
def load_data():
|
19 |
+
df = pd.read_csv('Reduced_final_teams.csv')
|
20 |
+
return df
|
21 |
+
|
22 |
+
# Main App
|
23 |
+
def main():
|
24 |
+
st.title("Cricket Player Comparison Tool π")
|
25 |
+
st.write("Upload two player images and compare their performance visually.")
|
26 |
+
|
27 |
+
df = load_data()
|
28 |
+
model, encoder = load_model_and_encoder()
|
29 |
+
|
30 |
+
# Upload Images
|
31 |
+
col1, col2 = st.columns(2)
|
32 |
+
with col1:
|
33 |
+
img1 = st.file_uploader("Upload Image for Player 1", type=['png', 'jpg', 'jpeg'], key='img1')
|
34 |
+
with col2:
|
35 |
+
img2 = st.file_uploader("Upload Image for Player 2", type=['png', 'jpg', 'jpeg'], key='img2')
|
36 |
+
|
37 |
+
if img1 and img2:
|
38 |
+
# Placeholder: Extract player name from uploaded file name
|
39 |
+
player1_name = img1.name.split('.')[0]
|
40 |
+
player2_name = img2.name.split('.')[0]
|
41 |
+
|
42 |
+
if player1_name in df['Player'].values and player2_name in df['Player'].values:
|
43 |
+
player1_data = df[df['Player'] == player1_name].squeeze()
|
44 |
+
player2_data = df[df['Player'] == player2_name].squeeze()
|
45 |
+
|
46 |
+
st.success(f"Comparing **{player1_name}** vs **{player2_name}**")
|
47 |
+
|
48 |
+
# Combine both players into one DataFrame for visualization
|
49 |
+
comparison_df = pd.DataFrame([player1_data, player2_data])
|
50 |
+
comparison_df.set_index('Player', inplace=True)
|
51 |
+
|
52 |
+
# Display Side-by-Side Metrics
|
53 |
+
st.subheader("π Key Metrics")
|
54 |
+
st.dataframe(comparison_df.T)
|
55 |
+
|
56 |
+
# Radar chart / Barplot for comparison
|
57 |
+
st.subheader("π Visual Comparison")
|
58 |
+
num_cols = comparison_df.select_dtypes(include='number').columns.tolist()
|
59 |
+
|
60 |
+
# Plot
|
61 |
+
plt.figure(figsize=(10, 5))
|
62 |
+
comparison_df[num_cols].T.plot(kind='bar', figsize=(10, 6))
|
63 |
+
plt.title(f"Stat Comparison: {player1_name} vs {player2_name}")
|
64 |
+
plt.ylabel("Metric Value")
|
65 |
+
plt.xticks(rotation=45)
|
66 |
+
st.pyplot(plt.gcf())
|
67 |
+
else:
|
68 |
+
st.error("Player names extracted from images do not match any in the dataset. Ensure filenames match player names in the CSV.")
|
69 |
+
|
70 |
+
if __name__ == "__main__":
|
71 |
+
main()
|