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
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 |
-
|
255 |
-
with col1:
|
256 |
if st.button("Load/Reset Data", key='reset1'):
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
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 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
if
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
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])
|