James McCool commited on
Commit
a2796cc
·
1 Parent(s): 64f99f0

Refactor init_baselines function to accept type_var parameter for improved data handling in Streamlit app; enhance lineup initialization by adding type selection for Regular and Showdown data, and implement duplicate removal in lineup dataframes for better accuracy.

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +182 -132
src/streamlit_app.py CHANGED
@@ -139,7 +139,7 @@ def init_handbuilder_data(site_var):
139
  return load_display.dropna(subset=['Median'])
140
 
141
  @st.cache_resource(ttl=60)
142
- def init_baselines():
143
 
144
  collection = db["Player_Baselines"]
145
  cursor = collection.find()
@@ -150,71 +150,84 @@ def init_baselines():
150
  raw_display['name'] = raw_display['name'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['name'])
151
  player_stats = raw_display[raw_display['Position'] != 'K']
152
 
153
- collection = db["DK_NFL_ROO"]
154
- cursor = collection.find()
 
155
 
156
- raw_display = pd.DataFrame(list(cursor))
157
- raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
158
- raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
159
- 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
160
- raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
161
- load_display = raw_display[raw_display['Position'] != 'K']
162
- dk_roo_raw = load_display.dropna(subset=['Median'])
163
 
164
- dk_id_map = dict(zip(dk_roo_raw['Player'], dk_roo_raw['player_id']))
165
 
166
- collection = db["FD_NFL_ROO"]
167
- cursor = collection.find()
168
 
169
- raw_display = pd.DataFrame(list(cursor))
170
- raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
171
- raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
172
- 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
173
- raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
174
- load_display = raw_display[raw_display['Position'] != 'K']
175
- fd_roo_raw = load_display.dropna(subset=['Median'])
176
 
177
- fd_id_map = dict(zip(fd_roo_raw['Player'], fd_roo_raw['player_id']))
178
 
179
- collection = db["DK_SD_NFL_ROO"]
180
- cursor = collection.find()
181
 
182
- raw_display = pd.DataFrame(list(cursor))
183
- raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
184
- raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
185
- 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
186
- raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
187
- # load_display = raw_display[raw_display['Position'] != 'K']
188
- dk_sd_roo_raw = raw_display.dropna(subset=['Median'])
189
 
190
- dk_sd_id_map = dict(zip(dk_sd_roo_raw['Player'], dk_sd_roo_raw['player_id']))
 
191
 
192
- collection = db["FD_SD_NFL_ROO"]
193
- cursor = collection.find()
 
194
 
195
- raw_display = pd.DataFrame(list(cursor))
196
- raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
197
- raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
198
- 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
199
- raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
200
- # load_display = raw_display[raw_display['Position'] != 'K']
201
- fd_sd_roo_raw = raw_display.dropna(subset=['Median'])
202
 
203
- fd_sd_id_map = dict(zip(fd_sd_roo_raw['Player'], fd_sd_roo_raw['player_id']))
 
 
 
 
 
 
204
 
205
- collection = db["DK_DFS_Stacks"]
206
- cursor = collection.find()
207
 
208
- raw_display = pd.DataFrame(list(cursor))
209
- raw_display = raw_display[['Team', 'QB', 'WR1_TE', 'WR2_TE', 'Total', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '60+%', '2x%', '3x%', '4x%', 'Own', 'LevX', 'slate']]
210
- dk_stacks_raw = raw_display.copy()
211
 
212
- collection = db["FD_DFS_Stacks"]
213
- cursor = collection.find()
 
 
 
 
 
214
 
215
- raw_display = pd.DataFrame(list(cursor))
216
- raw_display = raw_display[['Team', 'QB', 'WR1_TE', 'WR2_TE', 'Total', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '60+%', '2x%', '3x%', '4x%', 'Own', 'LevX', 'slate']]
217
- fd_stacks_raw = raw_display.copy()
 
 
 
 
 
218
 
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
 
@@ -259,6 +272,8 @@ def init_DK_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
259
  else:
260
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
261
  raw_display = pd.DataFrame(list(cursor))
 
 
262
 
263
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
264
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
@@ -299,6 +314,8 @@ def init_DK_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
299
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
300
  raw_display = pd.DataFrame(list(cursor))
301
 
 
 
302
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
303
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
304
  # Map names
@@ -338,6 +355,8 @@ def init_DK_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
338
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
339
  raw_display = pd.DataFrame(list(cursor))
340
 
 
 
341
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
342
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
343
  # Map names
@@ -371,6 +390,8 @@ def init_DK_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
371
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
372
  raw_display = pd.DataFrame(list(cursor))
373
 
 
 
374
  raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
375
  for column in ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']:
376
  raw_display[column] = raw_display[column].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display[column])
@@ -422,6 +443,8 @@ def init_FD_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
422
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
423
  raw_display = pd.DataFrame(list(cursor))
424
 
 
 
425
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
426
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
427
  # Map names
@@ -461,6 +484,8 @@ def init_FD_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
461
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
462
  raw_display = pd.DataFrame(list(cursor))
463
 
 
 
464
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
465
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
466
  # Map names
@@ -500,6 +525,8 @@ def init_FD_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
500
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
501
  raw_display = pd.DataFrame(list(cursor))
502
 
 
 
503
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
504
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
505
  # Map names
@@ -534,6 +561,8 @@ def init_FD_lineups(type_var, slate_var, prio_var, prio_mix, db_translation, lin
534
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
535
  raw_display = pd.DataFrame(list(cursor))
536
 
 
 
537
  raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
538
  for column in ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']:
539
  raw_display[column] = raw_display[column].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display[column])
