James McCool commited on
Commit
b36408f
·
1 Parent(s): 937f1e0

Enhance duplication metrics in app.py and create_general_exposures.py

Browse files

- Added 'under_10' metric to the working DataFrame in app.py, allowing for analysis of lineups with 10 or fewer duplicates.
- Updated the general exposures calculation in create_general_exposures.py to include 'under_10', improving the comprehensiveness of the data analysis.
- Introduced a new tab for duplication information in the app interface, enhancing user access to these metrics.

Files changed (2) hide show
  1. app.py +10 -3
  2. global_func/create_general_exposures.py +3 -3
app.py CHANGED
@@ -221,15 +221,19 @@ with tab2:
221
  axis=1
222
  )
223
  working_df['dupes'] = working_df.groupby('sorted').transform('size')
224
- # For uniques - count how many unique lineups (dupes == 1) each BaseName has
225
  working_df['uniques'] = working_df.groupby('BaseName').apply(
226
  lambda x: (x['dupes'] == 1).sum()
227
  ).reindex(working_df['BaseName']).values
228
 
229
- # For under_5 - count how many lineups with 5 or fewer duplicates each BaseName has
230
  working_df['under_5'] = working_df.groupby('BaseName').apply(
231
  lambda x: (x['dupes'] <= 5).sum()
232
  ).reindex(working_df['BaseName']).values
 
 
 
 
 
233
  working_df = working_df.reset_index()
234
  working_df['percentile_finish'] = working_df['index'].rank(pct=True)
235
  working_df['finish'] = working_df['index']
@@ -325,7 +329,7 @@ with tab2:
325
  )
326
 
327
  with st.container():
328
- tab1, tab2, tab3, tab4 = st.tabs(['Player Used Info', 'Stack Used Info', 'Stack Size Info', 'General Info'])
329
  with tab1:
330
  with st.form(key='player_info_pos_form'):
331
  col1, col2 = st.columns(2)
@@ -419,3 +423,6 @@ with tab2:
419
  st.session_state['general_frame'] = create_general_exposures(working_df, entry_names)
420
  st.dataframe(st.session_state['general_frame'].style.background_gradient(cmap='RdYlGn', axis=1).format(precision=2), hide_index=True)
421
 
 
 
 
 
221
  axis=1
222
  )
223
  working_df['dupes'] = working_df.groupby('sorted').transform('size')
224
+
225
  working_df['uniques'] = working_df.groupby('BaseName').apply(
226
  lambda x: (x['dupes'] == 1).sum()
227
  ).reindex(working_df['BaseName']).values
228
 
 
229
  working_df['under_5'] = working_df.groupby('BaseName').apply(
230
  lambda x: (x['dupes'] <= 5).sum()
231
  ).reindex(working_df['BaseName']).values
232
+
233
+ working_df['under_10'] = working_df.groupby('BaseName').apply(
234
+ lambda x: (x['dupes'] <= 10).sum()
235
+ ).reindex(working_df['BaseName']).values
236
+
237
  working_df = working_df.reset_index()
238
  working_df['percentile_finish'] = working_df['index'].rank(pct=True)
239
  working_df['finish'] = working_df['index']
 
329
  )
330
 
331
  with st.container():
332
+ tab1, tab2, tab3, tab4, tab5 = st.tabs(['Player Used Info', 'Stack Used Info', 'Stack Size Info', 'General Info', 'Duplication Info'])
333
  with tab1:
334
  with st.form(key='player_info_pos_form'):
335
  col1, col2 = st.columns(2)
 
423
  st.session_state['general_frame'] = create_general_exposures(working_df, entry_names)
424
  st.dataframe(st.session_state['general_frame'].style.background_gradient(cmap='RdYlGn', axis=1).format(precision=2), hide_index=True)
425
 
426
+ with tab5:
427
+ st.session_state['duplication_frame'] = working_df[['BaseName', 'dupes', 'uniques', 'under_5', 'under_10']].drop_duplicates(subset='BaseName', keep='first')
428
+ st.dataframe(st.session_state['duplication_frame'].style.background_gradient(cmap='RdYlGn', axis=1).format(precision=2), hide_index=True)
global_func/create_general_exposures.py CHANGED
@@ -1,7 +1,7 @@
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', 'uniques', 'under_5']
5
  general_exposures = pd.DataFrame()
6
  for each_col in check_cols:
7
  general_frame = pd.DataFrame()
@@ -19,7 +19,7 @@ def create_general_exposures(df: pd.DataFrame, entrants: list = None):
19
  general_len_5per = len(df[df['percentile_finish'] <= 0.05])
20
  general_len_10per = len(df[df['percentile_finish'] <= 0.10])
21
  general_len_20per = len(df[df['percentile_finish'] <= 0.20])
22
- each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%', 'Uniques', 'Under 5']
23
  each_general_set = [overall_general, top_1per_general, top_5per_general, top_10per_general, top_20per_general]
24
  each_general_len_set = [general_contest_len, general_len_1per, general_len_5per, general_len_10per, general_len_20per]
25
  general_count_var = 0
@@ -39,5 +39,5 @@ def create_general_exposures(df: pd.DataFrame, entrants: list = None):
39
  general_exposures = general_row
40
  else:
41
  general_exposures = pd.concat([general_exposures, general_frame], ignore_index = True, axis = 0)
42
- general_exposures['Stat'] = general_exposures['Stat'].replace(['salary', 'actual_fpts', 'actual_own', 'dupes', 'uniques', 'under_5'], ['Salary Used', 'Finishing Points', 'Total Ownership', 'Duplications', 'Uniques', 'Under 5'])
43
  return general_exposures
 
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', 'uniques', 'under_5', 'under_10']
5
  general_exposures = pd.DataFrame()
6
  for each_col in check_cols:
7
  general_frame = pd.DataFrame()
 
19
  general_len_5per = len(df[df['percentile_finish'] <= 0.05])
20
  general_len_10per = len(df[df['percentile_finish'] <= 0.10])
21
  general_len_20per = len(df[df['percentile_finish'] <= 0.20])
22
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%', 'Uniques', 'Under 5', 'Under 10']
23
  each_general_set = [overall_general, top_1per_general, top_5per_general, top_10per_general, top_20per_general]
24
  each_general_len_set = [general_contest_len, general_len_1per, general_len_5per, general_len_10per, general_len_20per]
25
  general_count_var = 0
 
39
  general_exposures = general_row
40
  else:
41
  general_exposures = pd.concat([general_exposures, general_frame], ignore_index = True, axis = 0)
42
+ general_exposures['Stat'] = general_exposures['Stat'].replace(['salary', 'actual_fpts', 'actual_own', 'dupes', 'uniques', 'under_5', 'under_10'], ['Salary Used', 'Finishing Points', 'Total Ownership', 'Duplications', 'Uniques', 'Under 5', 'Under 10'])
43
  return general_exposures