James McCool commited on
Commit
283dca5
·
1 Parent(s): 4360759

Refactor seed frame initialization and contest simulation to accept 'sharp_split' parameter, allowing dynamic lineup size input. Update logic to conditionally load seed frames based on user-selected slate and site, enhancing flexibility and user experience.

Browse files
Files changed (1) hide show
  1. app.py +76 -52
app.py CHANGED
@@ -55,7 +55,7 @@ dk_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'sal
55
  fd_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
56
 
57
  @st.cache_data(ttl = 600)
58
- def init_DK_seed_frames():
59
 
60
  collection = db["DK_NFL_seed_frame"]
61
  cursor = collection.find()
@@ -63,11 +63,12 @@ def init_DK_seed_frames():
63
  raw_display = pd.DataFrame(list(cursor))
64
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
65
  DK_seed = raw_display.to_numpy()
 
66
 
67
- return DK_seed
68
 
69
  @st.cache_data(ttl = 600)
70
- def init_DK_Secondary_seed_frames():
71
 
72
  collection = db["DK_NFL_Secondary_seed_frame"]
73
  cursor = collection.find()
@@ -75,11 +76,12 @@ def init_DK_Secondary_seed_frames():
75
  raw_display = pd.DataFrame(list(cursor))
76
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
77
  DK_seed = raw_display.to_numpy()
 
78
 
79
- return DK_seed
80
 
81
  @st.cache_data(ttl = 599)
82
- def init_FD_seed_frames():
83
 
84
  collection = db["FD_NFL_seed_frame"]
85
  cursor = collection.find()
@@ -87,11 +89,12 @@ def init_FD_seed_frames():
87
  raw_display = pd.DataFrame(list(cursor))
88
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
89
  FD_seed = raw_display.to_numpy()
 
90
 
91
- return FD_seed
92
 
93
  @st.cache_data(ttl = 599)
94
- def init_FD_Secondary_seed_frames():
95
 
96
  collection = db["FD_NFL_Secondary_seed_frame"]
97
  cursor = collection.find()
@@ -99,8 +102,9 @@ def init_FD_Secondary_seed_frames():
99
  raw_display = pd.DataFrame(list(cursor))
100
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
101
  FD_seed = raw_display.to_numpy()
 
102
 
103
- return FD_seed
104
 
105
  @st.cache_data(ttl = 599)
106
  def init_baselines():
@@ -146,11 +150,10 @@ def calculate_FD_value_frequencies(np_array):
146
  return combined_array
147
 
148
  @st.cache_data
149
- def sim_contest(Sim_size, seed_frame, maps_dict, sharp_split, Contest_Size):
150
  SimVar = 1
151
  Sim_Winners = []
152
- fp_array = seed_frame[:sharp_split, :]
153
-
154
  # Pre-vectorize functions
155
  vec_projection_map = np.vectorize(maps_dict['Projection_map'].__getitem__)
156
  vec_stdev_map = np.vectorize(maps_dict['STDev_map'].__getitem__)
@@ -189,22 +192,17 @@ with tab2:
189
  st.cache_data.clear()
190
  for key in st.session_state.keys():
191
  del st.session_state[key]
192
- DK_seed = init_DK_seed_frames()
193
- FD_seed = init_FD_seed_frames()
194
  dk_raw, fd_raw = init_baselines()
195
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
196
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
197
 
198
  slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate'))
199
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
 
 
200
  if site_var1 == 'Draftkings':
201
- if slate_var1 == 'Main Slate':
202
- DK_seed = init_DK_seed_frames()
203
- elif slate_var1 == 'Secondary Slate':
204
- DK_seed = init_DK_Secondary_seed_frames()
205
-
206
- raw_baselines = dk_raw
207
- column_names = dk_columns
208
 
209
  team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
210
  if team_var1 == 'Specific Teams':
@@ -219,13 +217,6 @@ with tab2:
219
  stack_var2 = [5, 4, 3, 2, 1, 0]
220
 
221
  elif site_var1 == 'Fanduel':
222
- if slate_var1 == 'Main Slate':
223
- FD_seed = init_FD_seed_frames()
224
- elif slate_var1 == 'Secondary Slate':
225
- FD_seed = init_FD_Secondary_seed_frames()
226
-
227
- raw_baselines = fd_raw
228
- column_names = fd_columns
229
 
230
  team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
231
  if team_var1 == 'Specific Teams':
@@ -245,7 +236,27 @@ with tab2:
245
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
246
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
247
  elif 'working_seed' not in st.session_state:
248
- st.session_state.working_seed = DK_seed.copy()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
250
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
251
  data_export = st.session_state.working_seed.copy()
@@ -266,7 +277,16 @@ with tab2:
266
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
267
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
268
  elif 'working_seed' not in st.session_state:
269
- st.session_state.working_seed = DK_seed.copy()
 
 
 
 
 
 
 
 
 
