James McCool commited on
Commit
45307d2
·
1 Parent(s): 30408c9

Refactor init_team_data function in app.py to streamline statistical calculations and enhance clarity. Removed redundant statistics calculations and reorganized the logic for player and team performance metrics, focusing on win/loss scenarios. This update improves the readability and efficiency of the code while maintaining the accuracy of performance evaluations based on opponent statistics.

Browse files
Files changed (1) hide show
  1. app.py +108 -144
app.py CHANGED
@@ -121,12 +121,8 @@ def init_team_data(team, opponent, win_loss, kill_prediction, death_prediction,
121
  for loop in range(len(tables_to_loop)):
122
  tables = tables_to_loop[loop]
123
  calc_columns = ['kills', 'deaths', 'assists', 'total_cs']
124
- league_win_stats = {}
125
- league_loss_stats = {}
126
  league_pos_win_stats = {}
127
  league_pos_loss_stats = {}
128
- Opponent_win_allowed_stats = {}
129
- Opponent_loss_allowed_stats = {}
130
  Opponent_pos_win_allowed_stats = {}
131
  Opponent_pos_loss_allowed_stats = {}
132
  playername_win_stats = {}
@@ -134,150 +130,118 @@ def init_team_data(team, opponent, win_loss, kill_prediction, death_prediction,
134
  teamname_win_stats = {}
135
  teamname_loss_stats = {}
136
 
137
- for stats in calc_columns:
138
- league_win_stats[stats] = tables[(tables['result'] == 1) & (tables['position'] != 'team')].groupby('league')[stats].mean().to_dict()
139
- league_loss_stats[stats] = tables[(tables['result'] == 0) & (tables['position'] != 'team')].groupby('league')[stats].mean().to_dict()
140
- Opponent_win_allowed_stats[stats] = tables[(tables['result'] == 1) & (tables['position'] != 'team')].groupby('Opponent')[stats].mean().to_dict()
141
- Opponent_loss_allowed_stats[stats] = tables[(tables['result'] == 0) & (tables['position'] != 'team')].groupby('Opponent')[stats].mean().to_dict()
142
-
143
- for stats in calc_columns:
144
- league_pos_win_stats[stats] = {
145
- league: group.groupby('position')[stats].mean().to_dict()
146
- for league, group in tables[tables['result'] == 1].groupby('league')
147
- }
148
- league_pos_loss_stats[stats] = {
149
- league: group.groupby('position')[stats].mean().to_dict()
150
- for league, group in tables[tables['result'] == 0].groupby('league')
151
- }
152
-
153
- Opponent_pos_win_allowed_stats[stats] = {
154
- opponent: group.groupby('position')[stats].mean().to_dict()
155
- for opponent, group in tables[tables['result'] == 1].groupby('Opponent')
156
- }
157
- Opponent_pos_loss_allowed_stats[stats] = {
158
- opponent: group.groupby('position')[stats].mean().to_dict()
159
- for opponent, group in tables[tables['result'] == 0].groupby('Opponent')
160
- }
161
-
162
- for stats in calc_columns:
163
- playername_win_stats[stats] = tables[tables['result'] == 1].groupby(['playername'])[stats].mean().to_dict()
164
- playername_loss_stats[stats] = tables[tables['result'] == 0].groupby(['playername'])[stats].mean().to_dict()
165
- teamname_win_stats[stats] = tables[(tables['result'] == 1) & (tables['position'] == 'team')].groupby(['teamname'])[stats].mean().to_dict()
166
- teamname_loss_stats[stats] = tables[(tables['result'] == 0) & (tables['position'] == 'team')].groupby(['teamname'])[stats].mean().to_dict()
167
-
168
- for stat in calc_columns:
169
-
170
- column_name = f'league_avg_{stat}_win'
171
- tables[column_name] = tables.apply(
172
- lambda row: league_win_stats[stat].get(row['league'], 0),
173
- axis=1
174
- )
175
-
176
- column_name = f'league_avg_{stat}_loss'
177
- tables[column_name] = tables.apply(
178
- lambda row: league_loss_stats[stat].get(row['league'], 0),
179
- axis=1
180
- )
181
-
182
- column_name = f'Opponent_avg_{stat}_allowed_win'
183
- tables[column_name] = tables.apply(
184
- lambda row: Opponent_win_allowed_stats[stat].get(row['Opponent'], 0),
185
- axis=1
186
- )
187
-
188
- column_name = f'Opponent_avg_{stat}_allowed_loss'
189
- tables[column_name] = tables.apply(
190
- lambda row: Opponent_loss_allowed_stats[stat].get(row['Opponent'], 0),
191
- axis=1
192
- )
193
-
194
- column_name = f'league_pos_avg_{stat}_win'
195
- tables[column_name] = tables.apply(
196
- lambda row: league_pos_win_stats[stat].get(row['league'], {}).get(row['position'], 0),
197
- axis=1
198
- )
199
-
200
- column_name = f'league_pos_avg_{stat}_loss'
201
- tables[column_name] = tables.apply(
202
- lambda row: league_pos_loss_stats[stat].get(row['league'], {}).get(row['position'], 0),
203
- axis=1
204
- )
205
-
206
- column_name = f'Opponent_pos_avg_{stat}_allowed_win'
207
- tables[column_name] = tables.apply(
208
- lambda row: Opponent_pos_win_allowed_stats[stat].get(row['Opponent'], {}).get(row['position'], 0),
209
- axis=1
210
- )
211
-
212
- column_name = f'Opponent_pos_avg_{stat}_allowed_loss'
213
- tables[column_name] = tables.apply(
214
- lambda row: Opponent_pos_loss_allowed_stats[stat].get(row['Opponent'], {}).get(row['position'], 0),
215
- axis=1
216
- )
217
-
218
- column_name = f'playername_avg_{stat}_win'
219
- tables[column_name] = tables.apply(
220
- lambda row: playername_win_stats[stat].get(row['playername'], 0),
221
- axis=1
222
- )
223
-
224
- column_name = f'playername_avg_{stat}_loss'
225
- tables[column_name] = tables.apply(
226
- lambda row: playername_loss_stats[stat].get(row['playername'], 0),
227
- axis=1
228
- )
229
-
230
- column_name = f'teamname_avg_{stat}_win'
231
- tables[column_name] = tables.apply(
232
- lambda row: teamname_win_stats[stat].get(row['teamname'], 0),
233
- axis=1
234
- )
235
-
236
- column_name = f'teamname_avg_{stat}_loss'
237
- tables[column_name] = tables.apply(
238
- lambda row: teamname_loss_stats[stat].get(row['teamname'], 0),
239
- axis=1
240
- )
241
-
242
- tables['overall_win_kills_boost'] = tables['Opponent_avg_kills_allowed_win'] / tables['league_avg_kills_win']
243
- tables['overall_win_deaths_boost'] = tables['Opponent_avg_deaths_allowed_win'] / tables['league_avg_deaths_win']
244
- tables['overall_win_assists_boost'] = tables['Opponent_avg_assists_allowed_win'] / tables['league_avg_assists_win']
245
- tables['overall_win_total_cs_boost'] = tables['Opponent_avg_total_cs_allowed_win'] / tables['league_avg_total_cs_win']
246
- tables['overall_loss_kills_boost'] = tables['Opponent_avg_kills_allowed_loss'] / tables['league_avg_kills_loss']
247
- tables['overall_loss_deaths_boost'] = tables['Opponent_avg_deaths_allowed_loss'] / tables['league_avg_deaths_loss']
248
- tables['overall_loss_assists_boost'] = tables['Opponent_avg_assists_allowed_loss'] / tables['league_avg_assists_loss']
249
- tables['overall_loss_total_cs_boost'] = tables['Opponent_avg_total_cs_allowed_loss'] / tables['league_avg_total_cs_loss']
250
-
251
- tables['overall_win_kills_boost_pos'] = tables['Opponent_pos_avg_kills_allowed_win'] / tables['league_pos_avg_kills_win']
252
- tables['overall_win_deaths_boost_pos'] = tables['Opponent_pos_avg_deaths_allowed_win'] / tables['league_pos_avg_deaths_win']
253
- tables['overall_win_assists_boost_pos'] = tables['Opponent_pos_avg_assists_allowed_win'] / tables['league_pos_avg_assists_win']
254
- tables['overall_win_total_cs_boost_pos'] = tables['Opponent_pos_avg_total_cs_allowed_win'] / tables['league_pos_avg_total_cs_win']
255
- tables['overall_loss_kills_boost_pos'] = tables['Opponent_pos_avg_kills_allowed_loss'] / tables['league_pos_avg_kills_loss']
256
- tables['overall_loss_deaths_boost_pos'] = tables['Opponent_pos_avg_deaths_allowed_loss'] / tables['league_pos_avg_deaths_loss']
257
- tables['overall_loss_assists_boost_pos'] = tables['Opponent_pos_avg_assists_allowed_loss'] / tables['league_pos_avg_assists_loss']
258
- tables['overall_loss_total_cs_boost_pos'] = tables['Opponent_pos_avg_total_cs_allowed_loss'] / tables['league_pos_avg_total_cs_loss']
259
-
260
- tables['playername_avg_kill_share_win'] = tables['playername_avg_kills_win'] / tables['teamname_avg_kills_win']
261
- tables['playername_avg_death_share_win'] = tables['playername_avg_deaths_win'] / tables['teamname_avg_deaths_win']
262
- tables['playername_avg_assist_share_win'] = tables['playername_avg_assists_win'] / tables['teamname_avg_kills_win']
263
- tables['playername_avg_cs_share_win'] = tables['playername_avg_total_cs_win'] / tables['teamname_avg_total_cs_win']
264
- tables['playername_avg_kill_share_loss'] = tables['playername_avg_kills_loss'] / tables['teamname_avg_kills_loss']
265
- tables['playername_avg_death_share_loss'] = tables['playername_avg_deaths_loss'] / tables['teamname_avg_deaths_loss']
266
- tables['playername_avg_assist_share_loss'] = tables['playername_avg_assists_loss'] / tables['teamname_avg_kills_loss']
267
- tables['playername_avg_cs_share_loss'] = tables['playername_avg_total_cs_loss'] / tables['teamname_avg_total_cs_loss']
268
-
269
  if loop == 0:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  player_tables = tables
 
271
  else:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  opp_tables = tables
273
- opp_pos_kills_boost_win = dict(zip(tables['position'], tables['overall_win_kills_boost_pos']))
274
- opp_pos_deaths_boost_win = dict(zip(tables['position'], tables['overall_win_deaths_boost_pos']))
275
- opp_pos_assists_boost_win = dict(zip(tables['position'], tables['overall_win_assists_boost_pos']))
276
- opp_pos_cs_boost_win = dict(zip(tables['position'], tables['overall_win_total_cs_boost_pos']))
277
- opp_pos_kills_boost_loss = dict(zip(tables['position'], tables['overall_loss_kills_boost_pos']))
278
- opp_pos_deaths_boost_loss = dict(zip(tables['position'], tables['overall_loss_deaths_boost_pos']))
279
- opp_pos_assists_boost_loss = dict(zip(tables['position'], tables['overall_loss_assists_boost_pos']))
280
- opp_pos_cs_boost_loss = dict(zip(tables['position'], tables['overall_loss_total_cs_boost_pos']))
 
281
 
282
  if kill_prediction > 0:
283
  player_tables = player_tables[['playername', 'teamname', 'position', 'playername_avg_kill_share_win', 'playername_avg_death_share_win','playername_avg_assist_share_win',
 
121
  for loop in range(len(tables_to_loop)):
122
  tables = tables_to_loop[loop]
123
  calc_columns = ['kills', 'deaths', 'assists', 'total_cs']
 
 
124
  league_pos_win_stats = {}
125
  league_pos_loss_stats = {}
 
 
126
  Opponent_pos_win_allowed_stats = {}
127
  Opponent_pos_loss_allowed_stats = {}
128
  playername_win_stats = {}
 
130
  teamname_win_stats = {}
131
  teamname_loss_stats = {}
132
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  if loop == 0:
134
+
135
+ for stats in calc_columns:
136
+ playername_win_stats[stats] = tables[tables['result'] == 1].groupby(['playername'])[stats].mean().to_dict()
137
+ playername_loss_stats[stats] = tables[tables['result'] == 0].groupby(['playername'])[stats].mean().to_dict()
138
+ teamname_win_stats[stats] = tables[(tables['result'] == 1) & (tables['position'] == 'team')].groupby(['teamname'])[stats].mean().to_dict()
139
+ teamname_loss_stats[stats] = tables[(tables['result'] == 0) & (tables['position'] == 'team')].groupby(['teamname'])[stats].mean().to_dict()
140
+
141
+ for stat in calc_columns:
142
+
143
+ column_name = f'playername_avg_{stat}_win'
144
+ tables[column_name] = tables.apply(
145
+ lambda row: playername_win_stats[stat].get(row['playername'], 0),
146
+ axis=1
147
+ )
148
+
149
+ column_name = f'playername_avg_{stat}_loss'
150
+ tables[column_name] = tables.apply(
151
+ lambda row: playername_loss_stats[stat].get(row['playername'], 0),
152
+ axis=1
153
+ )
154
+
155
+ column_name = f'teamname_avg_{stat}_win'
156
+ tables[column_name] = tables.apply(
157
+ lambda row: teamname_win_stats[stat].get(row['teamname'], 0),
158
+ axis=1
159
+ )
160
+
161
+ column_name = f'teamname_avg_{stat}_loss'
162
+ tables[column_name] = tables.apply(
163
+ lambda row: teamname_loss_stats[stat].get(row['teamname'], 0),
164
+ axis=1
165
+ )
166
+
167
+ tables['playername_avg_kill_share_win'] = tables['playername_avg_kills_win'] / tables['teamname_avg_kills_win']
168
+ tables['playername_avg_death_share_win'] = tables['playername_avg_deaths_win'] / tables['teamname_avg_deaths_win']
169
+ tables['playername_avg_assist_share_win'] = tables['playername_avg_assists_win'] / tables['teamname_avg_kills_win']
170
+ tables['playername_avg_cs_share_win'] = tables['playername_avg_total_cs_win'] / tables['teamname_avg_total_cs_win']
171
+ tables['playername_avg_kill_share_loss'] = tables['playername_avg_kills_loss'] / tables['teamname_avg_kills_loss']
172
+ tables['playername_avg_death_share_loss'] = tables['playername_avg_deaths_loss'] / tables['teamname_avg_deaths_loss']
173
+ tables['playername_avg_assist_share_loss'] = tables['playername_avg_assists_loss'] / tables['teamname_avg_kills_loss']
174
+ tables['playername_avg_cs_share_loss'] = tables['playername_avg_total_cs_loss'] / tables['teamname_avg_total_cs_loss']
175
  player_tables = tables
176
+
177
  else:
178
+
179
+ for stats in calc_columns:
180
+ league_pos_win_stats[stats] = {
181
+ league: group.groupby('position')[stats].mean().to_dict()
182
+ for league, group in tables[tables['result'] == 1].groupby('league')
183
+ }
184
+ league_pos_loss_stats[stats] = {
185
+ league: group.groupby('position')[stats].mean().to_dict()
186
+ for league, group in tables[tables['result'] == 0].groupby('league')
187
+ }
188
+
189
+ Opponent_pos_win_allowed_stats[stats] = {
190
+ opponent: group.groupby('position')[stats].mean().to_dict()
191
+ for opponent, group in tables[tables['result'] == 1].groupby('Opponent')
192
+ }
193
+ Opponent_pos_loss_allowed_stats[stats] = {
194
+ opponent: group.groupby('position')[stats].mean().to_dict()
195
+ for opponent, group in tables[tables['result'] == 0].groupby('Opponent')
196
+ }
197
+
198
+ for stat in calc_columns:
199
+
200
+ column_name = f'league_pos_avg_{stat}_win'
201
+ tables[column_name] = tables.apply(
202
+ lambda row: league_pos_win_stats[stat].get(row['league'], {}).get(row['position'], 0),
203
+ axis=1
204
+ )
205
+
206
+ column_name = f'league_pos_avg_{stat}_loss'
207
+ tables[column_name] = tables.apply(
208
+ lambda row: league_pos_loss_stats[stat].get(row['league'], {}).get(row['position'], 0),
209
+ axis=1
210
+ )
211
+
212
+ column_name = f'Opponent_pos_avg_{stat}_allowed_win'
213
+ tables[column_name] = tables.apply(
214
+ lambda row: Opponent_pos_win_allowed_stats[stat].get(row['Opponent'], {}).get(row['position'], 0),
215
+ axis=1
216
+ )
217
+
218
+ column_name = f'Opponent_pos_avg_{stat}_allowed_loss'
219
+ tables[column_name] = tables.apply(
220
+ lambda row: Opponent_pos_loss_allowed_stats[stat].get(row['Opponent'], {}).get(row['position'], 0),
221
+ axis=1
222
+ )
223
+
224
+ tables = tables[tables['Opponent'] == opponent]
225
+
226
+ tables['overall_win_kills_boost_pos'] = tables['Opponent_pos_avg_kills_allowed_win'] / tables['league_pos_avg_kills_win']
227
+ tables['overall_win_deaths_boost_pos'] = tables['Opponent_pos_avg_deaths_allowed_win'] / tables['league_pos_avg_deaths_win']
228
+ tables['overall_win_assists_boost_pos'] = tables['Opponent_pos_avg_assists_allowed_win'] / tables['league_pos_avg_assists_win']
229
+ tables['overall_win_total_cs_boost_pos'] = tables['Opponent_pos_avg_total_cs_allowed_win'] / tables['league_pos_avg_total_cs_win']
230
+ tables['overall_loss_kills_boost_pos'] = tables['Opponent_pos_avg_kills_allowed_loss'] / tables['league_pos_avg_kills_loss']
231
+ tables['overall_loss_deaths_boost_pos'] = tables['Opponent_pos_avg_deaths_allowed_loss'] / tables['league_pos_avg_deaths_loss']
232
+ tables['overall_loss_assists_boost_pos'] = tables['Opponent_pos_avg_assists_allowed_loss'] / tables['league_pos_avg_assists_loss']
233
+ tables['overall_loss_total_cs_boost_pos'] = tables['Opponent_pos_avg_total_cs_allowed_loss'] / tables['league_pos_avg_total_cs_loss']
234
+
235
  opp_tables = tables
236
+ opp_pos_kills_boost_win = dict(zip(opp_tables['position'], opp_tables['overall_win_kills_boost_pos']))
237
+ opp_pos_deaths_boost_win = dict(zip(opp_tables['position'], opp_tables['overall_win_deaths_boost_pos']))
238
+ opp_pos_assists_boost_win = dict(zip(opp_tables['position'], opp_tables['overall_win_assists_boost_pos']))
239
+ opp_pos_cs_boost_win = dict(zip(opp_tables['position'], opp_tables['overall_win_total_cs_boost_pos']))
240
+ opp_pos_kills_boost_loss = dict(zip(opp_tables['position'], opp_tables['overall_loss_kills_boost_pos']))
241
+ opp_pos_deaths_boost_loss = dict(zip(opp_tables['position'], opp_tables['overall_loss_deaths_boost_pos']))
242
+ opp_pos_assists_boost_loss = dict(zip(opp_tables['position'], opp_tables['overall_loss_assists_boost_pos']))
243
+ opp_pos_cs_boost_loss = dict(zip(opp_tables['position'], opp_tables['overall_loss_total_cs_boost_pos']))
244
+
245
 
246
  if kill_prediction > 0:
247
  player_tables = player_tables[['playername', 'teamname', 'position', 'playername_avg_kill_share_win', 'playername_avg_death_share_win','playername_avg_assist_share_win',