@@ -564,24 +593,26 @@ def convert_hb_df(array, column_names):
564
  slate_names_dk, slate_name_lookup_dk = define_dk_showdown_slates()
565
  slate_names_fd, slate_name_lookup_fd = define_fd_showdown_slates()
566
 
567
- app_load_reset_column, app_view_site_column = st.columns([1, 9])
568
  with app_load_reset_column:
569
  if st.button("Load/Reset Data", key='reset_data_button'):
570
  st.cache_data.clear()
571
  slate_names_dk, slate_name_lookup_dk = define_dk_showdown_slates()
572
  slate_names_fd, slate_name_lookup_fd = define_fd_showdown_slates()
573
- 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()
574
  dk_lineups = init_DK_lineups('Regular', 'Main Slate', 'proj', 50, dk_showdown_db_translation, 25000, [])
575
  fd_lineups = init_FD_lineups('Regular', 'Main Slate', 'proj', 50, fd_showdown_db_translation, 25000, [])
576
  for key in st.session_state.keys():
577
  del st.session_state[key]
578
  with app_view_site_column:
579
  with st.container():
580
- app_view_column, app_site_column = st.columns([3, 3])
581
  with app_view_column:
582
  view_var = st.selectbox("Select view", ["Simple", "Advanced"], key='view_selectbox')
583
  with app_site_column:
584
  site_var = st.selectbox("What site do you want to view?", ('Draftkings', 'Fanduel'), key='site_selectbox')
 
 
585
 
