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.
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
lambda row: ','.join(sorted(row.values)),
|
153 |
axis=1
|
154 |
)
|
155 |
-
|
156 |
-
|
157 |
-
elif type_var == 'Showdown':
|
158 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
188 |
lambda row: row[0] + '|' + ','.join(sorted(row[1:].values)),
|
189 |
axis=1
|
190 |
)
|
191 |
-
|
192 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|