James McCool commited on
Commit
dd13903
·
1 Parent(s): 2bd68c9

Refactor Player Data Initialization with Consistent Projection Scaling

Browse files

Update the player data initialization process to:
- Remove redundant duplicate row selection
- Align kill, death, and assist projection scaling methods
- Use consistent scaling approach across win and loss scenarios
- Simplify projection calculation logic

Files changed (1) hide show
  1. app.py +29 -31
app.py CHANGED
@@ -336,8 +336,7 @@ def init_team_data(game_count, team, opponent, win_loss_settings, kill_predictio
336
  raw_deaths = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
337
  raw_assists = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
338
  kill_scale = kill_predictions[game] / raw_kills.sum()
339
- death_scale = min(1.0, death_predictions[game] / raw_deaths.sum()) if raw_deaths.sum() > 0 else 1.0
340
- assist_scale = min(1.0, kill_predictions[game] / raw_assists.sum()) if raw_assists.sum() > 0 else 1.0
341
  team_data['Kill_Proj'] = raw_kills * kill_scale
342
  team_data['Death_Proj'] = raw_deaths * death_scale
343
  team_data['Assist_Proj'] = raw_assists * kill_scale
@@ -348,9 +347,8 @@ def init_team_data(game_count, team, opponent, win_loss_settings, kill_predictio
348
  raw_kills = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
349
  raw_deaths = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
350
  raw_assists = team_data.apply(lambda row: row['lAssist%'] * opp_pos_assists_boost_loss.get(row['position'], 1), axis=1)
351
- kill_scale = min(1.0, kill_predictions[game] / raw_kills.sum()) if raw_kills.sum() > 0 else 1.0
352
- death_scale = min(1.0, death_predictions[game] / raw_deaths.sum()) if raw_deaths.sum() > 0 else 1.0
353
- assist_scale = min(1.0, kill_predictions[game] / raw_assists.sum()) if raw_assists.sum() > 0 else 1.0
354
  team_data['Kill_Proj'] = raw_kills * kill_scale
355
  team_data['Death_Proj'] = raw_deaths * death_scale
356
  team_data['Assist_Proj'] = raw_assists * kill_scale
@@ -370,16 +368,14 @@ def init_team_data(game_count, team, opponent, win_loss_settings, kill_predictio
370
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1)
371
  team_data['Death_Proj'] = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
372
  team_data['Assist_Base'] = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
373
- 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
374
- team_data['Assist_Proj'] = team_data['wAssist%'] * assist_scale
375
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
376
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
377
  else:
378
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
379
  team_data['Death_Proj'] = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
380
  team_data['Assist_Base'] = team_data.apply(lambda row: row['lAssist%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
381
- 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
382
- team_data['Assist_Proj'] = team_data['wAssist%'] * assist_scale
383
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
384
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
385
 
@@ -551,31 +547,35 @@ def init_player_data(game_count, players, opponent, win_loss_settings, kill_pred
551
 
552
  for game in range(game_count):
553
  if kill_predictions[game] > 0:
554
- working_tables = player_tables[['playername', 'teamname', 'position', 'playername_avg_kill_share_win', 'playername_avg_death_share_win','playername_avg_assist_share_win',
555
- 'playername_avg_total_cs_win', 'playername_avg_kill_share_loss', 'playername_avg_death_share_loss', 'playername_avg_assist_share_loss', 'playername_avg_total_cs_loss']]
556
- working_tables = working_tables.rename(columns = {'playername_avg_kill_share_win': 'wKill%', 'playername_avg_death_share_win': 'wDeath%', 'playername_avg_assist_share_win': 'wAssist%',
557
- 'playername_avg_total_cs_win': 'wCS', 'playername_avg_kill_share_loss': 'lKill%', 'playername_avg_death_share_loss': 'lDeath%',
558
- 'playername_avg_assist_share_loss': 'lAssist%', 'playername_avg_total_cs_loss': 'lCS'})
559
  team_data = working_tables.drop_duplicates(subset = ['playername'])
560
-
561
 
562
  if win_loss_settings[game] == "Win":
563
- team_data['Kill_Proj'] = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1) * kill_predictions[game]
564
- team_data['Death_Proj'] = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1) * death_predictions[game]
565
- # Calculate assists and scale them to not exceed total kills
566
- raw_assists = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1) * kill_predictions[game]
567
- assist_scale = min(1.0, kill_predictions[game] / raw_assists.sum()) if raw_assists.sum() > 0 else 1.0
568
- team_data['Assist_Proj'] = raw_assists * assist_scale
 
 
569
 
570
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
571
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
572
  else:
573
- team_data['Kill_Proj'] = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1) * kill_predictions[game]
574
- team_data['Death_Proj'] = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1) * death_predictions[game]
575
- # Calculate assists and scale them to not exceed total kills
576
- raw_assists = team_data.apply(lambda row: row['lAssist%'] * opp_pos_assists_boost_loss.get(row['position'], 1), axis=1) * kill_predictions[game]
577
- assist_scale = min(1.0, kill_predictions[game] / raw_assists.sum()) if raw_assists.sum() > 0 else 1.0
578
- team_data['Assist_Proj'] = raw_assists * assist_scale
 
 
579
 
580
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
581
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
@@ -591,16 +591,14 @@ def init_player_data(game_count, players, opponent, win_loss_settings, kill_pred
591
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1)
592
  team_data['Death_Proj'] = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
593
  team_data['Assist_Base'] = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
594
- 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
595
- team_data['Assist_Proj'] = team_data['wAssist%']
596
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
597
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
598
  else:
599
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
600
  team_data['Death_Proj'] = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