270
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
271
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
272
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
@@ -277,7 +297,15 @@ with tab2:
277
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
278
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
279
  elif 'working_seed' not in st.session_state:
280
- st.session_state.working_seed = FD_seed.copy()
 
 
 
 
 
 
 
 
281
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
282
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
283
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
@@ -293,30 +321,14 @@ with tab1:
293
  st.cache_data.clear()
294
  for key in st.session_state.keys():
295
  del st.session_state[key]
296
- DK_seed = init_DK_seed_frames()
297
- FD_seed = init_FD_seed_frames()
298
  dk_raw, fd_raw = init_baselines()
299
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
300
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
301
 
302
  sim_slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate'), key='sim_slate_var1')
303
  sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
304
- if sim_site_var1 == 'Draftkings':
305
- if sim_slate_var1 == 'Main Slate':
306
- DK_seed = init_DK_seed_frames()
307
- elif sim_slate_var1 == 'Secondary Slate':
308
- DK_seed = init_DK_Secondary_seed_frames()
309
-
310
- raw_baselines = dk_raw
311
- column_names = dk_columns
312
- elif sim_site_var1 == 'Fanduel':
313
- if sim_slate_var1 == 'Main Slate':
314
- FD_seed = init_FD_seed_frames()
315
- elif sim_slate_var1 == 'Secondary Slate':
316
- FD_seed = init_FD_Secondary_seed_frames()
317
-
318
- raw_baselines = fd_raw
319
- column_names = fd_columns
320
 
321
  contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
322
  if contest_var1 == 'Small':
@@ -351,7 +363,7 @@ with tab1:
351
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
352
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
353
  }
354
- Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, sharp_split, Contest_Size)
355
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
356
 
357
  #st.table(Sim_Winner_Frame)
@@ -378,9 +390,21 @@ with tab1:
378
 
379
  else:
380
  if sim_site_var1 == 'Draftkings':
381
- st.session_state.working_seed = DK_seed.copy()
 
 
 
 
 
 
382
  elif sim_site_var1 == 'Fanduel':
383
- st.session_state.working_seed = FD_seed.copy()
 
 
 
 
 
 
384
  st.session_state.maps_dict = {
385
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
386
  'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
@@ -389,7 +413,7 @@ with tab1:
389
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
390
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
391
  }
392
- Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, sharp_split, Contest_Size)
393
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
394
 
395
  #st.table(Sim_Winner_Frame)
 
55
  fd_columns = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
56
 
57
  @st.cache_data(ttl = 600)
58
+ def init_DK_seed_frames(sharp_split):
59
 
60
  collection = db["DK_NFL_seed_frame"]
61
  cursor = collection.find()
 
63
  raw_display = pd.DataFrame(list(cursor))
64
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
65
  DK_seed = raw_display.to_numpy()
66
+ fp_array = DK_seed[:sharp_split, :]
67
 
68
+ return fp_array
69
 
70
  @st.cache_data(ttl = 600)
71
+ def init_DK_Secondary_seed_frames(sharp_split):
72
 
73
  collection = db["DK_NFL_Secondary_seed_frame"]
74
  cursor = collection.find()
 
76
  raw_display = pd.DataFrame(list(cursor))
77
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
78
  DK_seed = raw_display.to_numpy()
79
+ fp_array = DK_seed[:sharp_split, :]
80
 
81
+ return fp_array
82
 
83
  @st.cache_data(ttl = 599)
84
+ def init_FD_seed_frames(sharp_split):
85
 
86
  collection = db["FD_NFL_seed_frame"]
87
  cursor = collection.find()
 
89
  raw_display = pd.DataFrame(list(cursor))
90
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
91
  FD_seed = raw_display.to_numpy()
92
+ fp_array = FD_seed[:sharp_split, :]
93
 
94
+ return fp_array
95
 
96
  @st.cache_data(ttl = 599)
97
+ def init_FD_Secondary_seed_frames(sharp_split):
98
 
99
  collection = db["FD_NFL_Secondary_seed_frame"]
100
  cursor = collection.find()
 
102
  raw_display = pd.DataFrame(list(cursor))
