James McCool commited on
Commit
69a388c
·
1 Parent(s): 9803c42

Refactor stacking logic in 'app.py' by replacing hardcoded exclusions with a dynamic stack column dictionary for various sports, improving maintainability and clarity in player stacking calculations.

Browse files
Files changed (1) hide show
  1. app.py +11 -6
app.py CHANGED
@@ -30,7 +30,13 @@ from global_func.reassess_edge import reassess_edge
30
 
31
  freq_format = {'Finish_percentile': '{:.2%}', 'Lineup Edge': '{:.2%}', 'Win%': '{:.2%}'}
32
  stacking_sports = ['MLB', 'NHL', 'NFL', 'LOL', 'NCAAF']
33
- exclude_stacks = ['BaseName', 'EntryCount', 'SP', 'SP1', 'SP2', 'P1', 'P2', 'RB1', 'RB2', 'DST', 'G']
 
 
 
 
 
 
34
  player_wrong_names_mlb = ['Enrique Hernandez', 'Joseph Cantillo', 'Mike Soroka', 'Jakob Bauers', 'Temi Fágbénlé']
35
  player_right_names_mlb = ['Kike Hernandez', 'Joey Cantillo', 'Michael Soroka', 'Jake Bauers', 'Temi Fagbenle']
36
 
@@ -441,22 +447,21 @@ if selected_tab == 'Data Load':
441
  # Update projections with matched names
442
  projections['player_names'] = projections['player_names'].map(lambda x: projections_match_dict.get(x, x))
443
  st.session_state['projections_df'] = projections
444
- st.session_state['stack_columns'] = [col for col in st.session_state['portfolio'].columns if col not in exclude_stacks]
445
 
446
  if sport_var in stacking_sports:
447
  team_dict = dict(zip(st.session_state['projections_df']['player_names'], st.session_state['projections_df']['team']))
448
  st.session_state['portfolio']['Stack'] = st.session_state['portfolio'].apply(
449
  lambda row: Counter(
450
- team_dict.get(player, '') for player in row[st.session_state['stack_columns']]
451
  if team_dict.get(player, '') != ''
452
- ).most_common(1)[0][0] if any(team_dict.get(player, '') for player in row[st.session_state['stack_columns']]) else '',
453
  axis=1
454
  )
455
  st.session_state['portfolio']['Size'] = st.session_state['portfolio'].apply(
456
  lambda row: Counter(
457
- team_dict.get(player, '') for player in row[st.session_state['stack_columns']]
458
  if team_dict.get(player, '') != ''
459
- ).most_common(1)[0][1] if any(team_dict.get(player, '') for player in row[st.session_state['stack_columns']]) else 0,
460
  axis=1
461
  )
462
  st.session_state['stack_dict'] = dict(zip(st.session_state['portfolio'].index, st.session_state['portfolio']['Stack']))
 
30
 
31
  freq_format = {'Finish_percentile': '{:.2%}', 'Lineup Edge': '{:.2%}', 'Win%': '{:.2%}'}
32
  stacking_sports = ['MLB', 'NHL', 'NFL', 'LOL', 'NCAAF']
33
+ stack_column_dict = {
34
+ 'MLB': ['C', 'C/1B', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3'],
35
+ 'NHL': ['C', 'W', 'D'],
36
+ 'NFL': ['QB', 'WR1', 'WR2', 'WR3', 'FLEX'],
37
+ 'LOL': ['TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'],
38
+ 'NCAAF': ['QB', 'WR1', 'WR2', 'WR3', 'FLEX', 'SFLEX'],
39
+ }
40
  player_wrong_names_mlb = ['Enrique Hernandez', 'Joseph Cantillo', 'Mike Soroka', 'Jakob Bauers', 'Temi Fágbénlé']
41
  player_right_names_mlb = ['Kike Hernandez', 'Joey Cantillo', 'Michael Soroka', 'Jake Bauers', 'Temi Fagbenle']
42
 
 
447
  # Update projections with matched names
448
  projections['player_names'] = projections['player_names'].map(lambda x: projections_match_dict.get(x, x))
449
  st.session_state['projections_df'] = projections
 
450
 
451
  if sport_var in stacking_sports:
452
  team_dict = dict(zip(st.session_state['projections_df']['player_names'], st.session_state['projections_df']['team']))
453
  st.session_state['portfolio']['Stack'] = st.session_state['portfolio'].apply(
454
  lambda row: Counter(
455
+ team_dict.get(player, '') for player in row[stack_column_dict[sport_var]]
456
  if team_dict.get(player, '') != ''
457
+ ).most_common(1)[0][0] if any(team_dict.get(player, '') for player in row[stack_column_dict[sport_var]]) else '',
458
  axis=1
459
  )
460
  st.session_state['portfolio']['Size'] = st.session_state['portfolio'].apply(
461
  lambda row: Counter(
462
+ team_dict.get(player, '') for player in row[stack_column_dict[sport_var]]
463
  if team_dict.get(player, '') != ''
464
+ ).most_common(1)[0][1] if any(team_dict.get(player, '') for player in row[stack_column_dict[sport_var]]) else 0,
465
  axis=1
466
  )
467
  st.session_state['stack_dict'] = dict(zip(st.session_state['portfolio'].index, st.session_state['portfolio']['Stack']))