586
  selected_tab = st.segmented_control(
587
  "Select Tab",
@@ -1020,8 +1051,11 @@ if selected_tab == 'Handbuilder':
1020
  if selected_tab == 'Stacks ROO':
1021
 
1022
  print(st.session_state)
1023
- 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()
1024
- t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
 
 
 
1025
  with st.expander("Info and Filters"):
1026
  st.info(t_stamp)
1027
  with st.container():
@@ -1059,26 +1093,32 @@ if selected_tab == 'Stacks ROO':
1059
  if selected_tab == 'Player ROO':
1060
 
1061
  print(st.session_state)
1062
- 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()
1063
- t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
 
 
 
 
 
 
 
1064
  with st.expander("Info and Filters"):
1065
  st.info(t_stamp)
1066
- slate_type_var2 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'), key='slate_type_var2_radio')
1067
- if slate_type_var2 == 'Regular':
1068
  slate_var2 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Late Slate', 'Thurs-Mon Slate'), key='slate_var2_radio')
1069
- elif slate_type_var2 == 'Showdown':
1070
  slate_var2 = st.radio("Which slate are you loading?", (slate_names_dk if site_var == 'Draftkings' else slate_names_fd), key='slate_var2_radio')
1071
  if site_var == 'Draftkings':
1072
- if slate_type_var2 == 'Regular':
1073
  raw_baselines = dk_roo_raw[dk_roo_raw['slate'] == str(slate_var2)]
1074
- elif slate_type_var2 == 'Showdown':
1075
  raw_baselines = dk_sd_roo_raw[dk_sd_roo_raw['slate'] == str(slate_name_lookup_dk[slate_var2])]
1076
 
1077
  raw_baselines = raw_baselines.iloc[:,:-2]
1078
  elif site_var == 'Fanduel':
1079
- if slate_type_var2 == 'Regular':
1080
  raw_baselines = fd_roo_raw[fd_roo_raw['slate'] == str(slate_var2)]
1081
- elif slate_type_var2 == 'Showdown':
1082
  raw_baselines = fd_sd_roo_raw[fd_sd_roo_raw['slate'] == str(slate_name_lookup_fd[slate_var2])]
1083
  raw_baselines = raw_baselines.iloc[:,:-2]
1084
 
@@ -1118,11 +1158,11 @@ if selected_tab == 'Player ROO':
1118
  final_Proj = final_Proj[final_Proj['Salary'] >= sal_var2[0]]
1119
  final_Proj = final_Proj[final_Proj['Salary'] <= sal_var2[1]]
1120
 
1121
- if slate_type_var2 == 'Regular':
1122
  pm_export = final_Proj[['Player', 'Position', 'Team', 'Salary', 'Median', 'Own']]
1123
  pm_export['captain ownership'] = pm_export['Own'] / 6
1124
  pm_export = pm_export.rename(columns={'Own': 'ownership', 'Median': 'median', 'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary'})
1125
- elif slate_type_var2 == 'Showdown':
1126
  pm_export = final_Proj[['Player', 'Position', 'Team', 'Salary', 'Median', 'Own', 'CPT_Own']]
1127
  pm_export['Salary'] = pm_export['Salary'] / 1.5
1128
  pm_export = pm_export.rename(columns={'Own': 'ownership', 'Median': 'median', 'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'CPT_Own': 'captain ownership'})
@@ -1162,8 +1202,11 @@ if selected_tab == 'Player ROO':
1162
  st.stop()
1163
 
1164
  if selected_tab == 'Optimals':
1165
- 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()
1166
- t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
 
 
 
1167
  st.header("Optimals")
1168
  with st.expander("Info and Filters"):
1169
  st.info("These filters will display various optimals in the table below to pick from. If you want to export the entire set of 10,000 optimals, hit the 'Prepare full data export' button. If you would like to apply the filters here to the 10,000 optimals before you export, use the 'Prepare full data export (Filter)' button.")
@@ -1175,36 +1218,35 @@ if selected_tab == 'Optimals':
1175
  lineup_num = st.number_input("How many lineups do you want to work with?", min_value=1000, max_value=50000, value=25000, step=100, key='lineup_download_var_input')
1176
 
1177
  with optimals_site_col:
1178
- slate_type_var3 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'), key='slate_type_var3_radio')
1179
- if slate_type_var3 == 'Regular':
1180
  if site_var == 'Draftkings':
1181
  raw_baselines = dk_roo_raw
1182
  elif site_var == 'Fanduel':
1183
  raw_baselines = fd_roo_raw
1184
- elif slate_type_var3 == 'Showdown':
1185
  if site_var == 'Draftkings':
1186
  raw_baselines = dk_sd_roo_raw
1187
  elif site_var == 'Fanduel':
1188
  raw_baselines = fd_sd_roo_raw
1189
  if site_var == 'Draftkings':
1190
- 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')
1191
  elif site_var == 'Fanduel':
1192
- slate_var3 = st.radio("Which slate data are you loading?", (slate_names_fd if slate_type_var3 == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1193
 
1194
  with optimals_macro_col:
1195
  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')
1196
  player_var2 = st.multiselect('Query for lineups including:', options = raw_baselines['Player'].unique(), key='player_var2_multiselect', default=[])
1197
 
1198
- if slate_type_var3 == 'Regular':
1199
  if site_var == 'Draftkings':
1200
- dk_lineups = init_DK_lineups(slate_type_var3, slate_var3, prio_var, prio_mix, dk_showdown_db_translation, lineup_num, player_var2)
1201
  elif site_var == 'Fanduel':
1202
- fd_lineups = init_FD_lineups(slate_type_var3, slate_var3, prio_var, prio_mix, fd_showdown_db_translation, lineup_num, player_var2)
1203
- elif slate_type_var3 == 'Showdown':
1204
  if site_var == 'Draftkings':
1205
- dk_lineups = init_DK_lineups(slate_type_var3, slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_showdown_db_translation, lineup_num, player_var2)
1206
  elif site_var == 'Fanduel':
1207
- fd_lineups = init_FD_lineups(slate_type_var3, slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_showdown_db_translation, lineup_num, player_var2)
1208
 
1209
  with optimals_salary_col:
1210
  if site_var == 'Draftkings':
@@ -1223,23 +1265,21 @@ if selected_tab == 'Optimals':
1223
 
1224
 
1225
  if site_var == 'Draftkings':
1226
- raw_baselines = dk_roo_raw
1227
- if slate_type_var3 == 'Regular':
1228
  ROO_slice = raw_baselines
1229
  player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
1230
  column_names = dk_columns
1231
- elif slate_type_var3 == 'Showdown':
1232
  player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
1233
  column_names = dk_sd_columns
1234
 
1235
 
1236
  elif site_var == 'Fanduel':
1237
- raw_baselines = fd_roo_raw
1238
- if slate_type_var3 == 'Regular':
1239
  ROO_slice = raw_baselines
1240
  player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
1241
  column_names = fd_columns
1242
- elif slate_type_var3 == 'Showdown':
1243
  player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
1244
  column_names = fd_sd_columns
1245
 
@@ -1249,20 +1289,20 @@ if selected_tab == 'Optimals':
1249
  name_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1250
  data_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1251
  if site_var == 'Draftkings':
1252
- if slate_type_var3 == 'Regular':
1253
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1254
  for col_idx in map_columns:
1255
  data_export[col_idx] = data_export[col_idx].map(dk_id_map)
1256
- elif slate_type_var3 == 'Showdown':
1257
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1258
  for col_idx in map_columns:
1259
  data_export[col_idx] = data_export[col_idx].map(dk_sd_id_map)
1260
  elif site_var == 'Fanduel':
1261
- if slate_type_var3 == 'Regular':
1262
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1263
  for col_idx in map_columns:
1264
  data_export[col_idx] = data_export[col_idx].map(fd_id_map)
1265
- elif slate_type_var3 == 'Showdown':
1266
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1267
  for col_idx in map_columns:
1268
  data_export[col_idx] = data_export[col_idx].map(fd_sd_id_map)
@@ -1284,14 +1324,14 @@ if selected_tab == 'Optimals':
1284
  )
1285
  with pm_opt_col:
1286
  if site_var == 'Draftkings':
1287
- if slate_type_var3 == 'Regular':
1288
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1289
- elif slate_type_var3 == 'Showdown':
1290
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1291
  elif site_var == 'Fanduel':
1292
- if slate_type_var3 == 'Regular':
1293
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1294
- elif slate_type_var3 == 'Showdown':
1295
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1296
  st.download_button(
1297
  label="Portfolio Manager Export (IDs)",
@@ -1302,14 +1342,14 @@ if selected_tab == 'Optimals':
1302
  )
1303
 
1304
  if site_var == 'Draftkings':
1305
- if slate_type_var3 == 'Regular':
1306
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1307
- elif slate_type_var3 == 'Showdown':
1308
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1309
  elif site_var == 'Fanduel':
1310
- if slate_type_var3 == 'Regular':
1311
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1312
- elif slate_type_var3 == 'Showdown':
1313
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1314
  st.download_button(
1315
  label="Portfolio Manager Export (Names)",
@@ -1323,19 +1363,25 @@ if selected_tab == 'Optimals':
1323
  name_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1324
  data_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1325
  if site_var == 'Draftkings':
1326
- if slate_type_var3 == 'Regular':
1327
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1328
- elif slate_type_var3 == 'Showdown':
 
 
1329
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1330
- for col_idx in map_columns:
1331
- data_export[col_idx] = data_export[col_idx].map(dk_id_map)
 
1332
  elif site_var == 'Fanduel':
1333
- if slate_type_var3 == 'Regular':
1334
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1335
- elif slate_type_var3 == 'Showdown':
 
 
1336
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1337
- for col_idx in map_columns:
1338
- data_export[col_idx] = data_export[col_idx].map(fd_id_map)
 
1339
  data_export = data_export[data_export['salary'] >= salary_min_var]
1340
  data_export = data_export[data_export['salary'] <= salary_max_var]
1341
  data_export = data_export[data_export['Team_count'] >= min_stacks_var]
@@ -1364,14 +1410,14 @@ if selected_tab == 'Optimals':
1364
  )
1365
  with pm_opt_col:
1366
  if site_var == 'Draftkings':
1367
- if slate_type_var3 == 'Regular':
1368
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1369
- elif slate_type_var3 == 'Showdown':
1370
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1371
  elif site_var == 'Fanduel':
1372
- if slate_type_var3 == 'Regular':
1373
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1374
- elif slate_type_var3 == 'Showdown':
1375
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1376
  st.download_button(
1377
  label="Portfolio Manager Export (IDs)",
@@ -1382,14 +1428,14 @@ if selected_tab == 'Optimals':
1382
  )
1383
 
1384
  if site_var == 'Draftkings':
1385
- if slate_type_var3 == 'Regular':
1386
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1387
- elif slate_type_var3 == 'Showdown':
1388
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1389
  elif site_var == 'Fanduel':
1390
- if slate_type_var3 == 'Regular':
1391
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1392
- elif slate_type_var3 == 'Showdown':
1393
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1394
  st.download_button(
1395
  label="Portfolio Manager Export (Names)",
@@ -1439,19 +1485,23 @@ if selected_tab == 'Optimals':
1439
  export_file = st.session_state.data_export_display.copy()
1440
  name_export = st.session_state.data_export_display.copy()
1441
  if site_var == 'Draftkings':
1442
- if slate_type_var3 == 'Regular':
1443
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1444
- elif slate_type_var3 == 'Showdown':
 
 
1445
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1446
- for col_idx in map_columns:
1447
- export_file[col_idx] = export_file[col_idx].map(dk_id_map)
1448
  elif site_var == 'Fanduel':
1449
- if slate_type_var3 == 'Regular':
1450
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1451
- elif slate_type_var3 == 'Showdown':
 
 
1452
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1453
- for col_idx in map_columns:
1454
- export_file[col_idx] = export_file[col_idx].map(fd_id_map)
1455
 
1456
  with st.container():
1457
  if st.button("Reset Optimals", key='reset_optimals_button'):
@@ -1479,7 +1529,7 @@ if selected_tab == 'Optimals':
1479
  )
1480
 
1481
  with st.container():
1482
- if slate_type_var3 == 'Regular':
1483
  if 'working_seed' in st.session_state:
1484
  # Create a new dataframe with summary statistics
1485
  if site_var == 'Draftkings':
@@ -1526,7 +1576,7 @@ if selected_tab == 'Optimals':
1526
  np.std(st.session_state.working_seed[:,15])
1527
  ]
1528
  })
1529
- elif slate_type_var3 == 'Showdown':
1530
  if 'working_seed' in st.session_state:
1531
  # Create a new dataframe with summary statistics
1532
  if site_var == 'Draftkings':
@@ -1590,14 +1640,14 @@ if selected_tab == 'Optimals':
1590
  with display_freq_tab:
1591
  if 'data_export_display' in st.session_state:
1592
  if site_var == 'Draftkings':
1593
- if slate_type_var3 == 'Regular':
1594
  player_columns = st.session_state.data_export_display.iloc[:, :9]
1595
- elif slate_type_var3 == 'Showdown':
1596
  player_columns = st.session_state.data_export_display.iloc[:, :6]
1597
  elif site_var == 'Fanduel':
1598
- if slate_type_var3 == 'Regular':
1599
  player_columns = st.session_state.data_export_display.iloc[:, :9]
1600
- elif slate_type_var3 == 'Showdown':
1601
  player_columns = st.session_state.data_export_display.iloc[:, :6]
1602
 
1603
  # Flatten the DataFrame and count unique values
@@ -1633,14 +1683,14 @@ if selected_tab == 'Optimals':
1633
  with seed_frame_freq_tab:
1634
  if 'working_seed' in st.session_state:
1635
  if site_var == 'Draftkings':
1636
- if slate_type_var3 == 'Regular':
1637
  player_columns = st.session_state.working_seed[:, :9]
1638
- elif slate_type_var3 == 'Showdown':
1639
  player_columns = st.session_state.working_seed[:, :6]
1640
  elif site_var == 'Fanduel':
1641
- if slate_type_var3 == 'Regular':
1642
  player_columns = st.session_state.working_seed[:, :9]
1643
- elif slate_type_var3 == 'Showdown':
1644
  player_columns = st.session_state.working_seed[:, :6]
1645
 
1646
  # Flatten the DataFrame and count unique values
 
139
  return load_display.dropna(subset=['Median'])
140
 
141
  @st.cache_resource(ttl=60)
142
+ def init_baselines(type_var: str):
143
 
144
  collection = db["Player_Baselines"]
145
  cursor = collection.find()
 
150
  raw_display['name'] = raw_display['name'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['name'])
151
  player_stats = raw_display[raw_display['Position'] != 'K']
152
 
153
+ if type_var == 'Regular':
154
+ collection = db["DK_NFL_ROO"]
155
+ cursor = collection.find()
156
 
157
+ raw_display = pd.DataFrame(list(cursor))
158
+ raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
159
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
160
+ 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
161
+ raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
162
+ load_display = raw_display[raw_display['Position'] != 'K']
163
+ dk_roo_raw = load_display.dropna(subset=['Median'])
164
 
165
+ dk_id_map = dict(zip(dk_roo_raw['Player'], dk_roo_raw['player_id']))
166
 
167
+ collection = db["FD_NFL_ROO"]
168
+ cursor = collection.find()
169
 
170
+ raw_display = pd.DataFrame(list(cursor))
171
+ raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
172
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
173
+ 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
174
+ raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
175
+ load_display = raw_display[raw_display['Position'] != 'K']
176
+ fd_roo_raw = load_display.dropna(subset=['Median'])
177
 
178
+ fd_id_map = dict(zip(fd_roo_raw['Player'], fd_roo_raw['player_id']))
179
 
180
+ collection = db["DK_DFS_Stacks"]
181
+ cursor = collection.find()
182
 
183
+ raw_display = pd.DataFrame(list(cursor))
184
+ raw_display = raw_display[['Team', 'QB', 'WR1_TE', 'WR2_TE', 'Total', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '60+%', '2x%', '3x%', '4x%', 'Own', 'LevX', 'slate']]
185
+ dk_stacks_raw = raw_display.copy()
 
 
 
 
186
 
187
+ collection = db["FD_DFS_Stacks"]
188
+ cursor = collection.find()
189
 
190
+ raw_display = pd.DataFrame(list(cursor))
191
+ raw_display = raw_display[['Team', 'QB', 'WR1_TE', 'WR2_TE', 'Total', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '60+%', '2x%', '3x%', '4x%', 'Own', 'LevX', 'slate']]
192
+ fd_stacks_raw = raw_display.copy()
193
 
194
+ dk_sd_roo_raw = None
195
+ fd_sd_roo_raw = None
196
+ dk_sd_id_map = None
197
+ fd_sd_id_map = None
198
+ elif type_var == 'Showdown':
199
+ collection = db["DK_SD_NFL_ROO"]
200
+ cursor = collection.find()
201
 
202
+ raw_display = pd.DataFrame(list(cursor))
203
+ raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
204
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
205
+ 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
206
+ raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
207
+ # load_display = raw_display[raw_display['Position'] != 'K']
208
+ dk_sd_roo_raw = raw_display.dropna(subset=['Median'])
209
 
210
+ dk_sd_id_map = dict(zip(dk_sd_roo_raw['Player'], dk_sd_roo_raw['player_id']))
 
211
 
212
+ collection = db["FD_SD_NFL_ROO"]
213
+ cursor = collection.find()
 
214
 
215
+ raw_display = pd.DataFrame(list(cursor))
216
+ raw_display = raw_display.rename(columns={'player_ID': 'player_id'})
217
+ raw_display = raw_display[['Player', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'exFPTS', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '2x%', '3x%', '4x%',
218
+ 'Own', 'Small_Field_Own', 'Large_Field_Own', 'Cash_Field_Own', 'CPT_Own', 'LevX', 'version', 'slate', 'timestamp', 'player_id', 'site']]
219
+ raw_display['Player'] = raw_display['Player'].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display['Player'])
220
+ # load_display = raw_display[raw_display['Position'] != 'K']
221
+ fd_sd_roo_raw = raw_display.dropna(subset=['Median'])
222
 
