James McCool commited on
Commit
89f3a60
·
1 Parent(s): 0d01fa6

Refactor pagination and data display in app.py

Browse files

- Improved the pagination logic by ensuring consistent handling of session state for current page navigation.
- Streamlined the creation of pagination controls and data display, enhancing user interaction and clarity.
- Maintained functionality for displaying player and stack information across multiple tabs, ensuring a cohesive user experience.

Files changed (1) hide show
  1. app.py +116 -116
app.py CHANGED
@@ -191,127 +191,127 @@ with tab2:
191
  elif entry_parse_var == 'All':
192
  st.session_state['calc_toggle'] = True
193
 
194
- # Initialize pagination in session state if not exists
195
- if 'current_page' not in st.session_state:
196
- st.session_state.current_page = 1
197
 
198
- # Calculate total pages
199
- rows_per_page = 500
200
- total_rows = len(working_df)
201
- total_pages = (total_rows + rows_per_page - 1) // rows_per_page
202
 
203
- # Create pagination controls in a single row
204
- pagination_cols = st.columns([4, 1, 1, 1, 4])
205
- with pagination_cols[1]:
206
- if st.button(f"Previous Page"):
207
- if st.session_state['current_page'] > 1:
208
- st.session_state.current_page -= 1
209
- else:
210
- st.session_state.current_page = 1
211
- if 'player_frame' in st.session_state:
212
- del st.session_state['player_frame']
213
- if 'stack_frame' in st.session_state:
214
- del st.session_state['stack_frame']
215
-
216
- with pagination_cols[3]:
217
- if st.button(f"Next Page"):
218
- st.session_state.current_page += 1
219
  if 'player_frame' in st.session_state:
220
  del st.session_state['player_frame']
221
  if 'stack_frame' in st.session_state:
222
  del st.session_state['stack_frame']
223
 
224
- # Calculate start and end indices for current page
225
- start_idx = (st.session_state.current_page - 1) * rows_per_page
226
- end_idx = min((st.session_state.current_page) * rows_per_page, total_rows)
227
- st.dataframe(
228
- working_df.iloc[start_idx:end_idx].style
229
- .background_gradient(axis=0)
230
- .background_gradient(cmap='RdYlGn')
231
- .format(precision=2),
232
- height=500,
233
- use_container_width=True,
234
- hide_index=True
235
- )
 
 
 
 
 
 
 
 
236
 
237
- with st.container():
238
- tab1, tab2, tab3 = st.tabs(['Player Used Info', 'Stack Used Info', 'Duplication Info'])
239
- with tab1:
240
- st.session_state['field_frame'] = create_player_exposures(working_df, player_columns)
241
- if entry_parse_var == 'All':
242
- st.session_state['player_frame'] = create_player_exposures(working_df, player_columns)
243
- st.dataframe(st.session_state['player_frame'].
244
- sort_values(by='Exposure Overall', ascending=False).
245
- style.background_gradient(cmap='RdYlGn').
246
- format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
247
- hide_index=True)
248
- else:
249
- st.session_state['player_frame'] = create_player_exposures(working_df, player_columns, entry_names)
250
- st.dataframe(st.session_state['player_frame'].
251
- sort_values(by='Exposure Overall', ascending=False).
252
- style.background_gradient(cmap='RdYlGn').
253
- format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
254
- hide_index=True)
255
- with tab2:
256
- if entry_parse_var == 'All':
257
- overall_stacks = pd.Series(list(working_df['stack'])).value_counts()
258
- top_1per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01]['stack'])).value_counts()
259
- top_5per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05]['stack'])).value_counts()
260
- top_10per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10]['stack'])).value_counts()
261
- top_20per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20]['stack'])).value_counts()
262
- stacks_contest_len = len(working_df)
263
- stacks_len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
264
- stacks_len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
265
- stacks_len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
266
- stacks_len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
267
- each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
268
- each_stacks_set = [overall_stacks, top_1per_stacks, top_5per_stacks, top_10per_stacks, top_20per_stacks]
269
- each_stacks_len_set = [stacks_contest_len, stacks_len_1per, stacks_len_5per, stacks_len_10per, stacks_len_20per]
270
- stack_count_var = 0
271
- for each_stack in each_stacks_set:
272
- stack_frame = each_stack.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
273
- stack_frame['Percent'] = stack_frame['Count'] / each_stacks_len_set[stack_count_var]
274
- stack_frame = stack_frame[['Stack', 'Percent']]
275
- stack_frame = stack_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
276
- if 'stack_frame' not in st.session_state:
277
- st.session_state['stack_frame'] = stack_frame
278
- else:
279
- st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], stack_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
- else:
287
- overall_stacks = pd.Series(list(working_df[working_df['BaseName'].isin(entry_names)]['stack'])).value_counts()
288
- top_1per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01]['stack'])).value_counts()
289
- top_5per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05]['stack'])).value_counts()
290
- top_10per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10]['stack'])).value_counts()
291
- top_20per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20]['stack'])).value_counts()
292
- stacks_contest_len = len(working_df)
293
- stacks_len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
294
- stacks_len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
295
- stacks_len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
296
- stacks_len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
297
- each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
298
- each_stacks_set = [overall_stacks, top_1per_stacks, top_5per_stacks, top_10per_stacks, top_20per_stacks]
299
- each_stacks_len_set = [stacks_contest_len, stacks_len_1per, stacks_len_5per, stacks_len_10per, stacks_len_20per]
300
- stack_count_var = 0
301
- for each_stack in each_stacks_set:
302
- stack_frame = each_stack.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
303
- stack_frame['Percent'] = stack_frame['Count'] / each_stacks_len_set[stack_count_var]
304
- stack_frame = stack_frame[['Stack', 'Percent']]
305
- stack_frame = stack_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
306
- if 'stack_frame' not in st.session_state:
307
- st.session_state['stack_frame'] = stack_frame
308
- else:
309
- st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], stack_frame, on='Stack', how='outer')
310
- stack_count_var += 1
311
- st.dataframe(st.session_state['stack_frame'].
312
- sort_values(by='Exposure Overall', ascending=False).
313
- style.background_gradient(cmap='RdYlGn').
314
- format(formatter='{:.2%}', subset=st.session_state['stack_frame'].select_dtypes(include=['number']).columns),
315
- hide_index=True)
316
- with tab3:
317
- st.write('holding')
 
191
  elif entry_parse_var == 'All':
192
  st.session_state['calc_toggle'] = True
193
 
194
+ # Initialize pagination in session state if not exists
195
+ if 'current_page' not in st.session_state:
196
+ st.session_state.current_page = 1
197
 
198
+ # Calculate total pages
199
+ rows_per_page = 500
200
+ total_rows = len(working_df)
201
+ total_pages = (total_rows + rows_per_page - 1) // rows_per_page
202
 
203
+ # Create pagination controls in a single row
204
+ pagination_cols = st.columns([4, 1, 1, 1, 4])
205
+ with pagination_cols[1]:
206
+ if st.button(f"Previous Page"):
207
+ if st.session_state['current_page'] > 1:
208
+ st.session_state.current_page -= 1
209
+ else:
210
+ st.session_state.current_page = 1
 
 
 
 
 
 
 
 
211
  if 'player_frame' in st.session_state:
212
  del st.session_state['player_frame']
213
  if 'stack_frame' in st.session_state:
214
  del st.session_state['stack_frame']
215
 
216
+ with pagination_cols[3]:
217
+ if st.button(f"Next Page"):
218
+ st.session_state.current_page += 1
219
+ if 'player_frame' in st.session_state:
220
+ del st.session_state['player_frame']
221
+ if 'stack_frame' in st.session_state:
222
+ del st.session_state['stack_frame']
223
+
224
+ # Calculate start and end indices for current page
225
+ start_idx = (st.session_state.current_page - 1) * rows_per_page
226
+ end_idx = min((st.session_state.current_page) * rows_per_page, total_rows)
227
+ st.dataframe(
228
+ working_df.iloc[start_idx:end_idx].style
229
+ .background_gradient(axis=0)
230
+ .background_gradient(cmap='RdYlGn')
231
+ .format(precision=2),
232
+ height=500,
233
+ use_container_width=True,
234
+ hide_index=True
235
+ )
236
 
237
+ with st.container():
238
+ tab1, tab2, tab3 = st.tabs(['Player Used Info', 'Stack Used Info', 'Duplication Info'])
239
+ with tab1:
240
+ st.session_state['field_frame'] = create_player_exposures(working_df, player_columns)
241
+ if entry_parse_var == 'All':
242
+ st.session_state['player_frame'] = create_player_exposures(working_df, player_columns)
243
+ st.dataframe(st.session_state['player_frame'].
244
+ sort_values(by='Exposure Overall', ascending=False).
245
+ style.background_gradient(cmap='RdYlGn').
246
+ format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
247
+ hide_index=True)
248
+ else:
249
+ st.session_state['player_frame'] = create_player_exposures(working_df, player_columns, entry_names)
250
+ st.dataframe(st.session_state['player_frame'].
251
+ sort_values(by='Exposure Overall', ascending=False).
252
+ style.background_gradient(cmap='RdYlGn').
253
+ format(formatter='{:.2%}', subset=st.session_state['player_frame'].select_dtypes(include=['number']).columns),
254
+ hide_index=True)
255
+ with tab2:
256
+ if entry_parse_var == 'All':
257
+ overall_stacks = pd.Series(list(working_df['stack'])).value_counts()
258
+ top_1per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01]['stack'])).value_counts()
259
+ top_5per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05]['stack'])).value_counts()
260
+ top_10per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10]['stack'])).value_counts()
261
+ top_20per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20]['stack'])).value_counts()
262
+ stacks_contest_len = len(working_df)
263
+ stacks_len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
264
+ stacks_len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
265
+ stacks_len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
266
+ stacks_len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
267
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
268
+ each_stacks_set = [overall_stacks, top_1per_stacks, top_5per_stacks, top_10per_stacks, top_20per_stacks]
269
+ each_stacks_len_set = [stacks_contest_len, stacks_len_1per, stacks_len_5per, stacks_len_10per, stacks_len_20per]
270
+ stack_count_var = 0
271
+ for each_stack in each_stacks_set:
272
+ stack_frame = each_stack.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
273
+ stack_frame['Percent'] = stack_frame['Count'] / each_stacks_len_set[stack_count_var]
274
+ stack_frame = stack_frame[['Stack', 'Percent']]
275
+ stack_frame = stack_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
276
+ if 'stack_frame' not in st.session_state:
277
+ st.session_state['stack_frame'] = stack_frame
278
+ else:
279
+ st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], stack_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
+ else:
287
+ overall_stacks = pd.Series(list(working_df[working_df['BaseName'].isin(entry_names)]['stack'])).value_counts()
288
+ top_1per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.01]['stack'])).value_counts()
289
+ top_5per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.05]['stack'])).value_counts()
290
+ top_10per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.10]['stack'])).value_counts()
291
+ top_20per_stacks = pd.Series(list(working_df[working_df['percentile_finish'] <= 0.20]['stack'])).value_counts()
292
+ stacks_contest_len = len(working_df)
293
+ stacks_len_1per = len(working_df[working_df['percentile_finish'] <= 0.01])
294
+ stacks_len_5per = len(working_df[working_df['percentile_finish'] <= 0.05])
295
+ stacks_len_10per = len(working_df[working_df['percentile_finish'] <= 0.10])
296
+ stacks_len_20per = len(working_df[working_df['percentile_finish'] <= 0.20])
297
+ each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%']
298
+ each_stacks_set = [overall_stacks, top_1per_stacks, top_5per_stacks, top_10per_stacks, top_20per_stacks]
299
+ each_stacks_len_set = [stacks_contest_len, stacks_len_1per, stacks_len_5per, stacks_len_10per, stacks_len_20per]
300
+ stack_count_var = 0
301
+ for each_stack in each_stacks_set:
302
+ stack_frame = each_stack.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'})
303
+ stack_frame['Percent'] = stack_frame['Count'] / each_stacks_len_set[stack_count_var]
304
+ stack_frame = stack_frame[['Stack', 'Percent']]
305
+ stack_frame = stack_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'})
306
+ if 'stack_frame' not in st.session_state:
307
+ st.session_state['stack_frame'] = stack_frame
308
+ else:
309
+ st.session_state['stack_frame'] = pd.merge(st.session_state['stack_frame'], stack_frame, on='Stack', how='outer')
310
+ stack_count_var += 1
311
+ st.dataframe(st.session_state['stack_frame'].
312
+ sort_values(by='Exposure Overall', ascending=False).
313
+ style.background_gradient(cmap='RdYlGn').
314
+ format(formatter='{:.2%}', subset=st.session_state['stack_frame'].select_dtypes(include=['number']).columns),
315
+ hide_index=True)
316
+ with tab3:
317
+ st.write('holding')