Spaces:
Running
Running
James McCool
commited on
Commit
·
b8564ea
1
Parent(s):
f56b951
Refactor player display logic to include 'FLEX5' in lineup data for both Draftkings and Fanduel. Adjust scoring percentage calculations to rename and drop unnecessary salary columns, enhancing clarity in player statistics. Update dataframe styling for improved visual representation of key metrics in the UI.
Browse files
app.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
import streamlit as st
|
2 |
import numpy as np
|
3 |
import pandas as pd
|
4 |
-
import gspread
|
5 |
import pymongo
|
6 |
import re
|
7 |
|
@@ -28,6 +27,7 @@ fd_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL', 'salar
|
|
28 |
dk_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
29 |
fd_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
30 |
|
|
|
31 |
@st.cache_resource(ttl = 61)
|
32 |
def init_baselines():
|
33 |
|
@@ -203,7 +203,7 @@ def init_DK_lineups(type_var, slate_var):
|
|
203 |
|
204 |
return DK_seed
|
205 |
|
206 |
-
@st.cache_data(ttl =
|
207 |
def init_FD_lineups(type_var,slate_var):
|
208 |
|
209 |
if type_var == 'Regular':
|
@@ -256,19 +256,19 @@ def init_FD_lineups(type_var,slate_var):
|
|
256 |
cursor = collection.find().limit(10000)
|
257 |
|
258 |
raw_display = pd.DataFrame(list(cursor))
|
259 |
-
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
260 |
elif slate_var == 'Secondary':
|
261 |
collection = db['FD_MLB_SD2_seed_frame']
|
262 |
cursor = collection.find().limit(10000)
|
263 |
|
264 |
raw_display = pd.DataFrame(list(cursor))
|
265 |
-
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
266 |
elif slate_var == 'Auxiliary':
|
267 |
collection = db['FD_MLB_SD3_seed_frame']
|
268 |
cursor = collection.find().limit(10000)
|
269 |
|
270 |
raw_display = pd.DataFrame(list(cursor))
|
271 |
-
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
272 |
|
273 |
FD_seed = raw_display.to_numpy()
|
274 |
|
@@ -386,11 +386,11 @@ with tab1:
|
|
386 |
scoring_percentages = scoring_percentages.drop(['DK Main Slate', 'DK Secondary Slate', 'DK Turbo Slate', 'FD Main Slate', 'FD Secondary Slate', 'FD Turbo Slate', 'FD Main Top Score', 'DK Main Top Score', 'FD Secondary Top Score', 'DK Secondary Top Score', 'DK Turbo Top Score'], axis=1)
|
387 |
scoring_percentages = scoring_percentages.sort_values(by='8+ runs', ascending=False)
|
388 |
if site_var == 'Draftkings':
|
389 |
-
scoring_percentages = scoring_percentages.rename(columns={'DK LevX': 'LevX', 'DK Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', '
|
390 |
-
scoring_percentages = scoring_percentages.drop(['FD Own%', '
|
391 |
elif site_var == 'Fanduel':
|
392 |
-
scoring_percentages = scoring_percentages.rename(columns={'FD LevX': 'LevX', 'FD Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', '
|
393 |
-
scoring_percentages = scoring_percentages.drop(['DK Own%', '
|
394 |
|
395 |
if view_var == "Simple":
|
396 |
scoring_percentages = scoring_percentages[['Names', 'Runs', '8+ Runs', 'Win%', 'LevX', 'Own%']]
|
@@ -400,7 +400,7 @@ with tab1:
|
|
400 |
if prio_var is not None:
|
401 |
scoring_percentages = scoring_percentages[scoring_percentages['Stack_Prio'] == prio_var]
|
402 |
scoring_percentages = scoring_percentages.set_index('Names', drop=True)
|
403 |
-
st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Own%']).format(game_format, precision=2), height=750, use_container_width = True)
|
404 |
|
405 |
with tab2:
|
406 |
st.header("Player ROO")
|
@@ -636,7 +636,7 @@ with tab3:
|
|
636 |
if slate_type_var3 == 'Regular':
|
637 |
map_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
|
638 |
elif slate_type_var3 == 'Showdown':
|
639 |
-
map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4']
|
640 |
for col_idx in map_columns:
|
641 |
export_file[col_idx] = export_file[col_idx].map(fd_id_map)
|
642 |
|
@@ -736,7 +736,7 @@ with tab3:
|
|
736 |
if slate_type_var3 == 'Regular':
|
737 |
player_columns = st.session_state.data_export_display.iloc[:, :9]
|
738 |
elif slate_type_var3 == 'Showdown':
|
739 |
-
player_columns = st.session_state.data_export_display.iloc[:, :
|
740 |
|
741 |
# Flatten the DataFrame and count unique values
|
742 |
value_counts = player_columns.values.flatten().tolist()
|
@@ -778,7 +778,7 @@ with tab3:
|
|
778 |
if slate_type_var3 == 'Regular':
|
779 |
player_columns = st.session_state.working_seed[:, :9]
|
780 |
elif slate_type_var3 == 'Showdown':
|
781 |
-
player_columns = st.session_state.working_seed[:, :
|
782 |
|
783 |
# Flatten the DataFrame and count unique values
|
784 |
value_counts = player_columns.flatten().tolist()
|
@@ -928,8 +928,26 @@ with tab4:
|
|
928 |
# 3. Select the order range
|
929 |
if auto_range_var == 'Top (1-5)':
|
930 |
selected_players = team_players[team_players['Order'] > 0].head(auto_size_var)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
931 |
elif auto_range_var == 'Mid (4-8)':
|
932 |
selected_players = team_players[team_players['Order'] > 0].iloc[3:3 + auto_size_var]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
933 |
elif auto_range_var == 'Wrap (7-2)':
|
934 |
if auto_size_var == 5:
|
935 |
first_three = team_players[team_players['Order'] > 0].head(2)
|
|
|
1 |
import streamlit as st
|
2 |
import numpy as np
|
3 |
import pandas as pd
|
|
|
4 |
import pymongo
|
5 |
import re
|
6 |
|
|
|
27 |
dk_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
28 |
fd_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
29 |
|
30 |
+
|
31 |
@st.cache_resource(ttl = 61)
|
32 |
def init_baselines():
|
33 |
|
|
|
203 |
|
204 |
return DK_seed
|
205 |
|
206 |
+
@st.cache_data(ttl = 60)
|
207 |
def init_FD_lineups(type_var,slate_var):
|
208 |
|
209 |
if type_var == 'Regular':
|
|
|
256 |
cursor = collection.find().limit(10000)
|
257 |
|
258 |
raw_display = pd.DataFrame(list(cursor))
|
259 |
+
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
260 |
elif slate_var == 'Secondary':
|
261 |
collection = db['FD_MLB_SD2_seed_frame']
|
262 |
cursor = collection.find().limit(10000)
|
263 |
|
264 |
raw_display = pd.DataFrame(list(cursor))
|
265 |
+
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
266 |
elif slate_var == 'Auxiliary':
|
267 |
collection = db['FD_MLB_SD3_seed_frame']
|
268 |
cursor = collection.find().limit(10000)
|
269 |
|
270 |
raw_display = pd.DataFrame(list(cursor))
|
271 |
+
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
272 |
|
273 |
FD_seed = raw_display.to_numpy()
|
274 |
|
|
|
386 |
scoring_percentages = scoring_percentages.drop(['DK Main Slate', 'DK Secondary Slate', 'DK Turbo Slate', 'FD Main Slate', 'FD Secondary Slate', 'FD Turbo Slate', 'FD Main Top Score', 'DK Main Top Score', 'FD Secondary Top Score', 'DK Secondary Top Score', 'DK Turbo Top Score'], axis=1)
|
387 |
scoring_percentages = scoring_percentages.sort_values(by='8+ runs', ascending=False)
|
388 |
if site_var == 'Draftkings':
|
389 |
+
scoring_percentages = scoring_percentages.rename(columns={'DK LevX': 'LevX', 'DK Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', 'Avg_Salary_DK': 'Avg_Salary'})
|
390 |
+
scoring_percentages = scoring_percentages.drop(['FD Own%', 'FD_Runs/$', 'Avg_Salary_FD'], axis=1)
|
391 |
elif site_var == 'Fanduel':
|
392 |
+
scoring_percentages = scoring_percentages.rename(columns={'FD LevX': 'LevX', 'FD Own%': 'Own%', 'Avg Score': 'Runs', 'Win Percentage': 'Win%', '8+ runs': '8+ Runs', 'Avg_Salary_FD': 'Avg_Salary'})
|
393 |
+
scoring_percentages = scoring_percentages.drop(['DK Own%', 'DK_Runs/$', 'Avg_Salary_DK'], axis=1)
|
394 |
|
395 |
if view_var == "Simple":
|
396 |
scoring_percentages = scoring_percentages[['Names', 'Runs', '8+ Runs', 'Win%', 'LevX', 'Own%']]
|
|
|
400 |
if prio_var is not None:
|
401 |
scoring_percentages = scoring_percentages[scoring_percentages['Stack_Prio'] == prio_var]
|
402 |
scoring_percentages = scoring_percentages.set_index('Names', drop=True)
|
403 |
+
st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Avg_Salary', 'Own%']).format(game_format, precision=2), height=750, use_container_width = True)
|
404 |
|
405 |
with tab2:
|
406 |
st.header("Player ROO")
|
|
|
636 |
if slate_type_var3 == 'Regular':
|
637 |
map_columns = ['P', 'C_1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3', 'UTIL']
|
638 |
elif slate_type_var3 == 'Showdown':
|
639 |
+
map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
|
640 |
for col_idx in map_columns:
|
641 |
export_file[col_idx] = export_file[col_idx].map(fd_id_map)
|
642 |
|
|
|
736 |
if slate_type_var3 == 'Regular':
|
737 |
player_columns = st.session_state.data_export_display.iloc[:, :9]
|
738 |
elif slate_type_var3 == 'Showdown':
|
739 |
+
player_columns = st.session_state.data_export_display.iloc[:, :6]
|
740 |
|
741 |
# Flatten the DataFrame and count unique values
|
742 |
value_counts = player_columns.values.flatten().tolist()
|
|
|
778 |
if slate_type_var3 == 'Regular':
|
779 |
player_columns = st.session_state.working_seed[:, :9]
|
780 |
elif slate_type_var3 == 'Showdown':
|
781 |
+
player_columns = st.session_state.working_seed[:, :7]
|
782 |
|
783 |
# Flatten the DataFrame and count unique values
|
784 |
value_counts = player_columns.flatten().tolist()
|
|
|
928 |
# 3. Select the order range
|
929 |
if auto_range_var == 'Top (1-5)':
|
930 |
selected_players = team_players[team_players['Order'] > 0].head(auto_size_var)
|
931 |
+
if len(selected_players) < auto_size_var:
|
932 |
+
team_players = player_select_df[
|
933 |
+
(player_select_df['Team'] == auto_team_var) &
|
934 |
+
(~player_select_df['Player'].isin(current_players))
|
935 |
+
].copy()
|
936 |
+
|
937 |
+
# 2. Sort by Order
|
938 |
+
team_players = team_players.sort_values(by='Order')
|
939 |
+
selected_players = team_players[team_players['Order'] > 0].head(auto_size_var + 1)
|
940 |
elif auto_range_var == 'Mid (4-8)':
|
941 |
selected_players = team_players[team_players['Order'] > 0].iloc[3:3 + auto_size_var]
|
942 |
+
if len(selected_players) < auto_size_var:
|
943 |
+
team_players = player_select_df[
|
944 |
+
(player_select_df['Team'] == auto_team_var) &
|
945 |
+
(~player_select_df['Player'].isin(current_players))
|
946 |
+
].copy()
|
947 |
+
|
948 |
+
# 2. Sort by Order
|
949 |
+
team_players = team_players.sort_values(by='Order')
|
950 |
+
selected_players = team_players[team_players['Order'] > 0].iloc[3:3 + auto_size_var + 1]
|
951 |
elif auto_range_var == 'Wrap (7-2)':
|
952 |
if auto_size_var == 5:
|
953 |
first_three = team_players[team_players['Order'] > 0].head(2)
|