223
+ fd_sd_id_map = dict(zip(fd_sd_roo_raw['Player'], fd_sd_roo_raw['player_id']))
224
+
225
+ dk_roo_raw = None
226
+ fd_roo_raw = None
227
+ dk_id_map = None
228
+ fd_id_map = None
229
+ dk_stacks_raw = None
230
+ fd_stacks_raw = None
231
 
232
  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
233
 
 
272
  else:
273
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
274
  raw_display = pd.DataFrame(list(cursor))
275
+
276
+ raw_display = raw_display.drop_duplicates(subset=['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'])
277
 
278
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
279
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
 
314
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
315
  raw_display = pd.DataFrame(list(cursor))
316
 
317
+ raw_display = raw_display.drop_duplicates(subset=['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'])
318
+
319
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
320
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
321
  # Map names
 
355
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
356
  raw_display = pd.DataFrame(list(cursor))
357
 
358
+ raw_display = raw_display.drop_duplicates(subset=['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'])
359
+
360
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
361
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
362
  # Map names
 
390
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
391
  raw_display = pd.DataFrame(list(cursor))
392
 
393
+ raw_display = raw_display.drop_duplicates(subset=['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'])
394
+
395
  raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
396
  for column in ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']:
397
  raw_display[column] = raw_display[column].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display[column])
 
