James McCool commited on
Commit
be18476
·
1 Parent(s): 92d0a1f

Add custom Streamlit tab styling with golden color scheme and hover effects

Browse files
Files changed (1) hide show
  1. app.py +334 -293
app.py CHANGED
@@ -20,6 +20,37 @@ freq_format = {'Exposure': '{:.2%}', 'Proj Own': '{:.2%}', 'Edge': '{:.2%}'}
20
  dk_columns = ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'G', 'FLEX', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
21
  fd_columns = ['C1', 'C2', 'W1', 'W2', 'D1', 'D2', 'FLEX1', 'FLEX2', 'G', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  @st.cache_data(ttl = 600)
24
  def init_DK_seed_frames(sharp_split):
25
 
@@ -129,122 +160,9 @@ dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
129
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
130
 
131
  tab1, tab2 = st.tabs(['Contest Sims', 'Data Export'])
132
- with tab2:
133
- col1, col2 = st.columns([1, 7])
134
- with col1:
135
- if st.button("Load/Reset Data", key='reset1'):
136
- st.cache_data.clear()
137
- for key in st.session_state.keys():
138
- del st.session_state[key]
139
- DK_seed = init_DK_seed_frames(10000)
140
- FD_seed = init_FD_seed_frames(10000)
141
- dk_raw, fd_raw, teams_playing_count = init_baselines()
142
- dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
143
- fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
144
-
145
- slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Other Main Slate'))
146
- site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
147
- sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
148
-
149
- if site_var1 == 'Draftkings':
150
-
151
- team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
152
- if team_var1 == 'Specific Teams':
153
- team_var2 = st.multiselect('Which teams do you want?', options = dk_raw['Team'].unique())
154
- elif team_var1 == 'Full Slate':
155
- team_var2 = dk_raw.Team.values.tolist()
156
-
157
- stack_var1 = st.radio("Do you want a frame with specific stack sizes?", ('Full Slate', 'Specific Stack Sizes'), key='stack_var1')
158
- if stack_var1 == 'Specific Stack Sizes':
159
- stack_var2 = st.multiselect('Which stack sizes do you want?', options = [5, 4, 3, 2, 1, 0])
160
- elif stack_var1 == 'Full Slate':
161
- stack_var2 = [5, 4, 3, 2, 1, 0]
162
-
163
- elif site_var1 == 'Fanduel':
164
-
165
- team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
166
- if team_var1 == 'Specific Teams':
167
- team_var2 = st.multiselect('Which teams do you want?', options = fd_raw['Team'].unique())
168
- elif team_var1 == 'Full Slate':
169
- team_var2 = fd_raw.Team.values.tolist()
170
-
171
- stack_var1 = st.radio("Do you want a frame with specific stack sizes?", ('Full Slate', 'Specific Stack Sizes'), key='stack_var1')
172
- if stack_var1 == 'Specific Stack Sizes':
173
- stack_var2 = st.multiselect('Which stack sizes do you want?', options = [5, 4, 3, 2, 1, 0])
174
- elif stack_var1 == 'Full Slate':
175
- stack_var2 = [5, 4, 3, 2, 1, 0]
176
-
177
-
178
- if st.button("Prepare data export", key='data_export'):
179
- if 'working_seed' in st.session_state:
180
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
181
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
182
- elif 'working_seed' not in st.session_state:
183
- if site_var1 == 'Draftkings':
184
- if slate_var1 == 'Main Slate':
185
- st.session_state.working_seed = init_DK_seed_frames(sharp_split_var)
186
-
187
- raw_baselines = dk_raw
188
- column_names = dk_columns
189
-
190
- elif site_var1 == 'Fanduel':
191
- if slate_var1 == 'Main Slate':
192
- st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
193
-
194
- raw_baselines = fd_raw
195
- column_names = fd_columns
196
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
197
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
198
- data_export = st.session_state.working_seed.copy()
199
- st.download_button(
200
- label="Export optimals set",
201
- data=convert_df(data_export),
202
- file_name='NHL_optimals_export.csv',
203
- mime='text/csv',
204
- )
205
- for key in st.session_state.keys():
206
- del st.session_state[key]
207
-
208
- with col2:
209
- if st.button("Load Data", key='load_data'):
210
- if site_var1 == 'Draftkings':
211
- if 'working_seed' in st.session_state:
212
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
213
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
214
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
215
- elif 'working_seed' not in st.session_state:
216
- if slate_var1 == 'Main Slate':
217
- st.session_state.working_seed = init_DK_seed_frames(sharp_split_var)
218
-
219
- raw_baselines = dk_raw
220
- column_names = dk_columns
221
-
222
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
223
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
224
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
225
-
226
- elif site_var1 == 'Fanduel':
227
- if 'working_seed' in st.session_state:
228
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
229
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
230
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
231
- elif 'working_seed' not in st.session_state:
232
- if slate_var1 == 'Main Slate':
233
- st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
234
-
235
- raw_baselines = fd_raw
236
- column_names = fd_columns
237
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
238
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
239
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
240
-
241
- with st.container():
242
- if 'data_export_display' in st.session_state:
243
- st.dataframe(st.session_state.data_export_display.style.format(freq_format, precision=2), use_container_width = True)
244
 
245
  with tab1:
246
- col1, col2 = st.columns([1, 7])
247
- with col1:
248
  if st.button("Load/Reset Data", key='reset2'):
249
  st.cache_data.clear()
250
  for key in st.session_state.keys():
@@ -279,195 +197,194 @@ with tab1:
279
  elif strength_var1 == 'Very':
280
  sharp_split = 10000
281
 
282
-
283
- with col2:
284
- if st.button("Run Contest Sim"):
285
- if 'working_seed' in st.session_state:
286
- st.session_state.maps_dict = {
287
- 'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
288
- 'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
289
- 'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
290
- 'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
291
- 'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
292
- 'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
293
- }
294
- Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size, teams_playing_count)
295
- Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
296
-
297
- #st.table(Sim_Winner_Frame)
298
-
299
- # Initial setup
300
- Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=column_names + ['Fantasy'])
301
- Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
302
- Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['proj'].astype(str) + Sim_Winner_Frame['salary'].astype(str) + Sim_Winner_Frame['Team'].astype(str) + Sim_Winner_Frame['Secondary'].astype(str)
303
- Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
304
-
305
- # Type Casting
306
- type_cast_dict = {'salary': int, 'proj': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32, 'Own': np.float32}
307
- Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
308
-
309
- # Sorting
310
- st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by=['win_count', 'GPP_Proj'], ascending= [False, False]).copy().drop_duplicates(subset='unique_id').head(100)
311
- st.session_state.Sim_Winner_Frame.drop(columns='unique_id', inplace=True)
312
-
313
- # Data Copying
314
- st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
315
- for col in st.session_state.Sim_Winner_Export.iloc[:, 0:9].columns:
316
- st.session_state.Sim_Winner_Export[col] = st.session_state.Sim_Winner_Export[col].map(dk_id_dict)
317
- st.session_state.Sim_Winner_Export = st.session_state.Sim_Winner_Export.drop_duplicates(subset=['Team', 'Secondary', 'salary', 'unique_id'])
318
-
319
- # Data Copying
320
- st.session_state.Sim_Winner_Display = Sim_Winner_Frame.copy()
321
-
322
- else:
323
- if sim_site_var1 == 'Draftkings':
324
- if sim_slate_var1 == 'Main Slate':
325
- st.session_state.working_seed = init_DK_seed_frames(sharp_split)
326
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
327
  raw_baselines = dk_raw