601
  team_data['Assist_Base'] = team_data.apply(lambda row: row['lAssist%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
602
- 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
603
- team_data['Assist_Proj'] = team_data['wAssist%']
604
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
605
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
606
 
 
336
  raw_deaths = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
337
  raw_assists = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
338
  kill_scale = kill_predictions[game] / raw_kills.sum()
339
+ death_scale = death_predictions[game] / raw_deaths.sum()
 
340
  team_data['Kill_Proj'] = raw_kills * kill_scale
341
  team_data['Death_Proj'] = raw_deaths * death_scale
342
  team_data['Assist_Proj'] = raw_assists * kill_scale
 
347
  raw_kills = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
348
  raw_deaths = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
349
  raw_assists = team_data.apply(lambda row: row['lAssist%'] * opp_pos_assists_boost_loss.get(row['position'], 1), axis=1)
350
+ kill_scale = kill_predictions[game] / raw_kills.sum()
351
+ death_scale = death_predictions[game] / raw_deaths.sum()
 
352
  team_data['Kill_Proj'] = raw_kills * kill_scale
353
  team_data['Death_Proj'] = raw_deaths * death_scale
354
  team_data['Assist_Proj'] = raw_assists * kill_scale
 
368
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1)
369
  team_data['Death_Proj'] = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
370
  team_data['Assist_Base'] = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
371
+ team_data['Assist_Proj'] = team_data['Assist_Base']
 
372
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
373
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
374
  else:
375
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
376
  team_data['Death_Proj'] = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
377
  team_data['Assist_Base'] = team_data.apply(lambda row: row['lAssist%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
378
+ team_data['Assist_Proj'] = team_data['Assist_Base']
 
379
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
380
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
381
 
 
547
 
548
  for game in range(game_count):
549
  if kill_predictions[game] > 0:
550
+ working_tables = player_tables[['playername', 'teamname', 'position', 'playername_avg_kills_win', 'playername_avg_deaths_win', 'playername_avg_assists_win', 'playername_avg_total_cs_win',
551
+ 'playername_avg_kills_loss', 'playername_avg_deaths_loss', 'playername_avg_assists_loss', 'playername_avg_total_cs_loss']]
552
+ working_tables = working_tables.rename(columns = {'playername_avg_kills_win': 'wKill%', 'playername_avg_deaths_win': 'wDeath%', 'playername_avg_assists_win': 'wAssist%',
553
+ 'playername_avg_total_cs_win': 'wCS', 'playername_avg_kills_loss': 'lKill%', 'playername_avg_deaths_loss': 'lDeath%',
554
+ 'playername_avg_assists_loss': 'lAssist%', 'playername_avg_total_cs_loss': 'lCS'})
555
  team_data = working_tables.drop_duplicates(subset = ['playername'])
556
+ team_data = working_tables.drop_duplicates(subset = ['position'])
557
 
558
  if win_loss_settings[game] == "Win":
559
+ raw_kills = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1)
560
+ raw_deaths = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
561
+ raw_assists = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
562
+ kill_scale = kill_predictions[game] / raw_kills.sum()
563
+ death_scale = death_predictions[game] / raw_deaths.sum()
564
+ team_data['Kill_Proj'] = raw_kills * kill_scale
565
+ team_data['Death_Proj'] = raw_deaths * death_scale
566
+ team_data['Assist_Proj'] = raw_assists * kill_scale
567
 
568
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
569
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
570
  else:
571
+ raw_kills = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
572
+ raw_deaths = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
573
+ raw_assists = team_data.apply(lambda row: row['lAssist%'] * opp_pos_assists_boost_loss.get(row['position'], 1), axis=1)
574
+ kill_scale = kill_predictions[game] / raw_kills.sum()
575
+ death_scale = death_predictions[game] / raw_deaths.sum()
576
+ team_data['Kill_Proj'] = raw_kills * kill_scale
577
+ team_data['Death_Proj'] = raw_deaths * death_scale
578
+ team_data['Assist_Proj'] = raw_assists * kill_scale
579
 
580
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
581
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
 
591
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['wKill%'] * opp_pos_kills_boost_win.get(row['position'], 1), axis=1)
592
  team_data['Death_Proj'] = team_data.apply(lambda row: row['wDeath%'] * opp_pos_deaths_boost_win.get(row['position'], 1), axis=1)
593
  team_data['Assist_Base'] = team_data.apply(lambda row: row['wAssist%'] * opp_pos_assists_boost_win.get(row['position'], 1), axis=1)
594
+ team_data['Assist_Proj'] = team_data['Assist_Base']
 
595
  team_data['CS_Proj'] = team_data.apply(lambda row: row['wCS'] * opp_pos_cs_boost_win.get(row['position'], 1), axis=1)
596
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
597
  else:
598
  team_data['Kill_Proj'] = team_data.apply(lambda row: row['lKill%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
599
  team_data['Death_Proj'] = team_data.apply(lambda row: row['lDeath%'] * opp_pos_deaths_boost_loss.get(row['position'], 1), axis=1)
600
  team_data['Assist_Base'] = team_data.apply(lambda row: row['lAssist%'] * opp_pos_kills_boost_loss.get(row['position'], 1), axis=1)
601
+ team_data['Assist_Proj'] = team_data['Assist_Base']
 
602
  team_data['CS_Proj'] = team_data.apply(lambda row: row['lCS'] * opp_pos_cs_boost_loss.get(row['position'], 1), axis=1)
603
  team_data = team_data[['playername', 'teamname', 'position', 'Kill_Proj', 'Death_Proj', 'Assist_Proj', 'CS_Proj']]
604