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.
- app.py +10 -3
- 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 |
-
|
| 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
|