Multichem commited on
Commit
adfdce1
·
1 Parent(s): cb550b6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -57
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
- raw_baselines = proj_dataframe
117
  elif slate_var1 != 'User':
118
- raw_baselines = dk_raw_proj
119
  elif site_var1 == 'Fanduel':
120
  if slate_var1 == 'User':
121
- raw_baselines = proj_dataframe
122
  elif slate_var1 != 'User':
123
- raw_baselines = fd_raw_proj
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 = raw_baselines['Team'].unique(), key='stack_var1')
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 = raw_baselines['Team'].unique(), key='ministack_var1')
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 = raw_baselines['Team'].unique(), key='team_var1')
136
  elif split_var1 == 'Full Slate Run':
137
- team_var1 = raw_baselines.Team.values.tolist()
138
- lock_var1 = st.multiselect("Are there any players you want to use in all lineups (Lock Button)?", options = raw_baselines['Player'].unique(), key='lock_var1')
139
- avoid_var1 = st.multiselect("Are there any players you want to remove from the pool (Drop Button)?", options = raw_baselines['Player'].unique(), key='avoid_var1')
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
- raw_baselines = raw_baselines[raw_baselines['Team'].isin(team_var1)]
149
- raw_baselines = raw_baselines[~raw_baselines['Player'].isin(avoid_var1)]
150
- ownframe = raw_baselines.copy()
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
- with display_container:
580
- display_container = st.empty()
581
- if 'display_baselines' in st.session_state:
582
- st.dataframe(st.session_state.display_baselines.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True)
583
-
584
- with display_dl_container:
585
- display_dl_container = st.empty()
586
- if 'export_baselines' in st.session_state:
587
- st.download_button(
588
- label="Export Projections",
589
- data=convert_df_to_csv(st.session_state.export_baselines),
590
- file_name='NHL_proj_export.csv',
591
- mime='text/csv',
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
- with freq_container:
619
- freq_container = st.empty()
620
- if 'player_freq' in st.session_state:
621
- 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)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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)