James McCool commited on
Commit
268b562
·
1 Parent(s): 656c08a

Refactor assist projection calculation in player data initialization

Browse files

Update the assist projection method to:
- Separate base assist calculation from scaling
- Use different assist percentage columns for win and loss scenarios
- Improve clarity and maintainability of the projection logic

Files changed (1) hide show
  1. app.py +7 -7
app.py CHANGED
@@ -584,17 +584,17 @@ def init_player_data(game_count, players, opponent, win_loss_settings, kill_pred
584
  if win_loss_settings[game] == "Win":
585
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1)
586
  team_data['Death_Proj'] = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
587
- raw_assists = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1) * team_data['Kill_Proj'].sum()
588
- assist_scale = min(1.0, team_data['Kill_Proj'].sum() / raw_assists.sum()) if raw_assists.sum() > 0 else 1.0
589
- team_data['Assist_Proj'] = raw_assists * assist_scale
590
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
591
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
592
  else:
593
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
594
  team_data['Death_Proj'] = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
595
- raw_assists = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1) * team_data['Kill_Proj'].sum()
596
- assist_scale = min(1.0, team_data['Kill_Proj'].sum() / raw_assists.sum()) if raw_assists.sum() > 0 else 1.0
597
- team_data['Assist_Proj'] = raw_assists * assist_scale
598
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
599
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
600
 
@@ -705,7 +705,7 @@ if st.button("Run"):
705
  st.session_state.overall_sim_df = pd.DataFrame(overall_sim_results)
706
  st.session_state.overall_sim_df = st.session_state.overall_sim_df.drop_duplicates(subset = ['Player', 'Stat'])
707
 
708
- tab1, tab2, tab3, tab4 = st.tabs(["Gamelogs", "Overall Data", "Individual Game Data", "Opponent Data"])
709
  with tab4:
710
  if 'player_summary' in st.session_state:
711
  st.subheader("Full Match Data")
 
584
  if win_loss_settings[game] == "Win":
585
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1)
586
  team_data['Death_Proj'] = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
587
+ team_data['Assist_Base'] = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
588
+ assist_scale = min(1.0, team_data['Kill_Proj'].sum() / team_data['Assist_Base'].sum()) if team_data['Assist_Base'].sum() > 0 else 1.0
589
+ team_data['Assist_Proj'] = team_data['Assist_Base'] * assist_scale
590
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
591
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
592
  else:
593
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
594
  team_data['Death_Proj'] = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
595
+ team_data['Assist_Base'] = team_data.apply(lambda row: row['lAssist%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
596
+ assist_scale = min(1.0, team_data['Kill_Proj'].sum() / team_data['Assist_Base'].sum()) if team_data['Assist_Base'].sum() > 0 else 1.0
597
+ team_data['Assist_Proj'] = team_data['Assist_Base'] * assist_scale
598
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
599
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
600
 
 
705
  st.session_state.overall_sim_df = pd.DataFrame(overall_sim_results)
706
  st.session_state.overall_sim_df = st.session_state.overall_sim_df.drop_duplicates(subset = ['Player', 'Stat'])
707
 
708
+ tab1, tab2, tab3, tab4 = st.tabs(["Gamelogs", "Individual Game Data", "Opponent Boosts", "Full Match Data"])
709
  with tab4:
710
  if 'player_summary' in st.session_state:
711
  st.subheader("Full Match Data")