James McCool commited on
Commit
a33b237
·
1 Parent(s): efa96d9

Refactor app.py to replace radio buttons with selectboxes for view selection and streamline site and slate type inputs across all tabs, enhancing user experience and maintaining consistent data management.

Browse files
Files changed (1) hide show
  1. app.py +40 -43
app.py CHANGED
@@ -124,14 +124,16 @@ hold_display = roo_data
124
  with st.container():
125
  col1, col2 = st.columns([3, 3])
126
  with col1:
127
- view_var = st.radio("Select view", ["Simple", "Advanced"])
128
  with col2:
129
- model_var = st.selectbox("What model do you want to view?", ('Scoring Percentages', 'Player ROO', 'Optimals'), key='model_var')
130
 
131
- if model_var == 'Scoring Percentages':
 
 
132
  st.header("Scoring Percentages")
133
  with st.expander("Info and Filters"):
134
- col1, col2, col3, col4 = st.columns([3, 3, 3, 3])
135
  with col1:
136
  if st.button("Load/Reset Data", key='reset1'):
137
  st.cache_data.clear()
@@ -142,11 +144,9 @@ if model_var == 'Scoring Percentages':
142
  for key in st.session_state.keys():
143
  del st.session_state[key]
144
  with col2:
145
- site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var1')
146
  with col3:
147
- slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'All Games'), key='slate_var1')
148
- with col4:
149
- own_var1 = st.radio("How would you like to display team ownership?", ('Sum', 'Average'), key='own_var1')
150
  st.title("Scoring Percentages")
151
  if view_var == "Simple":
152
  scoring_percentages = scoring_percentages[['Names', 'Avg Score', '8+ runs', 'Win Percentage']]
@@ -154,10 +154,10 @@ if model_var == 'Scoring Percentages':
154
  elif view_var == "Advanced":
155
  st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(game_format, precision=2), height=750, use_container_width = True, hide_index=True)
156
 
157
- if model_var == 'Player ROO':
158
  st.header("Player ROO")
159
  with st.expander("Info and Filters"):
160
- col1, col2, col3, col4, col5 = st.columns([3, 3, 3, 3, 3])
161
  with col1:
162
  if st.button("Load/Reset Data", key='reset2'):
163
  st.cache_data.clear()
@@ -168,17 +168,15 @@ if model_var == 'Player ROO':
168
  for key in st.session_state.keys():
169
  del st.session_state[key]
170
  with col2:
171
- site_var2 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var2')
172
  with col3:
173
- slate_type_var2 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'), key='slate_type_var2')
174
  with col4:
175
- slate_var2 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'), key='slate_var2')
176
- with col5:
177
- pos_var2 = st.radio("Which position group would you like to view?", ('All', 'Pitchers', 'Hitters'), key='pos_var2')
178
 
179
  if slate_type_var2 == 'Regular':
180
  player_roo_raw = roo_data.copy()
181
- if site_var2 == 'Draftkings':
182
  player_roo_raw['Site'] = 'Draftkings'
183
 
184
  if pos_var2 == 'All':
@@ -187,7 +185,7 @@ if model_var == 'Player ROO':
187
  player_roo_raw = player_roo_raw[player_roo_raw['Position'] == 'SP']
188
  elif pos_var2 == 'Hitters':
189
  player_roo_raw = player_roo_raw[player_roo_raw['Position'] != 'SP']
190
- elif site_var2 == 'Fanduel':
191
  player_roo_raw['Site'] = 'Fanduel'
192
 
193
  if pos_var2 == 'All':
@@ -206,9 +204,9 @@ if model_var == 'Player ROO':
206
 
207
  elif slate_type_var2 == 'Showdown':
208
  player_roo_raw = sd_roo_data.copy()
209
- if site_var2 == 'Draftkings':
210
  player_roo_raw['Site'] = 'Draftkings'
211
- elif site_var2 == 'Fanduel':
212
  player_roo_raw['Site'] = 'Fanduel'
213
  st.session_state['player_roo'] = player_roo_raw.drop(columns=['site', 'slate', 'version', 'timestamp'])
214
  if view_var == "Simple":
@@ -217,7 +215,7 @@ if model_var == 'Player ROO':
217
  elif view_var == "Advanced":
218
  st.dataframe(st.session_state['player_roo'].style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(player_roo_format, precision=2), height=750, use_container_width = True, hide_index=True)
219
 
220
- if model_var == 'Optimals':
221
  st.header("Optimals")
222
  with st.expander("Info and Filters"):
223
  if st.button("Load/Reset Data", key='reset3'):
@@ -229,19 +227,18 @@ if model_var == 'Optimals':
229
  for key in st.session_state.keys():
230
  del st.session_state[key]
