James McCool commited on
Commit
2b28c7d
·
1 Parent(s): cc728bf

Enhance UI/UX with custom Streamlit tab styling and reorganize Data Export tab layout

Browse files
Files changed (1) hide show
  1. app.py +99 -70
app.py CHANGED
@@ -21,6 +21,37 @@ freq_format = {'Exposure': '{:.2%}', 'Proj Own': '{:.2%}', 'Edge': '{:.2%}'}
21
  dk_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
22
  fd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  @st.cache_data(ttl = 599)
25
  def init_DK_seed_frames(sport, split):
26
  if sport == 'NFL':
@@ -251,14 +282,13 @@ except:
251
 
252
  tab1, tab2 = st.tabs(['Contest Sims', 'Data Export'])
253
  with tab2:
254
- col1, col2 = st.columns([1, 7])
255
- with col1:
256
  if st.button("Load/Reset Data", key='reset1'):
257
- st.cache_data.clear()
258
- for key in st.session_state.keys():
259
- del st.session_state[key]
260
- dk_raw, fd_raw = init_baselines('NFL')
261
-
262
  sport_var1 = st.radio("What sport are you working with?", ('NBA', 'NFL'), key='sport_var1')
263
  slate_var1 = st.radio("Which data are you loading?", ('Showdown', 'Secondary Showdown', 'Auxiliary Showdown'), key='slate_var1')
264
  sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
@@ -348,70 +378,69 @@ with tab2:
348
  file_name='NFL_SD_optimals_export.csv',
349
  mime='text/csv',
350
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
351
 
352
- with col2:
353
- if st.button("Load Data", key='load_data'):
354
- if site_var1 == 'Draftkings':
355
- if 'working_seed' in st.session_state:
356
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], team_var2)]
357
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
358
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
359
- elif 'working_seed' not in st.session_state:
360
- if slate_var1 == 'Showdown':
361
- st.session_state.working_seed = init_DK_seed_frames(sport_var1, sharp_split_var)
362
- if sport_var1 == 'NFL':
363
- export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
364
- elif sport_var1 == 'NBA':
365
- export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
366
- elif slate_var1 == 'Secondary Showdown':
367
- st.session_state.working_seed = init_DK_secondary_seed_frames(sport_var1, sharp_split_var)
368
- if sport_var1 == 'NFL':
369
- export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
370
- elif sport_var1 == 'NBA':
371
- export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
372
- elif slate_var1 == 'Auxiliary Showdown':
373
- st.session_state.working_seed = init_DK_auxiliary_seed_frames(sport_var1, sharp_split_var)
374
- if sport_var1 == 'NFL':
375
- export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
376
- elif sport_var1 == 'NBA':
377
- export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
378
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], team_var2)]
379
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
380
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
381
-
382
- elif site_var1 == 'Fanduel':
383
- if 'working_seed' in st.session_state:
384
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 8], team_var2)]
385
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
386
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
387
- elif 'working_seed' not in st.session_state:
388
- if slate_var1 == 'Showdown':
389
- st.session_state.working_seed = init_FD_seed_frames(sport_var1, sharp_split_var)
390
- if sport_var1 == 'NFL':
391
- export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
392
- elif sport_var1 == 'NBA':
393
- export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
394
- elif slate_var1 == 'Secondary Showdown':
395
- st.session_state.working_seed = init_FD_secondary_seed_frames(sport_var1, sharp_split_var)
396
- if sport_var1 == 'NFL':
397
- export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
398
- elif sport_var1 == 'NBA':
399
- export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
400
- elif slate_var1 == 'Auxiliary Showdown':
401
- st.session_state.working_seed = init_FD_auxiliary_seed_frames(sport_var1, sharp_split_var)
402
- if sport_var1 == 'NFL':
403
- export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
404
- elif sport_var1 == 'NBA':
405
- export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
406
- raw_baselines = fd_raw
407
- column_names = fd_columns
408
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 8], team_var2)]
409
- st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
410
- st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
411
-
412
- with st.container():
413
- if 'data_export_display' in st.session_state:
414
- st.dataframe(st.session_state.data_export_display.style.format(freq_format, precision=2), use_container_width = True)
415
 
416
  with tab1:
417
  col1, col2 = st.columns([1, 7])
 
21
  dk_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
22
  fd_columns = ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'salary', 'proj', 'Team', 'Team_count', 'Secondary', 'Secondary_count', 'Own']
23
 
24
+ st.markdown("""
25
+ <style>
26
+ /* Tab styling */
27
+ .stTabs [data-baseweb="tab-list"] {
28
+ gap: 8px;
29
+ padding: 4px;
30
+ }
31
+
32
+ .stTabs [data-baseweb="tab"] {
33
+ height: 50px;
34
+ white-space: pre-wrap;
35
+ background-color: #FFD700;
36
+ color: white;
37
+ border-radius: 10px;
38
+ gap: 1px;
39
+ padding: 10px 20px;
40
+ font-weight: bold;
41
+ transition: all 0.3s ease;
42
+ }
43
+
44
+ .stTabs [aria-selected="true"] {
45
+ background-color: #DAA520;
46
+ color: white;
47
+ }
48
+
49
+ .stTabs [data-baseweb="tab"]:hover {
50
+ background-color: #DAA520;
51
+ cursor: pointer;
52
+ }
53
+ </style>""", unsafe_allow_html=True)
54
+
55
  @st.cache_data(ttl = 599)
56
  def init_DK_seed_frames(sport, split):
57
  if sport == 'NFL':
 
282
 
283
  tab1, tab2 = st.tabs(['Contest Sims', 'Data Export'])
284
  with tab2:
285
+ with st.expander("Info and Filters"):
 
286
  if st.button("Load/Reset Data", key='reset1'):
287
+ st.cache_data.clear()
288
+ for key in st.session_state.keys():
289
+ del st.session_state[key]
290
+ dk_raw, fd_raw = init_baselines('NFL')
291
+
292
  sport_var1 = st.radio("What sport are you working with?", ('NBA', 'NFL'), key='sport_var1')
293
  slate_var1 = st.radio("Which data are you loading?", ('Showdown', 'Secondary Showdown', 'Auxiliary Showdown'), key='slate_var1')
294
  sharp_split_var = st.number_input("How many lineups do you want?", value=10000, max_value=500000, min_value=10000, step=10000)
 
378
  file_name='NFL_SD_optimals_export.csv',
379
  mime='text/csv',
380
  )
381
+
382
+ if st.button("Load Data", key='load_data'):
383
+ if site_var1 == 'Draftkings':
384
+ if 'working_seed' in st.session_state:
385
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], team_var2)]
386
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
387
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
388
+ elif 'working_seed' not in st.session_state:
389
+ if slate_var1 == 'Showdown':
390
+ st.session_state.working_seed = init_DK_seed_frames(sport_var1, sharp_split_var)
391
+ if sport_var1 == 'NFL':
392
+ export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
393
+ elif sport_var1 == 'NBA':
394
+ export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
395
+ elif slate_var1 == 'Secondary Showdown':
396
+ st.session_state.working_seed = init_DK_secondary_seed_frames(sport_var1, sharp_split_var)
397
+ if sport_var1 == 'NFL':
398
+ export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
399
+ elif sport_var1 == 'NBA':
400
+ export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
401
+ elif slate_var1 == 'Auxiliary Showdown':
402
+ st.session_state.working_seed = init_DK_auxiliary_seed_frames(sport_var1, sharp_split_var)
403
+ if sport_var1 == 'NFL':
404
+ export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
405
+ elif sport_var1 == 'NBA':
406
+ export_id_dict = dict(zip(dk_raw['Player'], dk_raw['player_id']))
407
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], team_var2)]
408
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 10], stack_var2)]
409
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
410
 
411
+ elif site_var1 == 'Fanduel':
412
+ if 'working_seed' in st.session_state:
413
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 8], team_var2)]
414
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
415
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
416
+ elif 'working_seed' not in st.session_state:
417
+ if slate_var1 == 'Showdown':
418
+ st.session_state.working_seed = init_FD_seed_frames(sport_var1, sharp_split_var)
419
+ if sport_var1 == 'NFL':
420
+ export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
421
+ elif sport_var1 == 'NBA':
422
+ export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
423
+ elif slate_var1 == 'Secondary Showdown':
424
+ st.session_state.working_seed = init_FD_secondary_seed_frames(sport_var1, sharp_split_var)
425
+ if sport_var1 == 'NFL':
426
+ export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
427
+ elif sport_var1 == 'NBA':
428
+ export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
429
+ elif slate_var1 == 'Auxiliary Showdown':
430
+ st.session_state.working_seed = init_FD_auxiliary_seed_frames(sport_var1, sharp_split_var)
431
+ if sport_var1 == 'NFL':
432
+ export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
433
+ elif sport_var1 == 'NBA':
434
+ export_id_dict = dict(zip(fd_raw['Player'], fd_raw['player_id']))
435
+ raw_baselines = fd_raw
436
+ column_names = fd_columns
437
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 8], team_var2)]
438
+ st.session_state.working_seed = st.session_state.working_seed[np.isin(st.session_state.working_seed[:, 9], stack_var2)]
439
+ st.session_state.data_export_display = pd.DataFrame(st.session_state.working_seed[0:1000], columns=column_names)
440
+
441
+ with st.container():
442
+ if 'data_export_display' in st.session_state:
443
+ st.dataframe(st.session_state.data_export_display.style.format(freq_format, precision=2), use_container_width = True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444
 
445
  with tab1:
446
  col1, col2 = st.columns([1, 7])