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