231
 
232
- site_var3 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var3')
233
- slate_type_var3 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'), key='slate_type_var3')
234
- slate_var3 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'), key='slate_var3')
235
 
236
  if slate_type_var3 == 'Regular':
237
- if site_var3 == 'Draftkings':
238
  dk_lineups = init_DK_lineups(slate_var3)
239
- elif site_var3 == 'Fanduel':
240
  fd_lineups = init_FD_lineups(slate_var3)
241
  elif slate_type_var3 == 'Showdown':
242
- if site_var3 == 'Draftkings':
243
  dk_lineups = init_DK_lineups(slate_var3)
244
- elif site_var3 == 'Fanduel':
245
  fd_lineups = init_FD_lineups(slate_var3)
246
  lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1)
247
 
@@ -250,7 +247,7 @@ if model_var == 'Optimals':
250
  elif slate_type_var3 == 'Showdown':
251
  raw_baselines = sd_roo_data
252
 
253
- if site_var3 == 'Draftkings':
254
  if slate_type_var3 == 'Regular':
255
  ROO_slice = raw_baselines[raw_baselines['Site'] == 'Draftkings']
256
  player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
@@ -267,7 +264,7 @@ if model_var == 'Optimals':
267
  elif player_var1 == 'Full Slate':
268
  player_var2 = raw_baselines.Player.values.tolist()
269
 
270
- elif site_var3 == 'Fanduel':
271
  raw_baselines = hold_display
272
  if slate_type_var3 == 'Regular':
273
  ROO_slice = raw_baselines[raw_baselines['Site'] == 'Fanduel']
@@ -286,10 +283,10 @@ if model_var == 'Optimals':
286
 
287
  if st.button("Prepare data export", key='data_export'):
288
  data_export = st.session_state.working_seed.copy()
289
- # if site_var3 == 'Draftkings':
290
  # for col_idx in range(6):
291
  # data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
292
- # elif site_var3 == 'Fanduel':
293
  # for col_idx in range(6):
294
  # data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
295
  st.download_button(
@@ -299,7 +296,7 @@ if model_var == 'Optimals':
299
  mime='text/csv',
300
  )
301
 
302
- if site_var3 == 'Draftkings':
303
  if 'working_seed' in st.session_state:
304
  st.session_state.working_seed = st.session_state.working_seed
305
  if player_var1 == 'Specific Players':
@@ -316,7 +313,7 @@ if model_var == 'Optimals':
316
  st.session_state.working_seed = dk_lineups.copy()
317
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
318
 
319
- elif site_var3 == 'Fanduel':
320
  if 'working_seed' in st.session_state:
321
  st.session_state.working_seed = st.session_state.working_seed
322
  if player_var1 == 'Specific Players':
@@ -334,10 +331,10 @@ if model_var == 'Optimals':
334
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
335
 
336
  export_file = st.session_state.data_export_display.copy()
337
- # if site_var3 == 'Draftkings':
338
  # for col_idx in range(6):
339
  # export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
340
- # elif site_var3 == 'Fanduel':
341
  # for col_idx in range(6):
342
  # export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
343
 
@@ -345,9 +342,9 @@ if model_var == 'Optimals':
345
  if st.button("Reset Optimals", key='reset3'):
346
  for key in st.session_state.keys():
347
  del st.session_state[key]
348
- if site_var3 == 'Draftkings':
349
  st.session_state.working_seed = dk_lineups.copy()
350
- elif site_var3 == 'Fanduel':
351
  st.session_state.working_seed = fd_lineups.copy()
352
  if 'data_export_display' in st.session_state:
353
  st.dataframe(st.session_state.data_export_display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), height=500, use_container_width = True)
@@ -361,7 +358,7 @@ if model_var == 'Optimals':
361
  with st.container():
362
  if 'working_seed' in st.session_state:
363
  # Create a new dataframe with summary statistics
364
- if site_var3 == 'Draftkings':
365
  summary_df = pd.DataFrame({
366
  'Metric': ['Min', 'Average', 'Max', 'STDdev'],
367
  'Salary': [
@@ -383,7 +380,7 @@ if model_var == 'Optimals':
383
  np.std(st.session_state.working_seed[:,8])
384
  ]
385
  })
