James McCool commited on
Commit
f6179c3
·
1 Parent(s): 5763d8f

Refactor contest data handling in app.py

Browse files

- Consolidated the logic for calculating metrics based on game type into the session state 'Contest' dataframe, improving code organization and readability.
- Updated the player selection and filtering process to utilize session state variables, enhancing the user experience and maintaining state across interactions.
- This change streamlines data processing and ensures consistent handling of player metrics for both 'Classic' and 'Showdown' game types.

Files changed (1) hide show
  1. app.py +41 -38
app.py CHANGED
@@ -108,88 +108,91 @@ with tab2:
108
  players_5per = st.session_state['Contest'].head(int(len(st.session_state['Contest']) * 0.05))
109
  players_10per = st.session_state['Contest'].head(int(len(st.session_state['Contest']) * 0.10))
110
  players_20per = st.session_state['Contest'].head(int(len(st.session_state['Contest']) * 0.20))
111
- working_df = st.session_state['Contest'].copy()
112
-
113
- with col1:
114
- with st.expander("Info and filters"):
115
- if st.button('Clear data', key='reset3'):
116
- st.session_state.clear()
117
- with st.form(key='filter_form'):
118
- type_var = st.selectbox("Select Game Type", ['Classic', 'Showdown'])
119
- entry_parse_var = st.selectbox("Do you want to view a specific player(s) or a group of players?", ['All', 'Specific'])
120
- entry_names = st.multiselect("Select players", options=st.session_state['entry_list'], default=[])
121
- submitted = st.form_submit_button("Submit")
122
- if submitted:
123
- if 'player_frame' in st.session_state:
124
- del st.session_state['player_frame']
125
- del st.session_state['stack_frame']
126
- # Apply entry name filter if specific entries are selected
127
- if entry_parse_var == 'Specific' and entry_names:
128
- working_df = working_df[working_df['BaseName'].isin(entry_names)]
129
 
130
  # Calculate metrics based on game type
131
- if type_var == 'Classic':
132
- working_df['stack'] = working_df.apply(
133
  lambda row: Counter(
134
  map_dict['team_map'].get(player, '') for player in row[4:]
135
  if map_dict['team_map'].get(player, '') != ''
136
  ).most_common(1)[0][0] if any(map_dict['team_map'].get(player, '') for player in row[4:]) else '',
137
  axis=1
138
  )
139
- working_df['stack_size'] = working_df.apply(
140
  lambda row: Counter(
141
  map_dict['team_map'].get(player, '') for player in row[4:]
142
  if map_dict['team_map'].get(player, '') != ''
143
  ).most_common(1)[0][1] if any(map_dict['team_map'].get(player, '') for player in row[4:]) else '',
144
  axis=1
145
  )
146
- working_df['salary'] = working_df.apply(lambda row: sum(map_dict['salary_map'].get(player, 0) for player in row), axis=1)
147
- working_df['median'] = working_df.apply(lambda row: sum(map_dict['proj_map'].get(player, 0) for player in row), axis=1)
148
- working_df['actual_fpts'] = working_df.apply(lambda row: sum(st.session_state['actual_dict'].get(player, 0) for player in row), axis=1)
149
- working_df['Own'] = working_df.apply(lambda row: sum(map_dict['own_map'].get(player, 0) for player in row), axis=1)
150
- working_df['actual_own'] = working_df.apply(lambda row: sum(st.session_state['ownership_dict'].get(player, 0) for player in row), axis=1)
151
- working_df['sorted'] = working_df[player_columns].apply(
152
  lambda row: ','.join(sorted(row.values)),
153
  axis=1
154
  )
155
- working_df['dupes'] = working_df.groupby('sorted').transform('size')
156
- working_df = working_df.drop('sorted', axis=1)
157
- elif type_var == 'Showdown':
158
- working_df['stack'] = working_df.apply(
159
  lambda row: Counter(
160
  map_dict['team_map'].get(player, '') for player in row
161
  if map_dict['team_map'].get(player, '') != ''
162
  ).most_common(1)[0][0] if any(map_dict['team_map'].get(player, '') for player in row) else '',
163
  axis=1
164
  )