443
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
444
  raw_display = pd.DataFrame(list(cursor))
445
 
446
+ raw_display = raw_display.drop_duplicates(subset=['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'])
447
+
448
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
449
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
450
  # Map names
 
484
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
485
  raw_display = pd.DataFrame(list(cursor))
486
 
487
+ raw_display = raw_display.drop_duplicates(subset=['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'])
488
+
489
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
490
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
491
  # Map names
 
525
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
526
  raw_display = pd.DataFrame(list(cursor))
527
 
528
+ raw_display = raw_display.drop_duplicates(subset=['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'])
529
+
530
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
531
  dict_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
532
  # Map names
 
561
  cursor = collection.find().sort(prio_var, -1).limit(lineup_num)
562
  raw_display = pd.DataFrame(list(cursor))
563
 
564
+ raw_display = raw_display.drop_duplicates(subset=['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'])
565
+
566
  raw_display = raw_display[['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
567
  for column in ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']:
568
  raw_display[column] = raw_display[column].map(dict(zip(wrong_team_names, right_name_teams)), na_action='ignore').fillna(raw_display[column])
 
593
  slate_names_dk, slate_name_lookup_dk = define_dk_showdown_slates()
594
  slate_names_fd, slate_name_lookup_fd = define_fd_showdown_slates()
595
 
596
+ app_load_reset_column, app_view_site_column, = st.columns([1, 9])
597
  with app_load_reset_column:
598
  if st.button("Load/Reset Data", key='reset_data_button'):
599
  st.cache_data.clear()
600
  slate_names_dk, slate_name_lookup_dk = define_dk_showdown_slates()
601
  slate_names_fd, slate_name_lookup_fd = define_fd_showdown_slates()
602
+ 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('Regular')
603
  dk_lineups = init_DK_lineups('Regular', 'Main Slate', 'proj', 50, dk_showdown_db_translation, 25000, [])
604
  fd_lineups = init_FD_lineups('Regular', 'Main Slate', 'proj', 50, fd_showdown_db_translation, 25000, [])
605
  for key in st.session_state.keys():
606
  del st.session_state[key]
607
  with app_view_site_column:
608
  with st.container():
609
+ app_view_column, app_site_column, app_type_column = st.columns([3, 3, 3])
610
  with app_view_column:
611
  view_var = st.selectbox("Select view", ["Simple", "Advanced"], key='view_selectbox')
612
  with app_site_column:
613
  site_var = st.selectbox("What site do you want to view?", ('Draftkings', 'Fanduel'), key='site_selectbox')
614
+ with app_type_column:
615
+ type_var = st.selectbox("What type of data do you want to view?", ('Regular', 'Showdown'), key='type_selectbox')
616
 
617
  selected_tab = st.segmented_control(
618
  "Select Tab",
 
1051
  if selected_tab == 'Stacks ROO':
1052
 
1053
  print(st.session_state)
1054
+ 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(type_var)
1055
+ if type_var == 'Regular':
1056
+ t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
1057
+ elif type_var == 'Showdown':
1058
+ t_stamp = f"Last Update: " + str(dk_sd_roo_raw['timestamp'][0]) + f" CST"
1059
  with st.expander("Info and Filters"):
1060
  st.info(t_stamp)
1061
  with st.container():
 
1093
  if selected_tab == 'Player ROO':
1094
 
1095
  print(st.session_state)
1096
+ try:
1097
+ 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(type_var)
1098
+ except:
1099
+ st.error("No data found for this type of data, change the data type to either Regular or Showdown (located top right)")
1100
+ st.stop()
1101
+ if type_var == 'Regular':
1102
+ t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
1103
+ elif type_var == 'Showdown':
1104
+ t_stamp = f"Last Update: " + str(dk_sd_roo_raw['timestamp'][0]) + f" CST"
1105
  with st.expander("Info and Filters"):
1106
  st.info(t_stamp)
1107
+ if type_var == 'Regular':
 
1108
  slate_var2 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'Late Slate', 'Thurs-Mon Slate'), key='slate_var2_radio')
1109
+ elif type_var == 'Showdown':
1110
  slate_var2 = st.radio("Which slate are you loading?", (slate_names_dk if site_var == 'Draftkings' else slate_names_fd), key='slate_var2_radio')
1111
  if site_var == 'Draftkings':
1112
+ if type_var == 'Regular':
1113
  raw_baselines = dk_roo_raw[dk_roo_raw['slate'] == str(slate_var2)]
1114
+ elif type_var == 'Showdown':
1115
  raw_baselines = dk_sd_roo_raw[dk_sd_roo_raw['slate'] == str(slate_name_lookup_dk[slate_var2])]
1116
 
1117
  raw_baselines = raw_baselines.iloc[:,:-2]
1118
  elif site_var == 'Fanduel':
1119
+ if type_var == 'Regular':
1120
  raw_baselines = fd_roo_raw[fd_roo_raw['slate'] == str(slate_var2)]
1121
+ elif type_var == 'Showdown':
1122
  raw_baselines = fd_sd_roo_raw[fd_sd_roo_raw['slate'] == str(slate_name_lookup_fd[slate_var2])]
1123
  raw_baselines = raw_baselines.iloc[:,:-2]
1124
 
 
1158
  final_Proj = final_Proj[final_Proj['Salary'] >= sal_var2[0]]
1159
  final_Proj = final_Proj[final_Proj['Salary'] <= sal_var2[1]]
1160
 
1161
+ if type_var == 'Regular':
1162
  pm_export = final_Proj[['Player', 'Position', 'Team', 'Salary', 'Median', 'Own']]
1163
  pm_export['captain ownership'] = pm_export['Own'] / 6
1164
  pm_export = pm_export.rename(columns={'Own': 'ownership', 'Median': 'median', 'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary'})
1165
+ elif type_var == 'Showdown':
1166
  pm_export = final_Proj[['Player', 'Position', 'Team', 'Salary', 'Median', 'Own', 'CPT_Own']]
1167
  pm_export['Salary'] = pm_export['Salary'] / 1.5
1168
  pm_export = pm_export.rename(columns={'Own': 'ownership', 'Median': 'median', 'Player': 'player_names', 'Position': 'position', 'Team': 'team', 'Salary': 'salary', 'CPT_Own': 'captain ownership'})
 
1202
  st.stop()
1203
 
1204
  if selected_tab == 'Optimals':
1205
+ 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(type_var)
1206
+ if type_var == 'Regular':
1207
+ t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
1208
+ elif type_var == 'Showdown':
1209
+ t_stamp = f"Last Update: " + str(dk_sd_roo_raw['timestamp'][0]) + f" CST"
1210
  st.header("Optimals")
1211
  with st.expander("Info and Filters"):
1212
  st.info("These filters will display various optimals in the table below to pick from. If you want to export the entire set of 10,000 optimals, hit the 'Prepare full data export' button. If you would like to apply the filters here to the 10,000 optimals before you export, use the 'Prepare full data export (Filter)' button.")
 
1218
  lineup_num = st.number_input("How many lineups do you want to work with?", min_value=1000, max_value=50000, value=25000, step=100, key='lineup_download_var_input')
1219
 
1220
  with optimals_site_col:
1221
+ if type_var == 'Regular':
 
1222
  if site_var == 'Draftkings':
1223
  raw_baselines = dk_roo_raw
1224
  elif site_var == 'Fanduel':
1225
  raw_baselines = fd_roo_raw
1226
+ elif type_var == 'Showdown':
1227
  if site_var == 'Draftkings':
1228
  raw_baselines = dk_sd_roo_raw
1229
  elif site_var == 'Fanduel':
1230
  raw_baselines = fd_sd_roo_raw
1231
  if site_var == 'Draftkings':
1232
+ slate_var3 = st.radio("Which slate data are you loading?", (slate_names_dk if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1233
  elif site_var == 'Fanduel':
1234
+ slate_var3 = st.radio("Which slate data are you loading?", (slate_names_fd if type_var == 'Showdown' else ['Main', 'Secondary', 'Auxiliary']), key='slate_var3_radio')
1235
 
1236
  with optimals_macro_col:
1237
  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')
1238
  player_var2 = st.multiselect('Query for lineups including:', options = raw_baselines['Player'].unique(), key='player_var2_multiselect', default=[])
1239
 
1240
+ if type_var == 'Regular':
1241
  if site_var == 'Draftkings':
1242
+ dk_lineups = init_DK_lineups(type_var, slate_var3, prio_var, prio_mix, dk_showdown_db_translation, lineup_num, player_var2)
1243
  elif site_var == 'Fanduel':
1244
+ fd_lineups = init_FD_lineups(type_var, slate_var3, prio_var, prio_mix, fd_showdown_db_translation, lineup_num, player_var2)
1245
+ elif type_var == 'Showdown':
1246
  if site_var == 'Draftkings':
1247
+ dk_lineups = init_DK_lineups(type_var, slate_name_lookup_dk[slate_var3], prio_var, prio_mix, dk_showdown_db_translation, lineup_num, player_var2)
1248
  elif site_var == 'Fanduel':
1249
+ fd_lineups = init_FD_lineups(type_var, slate_name_lookup_fd[slate_var3], prio_var, prio_mix, fd_showdown_db_translation, lineup_num, player_var2)
1250
 
1251
  with optimals_salary_col:
1252
  if site_var == 'Draftkings':
 
1265
 
1266
 
1267
  if site_var == 'Draftkings':
1268
+ if type_var == 'Regular':
 
1269
  ROO_slice = raw_baselines
1270
  player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
1271
  column_names = dk_columns
1272
+ elif type_var == 'Showdown':
1273
  player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
1274
  column_names = dk_sd_columns
1275
 
1276
 
1277
  elif site_var == 'Fanduel':
1278
+ if type_var == 'Regular':
 
1279
  ROO_slice = raw_baselines
1280
  player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
1281
  column_names = fd_columns
1282
+ elif type_var == 'Showdown':
1283
  player_salaries = dict(zip(raw_baselines['Player'], raw_baselines['Salary']))
1284
  column_names = fd_sd_columns
1285
 
 
1289
  name_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1290
  data_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1291
  if site_var == 'Draftkings':
1292
+ if type_var == 'Regular':
1293
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1294
  for col_idx in map_columns:
1295
  data_export[col_idx] = data_export[col_idx].map(dk_id_map)
1296
+ elif type_var == 'Showdown':
1297
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1298
  for col_idx in map_columns:
1299
  data_export[col_idx] = data_export[col_idx].map(dk_sd_id_map)
1300
  elif site_var == 'Fanduel':
1301
+ if type_var == 'Regular':
1302
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1303
  for col_idx in map_columns:
1304
  data_export[col_idx] = data_export[col_idx].map(fd_id_map)
1305
+ elif type_var == 'Showdown':
1306
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1307
  for col_idx in map_columns:
1308
  data_export[col_idx] = data_export[col_idx].map(fd_sd_id_map)
 
1324
  )
1325
  with pm_opt_col:
1326
  if site_var == 'Draftkings':
1327
+ if type_var == 'Regular':
1328
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1329
+ elif type_var == 'Showdown':
1330
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1331
  elif site_var == 'Fanduel':
1332
+ if type_var == 'Regular':
1333
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1334
+ elif type_var == 'Showdown':
1335
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1336
  st.download_button(
1337
  label="Portfolio Manager Export (IDs)",
 
1342
  )
1343
 
1344
  if site_var == 'Draftkings':
1345
+ if type_var == 'Regular':
1346
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1347
+ elif type_var == 'Showdown':
1348
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1349
  elif site_var == 'Fanduel':
1350
+ if type_var == 'Regular':
1351
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1352
+ elif type_var == 'Showdown':
1353
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1354
  st.download_button(
1355
  label="Portfolio Manager Export (Names)",
 
1363
  name_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1364
  data_export = pd.DataFrame(st.session_state.working_seed.copy(), columns=column_names)
1365
  if site_var == 'Draftkings':
1366
+ if type_var == 'Regular':
1367
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1368
+ for col_idx in map_columns:
1369
+ data_export[col_idx] = data_export[col_idx].map(dk_id_map)
1370
+ elif type_var == 'Showdown':
1371
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1372
+ for col_idx in map_columns:
1373
+ data_export[col_idx] = data_export[col_idx].map(dk_sd_id_map)
1374
+
1375
  elif site_var == 'Fanduel':
1376
+ if type_var == 'Regular':
1377
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1378
+ for col_idx in map_columns:
1379
+ data_export[col_idx] = data_export[col_idx].map(fd_id_map)
1380
+ elif type_var == 'Showdown':
1381
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1382
+ for col_idx in map_columns:
1383
+ data_export[col_idx] = data_export[col_idx].map(fd_sd_id_map)
1384
+
1385
  data_export = data_export[data_export['salary'] >= salary_min_var]
1386
  data_export = data_export[data_export['salary'] <= salary_max_var]
1387
  data_export = data_export[data_export['Team_count'] >= min_stacks_var]
 
1410
  )
1411
  with pm_opt_col:
1412
  if site_var == 'Draftkings':
1413
+ if type_var == 'Regular':
1414
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1415
+ elif type_var == 'Showdown':
1416
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1417
  elif site_var == 'Fanduel':
1418
+ if type_var == 'Regular':
1419
  data_export = data_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1420
+ elif type_var == 'Showdown':
1421
  data_export = data_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1422
  st.download_button(
1423
  label="Portfolio Manager Export (IDs)",
 
1428
  )
1429
 
1430
  if site_var == 'Draftkings':
1431
+ if type_var == 'Regular':
1432
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1433
+ elif type_var == 'Showdown':
1434
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1435
  elif site_var == 'Fanduel':
1436
+ if type_var == 'Regular':
1437
  name_export = name_export.set_index('QB').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1438
+ elif type_var == 'Showdown':
1439
  name_export = name_export.set_index('CPT').drop(columns=['salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own'], axis=1)
1440
  st.download_button(
1441
  label="Portfolio Manager Export (Names)",
 
1485
  export_file = st.session_state.data_export_display.copy()
1486
  name_export = st.session_state.data_export_display.copy()
1487
  if site_var == 'Draftkings':
1488
+ if type_var == 'Regular':
1489
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1490
+ for col_idx in map_columns:
1491
+ export_file[col_idx] = export_file[col_idx].map(dk_id_map)
1492
+ elif type_var == 'Showdown':
1493
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1494
+ for col_idx in map_columns:
1495
+ export_file[col_idx] = export_file[col_idx].map(dk_sd_id_map)
1496
  elif site_var == 'Fanduel':
1497
+ if type_var == 'Regular':
1498
  map_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
1499
+ for col_idx in map_columns:
1500
+ export_file[col_idx] = export_file[col_idx].map(fd_id_map)
1501
+ elif type_var == 'Showdown':
1502
  map_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5']
1503
+ for col_idx in map_columns:
1504
+ export_file[col_idx] = export_file[col_idx].map(fd_sd_id_map)
1505
 
1506
  with st.container():
1507
  if st.button("Reset Optimals", key='reset_optimals_button'):
 
1529
  )
1530
 
1531
  with st.container():
1532
+ if type_var == 'Regular':
1533
  if 'working_seed' in st.session_state:
1534
  # Create a new dataframe with summary statistics
1535
  if site_var == 'Draftkings':
 
1576
  np.std(st.session_state.working_seed[:,15])
1577
  ]
1578
  })
