James McCool commited on
Commit
ef6c0f1
·
1 Parent(s): f47294a

Refactor load_overall_stats function in app.py: remove backlog data retrieval and associated UI elements to streamline data handling and improve performance

Browse files
Files changed (1) hide show
  1. app.py +3 -124
app.py CHANGED
@@ -144,17 +144,8 @@ def load_overall_stats():
144
  roo_raw = raw_display.sort_values(by='Median', ascending=False)
145
 
146
  timestamp = raw_display['timestamp'].values[0]
147
-
148
- collection = db["Range_Of_Outcomes_Backlog"]
149
- cursor = collection.find()
150
-
151
- raw_display = pd.DataFrame(list(cursor))
152
- raw_display = raw_display[['Player', 'Minutes Proj', 'Position', 'Team', 'Opp', 'Salary', 'Floor', 'Median', 'Ceiling', 'Top_finish', 'Top_5_finish', 'Top_10_finish', '20+%', '4x%', '5x%', '6x%', 'GPP%',
153
- 'Own', 'Small_Own', 'Large_Own', 'Cash_Own', 'CPT_Own', 'LevX', 'ValX', 'site', 'version', 'slate', 'timestamp', 'Date']]
154
- roo_backlog = raw_display.sort_values(by='Date', ascending=False)
155
- roo_backlog = roo_backlog[roo_backlog['slate'] == 'Main Slate']
156
 
157
- return dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp, roo_backlog
158
 
159
  @st.cache_data(ttl = 60)
160
  def init_DK_lineups():
@@ -204,7 +195,7 @@ def convert_df(array):
204
  array = pd.DataFrame(array, columns=column_names)
205
  return array.to_csv().encode('utf-8')
206
 
207
- dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp, roo_backlog = load_overall_stats()
208
  salary_dict = dict(zip(roo_raw.Player, roo_raw.Salary))
209
 
210
  try:
@@ -217,101 +208,6 @@ t_stamp = f"Last Update: " + str(timestamp) + f" CST"
217
 
218
  tab1, tab2 = st.tabs(['Range of Outcomes', 'Optimals'])
219
 