165
- working_df['stack_size'] = working_df.apply(
166
  lambda row: Counter(
167
  map_dict['team_map'].get(player, '') for player in row
168
  if map_dict['team_map'].get(player, '') != ''
169
  ).most_common(1)[0][1] if any(map_dict['team_map'].get(player, '') for player in row) else '',
170
  axis=1
171
  )
172
- working_df['salary'] = working_df.apply(
173
  lambda row: map_dict['cpt_salary_map'].get(row.iloc[0], 0) +
174
  sum(map_dict['salary_map'].get(player, 0) for player in row.iloc[1:]),
175
  axis=1
176
  )
177
- working_df['median'] = working_df.apply(
178
  lambda row: map_dict['cpt_proj_map'].get(row.iloc[0], 0) +
179
  sum(map_dict['proj_map'].get(player, 0) for player in row.iloc[1:]),
180
  axis=1
181
  )
182
- working_df['Own'] = working_df.apply(
183
  lambda row: map_dict['cpt_own_map'].get(row.iloc[0], 0) +
184
  sum(map_dict['own_map'].get(player, 0) for player in row.iloc[1:]),
185
  axis=1
186
  )
187
- working_df['sorted'] = working_df[player_columns].apply(
188
  lambda row: row[0] + '|' + ','.join(sorted(row[1:].values)),
189
  axis=1
190
  )