386
- elif site_var3 == 'Fanduel':
387
  summary_df = pd.DataFrame({
388
  'Metric': ['Min', 'Average', 'Max', 'STDdev'],
389
  'Salary': [
@@ -421,9 +418,9 @@ if model_var == 'Optimals':
421
  tab1, tab2 = st.tabs(["Display Frequency", "Seed Frame Frequency"])
422
  with tab1:
423
  if 'data_export_display' in st.session_state:
424
- if site_var3 == 'Draftkings':
425
  player_columns = st.session_state.data_export_display.iloc[:, :6]
426
- elif site_var3 == 'Fanduel':
427
  player_columns = st.session_state.data_export_display.iloc[:, :6]
428
 
429
  # Flatten the DataFrame and count unique values
@@ -457,9 +454,9 @@ if model_var == 'Optimals':
457
  )
458
  with tab2:
459
  if 'working_seed' in st.session_state:
460
- if site_var3 == 'Draftkings':
461
  player_columns = st.session_state.working_seed[:, :6]
462
- elif site_var3 == 'Fanduel':
463
  player_columns = st.session_state.working_seed[:, :6]
464
 
465
  # Flatten the DataFrame and count unique values
 
124
  with st.container():
125
  col1, col2 = st.columns([3, 3])
126
  with col1:
127
+ view_var = st.selectbox("Select view", ["Simple", "Advanced"])
128
  with col2:
129
+ site_var = st.selectbox("What site do you want to view?", ('Draftkings', 'Fanduel'))
130
 
131
+ tab1, tab2, tab3 = st.tabs(["Scoring Percentages", "Player ROO", "Optimals"])
132
+
133
+ with tab1:
134
  st.header("Scoring Percentages")
135
  with st.expander("Info and Filters"):
136
+ col1, col2, col3 = st.columns([3, 3, 3])
137
  with col1:
138
  if st.button("Load/Reset Data", key='reset1'):
139
  st.cache_data.clear()
 
144
  for key in st.session_state.keys():
145
  del st.session_state[key]
146
  with col2:
147
+ slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate', 'All Games'))
148
  with col3:
149
+ own_var1 = st.radio("How would you like to display team ownership?", ('Sum', 'Average'))
 
 
150
  st.title("Scoring Percentages")
151
  if view_var == "Simple":
152
  scoring_percentages = scoring_percentages[['Names', 'Avg Score', '8+ runs', 'Win Percentage']]
 
154
  elif view_var == "Advanced":
155
  st.dataframe(scoring_percentages.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(game_format, precision=2), height=750, use_container_width = True, hide_index=True)
156
 
157
+ with tab2:
158
  st.header("Player ROO")
159
  with st.expander("Info and Filters"):
160
+ col1, col2, col3, col4 = st.columns([3, 3, 3, 3])
161
  with col1:
162
  if st.button("Load/Reset Data", key='reset2'):
163
  st.cache_data.clear()
 
168
  for key in st.session_state.keys():
169
  del st.session_state[key]
170
  with col2:
171
+ slate_type_var2 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'))
172
  with col3:
173
+ slate_var2 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'))
174
  with col4:
175
+ pos_var2 = st.radio("Which position group would you like to view?", ('All', 'Pitchers', 'Hitters'))
 
 
176
 
177
  if slate_type_var2 == 'Regular':
178
  player_roo_raw = roo_data.copy()
179
+ if site_var == 'Draftkings':
180
  player_roo_raw['Site'] = 'Draftkings'
181
 
182
  if pos_var2 == 'All':
 
185
  player_roo_raw = player_roo_raw[player_roo_raw['Position'] == 'SP']
186
  elif pos_var2 == 'Hitters':
187
  player_roo_raw = player_roo_raw[player_roo_raw['Position'] != 'SP']
188
+ elif site_var == 'Fanduel':
189
  player_roo_raw['Site'] = 'Fanduel'
190
 
191
  if pos_var2 == 'All':
 
204
 
205
  elif slate_type_var2 == 'Showdown':
206
  player_roo_raw = sd_roo_data.copy()
207
+ if site_var == 'Draftkings':
208
  player_roo_raw['Site'] = 'Draftkings'
209
+ elif site_var == 'Fanduel':
210
  player_roo_raw['Site'] = 'Fanduel'
211
  st.session_state['player_roo'] = player_roo_raw.drop(columns=['site', 'slate', 'version', 'timestamp'])
212
  if view_var == "Simple":
 
215
  elif view_var == "Advanced":
216
  st.dataframe(st.session_state['player_roo'].style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(player_roo_format, precision=2), height=750, use_container_width = True, hide_index=True)
217
 
218
+ with tab3:
219
  st.header("Optimals")
220
  with st.expander("Info and Filters"):
221
  if st.button("Load/Reset Data", key='reset3'):
 
227
  for key in st.session_state.keys():
228
  del st.session_state[key]
229
 
230
+ slate_type_var3 = st.radio("Which slate type are you loading?", ('Regular', 'Showdown'))
231
+ slate_var3 = st.radio("Which slate data are you loading?", ('Main', 'Secondary', 'Auxiliary'))
 
232
 
233
  if slate_type_var3 == 'Regular':
234
+ if site_var == 'Draftkings':
235
  dk_lineups = init_DK_lineups(slate_var3)
236
+ elif site_var == 'Fanduel':
237
  fd_lineups = init_FD_lineups(slate_var3)
238
  elif slate_type_var3 == 'Showdown':
239
+ if site_var == 'Draftkings':
240
  dk_lineups = init_DK_lineups(slate_var3)
241
+ elif site_var == 'Fanduel':
242
  fd_lineups = init_FD_lineups(slate_var3)
243
  lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=1000, value=150, step=1)
244
 
 
247
  elif slate_type_var3 == 'Showdown':
248
  raw_baselines = sd_roo_data
249
 
250
+ if site_var == 'Draftkings':
251
  if slate_type_var3 == 'Regular':
252
  ROO_slice = raw_baselines[raw_baselines['Site'] == 'Draftkings']
253
  player_salaries = dict(zip(ROO_slice['Player'], ROO_slice['Salary']))
 
264
  elif player_var1 == 'Full Slate':
265
  player_var2 = raw_baselines.Player.values.tolist()
266
 
267
+ elif site_var == 'Fanduel':
268
  raw_baselines = hold_display
269
  if slate_type_var3 == 'Regular':
270
  ROO_slice = raw_baselines[raw_baselines['Site'] == 'Fanduel']
 
283
 
284
  if st.button("Prepare data export", key='data_export'):
285
  data_export = st.session_state.working_seed.copy()
286
+ # if site_var == 'Draftkings':
287
  # for col_idx in range(6):
288
  # data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
289
+ # elif site_var == 'Fanduel':
290
  # for col_idx in range(6):
291
  # data_export[:, col_idx] = np.array([id_dict.get(player, player) for player in data_export[:, col_idx]])
292
  st.download_button(
 
296
  mime='text/csv',
297
  )
298
 
299
+ if site_var == 'Draftkings':
300
  if 'working_seed' in st.session_state:
301
  st.session_state.working_seed = st.session_state.working_seed
302
  if player_var1 == 'Specific Players':
 
313
  st.session_state.working_seed = dk_lineups.copy()
314
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
315
 
316
+ elif site_var == 'Fanduel':
317
  if 'working_seed' in st.session_state:
318
  st.session_state.working_seed = st.session_state.working_seed
319
  if player_var1 == 'Specific Players':
 
331
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
332
 
333
  export_file = st.session_state.data_export_display.copy()
334
+ # if site_var == 'Draftkings':
335
  # for col_idx in range(6):
336
  # export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
337
+ # elif site_var == 'Fanduel':
338
  # for col_idx in range(6):
339
  # export_file.iloc[:, col_idx] = export_file.iloc[:, col_idx].map(id_dict)
340
 
 
342
  if st.button("Reset Optimals", key='reset3'):
343
  for key in st.session_state.keys():
344
  del st.session_state[key]
345
+ if site_var == 'Draftkings':
346
  st.session_state.working_seed = dk_lineups.copy()
347
+ elif site_var == 'Fanduel':
348
  st.session_state.working_seed = fd_lineups.copy()
349
  if 'data_export_display' in st.session_state:
350
  st.dataframe(st.session_state.data_export_display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), height=500, use_container_width = True)
 
