James McCool commited on
Commit
51da0a5
·
1 Parent(s): 6db62f0

Refactor player exposure calculations in app.py

Browse files

- Simplified the logic for calculating player exposure metrics by consolidating the percentile finish calculations into a single conditional block, enhancing code clarity and maintainability.
- Updated the handling of player and stack counts to improve accuracy in the displayed metrics, ensuring a more reliable representation of player performance across different percentiles.

Files changed (1) hide show
  1. app.py +32 -77
app.py CHANGED
@@ -230,85 +230,40 @@ with tab2:
230
  hide_index=True
231
  )
232
 
233
- contest_players = working_df.copy()
234
- players_1per = working_df[working_df['percentile_finish'] <= 0.01]
235
- players_5per = working_df[working_df['percentile_finish'] <= 0.05]
236
- players_10per = working_df[working_df['percentile_finish'] <= 0.10]
237
- players_20per = working_df[working_df['percentile_finish'] <= 0.20]
238
- contest_len = len(contest_players)
239
- len_1per = len(players_1per)
240
- len_5per = len(players_5per)
241
- len_10per = len(players_10per)
242
- len_20per = len(players_20per)
243
- ######## Going to try a groupby based on finishing percentiles here next
244
- player_counts = pd.Series(list(contest_players[player_columns].values.flatten())).value_counts()
245
- player_1per_counts = pd.Series(list(players_1per[player_columns].values.flatten())).value_counts()
246
- player_5per_counts = pd.Series(list(players_5per[player_columns].values.flatten())).value_counts()
247
- player_10per_counts = pd.Series(list(players_10per[player_columns].values.flatten())).value_counts()
248
- player20_per_counts = pd.Series(list(players_20per[player_columns].values.flatten())).value_counts()
249
- stack_counts = pd.Series(list(contest_players['stack'])).value_counts()
250
- stack_1per_counts = pd.Series(list(players_1per['stack'])).value_counts()
251
- stack_5per_counts = pd.Series(list(players_5per['stack'])).value_counts()
252
- stack_10per_counts = pd.Series(list(players_10per['stack'])).value_counts()
253
- stack_20per_counts = pd.Series(list(players_20per['stack'])).value_counts()
254
- dupe_counts = pd.Series(list(contest_players['dupes'])).value_counts()
255
- dupe_1per_counts = pd.Series(list(players_1per['dupes'])).value_counts()
256
- dupe_5per_counts = pd.Series(list(players_5per['dupes'])).value_counts()
257
- dupe_10per_counts = pd.Series(list(players_10per['dupes'])).value_counts()
258
- dupe_20per_counts = pd.Series(list(players_20per['dupes'])).value_counts()
259
- each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
260
- each_frame_set = [contest_players, players_1per, players_5per, players_10per, players_20per]
261
- each_len_set = [contest_len, len_1per, len_5per, len_10per, len_20per]
262
  with st.container():
263
  tab1, tab2, tab3 = st.tabs(['Player Used Info', 'Stack Used Info', 'Duplication Info'])
264
  with tab1:
265
- player_count_var = 0
266
- for each_set in [player_counts, player_1per_counts, player_5per_counts, player_10per_counts, player20_per_counts]:
267
- set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Player', 'count': 'Count'})
268
- set_frame['Percent'] = set_frame['Count'] / each_len_set[player_count_var]
269
- set_frame = set_frame[['Player', 'Percent']]
270
- set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[player_count_var]}'})
271
- if 'player_frame' not in st.session_state:
272
- st.session_state['player_frame'] = set_frame
273
- else:
274
- st.session_state['player_frame'] = pd.merge(st.session_state['player_frame'], set_frame, on='Player', how='outer')
275
- player_count_var += 1
276
- st.dataframe(st.session_state['player_frame'].
277
- sort_values(by='Exposure Overall', ascending=False).
278
- style.background_gradient(cmap='RdYlGn').
279
- format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
280
- hide_index=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  with tab2:
282
- stack_count_var = 0
283
- for each_set in [stack_counts, stack_1per_counts, stack_5per_counts, stack_10per_counts, stack_20per_counts]:
284
- set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
285
- set_frame['Percent'] = set_frame['Count'] / each_len_set[stack_count_var]
286
- set_frame = set_frame[['Stack', 'Percent']]
287
- set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
288
- if 'stack_frame' not in st.session_state:
289
- st.session_state['stack_frame'] = set_frame
290
- else:
291
- st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], set_frame, on='Stack', how='outer')
292
- stack_count_var += 1
293
- st.dataframe(st.session_state['stack_frame'].
294
- sort_values(by='Exposure Overall', ascending=False).
295
- style.background_gradient(cmap='RdYlGn').
296
- format(formatter='{:.2%}', subset=st.session_state['stack_frame'].select_dtypes(include=['number']).columns),
297
- hide_index=True)
298
  with tab3:
299
- dupe_count_var = 0
300
- for each_set in [dupe_counts, dupe_1per_counts, dupe_5per_counts, dupe_10per_counts, dupe_20per_counts]:
301
- set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Dupes', 'count': 'Count'})
302
- set_frame['Percent'] = set_frame['Count'] / each_len_set[dupe_count_var]
303
- set_frame = set_frame[['Dupes', 'Percent']]
304
- set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[dupe_count_var]}'})
305
- if 'dupe_frame' not in st.session_state:
306
- st.session_state['dupe_frame'] = set_frame
307
- else:
308
- st.session_state['dupe_frame'] = pd.merge(st.session_state['dupe_frame'], set_frame, on='Dupes', how='outer')
309
- dupe_count_var += 1
310
- st.dataframe(st.session_state['dupe_frame'].
311
- sort_values(by='Exposure Overall', ascending=False).
312
- style.background_gradient(cmap='RdYlGn').
313
- format(formatter='{:.2%}', subset=st.session_state['dupe_frame'].select_dtypes(include=['number']).columns),
314
- hide_index=True)
 
230
  hide_index=True
231
  )
232
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  with st.container():
234
  tab1, tab2, tab3 = st.tabs(['Player Used Info', 'Stack Used Info', 'Duplication Info'])
235
  with tab1:
236
+ if entry_parse_var == 'All':
237
+ overall_players = pd.Series(list(working_df[player_columns].values.flatten())).value_counts()
238
+ top_1per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01][player_columns].values.flatten())).value_counts()
239
+ top_5per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05][player_columns].values.flatten())).value_counts()
240
+ top_10per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10][player_columns].values.flatten())).value_counts()
241
+ top_20per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20][player_columns].values.flatten())).value_counts()
242
+ contest_len = len(working_df)
243
+ len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
244
+ len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
245
+ len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
246
+ len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
247
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
248
+ each_frame_set = [overall_players, top_1per_players, top_5per_players, top_10per_players, top_20per_players]
249
+ each_len_set = [contest_len, len_1per, len_5per, len_10per, len_20per]
250
+ player_count_var = 0
251
+ for each_set in each_frame_set:
252
+ set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Player', 'count': 'Count'})
253
+ set_frame['Percent'] = set_frame['Count'] / each_len_set[player_count_var]
254
+ set_frame = set_frame[['Player', 'Percent']]
255
+ set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[player_count_var]}'})
256
+ if 'player_frame' not in st.session_state:
257
+ st.session_state['player_frame'] = set_frame
258
+ else:
259
+ st.session_state['player_frame'] = pd.merge(st.session_state['player_frame'], set_frame, on='Player', how='outer')
260
+ player_count_var += 1
261
+ st.dataframe(st.session_state['player_frame'].
262
+ sort_values(by='Exposure Overall', ascending=False).
263
+ style.background_gradient(cmap='RdYlGn').
264
+ format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
265
+ hide_index=True)
266
  with tab2:
267
+ st.write('holding')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  with tab3:
269
+ st.write('holding')