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.
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 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
281 |
with tab2:
|
282 |
-
|
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 |
-
|
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')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|