328
  column_names = dk_columns
329
- elif sim_site_var1 == 'Fanduel':
330
- if sim_slate_var1 == 'Main Slate':
331
- st.session_state.working_seed = init_FD_seed_frames(sharp_split)
332
-
333
  raw_baselines = fd_raw
334
  column_names = fd_columns
335
- st.session_state.maps_dict = {
336
- 'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
337
- 'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
338
- 'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
339
- 'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
340
- 'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
341
- 'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
342
- }
343
- Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size, teams_playing_count)
344
- Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
345
-
346
- #st.table(Sim_Winner_Frame)
347
-
348
- # Initial setup
349
- Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=column_names + ['Fantasy'])
350
- Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
351
- Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['proj'].astype(str) + Sim_Winner_Frame['salary'].astype(str) + Sim_Winner_Frame['Team'].astype(str) + Sim_Winner_Frame['Secondary'].astype(str)
352
- Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
353
-
354
- # Type Casting
355
- type_cast_dict = {'salary': int, 'proj': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32, 'Own': np.float32}
356
- Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
357
-
358
- # Sorting
359
- st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by=['win_count', 'GPP_Proj'], ascending= [False, False]).copy().drop_duplicates(subset='unique_id').head(100)
360
- st.session_state.Sim_Winner_Frame.drop(columns='unique_id', inplace=True)
361
-
362
- # Data Copying
363
- st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
364
- for col in st.session_state.Sim_Winner_Export.iloc[:, 0:9].columns:
365
- st.session_state.Sim_Winner_Export[col] = st.session_state.Sim_Winner_Export[col].map(dk_id_dict)
366
- st.session_state.Sim_Winner_Export = st.session_state.Sim_Winner_Export.drop_duplicates(subset=['Team', 'Secondary', 'salary', 'unique_id'])
367
-
368
- # Data Copying
369
- st.session_state.Sim_Winner_Display = Sim_Winner_Frame.copy()
370
- st.session_state.freq_copy = st.session_state.Sim_Winner_Display
371
-
372
- if sim_site_var1 == 'Draftkings':
373
- freq_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:9].values, return_counts=True)),
374
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
375
- elif sim_site_var1 == 'Fanduel':
376
- freq_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:9].values, return_counts=True)),
377
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
378
- freq_working['Freq'] = freq_working['Freq'].astype(int)
379
- freq_working['Position'] = freq_working['Player'].map(st.session_state.maps_dict['Pos_map'])
380
- freq_working['Salary'] = freq_working['Player'].map(st.session_state.maps_dict['Salary_map'])
381
- freq_working['Proj Own'] = freq_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
382
- freq_working['Exposure'] = freq_working['Freq']/(1000)
383
- freq_working['Edge'] = freq_working['Exposure'] - freq_working['Proj Own']
384
- freq_working['Team'] = freq_working['Player'].map(st.session_state.maps_dict['Team_map'])
385
- st.session_state.player_freq = freq_working.copy()
386
 
