Spaces:
Running
Running
James McCool
commited on
Commit
·
32f717b
1
Parent(s):
e2120eb
Refactor app.py: Improve tab layout and statistics display for simulation results
Browse filesAdjusted the indentation and structure of the tab and container sections to enhance readability. Updated the summary statistics display for winning frames, maintaining the existing gradient styling and formatting for key metrics.
app.py
CHANGED
@@ -500,80 +500,80 @@ with tab1:
|
|
500 |
team_working['Exposure'] = team_working['Freq']/(1000)
|
501 |
st.session_state.team_freq = team_working.copy()
|
502 |
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
|
578 |
with tab2:
|
579 |
if 'Sim_Winner_Display' in st.session_state:
|
|
|
500 |
team_working['Exposure'] = team_working['Freq']/(1000)
|
501 |
st.session_state.team_freq = team_working.copy()
|
502 |
|
503 |
+
with st.container():
|
504 |
+
if st.button("Reset Sim", key='reset_sim'):
|
505 |
+
for key in st.session_state.keys():
|
506 |
+
del st.session_state[key]
|
507 |
+
if 'player_freq' in st.session_state:
|
508 |
+
player_split_var2 = st.radio("Are you wanting to isolate any lineups with specific players?", ('Full Players', 'Specific Players'), key='player_split_var2')
|
509 |
+
if player_split_var2 == 'Specific Players':
|
510 |
+
find_var2 = st.multiselect('Which players must be included in the lineups?', options = st.session_state.player_freq['Player'].unique())
|
511 |
+
elif player_split_var2 == 'Full Players':
|
512 |
+
find_var2 = st.session_state.player_freq.Player.values.tolist()
|
513 |
+
|
514 |
+
if player_split_var2 == 'Specific Players':
|
515 |
+
st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame[np.equal.outer(st.session_state.Sim_Winner_Frame.to_numpy(), find_var2).any(axis=1).all(axis=1)]
|
516 |
+
if player_split_var2 == 'Full Players':
|
517 |
+
st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame
|
518 |
+
if 'Sim_Winner_Display' in st.session_state:
|
519 |
+
st.dataframe(st.session_state.Sim_Winner_Display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
|
520 |
+
if 'Sim_Winner_Export' in st.session_state:
|
521 |
+
st.download_button(
|
522 |
+
label="Export Full Frame",
|
523 |
+
data=st.session_state.Sim_Winner_Export.to_csv().encode('utf-8'),
|
524 |
+
file_name='MLB_consim_export.csv',
|
525 |
+
mime='text/csv',
|
526 |
+
)
|
527 |
+
tab1, tab2 = st.tabs(['Winning Frame Statistics', 'Flex Exposure Statistics'])
|
528 |
+
|
529 |
+
with tab1:
|
530 |
+
if 'Sim_Winner_Display' in st.session_state:
|
531 |
+
# Create a new dataframe with summary statistics
|
532 |
+
summary_df = pd.DataFrame({
|
533 |
+
'Metric': ['Min', 'Average', 'Max', 'STDdev'],
|
534 |
+
'Salary': [
|
535 |
+
st.session_state.Sim_Winner_Display['salary'].min(),
|
536 |
+
st.session_state.Sim_Winner_Display['salary'].mean(),
|
537 |
+
st.session_state.Sim_Winner_Display['salary'].max(),
|
538 |
+
st.session_state.Sim_Winner_Display['salary'].std()
|
539 |
+
],
|
540 |
+
'Proj': [
|
541 |
+
st.session_state.Sim_Winner_Display['proj'].min(),
|
542 |
+
st.session_state.Sim_Winner_Display['proj'].mean(),
|
543 |
+
st.session_state.Sim_Winner_Display['proj'].max(),
|
544 |
+
st.session_state.Sim_Winner_Display['proj'].std()
|
545 |
+
],
|
546 |
+
'Own': [
|
547 |
+
st.session_state.Sim_Winner_Display['Own'].min(),
|
548 |
+
st.session_state.Sim_Winner_Display['Own'].mean(),
|
549 |
+
st.session_state.Sim_Winner_Display['Own'].max(),
|
550 |
+
st.session_state.Sim_Winner_Display['Own'].std()
|
551 |
+
],
|
552 |
+
'Fantasy': [
|
553 |
+
st.session_state.Sim_Winner_Display['Fantasy'].min(),
|
554 |
+
st.session_state.Sim_Winner_Display['Fantasy'].mean(),
|
555 |
+
st.session_state.Sim_Winner_Display['Fantasy'].max(),
|
556 |
+
st.session_state.Sim_Winner_Display['Fantasy'].std()
|
557 |
+
],
|
558 |
+
'GPP_Proj': [
|
559 |
+
st.session_state.Sim_Winner_Display['GPP_Proj'].min(),
|
560 |
+
st.session_state.Sim_Winner_Display['GPP_Proj'].mean(),
|
561 |
+
st.session_state.Sim_Winner_Display['GPP_Proj'].max(),
|
562 |
+
st.session_state.Sim_Winner_Display['GPP_Proj'].std()
|
563 |
+
]
|
564 |
+
})
|
565 |
+
|
566 |
+
# Set the index of the summary dataframe as the "Metric" column
|
567 |
+
summary_df = summary_df.set_index('Metric')
|
568 |
+
|
569 |
+
# Display the summary dataframe
|
570 |
+
st.subheader("Winning Frame Statistics")
|
571 |
+
st.dataframe(summary_df.style.format({
|
572 |
+
'Salary': '{:.2f}',
|
573 |
+
'Proj': '{:.2f}',
|
574 |
+
'Fantasy': '{:.2f}',
|
575 |
+
'GPP_Proj': '{:.2f}'
|
576 |
+
}).background_gradient(cmap='RdYlGn', axis=0, subset=['Salary', 'Proj', 'Own', 'Fantasy', 'GPP_Proj']), use_container_width=True)
|
577 |
|
578 |
with tab2:
|
579 |
if 'Sim_Winner_Display' in st.session_state:
|