Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -108,35 +108,37 @@ with tab2:
|
|
108 |
st.cache_data.clear()
|
109 |
dk_raw_proj, fd_raw_proj, dk_ids, fd_ids, timestamp = grab_baseline_stuff()
|
110 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
|
|
|
|
111 |
|
112 |
slate_var1 = st.radio("Which data are you loading?", ('Paydirt', 'User'), key='slate_var1')
|
113 |
site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var1')
|
114 |
if site_var1 == 'Draftkings':
|
115 |
if slate_var1 == 'User':
|
116 |
-
|
117 |
elif slate_var1 != 'User':
|
118 |
-
|
119 |
elif site_var1 == 'Fanduel':
|
120 |
if slate_var1 == 'User':
|
121 |
-
|
122 |
elif slate_var1 != 'User':
|
123 |
-
|
124 |
contest_var1 = st.selectbox("What contest type are you optimizing for?", ('Cash', 'Small Field GPP', 'Large Field GPP', 'Round Robin'), key='contest_var1')
|
125 |
if contest_var1 != 'Cash':
|
126 |
-
stack_var1 = st.selectbox('Which team are you stacking?', options =
|
127 |
stack_size_var1 = st.selectbox('What size of stack?', options = [3, 4], key='stack_size_var1')
|
128 |
line_choice_var1 = st.selectbox('Which line for main?', options = [1, 2, 3, 4], key='line_choice_var1')
|
129 |
-
ministack_var1 = st.selectbox('Who should be the secondary stack?', options =
|
130 |
ministack_size_var1 = st.selectbox('What size of secondary stack?', options = [2, 3, 4], key='ministack_size_var1')
|
131 |
miniline_choice_var1 = st.selectbox('Which line for secondary?', options = [1, 2, 3, 4], key='miniline_choice_var1')
|
132 |
opp_var1 = opp_dict[stack_var1]
|
133 |
split_var1 = st.radio("Are you running the full slate or certain games?", ('Full Slate Run', 'Specific Games'), key='split_var1')
|
134 |
if split_var1 == 'Specific Games':
|
135 |
-
team_var1 = st.multiselect('Which teams would you like to include in the optimization?', options =
|
136 |
elif split_var1 == 'Full Slate Run':
|
137 |
-
team_var1 =
|
138 |
-
lock_var1 = st.multiselect("Are there any players you want to use in all lineups (Lock Button)?", options =
|
139 |
-
avoid_var1 = st.multiselect("Are there any players you want to remove from the pool (Drop Button)?", options =
|
140 |
linenum_var1 = st.number_input("How many lineups would you like to produce?", min_value = 1, max_value = 300, value = 20, step = 1, key='linenum_var1')
|
141 |
if site_var1 == 'Draftkings':
|
142 |
min_sal1 = st.number_input('Min Salary', min_value = 35000, max_value = 49900, value = 49000, step = 100, key='min_sal1')
|
@@ -145,9 +147,9 @@ with tab2:
|
|
145 |
min_sal1 = st.number_input('Min Salary', min_value = 45000, max_value = 54900, value = 54000, step = 100, key='min_sal1')
|
146 |
max_sal1 = st.number_input('Max Salary', min_value = 45000, max_value = 55000, value = 55000, step = 100, key='max_sal1')
|
147 |
with col2:
|
148 |
-
|
149 |
-
|
150 |
-
ownframe =
|
151 |
if contest_var1 == 'Cash':
|
152 |
ownframe['Own%'] = np.where((ownframe['Position'] == 'G') & (ownframe['Own'] - ownframe.loc[ownframe['Position'] == 'G', 'Own'].mean() >= 0), ownframe['Own'] * (10 * (ownframe['Own'] - ownframe.loc[ownframe['Position'] == 'G', 'Own'].mean())/100) + ownframe.loc[ownframe['Position'] == 'G', 'Own'].mean(), ownframe['Own'])
|
153 |
ownframe['Own%'] = np.where((ownframe['Position'] != 'G') & (ownframe['Own'] - ownframe.loc[ownframe['Position'] != 'G', 'Own'].mean() >= 0), ownframe['Own'] * (5 * (ownframe['Own'] - ownframe.loc[ownframe['Position'] != 'G', 'Own'].mean())/100) + ownframe.loc[ownframe['Position'] != 'G', 'Own'].mean(), ownframe['Own%'])
|
@@ -166,8 +168,8 @@ with tab2:
|
|
166 |
raw_baselines = ownframe[['Player', 'Salary', 'Position', 'Team', 'Opp', 'Line', 'PP Unit', 'Median', 'Own']]
|
167 |
raw_baselines = raw_baselines.sort_values(by='Median', ascending=False)
|
168 |
raw_baselines['lock'] = np.where(raw_baselines['Player'].isin(lock_var1), 1, 0)
|
169 |
-
st.session_state.export_baselines = raw_baselines
|
170 |
-
st.session_state.display_baselines = raw_baselines
|
171 |
|
172 |
if st.button('Optimize'):
|
173 |
max_proj = 1000
|
@@ -576,46 +578,46 @@ with tab2:
|
|
576 |
st.session_state.player_freq = st.session_state.player_freq[['Player', 'Position', 'Team', 'Salary', 'Proj Own', 'Exposure']]
|
577 |
st.session_state.player_freq = st.session_state.player_freq.set_index('Player')
|
578 |
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
with optimize_container:
|
595 |
-
optimize_container = st.empty()
|
596 |
-
if 'final_outcomes' in st.session_state:
|
597 |
-
st.dataframe(st.session_state.final_outcomes.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
|
598 |
-
|
599 |
-
with download_container:
|
600 |
-
download_container = st.empty()
|
601 |
-
if site_var1 == 'Draftkings':
|
602 |
-
if 'final_outcomes_export' in st.session_state:
|
603 |
-
st.download_button(
|
604 |
-
label="Export Optimals",
|
605 |
-
data=convert_df_to_csv(st.session_state.final_outcomes_export),
|
606 |
-
file_name='NHL_optimals_export.csv',
|
607 |
-
mime='text/csv',
|
608 |
-
)
|
609 |
-
elif site_var1 == 'Fanduel':
|
610 |
-
if 'FD_final_outcomes_export' in st.session_state:
|
611 |
-
st.download_button(
|
612 |
-
label="Export Optimals",
|
613 |
-
data=convert_df_to_csv(st.session_state.FD_final_outcomes_export),
|
614 |
-
file_name='FD_NHL_optimals_export.csv',
|
615 |
-
mime='text/csv',
|
616 |
-
)
|
617 |
|
618 |
-
|
619 |
-
|
620 |
-
if '
|
621 |
-
st.dataframe(st.session_state.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
st.cache_data.clear()
|
109 |
dk_raw_proj, fd_raw_proj, dk_ids, fd_ids, timestamp = grab_baseline_stuff()
|
110 |
t_stamp = f"Last Update: " + str(timestamp) + f" CST"
|
111 |
+
for key in st.session_state.keys():
|
112 |
+
del st.session_state[key]
|
113 |
|
114 |
slate_var1 = st.radio("Which data are you loading?", ('Paydirt', 'User'), key='slate_var1')
|
115 |
site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var1')
|
116 |
if site_var1 == 'Draftkings':
|
117 |
if slate_var1 == 'User':
|
118 |
+
init_baselines = proj_dataframe
|
119 |
elif slate_var1 != 'User':
|
120 |
+
init_baselines = dk_raw_proj
|
121 |
elif site_var1 == 'Fanduel':
|
122 |
if slate_var1 == 'User':
|
123 |
+
init_baselines = proj_dataframe
|
124 |
elif slate_var1 != 'User':
|
125 |
+
init_baselines = fd_raw_proj
|
126 |
contest_var1 = st.selectbox("What contest type are you optimizing for?", ('Cash', 'Small Field GPP', 'Large Field GPP', 'Round Robin'), key='contest_var1')
|
127 |
if contest_var1 != 'Cash':
|
128 |
+
stack_var1 = st.selectbox('Which team are you stacking?', options = init_baselines['Team'].unique(), key='stack_var1')
|
129 |
stack_size_var1 = st.selectbox('What size of stack?', options = [3, 4], key='stack_size_var1')
|
130 |
line_choice_var1 = st.selectbox('Which line for main?', options = [1, 2, 3, 4], key='line_choice_var1')
|
131 |
+
ministack_var1 = st.selectbox('Who should be the secondary stack?', options = init_baselines['Team'].unique(), key='ministack_var1')
|
132 |
ministack_size_var1 = st.selectbox('What size of secondary stack?', options = [2, 3, 4], key='ministack_size_var1')
|
133 |
miniline_choice_var1 = st.selectbox('Which line for secondary?', options = [1, 2, 3, 4], key='miniline_choice_var1')
|
134 |
opp_var1 = opp_dict[stack_var1]
|
135 |
split_var1 = st.radio("Are you running the full slate or certain games?", ('Full Slate Run', 'Specific Games'), key='split_var1')
|
136 |
if split_var1 == 'Specific Games':
|
137 |
+
team_var1 = st.multiselect('Which teams would you like to include in the optimization?', options = init_baselines['Team'].unique(), key='team_var1')
|
138 |
elif split_var1 == 'Full Slate Run':
|
139 |
+
team_var1 = init_baselines.Team.values.tolist()
|
140 |
+
lock_var1 = st.multiselect("Are there any players you want to use in all lineups (Lock Button)?", options = init_baselines['Player'].unique(), key='lock_var1')
|
141 |
+
avoid_var1 = st.multiselect("Are there any players you want to remove from the pool (Drop Button)?", options = init_baselines['Player'].unique(), key='avoid_var1')
|
142 |
linenum_var1 = st.number_input("How many lineups would you like to produce?", min_value = 1, max_value = 300, value = 20, step = 1, key='linenum_var1')
|
143 |
if site_var1 == 'Draftkings':
|
144 |
min_sal1 = st.number_input('Min Salary', min_value = 35000, max_value = 49900, value = 49000, step = 100, key='min_sal1')
|
|
|
147 |
min_sal1 = st.number_input('Min Salary', min_value = 45000, max_value = 54900, value = 54000, step = 100, key='min_sal1')
|
148 |
max_sal1 = st.number_input('Max Salary', min_value = 45000, max_value = 55000, value = 55000, step = 100, key='max_sal1')
|
149 |
with col2:
|
150 |
+
init_baselines = init_baselines[init_baselines['Team'].isin(team_var1)]
|
151 |
+
init_baselines = init_baselines[~init_baselines['Player'].isin(avoid_var1)]
|
152 |
+
ownframe = init_baselines.copy()
|
153 |
if contest_var1 == 'Cash':
|
154 |
ownframe['Own%'] = np.where((ownframe['Position'] == 'G') & (ownframe['Own'] - ownframe.loc[ownframe['Position'] == 'G', 'Own'].mean() >= 0), ownframe['Own'] * (10 * (ownframe['Own'] - ownframe.loc[ownframe['Position'] == 'G', 'Own'].mean())/100) + ownframe.loc[ownframe['Position'] == 'G', 'Own'].mean(), ownframe['Own'])
|
155 |
ownframe['Own%'] = np.where((ownframe['Position'] != 'G') & (ownframe['Own'] - ownframe.loc[ownframe['Position'] != 'G', 'Own'].mean() >= 0), ownframe['Own'] * (5 * (ownframe['Own'] - ownframe.loc[ownframe['Position'] != 'G', 'Own'].mean())/100) + ownframe.loc[ownframe['Position'] != 'G', 'Own'].mean(), ownframe['Own%'])
|
|
|
168 |
raw_baselines = ownframe[['Player', 'Salary', 'Position', 'Team', 'Opp', 'Line', 'PP Unit', 'Median', 'Own']]
|
169 |
raw_baselines = raw_baselines.sort_values(by='Median', ascending=False)
|
170 |
raw_baselines['lock'] = np.where(raw_baselines['Player'].isin(lock_var1), 1, 0)
|
171 |
+
st.session_state.export_baselines = raw_baselines.copy()
|
172 |
+
st.session_state.display_baselines = raw_baselines.copy()
|
173 |
|
174 |
if st.button('Optimize'):
|
175 |
max_proj = 1000
|
|
|
578 |
st.session_state.player_freq = st.session_state.player_freq[['Player', 'Position', 'Team', 'Salary', 'Proj Own', 'Exposure']]
|
579 |
st.session_state.player_freq = st.session_state.player_freq.set_index('Player')
|
580 |
|
581 |
+
with display_container:
|
582 |
+
display_container = st.empty()
|
583 |
+
if 'display_baselines' in st.session_state:
|
584 |
+
st.dataframe(st.session_state.display_baselines.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
|
585 |
+
|
586 |
+
with display_dl_container:
|
587 |
+
display_dl_container = st.empty()
|
588 |
+
if 'export_baselines' in st.session_state:
|
589 |
+
st.download_button(
|
590 |
+
label="Export Projections",
|
591 |
+
data=convert_df_to_csv(st.session_state.export_baselines),
|
592 |
+
file_name='NHL_proj_export.csv',
|
593 |
+
mime='text/csv',
|
594 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
595 |
|
596 |
+
with optimize_container:
|
597 |
+
optimize_container = st.empty()
|
598 |
+
if 'final_outcomes' in st.session_state:
|
599 |
+
st.dataframe(st.session_state.final_outcomes.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
|
600 |
+
|
601 |
+
with download_container:
|
602 |
+
download_container = st.empty()
|
603 |
+
if site_var1 == 'Draftkings':
|
604 |
+
if 'final_outcomes_export' in st.session_state:
|
605 |
+
st.download_button(
|
606 |
+
label="Export Optimals",
|
607 |
+
data=convert_df_to_csv(st.session_state.final_outcomes_export),
|
608 |
+
file_name='NHL_optimals_export.csv',
|
609 |
+
mime='text/csv',
|
610 |
+
)
|
611 |
+
elif site_var1 == 'Fanduel':
|
612 |
+
if 'FD_final_outcomes_export' in st.session_state:
|
613 |
+
st.download_button(
|
614 |
+
label="Export Optimals",
|
615 |
+
data=convert_df_to_csv(st.session_state.FD_final_outcomes_export),
|
616 |
+
file_name='FD_NHL_optimals_export.csv',
|
617 |
+
mime='text/csv',
|
618 |
+
)
|
619 |
+
|
620 |
+
with freq_container:
|
621 |
+
freq_container = st.empty()
|
622 |
+
if 'player_freq' in st.session_state:
|
623 |
+
st.dataframe(st.session_state.player_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(expose_format, precision=2), use_container_width = True)
|