387
- if sim_site_var1 == 'Draftkings':
388
- center_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:2].values, return_counts=True)),
389
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
390
- elif sim_site_var1 == 'Fanduel':
391
- center_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:2].values, return_counts=True)),
392
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
393
- center_working['Freq'] = center_working['Freq'].astype(int)
394
- center_working['Position'] = center_working['Player'].map(st.session_state.maps_dict['Pos_map'])
395
- center_working['Salary'] = center_working['Player'].map(st.session_state.maps_dict['Salary_map'])
396
- center_working['Proj Own'] = center_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
397
- center_working['Exposure'] = center_working['Freq']/(1000)
398
- center_working['Edge'] = center_working['Exposure'] - center_working['Proj Own']
399
- center_working['Team'] = center_working['Player'].map(st.session_state.maps_dict['Team_map'])
400
- st.session_state.center_freq = center_working.copy()
401
 
402
- if sim_site_var1 == 'Draftkings':
403
- wing_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,2:5].values, return_counts=True)),
404
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
405
- elif sim_site_var1 == 'Fanduel':
406
- wing_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,2:4].values, return_counts=True)),
407
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
408
- wing_working['Freq'] = wing_working['Freq'].astype(int)
409
- wing_working['Position'] = wing_working['Player'].map(st.session_state.maps_dict['Pos_map'])
410
- wing_working['Salary'] = wing_working['Player'].map(st.session_state.maps_dict['Salary_map'])
411
- wing_working['Proj Own'] = wing_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
412
- wing_working['Exposure'] = wing_working['Freq']/(1000)
413
- wing_working['Edge'] = wing_working['Exposure'] - wing_working['Proj Own']
414
- wing_working['Team'] = wing_working['Player'].map(st.session_state.maps_dict['Team_map'])
415
- st.session_state.wing_freq = wing_working.copy()
416
 
417
- if sim_site_var1 == 'Draftkings':
418
- dmen_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,5:7].values, return_counts=True)),
419
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
420
- elif sim_site_var1 == 'Fanduel':
421
- dmen_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,4:6].values, return_counts=True)),
422
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
423
- dmen_working['Freq'] = dmen_working['Freq'].astype(int)
424
- dmen_working['Position'] = dmen_working['Player'].map(st.session_state.maps_dict['Pos_map'])
425
- dmen_working['Salary'] = dmen_working['Player'].map(st.session_state.maps_dict['Salary_map'])
426
- dmen_working['Proj Own'] = dmen_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
427
- dmen_working['Exposure'] = dmen_working['Freq']/(1000)
428
- dmen_working['Edge'] = dmen_working['Exposure'] - dmen_working['Proj Own']
429
- dmen_working['Team'] = dmen_working['Player'].map(st.session_state.maps_dict['Team_map'])
430
- st.session_state.dmen_freq = dmen_working.copy()
431
 