103
  raw_display = raw_display[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']]
104
  FD_seed = raw_display.to_numpy()
105
+ fp_array = FD_seed[:sharp_split, :]
106
 
107
+ return fp_array
108
 
109
  @st.cache_data(ttl = 599)
110
  def init_baselines():
 
150
  return combined_array
151
 
152
  @st.cache_data
153
+ def sim_contest(Sim_size, seed_frame, maps_dict, Contest_Size):
154
  SimVar = 1
155
  Sim_Winners = []
156
+ fp_array = seed_frame.copy()
 
157
  # Pre-vectorize functions
158
  vec_projection_map = np.vectorize(maps_dict['Projection_map'].__getitem__)
159
  vec_stdev_map = np.vectorize(maps_dict['STDev_map'].__getitem__)
 
192
  st.cache_data.clear()
193
  for key in st.session_state.keys():
194
  del st.session_state[key]
195
+ DK_seed = init_DK_seed_frames(10000)
196
+ FD_seed = init_FD_seed_frames(10000)
197
  dk_raw, fd_raw = init_baselines()
198
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
199
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
200
 
201
  slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate'))
202
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
203
+ sharp_split_var = st.number_input("How many lineups do you want?", value=10000, placeholder="Type a number under 500,000...")
204
+
205
  if site_var1 == 'Draftkings':
 
 
 
 
 
 
 
206
 
207
  team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
208
  if team_var1 == 'Specific Teams':
 
217
  stack_var2 = [5, 4, 3, 2, 1, 0]
218
 
219
  elif site_var1 == 'Fanduel':
 
 
 
 
 
 
 
220
 
221
  team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
222
  if team_var1 == 'Specific Teams':
 
236
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
237
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
238
  elif 'working_seed' not in st.session_state:
239
+ if site_var1 == 'Draftkings':
240
+ if slate_var1 == 'Main Slate':
241
+ st.session_state.working_seed = init_DK_seed_frames(sharp_split_var)
242
+ dk_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
243
+ elif slate_var1 == 'Secondary Slate':
244
+ st.session_state.working_seed = init_DK_Secondary_seed_frames(sharp_split_var)
245
+ dk_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
246
+
247
+ raw_baselines = dk_raw
248
+ column_names = dk_columns
249
+
250
+ elif site_var1 == 'Fanduel':
251
+ if slate_var1 == 'Main Slate':
252
+ st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
253
+ fd_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
254
+ elif slate_var1 == 'Secondary Slate':
255
+ st.session_state.working_seed = init_FD_Secondary_seed_frames(sharp_split_var)
256
+ fd_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
257
+
258
+ raw_baselines = fd_raw
259
+ column_names = fd_columns
260
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
261
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
262
  data_export = st.session_state.working_seed.copy()
 
277
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
278
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
279
  elif 'working_seed' not in st.session_state:
280
+ if slate_var1 == 'Main Slate':
281
+ st.session_state.working_seed = init_DK_seed_frames(sharp_split_var)
282
+ dk_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
283
+ elif slate_var1 == 'Secondary Slate':
284
+ st.session_state.working_seed = init_DK_Secondary_seed_frames(sharp_split_var)
285
+ dk_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
286
+
287
+ raw_baselines = dk_raw
288
+ column_names = dk_columns
289
+
290
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
291
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
292
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
 
297
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
298
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
299
  elif 'working_seed' not in st.session_state:
300
+ if slate_var1 == 'Main Slate':
301
+ st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
302
+ fd_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
303
+ elif slate_var1 == 'Secondary Slate':
304
+ st.session_state.working_seed = init_FD_Secondary_seed_frames(sharp_split_var)
305
+ fd_id_dict = dict(zip(st.session_state.working_seed.Player, st.session_state.working_seed.player_id))
306
+
307
+ raw_baselines = fd_raw
308
+ column_names = fd_columns
309
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
310
  st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
311
  st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
 
321
  st.cache_data.clear()
322
  for key in st.session_state.keys():
323
  del st.session_state[key]
324
+ DK_seed = init_DK_seed_frames(10000)
325
+ FD_seed = init_FD_seed_frames(10000)
326
  dk_raw, fd_raw = init_baselines()
327
  dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
328
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
329
 
330
  sim_slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Secondary Slate'), key='sim_slate_var1')
331
  sim_site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='sim_site_var1')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
 
333
  contest_var1 = st.selectbox("What contest size are you simulating?", ('Small', 'Medium', 'Large', 'Custom'))
334
  if contest_var1 == 'Small':
 
363
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
364
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
365
  }
366
+ Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
367
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
368
 
369
  #st.table(Sim_Winner_Frame)
 
390
 
391
  else:
392
  if sim_site_var1 == 'Draftkings':
393
+ if sim_slate_var1 == 'Main Slate':
394
+ st.session_state.working_seed = init_DK_seed_frames(sharp_split)
395
+ elif sim_slate_var1 == 'Secondary Slate':
396
+ st.session_state.working_seed = init_DK_Secondary_seed_frames(sharp_split)
397
+
398
+ raw_baselines = dk_raw
399
+ column_names = dk_columns
400
  elif sim_site_var1 == 'Fanduel':
401
+ if sim_slate_var1 == 'Main Slate':
402
+ st.session_state.working_seed = init_FD_seed_frames(sharp_split)
403
+ elif sim_slate_var1 == 'Secondary Slate':
404
+ st.session_state.working_seed = init_FD_Secondary_seed_frames(sharp_split)
405
+
406
+ raw_baselines = fd_raw
407
+ column_names = fd_columns
408
  st.session_state.maps_dict = {
409
  'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
410
  'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
 
413
  'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
414
  'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
415
  }
416
+ Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size)
417
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
418
 
419
  #st.table(Sim_Winner_Frame)