220
- with st.sidebar:
221
- st.header("Quick Builder")
222
- st.info("This is a quick hand building helper to give you some basic info about player combos and lineup feasibility")
223
- sidebar_site = st.selectbox("What site are you running?", ('Draftkings', 'Fanduel'), key='sidebar_site')
224
- sidebar_slate = st.selectbox("What slate are you running?", ('Main Slate', 'Secondary Slate'), key='sidebar_slate')
225
-
226
- if sidebar_site == 'Draftkings':
227
- roo_sample = roo_raw[roo_raw['slate'] == str(sidebar_slate)]
228
- roo_sample = roo_sample[roo_sample['site'] == 'Draftkings']
229
- roo_sample = roo_sample.sort_values(by='Own', ascending=False)
230
- selected_pg = []
231
- selected_sg = []
232
- selected_sf = []
233
- selected_pf = []
234
- selected_c = []
235
- selected_g = []
236
- selected_f = []
237
- selected_flex = []
238
- elif sidebar_site == 'Fanduel':
239
- roo_sample = roo_raw[roo_raw['slate'] == str(sidebar_slate)]
240
- roo_sample = roo_sample[roo_sample['site'] == 'Fanduel']
241
- roo_sample = roo_sample.sort_values(by='Own', ascending=False)
242
- selected_pg1 = []
243
- selected_pg2 = []
244
- selected_sg1 = []
245
- selected_sg2 = []
246
- selected_sf1 = []
247
- selected_sf2 = []
248
- selected_pf1 = []
249
- selected_pf2 = []
250
- selected_c1 = []
251
-
252
- # Get unique players by position from dk_roo_raw
253
- pgs = roo_sample[roo_sample['Position'].str.contains('PG')]['Player'].unique()
254
- sgs = roo_sample[roo_sample['Position'].str.contains('SG')]['Player'].unique()
255
- sfs = roo_sample[roo_sample['Position'].str.contains('SF')]['Player'].unique()
256
- pfs = roo_sample[roo_sample['Position'].str.contains('PF')]['Player'].unique()
257
- centers = roo_sample[roo_sample['Position'].str.contains('C')]['Player'].unique()
258
- guards = roo_sample[roo_sample['Position'].str.contains('G')]['Player'].unique()
259
- forwards = roo_sample[roo_sample['Position'].str.contains('F')]['Player'].unique()
260
- flex = roo_sample['Player'].unique()
261
-
262
- if sidebar_site == 'Draftkings':
263
- selected_pgs = st.multiselect('Select PG:', list(pgs), default=None, placeholder='Select PG', label_visibility='collapsed', key='pg1')
264
- selected_sgs = st.multiselect('Select SG:', list(sgs), default=None, placeholder='Select SG', label_visibility='collapsed', key='sg1')
265
- selected_sfs = st.multiselect('Select SF:', list(sfs), default=None, placeholder='Select SF', label_visibility='collapsed', key='sf1')
266
- selected_pfs = st.multiselect('Select PF:', list(pfs), default=None, placeholder='Select PF', label_visibility='collapsed', key='pf1')
267
- selected_cs = st.multiselect('Select C:', list(centers), default=None, placeholder='Select C', label_visibility='collapsed', key='c1')
268
- selected_g = st.multiselect('Select G:', list(guards), default=None, placeholder='Select G', label_visibility='collapsed', key='g')
269
- selected_f = st.multiselect('Select F:', list(forwards), default=None, placeholder='Select F', label_visibility='collapsed', key='f')
270
- selected_flex = st.multiselect('Select Flex:', list(flex), default=None, placeholder='Select Flex', label_visibility='collapsed', key='flex')
271
-
272
- # Combine all selected players
273
- all_selected = selected_pgs + selected_sgs + selected_sfs + selected_pfs + selected_cs + selected_g + selected_f + selected_flex
274
-
275
- elif sidebar_site == 'Fanduel':
276
- selected_pg1 = st.multiselect('Select PG1:', list(pgs), default=None, placeholder='Select PG1', label_visibility='collapsed', key='pg1')
277
- selected_pg2 = st.multiselect('Select PG2:', list(pgs), default=None, placeholder='Select PG2', label_visibility='collapsed', key='pg2')
278
- selected_sg1 = st.multiselect('Select SG1:', list(sgs), default=None, placeholder='Select SG1', label_visibility='collapsed', key='sg1')
279
- selected_sg2 = st.multiselect('Select SG2:', list(sgs), default=None, placeholder='Select SG2', label_visibility='collapsed', key='sg2')
280
- selected_sf1 = st.multiselect('Select SF1:', list(sfs), default=None, placeholder='Select SF1', label_visibility='collapsed', key='sf1')
281
- selected_sf2 = st.multiselect('Select SF2:', list(sfs), default=None, placeholder='Select SF2', label_visibility='collapsed', key='sf2')
282
- selected_pf1 = st.multiselect('Select PF1:', list(pfs), default=None, placeholder='Select PF1', label_visibility='collapsed', key='pf1')
283
- selected_pf2 = st.multiselect('Select PF2:', list(pfs), default=None, placeholder='Select PF2', label_visibility='collapsed', key='pf2')
284
- selected_c1 = st.multiselect('Select C1:', list(centers), default=None, placeholder='Select C1', label_visibility='collapsed', key='c1')
285
-
286
- # Combine all selected players
287
- all_selected = selected_pg1 + selected_pg2 + selected_sg1 + selected_sg2 + selected_sf1 + selected_sf2 + selected_pf1 + selected_pf2 + selected_c1
288
-
289
- if all_selected:
290
- # Get stats for selected players
291
- selected_stats = roo_sample[roo_sample['Player'].isin(all_selected)]
292
-
293
- # Calculate sums
294
- salary_sum = selected_stats['Salary'].sum()
295
- median_sum = selected_stats['Median'].sum()
296
- own_sum = selected_stats['Own'].sum()
297
- levx_sum = selected_stats['LevX'].sum()
298
-
299
- # Display sums
300
- st.write('---')
301
- if sidebar_site == 'Draftkings':
302
- if salary_sum > 50000:
303
- st.warning(f'Total Salary: ${salary_sum:.2f} exceeds limit of $50,000')
304
- else:
305
- st.write(f'Total Salary: ${salary_sum:.2f}')
306
- elif sidebar_site == 'Fanduel':
307
- if salary_sum > 60000:
308
- st.warning(f'Total Salary: ${salary_sum:.2f} exceeds limit of $60,000')
309
- else:
310
- st.write(f'Total Salary: ${salary_sum:.2f}')
311
- st.write(f'Total Median: {median_sum:.2f}')
312
- st.write(f'Total Ownership: {own_sum:.2f}%')
313
- st.write(f'Total LevX: {levx_sum:.2f}')
314
-
315
  with tab1:
316
 
317
  with st.expander("Info and Filters"):
@@ -325,7 +221,7 @@ with tab1:
325
  with col2:
326
  if st.button("Load/Reset Data", key='reset1'):
327
  st.cache_data.clear()
328
- dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp, roo_backlog = load_overall_stats()
329
  id_dict = dict(zip(roo_raw.Player, roo_raw.player_ID))
330
  dk_lineups = init_DK_lineups()
331
  fd_lineups = init_FD_lineups()
@@ -341,10 +237,8 @@ with tab1:
341
  # Process site selection
342
  if site_var2 == 'Draftkings':
343
  site_baselines = roo_raw[roo_raw['site'] == 'Draftkings']
344
- site_backlog = roo_backlog[roo_backlog['site'] == 'Draftkings']
345
  elif site_var2 == 'Fanduel':
346
  site_baselines = roo_raw[roo_raw['site'] == 'Fanduel']
347
- site_backlog = roo_backlog[roo_backlog['site'] == 'Fanduel']
348
  with col3:
349
  slate_split = st.radio("Slate Type", ('Main Slate', 'Secondary', 'Backlog'), key='slate_split')
350
 
@@ -352,21 +246,6 @@ with tab1:
352
  raw_baselines = site_baselines[site_baselines['slate'] == 'Main Slate']
353
  elif slate_split == 'Secondary':
354
  raw_baselines = site_baselines[site_baselines['slate'] == 'Secondary Slate']
355
- elif slate_split == 'Backlog':
356
- raw_baselines = site_backlog
357
- # Third row - backlog options
358
- col1, col2 = st.columns(2)
359
- with col1:
360
- view_all = st.checkbox("View all dates?", key='view_all')
361
- with col2:
362
- if not view_all:
363
- date_var2 = st.date_input("Select date", key='date_var2')
364
-
365
- if view_all:
366
- raw_baselines = raw_baselines.sort_values(by=['Median', 'Date'], ascending=[False, False])
367
- else:
368
- raw_baselines = raw_baselines[raw_baselines['Date'] == date_var2.strftime('%m-%d-%Y')]
369
- raw_baselines = raw_baselines.sort_values(by='Median', ascending=False)
370
 
371
  with col4:
372
  split_var2 = st.radio("Slate Range", ('Full Slate Run', 'Specific Games'), key='split_var2')
 
144
  roo_raw = raw_display.sort_values(by='Median', ascending=False)
145
 
146
  timestamp = raw_display['timestamp'].values[0]
 
 
 
 
 
 
 
 
 
147
 
148
+ return dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp
149
 
150
  @st.cache_data(ttl = 60)
151
  def init_DK_lineups():
 
195
  array = pd.DataFrame(array, columns=column_names)
196
  return array.to_csv().encode('utf-8')
197
 
198
+ dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp = load_overall_stats()
199
  salary_dict = dict(zip(roo_raw.Player, roo_raw.Salary))
200
 
201
  try:
 
208
 
209
  tab1, tab2 = st.tabs(['Range of Outcomes', 'Optimals'])
210
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  with tab1:
212
 
213
  with st.expander("Info and Filters"):
 
221
  with col2:
222
  if st.button("Load/Reset Data", key='reset1'):
223
  st.cache_data.clear()
224
+ dk_raw, fd_raw, dk_raw_sec, fd_raw_sec, roo_raw, timestamp = load_overall_stats()
225
  id_dict = dict(zip(roo_raw.Player, roo_raw.player_ID))
226
  dk_lineups = init_DK_lineups()
227
  fd_lineups = init_FD_lineups()
 
237
  # Process site selection
238
  if site_var2 == 'Draftkings':
239
  site_baselines = roo_raw[roo_raw['site'] == 'Draftkings']
 
240
  elif site_var2 == 'Fanduel':
241
  site_baselines = roo_raw[roo_raw['site'] == 'Fanduel']
 
242
  with col3:
243
  slate_split = st.radio("Slate Type", ('Main Slate', 'Secondary', 'Backlog'), key='slate_split')
244
 
 
246
  raw_baselines = site_baselines[site_baselines['slate'] == 'Main Slate']
247
  elif slate_split == 'Secondary':
248
  raw_baselines = site_baselines[site_baselines['slate'] == 'Secondary Slate']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
 
250
  with col4:
251
  split_var2 = st.radio("Slate Range", ('Full Slate Run', 'Specific Games'), key='split_var2')