191
- working_df['dupes'] = working_df.groupby('sorted').transform('size')
192
- working_df = working_df.drop('sorted', axis=1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
 
194
  # Initialize pagination in session state if not exists
195
  if 'current_page' not in st.session_state:
 
108
  players_5per = st.session_state['Contest'].head(int(len(st.session_state['Contest']) * 0.05))
109
  players_10per = st.session_state['Contest'].head(int(len(st.session_state['Contest']) * 0.10))
110
  players_20per = st.session_state['Contest'].head(int(len(st.session_state['Contest']) * 0.20))
111
+
112
+ st.session_state['type_var'] = 'Classic'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
  # Calculate metrics based on game type
115
+ if st.session_state['type_var'] == 'Classic':
116
+ st.session_state['Contest']['stack'] = st.session_state['Contest'].apply(
117
  lambda row: Counter(
118
  map_dict['team_map'].get(player, '') for player in row[4:]
119
  if map_dict['team_map'].get(player, '') != ''
120
  ).most_common(1)[0][0] if any(map_dict['team_map'].get(player, '') for player in row[4:]) else '',
121
  axis=1
122
  )
123
+ st.session_state['Contest']['stack_size'] = st.session_state['Contest'].apply(
124
  lambda row: Counter(
125
  map_dict['team_map'].get(player, '') for player in row[4:]
126
  if map_dict['team_map'].get(player, '') != ''
127
  ).most_common(1)[0][1] if any(map_dict['team_map'].get(player, '') for player in row[4:]) else '',
128
  axis=1
129
  )
130
+ st.session_state['Contest']['salary'] = st.session_state['Contest'].apply(lambda row: sum(map_dict['salary_map'].get(player, 0) for player in row), axis=1)
131
+ st.session_state['Contest']['median'] = st.session_state['Contest'].apply(lambda row: sum(map_dict['proj_map'].get(player, 0) for player in row), axis=1)
132
+ st.session_state['Contest']['actual_fpts'] = st.session_state['Contest'].apply(lambda row: sum(st.session_state['actual_dict'].get(player, 0) for player in row), axis=1)
133
+ st.session_state['Contest']['Own'] = st.session_state['Contest'].apply(lambda row: sum(map_dict['own_map'].get(player, 0) for player in row), axis=1)
134
+ st.session_state['Contest']['actual_own'] = st.session_state['Contest'].apply(lambda row: sum(st.session_state['ownership_dict'].get(player, 0) for player in row), axis=1)
135
+ st.session_state['Contest']['sorted'] = st.session_state['Contest'][player_columns].apply(
136
  lambda row: ','.join(sorted(row.values)),
137
  axis=1
138
  )
139
+ st.session_state['Contest']['dupes'] = st.session_state['Contest'].groupby('sorted').transform('size')
140
+ st.session_state['Contest'] = st.session_state['Contest'].drop('sorted', axis=1)
141
+ elif st.session_state['type_var'] == 'Showdown':
142
+ st.session_state['Contest']['stack'] = st.session_state['Contest'].apply(
143
  lambda row: Counter(
144
  map_dict['team_map'].get(player, '') for player in row
145
  if map_dict['team_map'].get(player, '') != ''
146
  ).most_common(1)[0][0] if any(map_dict['team_map'].get(player, '') for player in row) else '',
147
  axis=1
148
  )
149
+ st.session_state['Contest']['stack_size'] = st.session_state['Contest'].apply(
150
  lambda row: Counter(
151
  map_dict['team_map'].get(player, '') for player in row
152
  if map_dict['team_map'].get(player, '') != ''
153
  ).most_common(1)[0][1] if any(map_dict['team_map'].get(player, '') for player in row) else '',
154
  axis=1
155
  )
156
+ st.session_state['Contest']['salary'] = st.session_state['Contest'].apply(
157
  lambda row: map_dict['cpt_salary_map'].get(row.iloc[0], 0) +
158
  sum(map_dict['salary_map'].get(player, 0) for player in row.iloc[1:]),
159
  axis=1
160
  )
161
+ st.session_state['Contest']['median'] = st.session_state['Contest'].apply(
162
  lambda row: map_dict['cpt_proj_map'].get(row.iloc[0], 0) +
163
  sum(map_dict['proj_map'].get(player, 0) for player in row.iloc[1:]),
164
  axis=1
165
  )
166
+ st.session_state['Contest']['Own'] = st.session_state['Contest'].apply(
167
  lambda row: map_dict['cpt_own_map'].get(row.iloc[0], 0) +
168
  sum(map_dict['own_map'].get(player, 0) for player in row.iloc[1:]),
169
  axis=1
170
  )
171
+ st.session_state['Contest']['sorted'] = st.session_state['Contest'][player_columns].apply(
172
  lambda row: row[0] + '|' + ','.join(sorted(row[1:].values)),
173
  axis=1
174
  )
175
+ st.session_state['Contest']['dupes'] = st.session_state['Contest'].groupby('sorted').transform('size')
176
+ st.session_state['Contest'] = st.session_state['Contest'].drop('sorted', axis=1)
177
+
178
+ working_df = st.session_state['Contest'].copy()
179
+
180
+ with col1:
181
+ with st.expander("Info and filters"):
182
+ if st.button('Clear data', key='reset3'):
183
+ st.session_state.clear()
184
+ with st.form(key='filter_form'):
185
+ st.session_state['type_var'] = st.selectbox("Select Game Type", ['Classic', 'Showdown'])
186
+ entry_parse_var = st.selectbox("Do you want to view a specific player(s) or a group of players?", ['All', 'Specific'])
187
+ entry_names = st.multiselect("Select players", options=st.session_state['entry_list'], default=[])
188
+ submitted = st.form_submit_button("Submit")
189
+ if submitted:
190
+ if 'player_frame' in st.session_state:
191
+ del st.session_state['player_frame']
192
+ del st.session_state['stack_frame']
193
+ # Apply entry name filter if specific entries are selected
194
+ if entry_parse_var == 'Specific' and entry_names:
195
+ working_df = working_df[working_df['BaseName'].isin(entry_names)]
196
 
197
  # Initialize pagination in session state if not exists
198
  if 'current_page' not in st.session_state: