James McCool commited on
Commit
2804dab
·
1 Parent(s): 9da8f46

Add detailed player exposure metrics display in app.py

Browse files

- Implemented comprehensive calculations for player exposure across various percentiles (Overall, Top 1%, Top 5%, Top 10%, Top 20%) based on user selection.
- Enhanced session state management to dynamically store and display exposure data, improving the clarity and usability of player performance metrics.
- Updated the dataframe presentation with background gradients for better visual representation of exposure percentages.

Files changed (1) hide show
  1. app.py +60 -1
app.py CHANGED
@@ -297,6 +297,65 @@ with tab2:
297
  format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
298
  hide_index=True)
299
  with tab2:
300
- st.write('holding')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301
  with tab3:
302
  st.write('holding')
 
297
  format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
298
  hide_index=True)
299
  with tab2:
300
+ if entry_parse_var == 'All':
301
+ overall_stacks = pd.Series(list(working_df['stack'])).value_counts()
302
+ top_1per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01]['stack'])).value_counts()
303
+ top_5per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05]['stack'])).value_counts()
304
+ top_10per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10]['stack'])).value_counts()
305
+ top_20per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20]['stack'])).value_counts()
306
+ contest_len = len(working_df)
307
+ len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
308
+ len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
309
+ len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
310
+ len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
311
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
312
+ each_frame_set = [overall_stacks, top_1per_stacks, top_5per_stacks, top_10per_stacks, top_20per_stacks]
313
+ each_len_set = [contest_len, len_1per, len_5per, len_10per, len_20per]
314
+ stack_count_var = 0
315
+ for each_set in each_frame_set:
316
+ set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
317
+ set_frame['Percent'] = set_frame['Count'] / each_len_set[stack_count_var]
318
+ set_frame = set_frame[['Stack', 'Percent']]
319
+ set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
320
+ if 'stack_frame' not in st.session_state:
321
+ st.session_state['stack_frame'] = set_frame
322
+ else:
323
+ st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], set_frame, on='Stack', how='outer')
324
+ player_count_var += 1
325
+ st.dataframe(st.session_state['stack_frame'].
326
+ sort_values(by='Exposure Overall', ascending=False).
327
+ style.background_gradient(cmap='RdYlGn').
328
+ format(formatter='{:.2%}', subset=st.session_state['stack_frame'].select_dtypes(include=['number']).columns),
329
+ hide_index=True)
330
+ else:
331
+ overall_stacks = pd.Series(list(working_df[working_df['BaseName'].isin(entry_names)]['stack'])).value_counts()
332
+ top_1per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01]['stack'])).value_counts()
333
+ top_5per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05]['stack'])).value_counts()
334
+ top_10per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10]['stack'])).value_counts()
335
+ top_20per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20]['stack'])).value_counts()
336
+ contest_len = len(working_df)
337
+ len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
338
+ len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
339
+ len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
340
+ len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
341
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
342
+ each_frame_set = [overall_stacks, top_1per_stacks, top_5per_stacks, top_10per_stacks, top_20per_stacks]
343
+ each_len_set = [contest_len, len_1per, len_5per, len_10per, len_20per]
344
+ stack_count_var = 0
345
+ for each_set in each_frame_set:
346
+ set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
347
+ set_frame['Percent'] = set_frame['Count'] / each_len_set[stack_count_var]
348
+ set_frame = set_frame[['Stack', 'Percent']]
349
+ set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
350
+ if 'stack_frame' not in st.session_state:
351
+ st.session_state['stack_frame'] = set_frame
352
+ else:
353
+ st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], set_frame, on='Stack', how='outer')
354
+ stack_count_var += 1
355
+ st.dataframe(st.session_state['stack_frame'].
356
+ sort_values(by='Exposure Overall', ascending=False).
357
+ style.background_gradient(cmap='RdYlGn').
358
+ format(formatter='{:.2%}', subset=st.session_state['stack_frame'].select_dtypes(include=['number']).columns),
359
+ hide_index=True)
360
  with tab3:
361
  st.write('holding')