James McCool commited on
Commit
db00ed7
·
1 Parent(s): 37d804e

Add duplication info tab and update dataframe handling in app.py

Browse files

- Introduced a new tab for displaying duplication information alongside player and stack data.
- Added calculations for duplicate counts across various player sets, enhancing data analysis capabilities.
- Updated dataframe display logic to include duplication metrics, ensuring consistent styling and formatting.
- Improved overall user experience by providing comprehensive insights into player usage and duplication trends.

Files changed (1) hide show
  1. app.py +31 -9
app.py CHANGED
@@ -240,10 +240,15 @@ with tab2:
240
  stack_5per_counts = pd.Series(list(players_5per['stack'])).value_counts()
241
  stack_10per_counts = pd.Series(list(players_10per['stack'])).value_counts()
242
  stack_20per_counts = pd.Series(list(players_20per['stack'])).value_counts()
 
 
 
 
 
243
  each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
244
  each_frame_set = [contest_players, players_1per, players_5per, players_10per, players_20per]
245
  with st.container():
246
- tab1, tab2 = st.tabs(['Player Used Info', 'Stack Used Info'])
247
  with tab1:
248
  player_count_var = 0
249
  for each_set in [player_counts, player_1per_counts, player_5per_counts, player_10per_counts, player20_per_counts]:
@@ -257,10 +262,10 @@ with tab2:
257
  st.session_state['player_frame'] = pd.merge(st.session_state['player_frame'], set_frame, on='Player', how='outer')
258
  player_count_var += 1
259
  st.dataframe(st.session_state['player_frame'].
260
- sort_values(by='Exposure Overall', ascending=False).
261
- style.background_gradient(cmap='RdYlGn').
262
- format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
263
- hide_index=True)
264
  with tab2:
265
  stack_count_var = 0
266
  for each_set in [stack_counts, stack_1per_counts, stack_5per_counts, stack_10per_counts, stack_20per_counts]:
@@ -274,7 +279,24 @@ with tab2:
274
  st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], set_frame, on='Stack', how='outer')
275
  stack_count_var += 1
276
  st.dataframe(st.session_state['stack_frame'].
277
- sort_values(by='Exposure Overall', ascending=False).
278
- style.background_gradient(cmap='RdYlGn').
279
- format(formatter='{:.2%}', subset=st.session_state['stack_frame'].select_dtypes(include=['number']).columns),
280
- hide_index=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  stack_5per_counts = pd.Series(list(players_5per['stack'])).value_counts()
241
  stack_10per_counts = pd.Series(list(players_10per['stack'])).value_counts()
242
  stack_20per_counts = pd.Series(list(players_20per['stack'])).value_counts()
243
+ dupe_counts = pd.Series(list(contest_players['dupes'])).value_counts()
244
+ dupe_1per_counts = pd.Series(list(players_1per['dupes'])).value_counts()
245
+ dupe_5per_counts = pd.Series(list(players_5per['dupes'])).value_counts()
246
+ dupe_10per_counts = pd.Series(list(players_10per['dupes'])).value_counts()
247
+ dupe_20per_counts = pd.Series(list(players_20per['dupes'])).value_counts()
248
  each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
249
  each_frame_set = [contest_players, players_1per, players_5per, players_10per, players_20per]
250
  with st.container():
251
+ tab1, tab2, tab3 = st.tabs(['Player Used Info', 'Stack Used Info', 'Duplication Info'])
252
  with tab1:
253
  player_count_var = 0
254
  for each_set in [player_counts, player_1per_counts, player_5per_counts, player_10per_counts, player20_per_counts]:
 
262
  st.session_state['player_frame'] = pd.merge(st.session_state['player_frame'], set_frame, on='Player', how='outer')
263
  player_count_var += 1
264
  st.dataframe(st.session_state['player_frame'].
265
+ sort_values(by='Exposure Overall', ascending=False).
266
+ style.background_gradient(cmap='RdYlGn').
267
+ format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
268
+ hide_index=True)
269
  with tab2:
270
  stack_count_var = 0
271
  for each_set in [stack_counts, stack_1per_counts, stack_5per_counts, stack_10per_counts, stack_20per_counts]:
 
279
  st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], set_frame, on='Stack', how='outer')
280
  stack_count_var += 1
281
  st.dataframe(st.session_state['stack_frame'].
282
+ sort_values(by='Exposure Overall', ascending=False).
283
+ style.background_gradient(cmap='RdYlGn').
284
+ format(formatter='{:.2%}', subset=st.session_state['stack_frame'].select_dtypes(include=['number']).columns),
285
+ hide_index=True)
286
+ with tab3:
287
+ dupe_count_var = 0
288
+ for each_set in [dupe_counts, dupe_1per_counts, dupe_5per_counts, dupe_10per_counts, dupe_20per_counts]:
289
+ set_frame = each_set.to_frame().reset_index().rename(columns={'index': 'Dupes', 'count': 'Count'})
290
+ set_frame['Percent'] = set_frame['Count'] / len(each_frame_set[dupe_count_var])
291
+ set_frame = set_frame[['Dupes', 'Percent']]
292
+ set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
293
+ if 'dupe_frame' not in st.session_state:
294
+ st.session_state['dupe_frame'] = set_frame
295
+ else:
296
+ st.session_state['dupe_frame'] = pd.merge(st.session_state['dupe_frame'], set_frame, on='Dupes', how='outer')
297
+ stack_count_var += 1
298
+ st.dataframe(st.session_state['dupe_frame'].
299
+ sort_values(by='Exposure Overall', ascending=False).
300
+ style.background_gradient(cmap='RdYlGn').
301
+ format(formatter='{:.2%}', subset=st.session_state['dupe_frame'].select_dtypes(include=['number']).columns),
302
+ hide_index=True)