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:
|