432
- if sim_site_var1 == 'Draftkings':
433
- flex_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,8:9].values, return_counts=True)),
434
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
435
- elif sim_site_var1 == 'Fanduel':
436
- flex_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,6:8].values, return_counts=True)),
437
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
438
- flex_working['Freq'] = flex_working['Freq'].astype(int)
439
- flex_working['Position'] = flex_working['Player'].map(st.session_state.maps_dict['Pos_map'])
440
- flex_working['Salary'] = flex_working['Player'].map(st.session_state.maps_dict['Salary_map'])
441
- flex_working['Proj Own'] = flex_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
442
- flex_working['Exposure'] = flex_working['Freq']/(1000)
443
- flex_working['Edge'] = flex_working['Exposure'] - flex_working['Proj Own']
444
- flex_working['Team'] = flex_working['Player'].map(st.session_state.maps_dict['Team_map'])
445
- st.session_state.flex_freq = flex_working.copy()
446
 
447
- if sim_site_var1 == 'Draftkings':
448
- goalie_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,7:8].values, return_counts=True)),
449
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
450
- elif sim_site_var1 == 'Fanduel':
451
- goalie_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,8:9].values, return_counts=True)),
452
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
453
- goalie_working['Freq'] = goalie_working['Freq'].astype(int)
454
- goalie_working['Position'] = goalie_working['Player'].map(st.session_state.maps_dict['Pos_map'])
455
- goalie_working['Salary'] = goalie_working['Player'].map(st.session_state.maps_dict['Salary_map'])
456
- goalie_working['Proj Own'] = goalie_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
457
- goalie_working['Exposure'] = goalie_working['Freq']/(1000)
458
- goalie_working['Edge'] = goalie_working['Exposure'] - goalie_working['Proj Own']
459
- goalie_working['Team'] = goalie_working['Player'].map(st.session_state.maps_dict['Team_map'])
460
- st.session_state.goalie_freq = goalie_working.copy()
 
 
 
 
 
 
 
 
 
 
461
 
462
- if sim_site_var1 == 'Draftkings':
463
- team_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,11:12].values, return_counts=True)),
464
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
465
- elif sim_site_var1 == 'Fanduel':
466
- team_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,11:12].values, return_counts=True)),
467
- columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
468
- team_working['Freq'] = team_working['Freq'].astype(int)
469
- team_working['Exposure'] = team_working['Freq']/(1000)
470
- st.session_state.team_freq = team_working.copy()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
471
 
472
  with st.container():
473
  if st.button("Reset Sim", key='reset_sim'):
@@ -697,4 +614,128 @@ with tab1:
697
  file_name='team_freq.csv',
698
  mime='text/csv',
699
  key='team'
700
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  dk_columns = ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'G', 'FLEX', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
21
  fd_columns = ['C1', 'C2', 'W1', 'W2', 'D1', 'D2', 'FLEX1', 'FLEX2', 'G', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
22
 
23
+ st.markdown("""
24
+ <style>
25
+ /* Tab styling */
26
+ .stTabs [data-baseweb="tab-list"] {
27
+ gap: 8px;
28
+ padding: 4px;
29
+ }
30
+
31
+ .stTabs [data-baseweb="tab"] {
32
+ height: 50px;
33
+ white-space: pre-wrap;
34
+ background-color: #FFD700;
35
+ color: white;
36
+ border-radius: 10px;
37
+ gap: 1px;
38
+ padding: 10px 20px;
39
+ font-weight: bold;
40
+ transition: all 0.3s ease;
41
+ }
42
+
43
+ .stTabs [aria-selected="true"] {
44
+ background-color: #DAA520;
45
+ color: white;
46
+ }
47
+
48
+ .stTabs [data-baseweb="tab"]:hover {
49
+ background-color: #DAA520;
50
+ cursor: pointer;
51
+ }
52
+ </style>""", unsafe_allow_html=True)
53
+
54
  @st.cache_data(ttl = 600)
55
  def init_DK_seed_frames(sharp_split):
56
 
 
160
  fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
161
 
162
  tab1, tab2 = st.tabs(['Contest Sims', 'Data Export'])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
 
164
  with tab1:
165
+ with st.expander("Info and Filters"):
 
166
  if st.button("Load/Reset Data", key='reset2'):
167
  st.cache_data.clear()
168
  for key in st.session_state.keys():
 
197
  elif strength_var1 == 'Very':
198
  sharp_split = 10000
199
 
200
+ if st.button("Run Contest Sim"):
201
+ if 'working_seed' in st.session_state:
202
+ st.session_state.maps_dict = {
203
+ 'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
204
+ 'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
205
+ 'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
206
+ 'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
207
+ 'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
208
+ 'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
209
+ }
210
+ Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size, teams_playing_count)
211
+ Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
212
+
213
+ #st.table(Sim_Winner_Frame)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
 
215
+ # Initial setup
216
+ Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=column_names + ['Fantasy'])
217
+ Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
218
+ Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['proj'].astype(str) + Sim_Winner_Frame['salary'].astype(str) + Sim_Winner_Frame['Team'].astype(str) + Sim_Winner_Frame['Secondary'].astype(str)
219
+ Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
220
+
221
+ # Type Casting
222
+ type_cast_dict = {'salary': int, 'proj': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32, 'Own': np.float32}
223
+ Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
224
+
225
+ # Sorting
226
+ st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by=['win_count', 'GPP_Proj'], ascending= [False, False]).copy().drop_duplicates(subset='unique_id').head(100)
227
+ st.session_state.Sim_Winner_Frame.drop(columns='unique_id', inplace=True)
228
+
229
+ # Data Copying
230
+ st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
231
+ for col in st.session_state.Sim_Winner_Export.iloc[:, 0:9].columns:
232
+ st.session_state.Sim_Winner_Export[col] = st.session_state.Sim_Winner_Export[col].map(dk_id_dict)
233
+ st.session_state.Sim_Winner_Export = st.session_state.Sim_Winner_Export.drop_duplicates(subset=['Team', 'Secondary', 'salary', 'unique_id'])
234
+
235
+ # Data Copying
236
+ st.session_state.Sim_Winner_Display = Sim_Winner_Frame.copy()
237
+
238
+ else:
239
+ if sim_site_var1 == 'Draftkings':
240
+ if sim_slate_var1 == 'Main Slate':
241
+ st.session_state.working_seed = init_DK_seed_frames(sharp_split)
242
+ dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
243
  raw_baselines = dk_raw
244
  column_names = dk_columns
245
+ elif sim_site_var1 == 'Fanduel':
246
+ if sim_slate_var1 == 'Main Slate':
247
+ st.session_state.working_seed = init_FD_seed_frames(sharp_split)
248
+ fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
249
  raw_baselines = fd_raw
250
  column_names = fd_columns
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
 
252
+ st.session_state.maps_dict = {
253
+ 'Projection_map':dict(zip(raw_baselines.Player,raw_baselines.Median)),
254
+ 'Salary_map':dict(zip(raw_baselines.Player,raw_baselines.Salary)),
255
+ 'Pos_map':dict(zip(raw_baselines.Player,raw_baselines.Position)),
256
+ 'Own_map':dict(zip(raw_baselines.Player,raw_baselines['Own'])),
257
+ 'Team_map':dict(zip(raw_baselines.Player,raw_baselines.Team)),
258
+ 'STDev_map':dict(zip(raw_baselines.Player,raw_baselines.STDev))
259
+ }
260
+ Sim_Winners = sim_contest(1000, st.session_state.working_seed, st.session_state.maps_dict, Contest_Size, teams_playing_count)
261
+ Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners))
 
 
 
 
262
 
263
+ #st.table(Sim_Winner_Frame)
264
+
265
+ # Initial setup
266
+ Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=column_names + ['Fantasy'])
267
+ Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
268
+ Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['proj'].astype(str) + Sim_Winner_Frame['salary'].astype(str) + Sim_Winner_Frame['Team'].astype(str) + Sim_Winner_Frame['Secondary'].astype(str)
269
+ Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
 
 
 
 
 
 
 
270
 
271
+ # Type Casting
272
+ type_cast_dict = {'salary': int, 'proj': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32, 'Own': np.float32}
273
+ Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
 
 
 
 
 
 
 
 
 
 
 
274
 
275
+ # Sorting
276
+ st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by=['win_count', 'GPP_Proj'], ascending= [False, False]).copy().drop_duplicates(subset='unique_id').head(100)
277
+ st.session_state.Sim_Winner_Frame.drop(columns='unique_id', inplace=True)
 
 
 
 
 
 
 
 
 
 
 
