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

Add player exposure metrics by percentile in app.py

Browse files

- Implemented calculations for player exposure across various percentiles (Overall, Top 1%, Top 5%, Top 10%, Top 20%) to enhance performance analysis.
- Updated session state management to store and display player exposure data, improving the clarity and usability of player performance metrics in the application.

Files changed (1) hide show
  1. app.py +30 -0
app.py CHANGED
@@ -263,6 +263,36 @@ with tab2:
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:
 
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
+ else:
267
+ overall_players = pd.Series(list(working_df[working_df['BaseName'].isin(entry_names)][player_columns].values.flatten())).value_counts()
268
+ top_1per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01][player_columns].values.flatten())).value_counts()
269
+ top_5per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05][player_columns].values.flatten())).value_counts()
270
+ top_10per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10][player_columns].values.flatten())).value_counts()
271
+ top_20per_players = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20][player_columns].values.flatten())).value_counts()
272
+ contest_len = len(working_df)
273
+ len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
274
+ len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
275
+ len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
276
+ len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
277
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
278
+ each_frame_set = [overall_players, top_1per_players, top_5per_players, top_10per_players, top_20per_players]
279
+ each_len_set = [contest_len, len_1per, len_5per, len_10per, len_20per]
280
+ player_count_var = 0
281
+ for each_set in each_frame_set:
282
+ set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Player', 'count': 'Count'})
283
+ set_frame['Percent'] = set_frame['Count'] / each_len_set[player_count_var]
284
+ set_frame = set_frame[['Player', 'Percent']]
285
+ set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[player_count_var]}'})
286
+ if 'player_frame' not in st.session_state:
287
+ st.session_state['player_frame'] = set_frame
288
+ else:
289
+ st.session_state['player_frame'] = pd.merge(st.session_state['player_frame'], set_frame, on='Player', how='outer')
290
+ player_count_var += 1
291
+ st.dataframe(st.session_state['player_frame'].
292
+ sort_values(by='Exposure Overall', ascending=False).
293
+ style.background_gradient(cmap='RdYlGn').
294
+ format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
295
+ hide_index=True)
296
  with tab2:
297
  st.write('holding')
298
  with tab3: