Spaces:
Runtime error
Runtime error
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])
|