James McCool commited on
Commit
a7ad1b5
·
1 Parent(s): 866355a

Refactor filter options in app.py: reorganize macro and micro filter inputs into expandable sections for improved user experience, and ensure consistent handling of player locking and removal functionalities during portfolio management.

Browse files
Files changed (1) hide show
  1. app.py +83 -83
app.py CHANGED
@@ -881,93 +881,93 @@ with tab2:
881
  sum(map_dict['own_map'].get(player, 0) for player in row.iloc[1:]),
882
  axis=1
883
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
884
 
885
- col1, col2 = st.columns([2, 8])
886
- with col1:
887
- with st.expander('Macro Filter Options'):
888
- with st.form(key='macro_filter_form'):
889
- max_dupes = st.number_input("Max acceptable dupes?", value=1000, min_value=1, step=1)
890
- min_salary = st.number_input("Min acceptable salary?", value=1000, min_value=1000, step=100)
891
- max_salary = st.number_input("Max acceptable salary?", value=100000, min_value=1000, step=100)
892
- max_finish_percentile = st.number_input("Max acceptable finish percentile?", value=.50, min_value=0.005, step=.001)
893
- min_lineup_edge = st.number_input("Min acceptable Lineup Edge?", value=-.5, min_value=-1.00, step=.001)
894
- if stack_dict is not None:
895
- stack_toggle = st.selectbox("Include specific stacks?", options=['All Stacks', 'Specific Stacks'], index=0)
896
- stack_selections = st.multiselect("If Specific Stacks, Which to include?", options=sorted(list(set(stack_dict.values()))), default=[])
897
- stack_remove = st.multiselect("If Specific Stacks, Which to remove?", options=sorted(list(set(stack_dict.values()))), default=[])
898
-
899
- submitted = st.form_submit_button("Submit")
900
- with st.expander('Micro Filter Options'):
901
- with st.form(key='micro_filter_form'):
902
- player_names = set()
903
- for col in st.session_state['portfolio'].columns:
904
- if col not in excluded_cols:
905
- player_names.update(st.session_state['portfolio'][col].unique())
906
- player_lock = st.multiselect("Lock players?", options=sorted(list(player_names)), default=[])
907
- player_remove = st.multiselect("Remove players?", options=sorted(list(player_names)), default=[])
908
-
909
- submitted = st.form_submit_button("Submit")
910
- with st.expander('Trimming Options'):
911
- st.info("Make sure you filter before trimming if you want to filter, trimming before a filter will reset your portfolio")
912
- with st.form(key='trim_form'):
913
- st.write("Sorting and trimming variables:")
914
- perf_var, own_var = st.columns(2)
915
- with perf_var:
916
- performance_type = st.selectbox("Sorting variable", ['median', 'Finish_percentile'], key='sort_var')
917
- with own_var:
918
- own_type = st.selectbox("Trimming variable", ['Own', 'Geomean', 'Weighted Own'], key='trim_var')
919
-
920
- trim_slack_var = st.number_input("Trim slack (percentile addition to trimming variable ceiling)", value=0.0, min_value=0.0, max_value=1.0, step=0.1, key='trim_slack')
921
 
