James McCool
commited on
Commit
·
1a20d5e
1
Parent(s):
853ceab
Add showdown slate definitions and update lineup initialization in Streamlit app
Browse files- src/streamlit_app.py +67 -11
src/streamlit_app.py
CHANGED
|
@@ -22,6 +22,17 @@ fd_hb_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
|
|
| 22 |
dk_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
| 23 |
fd_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
| 24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
# Probably should have done this in a dictionary to start with
|
| 26 |
wrong_team_names = ['Denver Broncos', 'Washington Commanders', 'Cincinnati Bengals', 'Arizona Cardinals', 'Los Angeles Rams', 'Pittsburgh Steelers',
|
| 27 |
'Jacksonville Jaguars', 'New England Patriots', 'Tampa Bay Buccaneers', 'San Francisco 49ers', 'Green Bay Packers', 'New York Jets',
|
|
@@ -69,6 +80,40 @@ st.markdown("""
|
|
| 69 |
|
| 70 |
</style>""", unsafe_allow_html=True)
|
| 71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
@st.cache_resource(ttl=60)
|
| 73 |
def init_handbuilder_data(site_var):
|
| 74 |
"""Load only the data needed for handbuilder"""
|
|
@@ -174,7 +219,15 @@ def init_baselines():
|
|
| 174 |
return player_stats, dk_stacks_raw, fd_stacks_raw, dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
|
| 175 |
|
| 176 |
@st.cache_resource(ttl = 60)
|
| 177 |
-
def init_DK_lineups(type_var, slate_var, prio_var, prio_mix):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
|
| 179 |
if prio_var == 'Mix':
|
| 180 |
prio_var = None
|
|
@@ -418,13 +471,16 @@ def convert_hb_df(array, column_names):
|
|
| 418 |
array = pd.DataFrame(array, columns=column_names)
|
| 419 |
return array.to_csv().encode('utf-8')
|
| 420 |
|
|
|
|
|
|
|
|
|
|
| 421 |
app_load_reset_column, app_view_site_column = st.columns([1, 9])
|
| 422 |
with app_load_reset_column:
|
| 423 |
if st.button("Load/Reset Data", key='reset_data_button'):
|
| 424 |
st.cache_data.clear()
|
| 425 |
player_stats, dk_stacks_raw, fd_stacks_raw, dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map = init_baselines()
|
| 426 |
-
dk_lineups = init_DK_lineups('Regular',
|
| 427 |
-
fd_lineups = init_FD_lineups('Regular',
|
| 428 |
for key in st.session_state.keys():
|
| 429 |
del st.session_state[key]
|
| 430 |
with app_view_site_column:
|
|
@@ -921,19 +977,19 @@ if selected_tab == 'Player ROO':
|
|
| 921 |
if slate_type_var2 == 'Regular':
|
| 922 |
slate_var2 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Late Slate', 'Thurs-Mon Slate'), key='slate_var2_radio')
|
| 923 |
elif slate_type_var2 == 'Showdown':
|
| 924 |
-
slate_var2 = st.radio("Which slate are you loading?", (
|
| 925 |
if site_var == 'Draftkings':
|
| 926 |
if slate_type_var2 == 'Regular':
|
| 927 |
raw_baselines = dk_roo_raw[dk_roo_raw['slate'] == str(slate_var2)]
|
| 928 |
elif slate_type_var2 == 'Showdown':
|
| 929 |
-
raw_baselines = dk_sd_roo_raw[dk_sd_roo_raw['slate'] == str(slate_var2)]
|
| 930 |
|
| 931 |
raw_baselines = raw_baselines.iloc[:,:-2]
|
| 932 |
elif site_var == 'Fanduel':
|
| 933 |
if slate_type_var2 == 'Regular':
|
| 934 |
raw_baselines = fd_roo_raw[fd_roo_raw['slate'] == str(slate_var2)]
|
| 935 |
elif slate_type_var2 == 'Showdown':
|
| 936 |
-
raw_baselines = fd_sd_roo_raw[fd_sd_roo_raw['slate'] == str(slate_var2)]
|
| 937 |
raw_baselines = raw_baselines.iloc[:,:-2]
|
| 938 |
|
| 939 |
split_var2 = st.radio("Would you like to view the whole slate or just specific games?", ('Full Slate Run', 'Specific Games'), key='split_var2_radio')
|
|
@@ -1037,17 +1093,17 @@ if selected_tab == 'Optimals':
|
|
| 1037 |
raw_baselines = dk_sd_roo_raw
|
| 1038 |
elif site_var == 'Fanduel':
|
| 1039 |
raw_baselines = fd_sd_roo_raw
|
| 1040 |
-
slate_var3 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'), key='slate_var3_radio')
|
| 1041 |
if slate_type_var3 == 'Regular':
|
| 1042 |
if site_var == 'Draftkings':
|
| 1043 |
-
dk_lineups = init_DK_lineups(slate_type_var3, slate_var3, prio_var, prio_mix)
|
| 1044 |
elif site_var == 'Fanduel':
|
| 1045 |
-
fd_lineups = init_FD_lineups(slate_type_var3, slate_var3, prio_var, prio_mix)
|
| 1046 |
elif slate_type_var3 == 'Showdown':
|
| 1047 |
if site_var == 'Draftkings':
|
| 1048 |
-
dk_lineups = init_DK_lineups(slate_type_var3, slate_var3, prio_var, prio_mix)
|
| 1049 |
elif site_var == 'Fanduel':
|
| 1050 |
-
fd_lineups = init_FD_lineups(slate_type_var3, slate_var3, prio_var, prio_mix)
|
| 1051 |
with optimals_macro_col:
|
| 1052 |
lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1, key='lineup_num_var_input')
|
| 1053 |
player_var1 = st.radio("Do you want a frame with specific Players?", ('Full Slate', 'Specific Players'), key='player_var1_radio')
|
|
|
|
| 22 |
dk_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
| 23 |
fd_sd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
|
| 24 |
|
| 25 |
+
showdown_selections = ['Showdown #1', 'Showdown #2', 'Showdown #3', 'Showdown #4', 'Showdown #5', 'Showdown #6', 'Showdown #7', 'Showdown #8', 'Showdown #9', 'Showdown #10', 'Showdown #11', 'Showdown #12', 'Showdown #13', 'Showdown #14', 'Showdown #15']
|
| 26 |
+
dk_db_showdown_selections = ['DK_NFL_SD_seed_frame_Showdown #1', 'DK_NFL_SD_seed_frame_Showdown #2', 'DK_NFL_SD_seed_frame_Showdown #3', 'DK_NFL_SD_seed_frame_Showdown #4', 'DK_NFL_SD_seed_frame_Showdown #5', 'DK_NFL_SD_seed_frame_Showdown #6',
|
| 27 |
+
'DK_NFL_SD_seed_frame_Showdown #7', 'DK_NFL_SD_seed_frame_Showdown #8', 'DK_NFL_SD_seed_frame_Showdown #9', 'DK_NFL_SD_seed_frame_Showdown #10', 'DK_NFL_SD_seed_frame_Showdown #11', 'DK_NFL_SD_seed_frame_Showdown #12', 'DK_NFL_SD_seed_frame_Showdown #13',
|
| 28 |
+
'DK_NFL_SD_seed_frame_Showdown #14', 'DK_NFL_SD_seed_frame_Showdown #15']
|
| 29 |
+
fd_db_showdown_selections = ['FD_NFL_SD_seed_frame_Showdown #1', 'FD_NFL_SD_seed_frame_Showdown #2', 'FD_NFL_SD_seed_frame_Showdown #3', 'FD_NFL_SD_seed_frame_Showdown #4', 'FD_NFL_SD_seed_frame_Showdown #5', 'FD_NFL_SD_seed_frame_Showdown #6',
|
| 30 |
+
'FD_NFL_SD_seed_frame_Showdown #7', 'FD_NFL_SD_seed_frame_Showdown #8', 'FD_NFL_SD_seed_frame_Showdown #9', 'FD_NFL_SD_seed_frame_Showdown #10', 'FD_NFL_SD_seed_frame_Showdown #11', 'FD_NFL_SD_seed_frame_Showdown #12', 'FD_NFL_SD_seed_frame_Showdown #13',
|
| 31 |
+
'FD_NFL_SD_seed_frame_Showdown #14', 'FD_NFL_SD_seed_frame_Showdown #15']
|
| 32 |
+
|
| 33 |
+
dk_showdown_db_translation = dict(zip(showdown_selections, dk_db_showdown_selections))
|
| 34 |
+
fd_showdown_db_translation = dict(zip(showdown_selections, fd_db_showdown_selections))
|
| 35 |
+
|
| 36 |
# Probably should have done this in a dictionary to start with
|
| 37 |
wrong_team_names = ['Denver Broncos', 'Washington Commanders', 'Cincinnati Bengals', 'Arizona Cardinals', 'Los Angeles Rams', 'Pittsburgh Steelers',
|
| 38 |
'Jacksonville Jaguars', 'New England Patriots', 'Tampa Bay Buccaneers', 'San Francisco 49ers', 'Green Bay Packers', 'New York Jets',
|
|
|
|
| 80 |
|
| 81 |
</style>""", unsafe_allow_html=True)
|
| 82 |
|
| 83 |
+
@st.cache_resource(ttl=60)
|
| 84 |
+
def define_dk_showdown_slates():
|
| 85 |
+
collection = db["DK_SD_NFL_ROO"]
|
| 86 |
+
cursor = collection.find()
|
| 87 |
+
raw_display = pd.DataFrame(list(cursor))
|
| 88 |
+
unique_slates = raw_display['slate'].unique()
|
| 89 |
+
|
| 90 |
+
slate_names = []
|
| 91 |
+
|
| 92 |
+
for slate in unique_slates:
|
| 93 |
+
slate_data = raw_display[raw_display['slate'] == slate]
|
| 94 |
+
slate_name = slate_data.iloc[0]['Team'] + ' vs. ' + slate_data.iloc[0]['Opp']
|
| 95 |
+
slate_names.append(slate_name)
|
| 96 |
+
|
| 97 |
+
slate_name_lookup = dict(zip(slate_names, unique_slates))
|
| 98 |
+
return slate_names, slate_name_lookup
|
| 99 |
+
|
| 100 |
+
@st.cache_resource(ttl=60)
|
| 101 |
+
def define_fd_showdown_slates():
|
| 102 |
+
collection = db["FD_SD_NFL_ROO"]
|
| 103 |
+
cursor = collection.find()
|
| 104 |
+
raw_display = pd.DataFrame(list(cursor))
|
| 105 |
+
unique_slates = raw_display['slate'].unique()
|
| 106 |
+
|
| 107 |
+
slate_names = []
|
| 108 |
+
|
| 109 |
+
for slate in unique_slates:
|
| 110 |
+
slate_data = raw_display[raw_display['slate'] == slate]
|
| 111 |
+
slate_name = slate_data.iloc[0]['Team'] + ' vs. ' + slate_data.iloc[0]['Opp']
|
| 112 |
+
slate_names.append(slate_name)
|
| 113 |
+
|
| 114 |
+
slate_name_lookup = dict(zip(slate_names, unique_slates))
|
| 115 |
+
return slate_names, slate_name_lookup
|
| 116 |
+
|
| 117 |
@st.cache_resource(ttl=60)
|
| 118 |
def init_handbuilder_data(site_var):
|
| 119 |
"""Load only the data needed for handbuilder"""
|
|
|
|
| 219 |
return player_stats, dk_stacks_raw, fd_stacks_raw, dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map
|
| 220 |
|
| 221 |
@st.cache_resource(ttl = 60)
|
| 222 |
+
def init_DK_lineups(type_var, slate_var, prio_var, prio_mix, db_translation):
|
| 223 |
+
|
| 224 |
+
if type_var == 'Showdown':
|
| 225 |
+
collection = db[db_translation[slate_var]]
|
| 226 |
+
cursor = collection.find()
|
| 227 |
+
raw_display = pd.DataFrame(list(cursor))
|
| 228 |
+
raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
|
| 229 |
+
for column in ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']:
|
| 230 |
+
raw_display[column] = raw_display[column].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display[column])
|
| 231 |
|
| 232 |
if prio_var == 'Mix':
|
| 233 |
prio_var = None
|
|
|
|
| 471 |
array = pd.DataFrame(array, columns=column_names)
|
| 472 |
return array.to_csv().encode('utf-8')
|
| 473 |
|
| 474 |
+
slate_names_dk, slate_name_lookup_dk = define_dk_showdown_slates()
|
| 475 |
+
slate_names_fd, slate_name_lookup_fd = define_fd_showdown_slates()
|
| 476 |
+
|
| 477 |
app_load_reset_column, app_view_site_column = st.columns([1, 9])
|
| 478 |
with app_load_reset_column:
|
| 479 |
if st.button("Load/Reset Data", key='reset_data_button'):
|
| 480 |
st.cache_data.clear()
|
| 481 |
player_stats, dk_stacks_raw, fd_stacks_raw, dk_roo_raw, fd_roo_raw, dk_sd_roo_raw, fd_sd_roo_raw, dk_id_map, fd_id_map, dk_sd_id_map, fd_sd_id_map = init_baselines()
|
| 482 |
+
dk_lineups = init_DK_lineups('Regular', slate_names_dk[0], 'proj', 50, dk_showdown_db_translation)
|
| 483 |
+
fd_lineups = init_FD_lineups('Regular', slate_names_fd[0], 'proj', 50, fd_showdown_db_translation)
|
| 484 |
for key in st.session_state.keys():
|
| 485 |
del st.session_state[key]
|
| 486 |
with app_view_site_column:
|
|
|
|
| 977 |
if slate_type_var2 == 'Regular':
|
| 978 |
slate_var2 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Late Slate', 'Thurs-Mon Slate'), key='slate_var2_radio')
|
| 979 |
elif slate_type_var2 == 'Showdown':
|
| 980 |
+
slate_var2 = st.radio("Which slate are you loading?", (slate_names_dk if site_var == 'Draftkings' else slate_names_fd), key='slate_var2_radio')
|
| 981 |
if site_var == 'Draftkings':
|
| 982 |
if slate_type_var2 == 'Regular':
|
| 983 |
raw_baselines = dk_roo_raw[dk_roo_raw['slate'] == str(slate_var2)]
|
| 984 |
elif slate_type_var2 == 'Showdown':
|
| 985 |
+
raw_baselines = dk_sd_roo_raw[dk_sd_roo_raw['slate'] == str(slate_name_lookup_dk[slate_var2])]
|
| 986 |
|
| 987 |
raw_baselines = raw_baselines.iloc[:,:-2]
|
| 988 |
elif site_var == 'Fanduel':
|
| 989 |
if slate_type_var2 == 'Regular':
|
| 990 |
raw_baselines = fd_roo_raw[fd_roo_raw['slate'] == str(slate_var2)]
|
| 991 |
elif slate_type_var2 == 'Showdown':
|
| 992 |
+
raw_baselines = fd_sd_roo_raw[fd_sd_roo_raw['slate'] == str(slate_name_lookup_fd[slate_var2])]
|
| 993 |
raw_baselines = raw_baselines.iloc[:,:-2]
|
| 994 |
|
| 995 |
split_var2 = st.radio("Would you like to view the whole slate or just specific games?", ('Full Slate Run', 'Specific Games'), key='split_var2_radio')
|
|
|
|
| 1093 |
raw_baselines = dk_sd_roo_raw
|
| 1094 |
elif site_var == 'Fanduel':
|
| 1095 |
raw_baselines = fd_sd_roo_raw
|
| 1096 |
+
slate_var3 = st.radio("Which slate data are you loading?", (slate_names_dk if slate_type_var3 == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
|
| 1097 |
if slate_type_var3 == 'Regular':
|
| 1098 |
if site_var == 'Draftkings':
|
| 1099 |
+
dk_lineups = init_DK_lineups(slate_type_var3, slate_var3, prio_var, prio_mix, dk_showdown_db_translation)
|
| 1100 |
elif site_var == 'Fanduel':
|
| 1101 |
+
fd_lineups = init_FD_lineups(slate_type_var3, slate_var3, prio_var, prio_mix, fd_showdown_db_translation)
|
| 1102 |
elif slate_type_var3 == 'Showdown':
|
| 1103 |
if site_var == 'Draftkings':
|
| 1104 |
+
dk_lineups = init_DK_lineups(slate_type_var3, slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_showdown_db_translation)
|
| 1105 |
elif site_var == 'Fanduel':
|
| 1106 |
+
fd_lineups = init_FD_lineups(slate_type_var3, slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_showdown_db_translation)
|
| 1107 |
with optimals_macro_col:
|
| 1108 |
lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1, key='lineup_num_var_input')
|
| 1109 |
player_var1 = st.radio("Do you want a frame with specific Players?", ('Full Slate', 'Specific Players'), key='player_var1_radio')
|