Spaces:
Running
Running
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
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(
|
274 |
-
opp_pos_deaths_boost_win = dict(zip(
|
275 |
-
opp_pos_assists_boost_win = dict(zip(
|
276 |
-
opp_pos_cs_boost_win = dict(zip(
|
277 |
-
opp_pos_kills_boost_loss = dict(zip(
|
278 |
-
opp_pos_deaths_boost_loss = dict(zip(
|
279 |
-
opp_pos_assists_boost_loss = dict(zip(
|
280 |
-
opp_pos_cs_boost_loss = dict(zip(
|
|
|
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',
|