278
 
279
+ # Data Copying
280
+ st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
281
+ for col in st.session_state.Sim_Winner_Export.iloc[:, 0:9].columns:
282
+ st.session_state.Sim_Winner_Export[col] = st.session_state.Sim_Winner_Export[col].map(dk_id_dict)
283
+ st.session_state.Sim_Winner_Export = st.session_state.Sim_Winner_Export.drop_duplicates(subset=['Team', 'Secondary', 'salary', 'unique_id'])
284
+
285
+ # Data Copying
286
+ st.session_state.Sim_Winner_Display = Sim_Winner_Frame.copy()
287
+ st.session_state.freq_copy = st.session_state.Sim_Winner_Display
288
+
289
+ if sim_site_var1 == 'Draftkings':
290
+ freq_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:9].values, return_counts=True)),
291
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
292
+ elif sim_site_var1 == 'Fanduel':
293
+ freq_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:9].values, return_counts=True)),
294
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
295
+ freq_working['Freq'] = freq_working['Freq'].astype(int)
296
+ freq_working['Position'] = freq_working['Player'].map(st.session_state.maps_dict['Pos_map'])
297
+ freq_working['Salary'] = freq_working['Player'].map(st.session_state.maps_dict['Salary_map'])
298
+ freq_working['Proj Own'] = freq_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
299
+ freq_working['Exposure'] = freq_working['Freq']/(1000)
300
+ freq_working['Edge'] = freq_working['Exposure'] - freq_working['Proj Own']
301
+ freq_working['Team'] = freq_working['Player'].map(st.session_state.maps_dict['Team_map'])
302
+ st.session_state.player_freq = freq_working.copy()
303
 