358
  with st.container():
359
  if 'working_seed' in st.session_state:
360
  # Create a new dataframe with summary statistics
361
+ if site_var == 'Draftkings':
362
  summary_df = pd.DataFrame({
363
  'Metric': ['Min', 'Average', 'Max', 'STDdev'],
364
  'Salary': [
 
380
  np.std(st.session_state.working_seed[:,8])
381
  ]
382
  })
383
+ elif site_var == 'Fanduel':
384
  summary_df = pd.DataFrame({
385
  'Metric': ['Min', 'Average', 'Max', 'STDdev'],
386
  'Salary': [
 
418
  tab1, tab2 = st.tabs(["Display Frequency", "Seed Frame Frequency"])
419
  with tab1:
420
  if 'data_export_display' in st.session_state:
421
+ if site_var == 'Draftkings':
422
  player_columns = st.session_state.data_export_display.iloc[:, :6]
423
+ elif site_var == 'Fanduel':
424
  player_columns = st.session_state.data_export_display.iloc[:, :6]
425
 
426
  # Flatten the DataFrame and count unique values
 
454
  )
455
  with tab2:
456
  if 'working_seed' in st.session_state:
457
+ if site_var == 'Draftkings':
458
  player_columns = st.session_state.working_seed[:, :6]
459
+ elif site_var == 'Fanduel':
460
  player_columns = st.session_state.working_seed[:, :6]
461
 
462
  # Flatten the DataFrame and count unique values