James McCool commited on
Commit
8f424e5
·
1 Parent(s): e31f6cd

Add general exposures tab and functionality in app.py

Browse files

- Introduced a new tab for displaying general exposures in the app interface, enhancing user experience by providing additional insights.
- Implemented the create_general_exposures function to calculate and display overall and percentile-based statistics for specified columns.
- Updated session state management to handle the new general exposures data, ensuring seamless integration with existing features.

Files changed (2) hide show
  1. app.py +20 -1
  2. global_func/create_general_exposures.py +37 -0
app.py CHANGED
@@ -13,6 +13,7 @@ from global_func.find_name_mismatches import find_name_mismatches
13
  from global_func.create_player_exposures import create_player_exposures
14
  from global_func.create_stack_exposures import create_stack_exposures
15
  from global_func.create_stack_size_exposures import create_stack_size_exposures
 
16
 
17
  player_exposure_format = {'Exposure Overall': '{:.2%}', 'Exposure Top 1%': '{:.2%}', 'Exposure Top 5%': '{:.2%}', 'Exposure Top 10%': '{:.2%}', 'Exposure Top 20%': '{:.2%}'}
18
 
@@ -237,7 +238,7 @@ with tab2:
237
  )
238
 
239
  with st.container():
240
- tab1, tab2, tab3 = st.tabs(['Player Used Info', 'Stack Used Info', 'Stack Size Info'])
241
  with tab1:
242
 
243
  if entry_parse_var == 'All':
@@ -286,3 +287,21 @@ with tab2:
286
  style.background_gradient(cmap='RdYlGn').
287
  format(formatter='{:.2%}', subset=st.session_state['stack_size_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
288
  hide_index=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  from global_func.create_player_exposures import create_player_exposures
14
  from global_func.create_stack_exposures import create_stack_exposures
15
  from global_func.create_stack_size_exposures import create_stack_size_exposures
16
+ from global_func.create_general_exposures import create_general_exposures
17
 
18
  player_exposure_format = {'Exposure Overall': '{:.2%}', 'Exposure Top 1%': '{:.2%}', 'Exposure Top 5%': '{:.2%}', 'Exposure Top 10%': '{:.2%}', 'Exposure Top 20%': '{:.2%}'}
19
 
 
238
  )
239
 
240
  with st.container():
241
+ tab1, tab2, tab3, tab4 = st.tabs(['Player Used Info', 'Stack Used Info', 'Stack Size Info', 'General Info'])
242
  with tab1:
243
 
244
  if entry_parse_var == 'All':
 
287
  style.background_gradient(cmap='RdYlGn').
288
  format(formatter='{:.2%}', subset=st.session_state['stack_size_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
289
  hide_index=True)
290
+
291
+ with tab4:
292
+
293
+ if entry_parse_var == 'All':
294
+ st.session_state['general_frame'] = create_general_exposures(working_df)
295
+ st.dataframe(st.session_state['general_frame'].
296
+ sort_values(by='Exposure Overall', ascending=False).
297
+ style.background_gradient(cmap='RdYlGn').
298
+ format(formatter='{:.2%}', subset=st.session_state['general_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
299
+ hide_index=True)
300
+ else:
301
+ st.session_state['general_frame'] = create_general_exposures(working_df, entry_names)
302
+ st.dataframe(st.session_state['general_frame'].
303
+ sort_values(by='Exposure Overall', ascending=False).
304
+ style.background_gradient(cmap='RdYlGn').
305
+ format(formatter='{:.2%}', subset=st.session_state['general_frame'].iloc[:, 1:].select_dtypes(include=['number']).columns),
306
+ hide_index=True)
307
+
global_func/create_general_exposures.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+
3
+ def create_general_exposures(df: pd.DataFrame, entrants: list = None):
4
+ check_cols = ['salary', 'actual_fpts', 'actual_own', 'dupes']
5
+ general_exposures = pd.DataFrame()
6
+ for each_col in check_cols:
7
+
8
+ if entrants is not None:
9
+ overall_general = pd.Series(list(df[df['BaseName'].isin(entrants)][each_col])).sum()
10
+ else:
11
+ overall_general = pd.Series(list(df[each_col])).sum()
12
+ top_1per_general = pd.Series(list(df[df['percentile_finish'] <= 0.01][each_col])).sum()
13
+ top_5per_general = pd.Series(list(df[df['percentile_finish'] <= 0.05][each_col])).sum()
14
+ top_10per_general = pd.Series(list(df[df['percentile_finish'] <= 0.10][each_col])).sum()
15
+ top_20per_general = pd.Series(list(df[df['percentile_finish'] <= 0.20][each_col])).sum()
16
+ general_contest_len = len(df)
17
+ general_len_1per = len(df[df['percentile_finish'] <= 0.01])
18
+ general_len_5per = len(df[df['percentile_finish'] <= 0.05])
19
+ general_len_10per = len(df[df['percentile_finish'] <= 0.10])
20
+ general_len_20per = len(df[df['percentile_finish'] <= 0.20])
21
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
22
+ each_general_set = [overall_general, top_1per_general, top_5per_general, top_10per_general, top_20per_general]
23
+ each_general_len_set = [general_contest_len, general_len_1per, general_len_5per, general_len_10per, general_len_20per]
24
+ general_count_var = 0
25
+ for each_general in each_general_set:
26
+ general_frame = pd.DataFrame()
27
+ general_frame['Stat'] = each_col
28
+ general_frame['Average'] = each_general / each_general_len_set[general_count_var]
29
+ general_frame = general_frame[['Stat', 'Average']]
30
+ general_frame = general_frame.rename(columns={'Average': f'Average {each_set_name[general_count_var]}'})
31
+ if len(general_exposures) == 0:
32
+ general_exposures = general_frame
33
+ else:
34
+ general_exposures = pd.merge(general_exposures, general_frame, on='Stat', how='outer')
35
+ general_count_var += 1
36
+
37
+ return general_exposures