922
- st.write("Sorting threshold range:")
923
- min_sort, max_sort = st.columns(2)
924
- with min_sort:
925
- performance_threshold_low = st.number_input("Min", value=0.0, min_value=0.0, step=1.0, key='min_sort')
926
- with max_sort:
927
- performance_threshold_high = st.number_input("Max", value=st.session_state['portfolio'][performance_type].max(), min_value=0.0, step=1.0, key='max_sort')
928
-
929
- st.write("Trimming threshold range:")
930
- min_trim, max_trim = st.columns(2)
931
- with min_trim:
932
- own_threshold_low = st.number_input("Min", value=0.0, min_value=0.0, step=1.0, key='min_trim')
933
- with max_trim:
934
- own_threshold_high = st.number_input("Max", value=st.session_state['portfolio'][own_type].max(), min_value=0.0, step=1.0, key='max_trim')
935
-
936
- submitted = st.form_submit_button("Trim")
937
- if submitted:
938
- st.write('initiated')
939
- st.session_state['portfolio'] = predict_dupes(st.session_state['portfolio'], map_dict, site_var, type_var, Contest_Size, strength_var, sport_var)
940
- st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Dupes'] <= max_dupes]
941
- st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] >= min_salary]
942
- st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] <= max_salary]
943
- st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Finish_percentile'] <= max_finish_percentile]
944
- st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Lineup Edge'] >= min_lineup_edge]
945
- if stack_dict is not None:
946
- if stack_toggle == 'All Stacks':
947
- st.session_state['portfolio'] = st.session_state['portfolio']
948
- st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
949
- else:
950
- st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Stack'].isin(stack_selections)]
951
- st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
952
- if player_remove:
953
- # Create mask for lineups that contain any of the removed players
954
- player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
955
- remove_mask = st.session_state['portfolio'][player_columns].apply(
956
- lambda row: not any(player in list(row) for player in player_remove), axis=1
957
- )
958
- st.session_state['portfolio'] = st.session_state['portfolio'][remove_mask]
959
 
960
- if player_lock:
961
- # Create mask for lineups that contain all locked players
962
- player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
963
-
964
- lock_mask = st.session_state['portfolio'][player_columns].apply(
965
- lambda row: all(player in list(row) for player in player_lock), axis=1
966
- )
967
- st.session_state['portfolio'] = st.session_state['portfolio'][lock_mask]
968
 
969
- st.session_state['portfolio'] = trim_portfolio(st.session_state['portfolio'], trim_slack_var, performance_type, own_type, performance_threshold_high, performance_threshold_low, own_threshold_high, own_threshold_low)
970
- st.session_state['portfolio'] = st.session_state['portfolio'].sort_values(by='median', ascending=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
971
 
972
  with col2:
973
  st.write('initiated')
 
881
  sum(map_dict['own_map'].get(player, 0) for player in row.iloc[1:]),
882
  axis=1
883
  )
884
+ if 'portfolio' in st.session_state:
885
+ col1, col2 = st.columns([2, 8])
886
+ with col1:
887
+ with st.expander('Macro Filter Options'):
888
+ with st.form(key='macro_filter_form'):
889
+ max_dupes = st.number_input("Max acceptable dupes?", value=1000, min_value=1, step=1)
890
+ min_salary = st.number_input("Min acceptable salary?", value=1000, min_value=1000, step=100)
891
+ max_salary = st.number_input("Max acceptable salary?", value=100000, min_value=1000, step=100)
892
+ max_finish_percentile = st.number_input("Max acceptable finish percentile?", value=.50, min_value=0.005, step=.001)
893
+ min_lineup_edge = st.number_input("Min acceptable Lineup Edge?", value=-.5, min_value=-1.00, step=.001)
894
+ if stack_dict is not None:
895
+ stack_toggle = st.selectbox("Include specific stacks?", options=['All Stacks', 'Specific Stacks'], index=0)
896
+ stack_selections = st.multiselect("If Specific Stacks, Which to include?", options=sorted(list(set(stack_dict.values()))), default=[])
897
+ stack_remove = st.multiselect("If Specific Stacks, Which to remove?", options=sorted(list(set(stack_dict.values()))), default=[])
898
+
899
+ submitted = st.form_submit_button("Submit")
900
+ with st.expander('Micro Filter Options'):
901
+ with st.form(key='micro_filter_form'):
902
+ player_names = set()
903
+ for col in st.session_state['portfolio'].columns:
904
+ if col not in excluded_cols:
905
+ player_names.update(st.session_state['portfolio'][col].unique())
906
+ player_lock = st.multiselect("Lock players?", options=sorted(list(player_names)), default=[])
907
+ player_remove = st.multiselect("Remove players?", options=sorted(list(player_names)), default=[])
908
+
909
+ submitted = st.form_submit_button("Submit")
910
+ with st.expander('Trimming Options'):
911
+ st.info("Make sure you filter before trimming if you want to filter, trimming before a filter will reset your portfolio")
912
+ with st.form(key='trim_form'):
913
+ st.write("Sorting and trimming variables:")
914
+ perf_var, own_var = st.columns(2)
915
+ with perf_var:
916
+ performance_type = st.selectbox("Sorting variable", ['median', 'Finish_percentile'], key='sort_var')
917
+ with own_var:
918
+ own_type = st.selectbox("Trimming variable", ['Own', 'Geomean', 'Weighted Own'], key='trim_var')
919
 
920
+ trim_slack_var = st.number_input("Trim slack (percentile addition to trimming variable ceiling)", value=0.0, min_value=0.0, max_value=1.0, step=0.1, key='trim_slack')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
921
 
922
+ st.write("Sorting threshold range:")
923
+ min_sort, max_sort = st.columns(2)
924
+ with min_sort:
925
+ performance_threshold_low = st.number_input("Min", value=0.0, min_value=0.0, step=1.0, key='min_sort')
926
+ with max_sort:
927
+ performance_threshold_high = st.number_input("Max", value=st.session_state['portfolio'][performance_type].max(), min_value=0.0, step=1.0, key='max_sort')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
928
 
929
+ st.write("Trimming threshold range:")
930
+ min_trim, max_trim = st.columns(2)
931
+ with min_trim:
932
+ own_threshold_low = st.number_input("Min", value=0.0, min_value=0.0, step=1.0, key='min_trim')
933
+ with max_trim:
934
+ own_threshold_high = st.number_input("Max", value=st.session_state['portfolio'][own_type].max(), min_value=0.0, step=1.0, key='max_trim')
 
 
935
 
936
+ submitted = st.form_submit_button("Trim")
937
+ if submitted:
938
+ st.write('initiated')
939
+ st.session_state['portfolio'] = predict_dupes(st.session_state['portfolio'], map_dict, site_var, type_var, Contest_Size, strength_var, sport_var)
940
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Dupes'] <= max_dupes]
941
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] >= min_salary]
942
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['salary'] <= max_salary]
943
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Finish_percentile'] <= max_finish_percentile]
944
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Lineup Edge'] >= min_lineup_edge]
945
+ if stack_dict is not None:
946
+ if stack_toggle == 'All Stacks':
947
+ st.session_state['portfolio'] = st.session_state['portfolio']
948
+ st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
949
+ else:
950
+ st.session_state['portfolio'] = st.session_state['portfolio'][st.session_state['portfolio']['Stack'].isin(stack_selections)]
951
+ st.session_state['portfolio'] = st.session_state['portfolio'][~st.session_state['portfolio']['Stack'].isin(stack_remove)]
952
+ if player_remove:
953
+ # Create mask for lineups that contain any of the removed players
954
+ player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
955
+ remove_mask = st.session_state['portfolio'][player_columns].apply(
956
+ lambda row: not any(player in list(row) for player in player_remove), axis=1
957
+ )
958
+ st.session_state['portfolio'] = st.session_state['portfolio'][remove_mask]
959
+
960
+ if player_lock:
961
+ # Create mask for lineups that contain all locked players
962
+ player_columns = [col for col in st.session_state['portfolio'].columns if col not in excluded_cols]
963
+
964
+ lock_mask = st.session_state['portfolio'][player_columns].apply(
965
+ lambda row: all(player in list(row) for player in player_lock), axis=1
966
+ )
967
+ st.session_state['portfolio'] = st.session_state['portfolio'][lock_mask]
968
+
969
+ st.session_state['portfolio'] = trim_portfolio(st.session_state['portfolio'], trim_slack_var, performance_type, own_type, performance_threshold_high, performance_threshold_low, own_threshold_high, own_threshold_low)
970
+ st.session_state['portfolio'] = st.session_state['portfolio'].sort_values(by='median', ascending=False)
971
 
972
  with col2:
973
  st.write('initiated')