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.
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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')
|