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
|