1579
+ elif type_var == 'Showdown':
1580
  if 'working_seed' in st.session_state:
1581
  # Create a new dataframe with summary statistics
1582
  if site_var == 'Draftkings':
 
1640
  with display_freq_tab:
1641
  if 'data_export_display' in st.session_state:
1642
  if site_var == 'Draftkings':
1643
+ if type_var == 'Regular':
1644
  player_columns = st.session_state.data_export_display.iloc[:, :9]
1645
+ elif type_var == 'Showdown':
1646
  player_columns = st.session_state.data_export_display.iloc[:, :6]
1647
  elif site_var == 'Fanduel':
1648
+ if type_var == 'Regular':
1649
  player_columns = st.session_state.data_export_display.iloc[:, :9]
1650
+ elif type_var == 'Showdown':
1651
  player_columns = st.session_state.data_export_display.iloc[:, :6]
1652
 
1653
  # Flatten the DataFrame and count unique values
 
1683
  with seed_frame_freq_tab:
1684
  if 'working_seed' in st.session_state:
1685
  if site_var == 'Draftkings':
1686
+ if type_var == 'Regular':
1687
  player_columns = st.session_state.working_seed[:, :9]
1688
+ elif type_var == 'Showdown':
1689
  player_columns = st.session_state.working_seed[:, :6]
1690
  elif site_var == 'Fanduel':
1691
+ if type_var == 'Regular':
1692
  player_columns = st.session_state.working_seed[:, :9]
1693
+ elif type_var == 'Showdown':
1694
  player_columns = st.session_state.working_seed[:, :6]
1695
 
1696
  # Flatten the DataFrame and count unique values