304
+ if sim_site_var1 == 'Draftkings':
305
+ center_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:2].values, return_counts=True)),
306
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
307
+ elif sim_site_var1 == 'Fanduel':
308
+ center_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,0:2].values, return_counts=True)),
309
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
310
+ center_working['Freq'] = center_working['Freq'].astype(int)
311
+ center_working['Position'] = center_working['Player'].map(st.session_state.maps_dict['Pos_map'])
312
+ center_working['Salary'] = center_working['Player'].map(st.session_state.maps_dict['Salary_map'])
313
+ center_working['Proj Own'] = center_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
314
+ center_working['Exposure'] = center_working['Freq']/(1000)
315
+ center_working['Edge'] = center_working['Exposure'] - center_working['Proj Own']
316
+ center_working['Team'] = center_working['Player'].map(st.session_state.maps_dict['Team_map'])
317
+ st.session_state.center_freq = center_working.copy()
318
+
319
+ if sim_site_var1 == 'Draftkings':
320
+ wing_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,2:5].values, return_counts=True)),
321
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
322
+ elif sim_site_var1 == 'Fanduel':
323
+ wing_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,2:4].values, return_counts=True)),
324
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
325
+ wing_working['Freq'] = wing_working['Freq'].astype(int)
326
+ wing_working['Position'] = wing_working['Player'].map(st.session_state.maps_dict['Pos_map'])
327
+ wing_working['Salary'] = wing_working['Player'].map(st.session_state.maps_dict['Salary_map'])
328
+ wing_working['Proj Own'] = wing_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
329
+ wing_working['Exposure'] = wing_working['Freq']/(1000)
330
+ wing_working['Edge'] = wing_working['Exposure'] - wing_working['Proj Own']
331
+ wing_working['Team'] = wing_working['Player'].map(st.session_state.maps_dict['Team_map'])
332
+ st.session_state.wing_freq = wing_working.copy()
333
+
334
+ if sim_site_var1 == 'Draftkings':
335
+ dmen_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,5:7].values, return_counts=True)),
336
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
337
+ elif sim_site_var1 == 'Fanduel':
338
+ dmen_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,4:6].values, return_counts=True)),
339
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
340
+ dmen_working['Freq'] = dmen_working['Freq'].astype(int)
341
+ dmen_working['Position'] = dmen_working['Player'].map(st.session_state.maps_dict['Pos_map'])
342
+ dmen_working['Salary'] = dmen_working['Player'].map(st.session_state.maps_dict['Salary_map'])
343
+ dmen_working['Proj Own'] = dmen_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
344
+ dmen_working['Exposure'] = dmen_working['Freq']/(1000)
345
+ dmen_working['Edge'] = dmen_working['Exposure'] - dmen_working['Proj Own']
346
+ dmen_working['Team'] = dmen_working['Player'].map(st.session_state.maps_dict['Team_map'])
347
+ st.session_state.dmen_freq = dmen_working.copy()
348
+
349
+ if sim_site_var1 == 'Draftkings':
350
+ flex_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,8:9].values, return_counts=True)),
351
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
352
+ elif sim_site_var1 == 'Fanduel':
353
+ flex_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,6:8].values, return_counts=True)),
354
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
355
+ flex_working['Freq'] = flex_working['Freq'].astype(int)
356
+ flex_working['Position'] = flex_working['Player'].map(st.session_state.maps_dict['Pos_map'])
357
+ flex_working['Salary'] = flex_working['Player'].map(st.session_state.maps_dict['Salary_map'])
358
+ flex_working['Proj Own'] = flex_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
359
+ flex_working['Exposure'] = flex_working['Freq']/(1000)
360
+ flex_working['Edge'] = flex_working['Exposure'] - flex_working['Proj Own']
361
+ flex_working['Team'] = flex_working['Player'].map(st.session_state.maps_dict['Team_map'])
362
+ st.session_state.flex_freq = flex_working.copy()
363
+
364
+ if sim_site_var1 == 'Draftkings':
365
+ goalie_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,7:8].values, return_counts=True)),
366
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
367
+ elif sim_site_var1 == 'Fanduel':
368
+ goalie_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,8:9].values, return_counts=True)),
369
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
370
+ goalie_working['Freq'] = goalie_working['Freq'].astype(int)
371
+ goalie_working['Position'] = goalie_working['Player'].map(st.session_state.maps_dict['Pos_map'])
372
+ goalie_working['Salary'] = goalie_working['Player'].map(st.session_state.maps_dict['Salary_map'])
373
+ goalie_working['Proj Own'] = goalie_working['Player'].map(st.session_state.maps_dict['Own_map']) / 100
374
+ goalie_working['Exposure'] = goalie_working['Freq']/(1000)
375
+ goalie_working['Edge'] = goalie_working['Exposure'] - goalie_working['Proj Own']
376
+ goalie_working['Team'] = goalie_working['Player'].map(st.session_state.maps_dict['Team_map'])
377
+ st.session_state.goalie_freq = goalie_working.copy()
378
+
379
+ if sim_site_var1 == 'Draftkings':
380
+ team_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,11:12].values, return_counts=True)),
381
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
382
+ elif sim_site_var1 == 'Fanduel':
383
+ team_working = pd.DataFrame(np.column_stack(np.unique(st.session_state.freq_copy.iloc[:,11:12].values, return_counts=True)),
384
+ columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
385
+ team_working['Freq'] = team_working['Freq'].astype(int)
386
+ team_working['Exposure'] = team_working['Freq']/(1000)
387
+ st.session_state.team_freq = team_working.copy()
388
 
389
  with st.container():
390
  if st.button("Reset Sim", key='reset_sim'):
 
614
  file_name='team_freq.csv',
615
  mime='text/csv',
616
  key='team'
617
+ )
618
+
619
+ with tab2:
620
+ with st.expander("Info and Filters"):
621
+ if st.button("Load/Reset Data", key='reset1'):
622
+ st.cache_data.clear()
623
+ for key in st.session_state.keys():
624
+ del st.session_state[key]
625
+ DK_seed = init_DK_seed_frames(10000)
626
+ FD_seed = init_FD_seed_frames(10000)
627
+ dk_raw, fd_raw, teams_playing_count = init_baselines()
628
+ dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
629
+ fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
630
+
631
+ slate_var1 = st.radio("Which data are you loading?", ('Main Slate', 'Other Main Slate'))
632
+ site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
633
+ sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
634
+ lineup_num_var = st.number_input("How many lineups do you want to display?", min_value=1, max_value=500, value=10, step=1)
635
+
636
+ if site_var1 == 'Draftkings':
637
+
638
+ team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
639
+ if team_var1 == 'Specific Teams':
640
+ team_var2 = st.multiselect('Which teams do you want?', options = dk_raw['Team'].unique())
641
+ elif team_var1 == 'Full Slate':
642
+ team_var2 = dk_raw.Team.values.tolist()
643
+
644
+ stack_var1 = st.radio("Do you want a frame with specific stack sizes?", ('Full Slate', 'Specific Stack Sizes'), key='stack_var1')
645
+ if stack_var1 == 'Specific Stack Sizes':
646
+ stack_var2 = st.multiselect('Which stack sizes do you want?', options = [5, 4, 3, 2, 1, 0])
647
+ elif stack_var1 == 'Full Slate':
648
+ stack_var2 = [5, 4, 3, 2, 1, 0]
649
+
650
+ raw_baselines = dk_raw
651
+ column_names = dk_columns
652
+
653
+ elif site_var1 == 'Fanduel':
654
+
655
+ team_var1 = st.radio("Do you want a frame with specific teams?", ('Full Slate', 'Specific Teams'), key='team_var1')
656
+ if team_var1 == 'Specific Teams':
657
+ team_var2 = st.multiselect('Which teams do you want?', options = fd_raw['Team'].unique())
658
+ elif team_var1 == 'Full Slate':
659
+ team_var2 = fd_raw.Team.values.tolist()
660
+
661
+ stack_var1 = st.radio("Do you want a frame with specific stack sizes?", ('Full Slate', 'Specific Stack Sizes'), key='stack_var1')
662
+ if stack_var1 == 'Specific Stack Sizes':
663
+ stack_var2 = st.multiselect('Which stack sizes do you want?', options = [5, 4, 3, 2, 1, 0])
664
+ elif stack_var1 == 'Full Slate':
665
+ stack_var2 = [5, 4, 3, 2, 1, 0]
666
+
667
+ raw_baselines = fd_raw
668
+ column_names = fd_columns
669
+
670
+
671
+ if st.button("Prepare data export", key='data_export'):
672
+ if 'working_seed' in st.session_state:
673
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
674
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
675
+ st.session_state.data_export_display = st.session_state.working_seed[0:lineup_num_var]
676
+ elif 'working_seed' not in st.session_state:
677
+ if site_var1 == 'Draftkings':
678
+ if slate_var1 == 'Main Slate':
679
+ st.session_state.working_seed = init_DK_seed_frames(sharp_split_var)
680
+
681
+ dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
682
+ raw_baselines = dk_raw
683
+ column_names = dk_columns
684
+
685
+ elif site_var1 == 'Fanduel':
686
+ if slate_var1 == 'Main Slate':
687
+ st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
688
+
689
+ fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
690
+ raw_baselines = fd_raw
691
+ column_names = fd_columns
692
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
693
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
694
+ st.session_state.data_export_display = st.session_state.working_seed[0:lineup_num_var]
695
+ data_export = st.session_state.working_seed.copy()
696
+ st.download_button(
697
+ label="Export optimals set",
698
+ data=convert_df(data_export),
699
+ file_name='NHL_optimals_export.csv',
700
+ mime='text/csv',
701
+ )
702
+ for key in st.session_state.keys():
703
+ del st.session_state[key]
704
+
705
+ if st.button("Load Data", key='load_data'):
706
+ if site_var1 == 'Draftkings':
707
+ if 'working_seed' in st.session_state:
708
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
709
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
710
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
711
+ elif 'working_seed' not in st.session_state:
712
+ if slate_var1 == 'Main Slate':
713
+ st.session_state.working_seed = init_DK_seed_frames(sharp_split_var)
714
+ dk_id_dict = dict(zip(dk_raw.Player, dk_raw.player_id))
715
+
716
+ raw_baselines = dk_raw
717
+ column_names = dk_columns
718
+
719
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
720
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
721
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
722
+
723
+ elif site_var1 == 'Fanduel':
724
+ if 'working_seed' in st.session_state:
725
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
726
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
727
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
728
+ elif 'working_seed' not in st.session_state:
729
+ if slate_var1 == 'Main Slate':
730
+ st.session_state.working_seed = init_FD_seed_frames(sharp_split_var)
731
+ fd_id_dict = dict(zip(fd_raw.Player, fd_raw.player_id))
732
+
733
+ raw_baselines = fd_raw
734
+ column_names = fd_columns
735
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 11], team_var2)]
736
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 12], stack_var2)]
737
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:lineup_num_var], columns=column_names)
738
+
739
+ with st.container():
740
+ if 'data_export_display' in st.session_state:
741
+ st.dataframe(st.session_state.data_export_display.style.format(freq_format, precision=2), use_container_width = True)