James McCool commited on
Commit
72880a2
·
1 Parent(s): 560df46

Refactor seed frame initialization in app.py to accept a 'sharp_split' parameter, allowing for dynamic data retrieval limits. Update related functions and session state handling to improve user input flexibility for DraftKings and FanDuel simulations.

Browse files
Files changed (1) hide show
  1. app.py +80 -56
app.py CHANGED
@@ -55,52 +55,56 @@ 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()
62
 
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()
74
 
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()
86
 
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()
98
 
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().limit(sharp_split)
62
 
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().limit(sharp_split)
75
 
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().limit(sharp_split)
88
 
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().limit(sharp_split)
101
 
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, max_value=500000, min_value=10000, step=10000)
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)