Multichem commited on
Commit
430b9a5
·
1 Parent(s): aadc056

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +101 -231
app.py CHANGED
@@ -30,6 +30,7 @@ def init_conn():
30
  }
31
 
32
  gc_con = gspread.service_account_from_dict(credentials)
 
33
  return gc_con
34
 
35
  gcservice_account = init_conn()
@@ -73,10 +74,14 @@ def set_export_ids():
73
 
74
  return dk_ids, fd_ids
75
 
76
- @st.cache_data
77
- def convert_df_to_csv(df):
78
- return df.to_csv().encode('utf-8')
 
79
 
 
 
 
80
  def sim_contest(Sim_size, FinalPortfolio, CleanPortfolio, maps_dict, up_dict, insert_port):
81
  SimVar = 1
82
  Sim_Winners = []
@@ -138,14 +143,14 @@ def run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_R
138
  while RunsVar <= seed_depth_def:
139
  if RunsVar <= 3:
140
  FieldStrength = Strength_var_def
141
- FinalPortfolio, maps_dict = get_correlated_portfolio_for_sim(Total_Runs_def * .1, sharp_split, field_growth)
142
- FinalPortfolio2, maps_dict2 = get_uncorrelated_portfolio_for_sim(Total_Runs_def * .1, sharp_split, field_growth)
143
  FinalPortfolio_init = pd.concat([FinalPortfolio, FinalPortfolio2], axis=0)
144
  maps_dict.update(maps_dict2)
145
  elif RunsVar > 3 and RunsVar <= 4:
146
  FieldStrength += (strength_grow_def + ((30 - len(Teams_used_def)) * .001))
147
- FinalPortfolio3, maps_dict3 = get_correlated_portfolio_for_sim(Total_Runs_def * .1, sharp_split, field_growth)
148
- FinalPortfolio4, maps_dict4 = get_uncorrelated_portfolio_for_sim(Total_Runs_def * .1, sharp_split, field_growth)
149
  FinalPortfolio_merge_3 = pd.concat([FinalPortfolio_init, FinalPortfolio3], axis=0)
150
  FinalPortfolio_merge_4 = pd.concat([FinalPortfolio_merge_3, FinalPortfolio4], axis=0)
151
  FinalPortfolio_step_2 = FinalPortfolio_merge_4.drop_duplicates(subset = ['Projection', 'Own'],keep = 'last').reset_index(drop = True)
@@ -153,8 +158,8 @@ def run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_R
153
  maps_dict.update(maps_dict4)
154
  elif RunsVar > 4:
155
  FieldStrength = 1
156
- FinalPortfolio5, maps_dict5 = get_correlated_portfolio_for_sim(Total_Runs_def * .1, sharp_split, field_growth)
157
- FinalPortfolio6, maps_dict6 = get_uncorrelated_portfolio_for_sim(Total_Runs_def * .1, sharp_split, field_growth)
158
  FinalPortfolio_merge_5 = pd.concat([FinalPortfolio_step_2, FinalPortfolio5], axis=0)
159
  FinalPortfolio_merge_6 = pd.concat([FinalPortfolio_merge_5, FinalPortfolio6], axis=0)
160
  FinalPortfolio_export = FinalPortfolio_merge_6.drop_duplicates(subset = ['Projection', 'Own'],keep = 'last').reset_index(drop = True)
@@ -209,7 +214,7 @@ def get_overall_merged_df():
209
 
210
  df_out = pd.concat(ref_dict['pos_dfs'], ignore_index=True)
211
 
212
- return df_out, ref_dict
213
 
214
  def calculate_range_var(count, min_val, FieldStrength, field_growth):
215
  var = round(len(count[0]) * FieldStrength)
@@ -220,7 +225,7 @@ def calculate_range_var(count, min_val, FieldStrength, field_growth):
220
 
221
  def create_random_portfolio(Total_Sample_Size, raw_baselines, field_growth):
222
 
223
- O_merge, full_pos_player_dict = get_overall_merged_df()
224
  max_var = len(raw_baselines[raw_baselines['Position'] == 'QB'])
225
 
226
  field_growth_rounded = round(field_growth)
@@ -467,14 +472,6 @@ def get_uncorrelated_portfolio_for_sim(Total_Sample_Size, sharp_split, field_gro
467
 
468
  return RandomPortfolio, maps_dict
469
 
470
- dk_roo_raw = load_dk_player_projections()
471
- fd_roo_raw = load_fd_player_projections()
472
- t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
473
- dkid_dict, fdid_dict = set_export_ids()
474
-
475
- static_exposure = pd.DataFrame(columns=['Player', 'count'])
476
- overall_exposure = pd.DataFrame(columns=['Player', 'count'])
477
-
478
  tab1, tab2 = st.tabs(['Uploads', 'Contest Sim'])
479
 
480
  with tab1:
@@ -507,7 +504,6 @@ with tab1:
507
  player_salary_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Salary))
508
  player_proj_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Median))
509
  player_own_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Own))
510
- player_team_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Team))
511
 
512
  with col2:
513
  st.info("The Portfolio file must contain only columns in order and explicitly named: 'QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', and 'DST'. Upload your projections first to avoid an error message.")
@@ -575,23 +571,6 @@ with tab1:
575
  split_portfolio['TE'].map(player_own_dict),
576
  split_portfolio['FLEX'].map(player_own_dict),
577
  split_portfolio['DST'].map(player_own_dict)])
578
-
579
- split_portfolio['QB_team'] = split_portfolio['QB'].map(player_team_dict)
580
- split_portfolio['RB1_team'] = split_portfolio['RB1'].map(player_team_dict)
581
- split_portfolio['RB2_team'] = split_portfolio['RB2'].map(player_team_dict)
582
- split_portfolio['WR1_team'] = split_portfolio['WR1'].map(player_team_dict)
583
- split_portfolio['WR2_team'] = split_portfolio['WR2'].map(player_team_dict)
584
- split_portfolio['WR3_team'] = split_portfolio['WR3'].map(player_team_dict)
585
- split_portfolio['TE_team'] = split_portfolio['TE'].map(player_team_dict)
586
- split_portfolio['FLEX_team'] = split_portfolio['FLEX'].map(player_team_dict)
587
- split_portfolio['DST_team'] = split_portfolio['DST'].map(player_team_dict)
588
-
589
- split_portfolio = split_portfolio[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'Salary', 'Projection', 'Ownership', 'QB_team',
590
- 'RB1_team', 'RB2_team', 'WR1_team', 'WR2_team', 'WR3_team', 'TE_team', 'FLEX_team', 'DST_team']]
591
-
592
- split_portfolio['Main_Stack'] = split_portfolio.iloc[:, 15:19].apply(lambda row: row.value_counts().nlargest(2).index[0],axis=1)
593
- split_portfolio['Main_Stack_Size'] = split_portfolio.iloc[:, 15:19].apply(lambda row: row.value_counts().nlargest(2).values[0],axis=1)
594
- split_portfolio['Main_Stack_Size'] = split_portfolio['Main_Stack_Size'] - 1
595
 
596
 
597
  except:
@@ -648,23 +627,6 @@ with tab1:
648
  split_portfolio['TE'].map(player_own_dict),
649
  split_portfolio['FLEX'].map(player_own_dict),
650
  split_portfolio['DST'].map(player_own_dict)])
651
-
652
- split_portfolio['QB_team'] = split_portfolio['QB'].map(player_team_dict)
653
- split_portfolio['RB1_team'] = split_portfolio['RB1'].map(player_team_dict)
654
- split_portfolio['RB2_team'] = split_portfolio['RB2'].map(player_team_dict)
655
- split_portfolio['WR1_team'] = split_portfolio['WR1'].map(player_team_dict)
656
- split_portfolio['WR2_team'] = split_portfolio['WR2'].map(player_team_dict)
657
- split_portfolio['WR3_team'] = split_portfolio['WR3'].map(player_team_dict)
658
- split_portfolio['TE_team'] = split_portfolio['TE'].map(player_team_dict)
659
- split_portfolio['FLEX_team'] = split_portfolio['FLEX'].map(player_team_dict)
660
- split_portfolio['DST_team'] = split_portfolio['DST'].map(player_team_dict)
661
-
662
- split_portfolio = split_portfolio[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'Salary', 'Projection', 'Ownership', 'QB_team',
663
- 'RB1_team', 'RB2_team', 'WR1_team', 'WR2_team', 'WR3_team', 'TE_team', 'FLEX_team', 'DST_team']]
664
-
665
- split_portfolio['Main_Stack'] = split_portfolio.iloc[:, 15:19].apply(lambda row: row.value_counts().nlargest(2).index[0],axis=1)
666
- split_portfolio['Main_Stack_Size'] = split_portfolio.iloc[:, 15:19].apply(lambda row: row.value_counts().nlargest(2).values[0],axis=1)
667
- split_portfolio['Main_Stack_Size'] = split_portfolio['Main_Stack_Size'] - 1
668
 
669
  except:
670
  split_portfolio = portfolio_dataframe
@@ -698,87 +660,9 @@ with tab1:
698
  split_portfolio['TE'].map(player_own_dict),
699
  split_portfolio['FLEX'].map(player_own_dict),
700
  split_portfolio['DST'].map(player_own_dict)])
701
-
702
- split_portfolio['QB_team'] = split_portfolio['QB'].map(player_team_dict)
703
- split_portfolio['RB1_team'] = split_portfolio['RB1'].map(player_team_dict)
704
- split_portfolio['RB2_team'] = split_portfolio['RB2'].map(player_team_dict)
705
- split_portfolio['WR1_team'] = split_portfolio['WR1'].map(player_team_dict)
706
- split_portfolio['WR2_team'] = split_portfolio['WR2'].map(player_team_dict)
707
- split_portfolio['WR3_team'] = split_portfolio['WR3'].map(player_team_dict)
708
- split_portfolio['TE_team'] = split_portfolio['TE'].map(player_team_dict)
709
- split_portfolio['FLEX_team'] = split_portfolio['FLEX'].map(player_team_dict)
710
- split_portfolio['DST_team'] = split_portfolio['DST'].map(player_team_dict)
711
-
712
- split_portfolio = split_portfolio[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'Salary', 'Projection', 'Ownership', 'QB_team',
713
- 'RB1_team', 'RB2_team', 'WR1_team', 'WR2_team', 'WR3_team', 'TE_team', 'FLEX_team', 'DST_team']]
714
-
715
- split_portfolio['Main_Stack'] = split_portfolio.iloc[:, 15:19].apply(lambda row: row.value_counts().nlargest(2).index[0],axis=1)
716
- split_portfolio['Main_Stack_Size'] = split_portfolio.iloc[:, 15:19].apply(lambda row: row.value_counts().nlargest(2).values[0],axis=1)
717
- split_portfolio['Main_Stack_Size'] = split_portfolio['Main_Stack_Size'] - 1
718
-
719
- for player_cols in split_portfolio.iloc[:, :9]:
720
- static_col_raw = split_portfolio[player_cols].value_counts()
721
- static_col = static_col_raw.to_frame()
722
- static_col.reset_index(inplace=True)
723
- static_col.columns = ['Player', 'count']
724
- static_exposure = pd.concat([static_exposure, static_col], ignore_index=True)
725
- static_exposure['Exposure'] = static_exposure['count'] / len(split_portfolio)
726
- static_exposure = static_exposure[['Player', 'Exposure']]
727
 
728
- with st.container():
729
- col1, col2 = st.columns([3, 3])
730
-
731
- if portfolio_file is not None:
732
- with col1:
733
- team_split_var1 = st.radio("Are you wanting to isolate any lineups with specific main stacks?", ('Full Portfolio', 'Specific Stacks'))
734
- if team_split_var1 == 'Specific Stacks':
735
- team_var1 = st.multiselect('Which main stacks would you like to include in the Portfolio?', options = split_portfolio['Main_Stack'].unique())
736
- elif team_split_var1 == 'Full Portfolio':
737
- team_var1 = split_portfolio.Main_Stack.values.tolist()
738
- with col2:
739
- player_split_var1 = st.radio("Are you wanting to isolate any lineups with specific players?", ('Full Players', 'Specific Players'))
740
- if player_split_var1 == 'Specific Players':
741
- find_var1 = st.multiselect('Which players must be included in the lineups?', options = static_exposure['Player'].unique())
742
- elif player_split_var1 == 'Full Players':
743
- find_var1 = static_exposure.Player.values.tolist()
744
-
745
- split_portfolio = split_portfolio[split_portfolio['Main_Stack'].isin(team_var1)]
746
- if player_split_var1 == 'Specific Players':
747
- split_portfolio = split_portfolio[np.equal.outer(split_portfolio.to_numpy(copy=False), find_var1).any(axis=1).all(axis=1)]
748
- elif player_split_var1 == 'Full Players':
749
- split_portfolio = split_portfolio
750
-
751
- for player_cols in split_portfolio.iloc[:, :9]:
752
- exposure_col_raw = split_portfolio[player_cols].value_counts()
753
- exposure_col = exposure_col_raw.to_frame()
754
- exposure_col.reset_index(inplace=True)
755
- exposure_col.columns = ['Player', 'count']
756
- overall_exposure = pd.concat([overall_exposure, exposure_col], ignore_index=True)
757
- overall_exposure['Exposure'] = overall_exposure['count'] / len(split_portfolio)
758
- overall_exposure = overall_exposure.groupby('Player').sum()
759
- overall_exposure.reset_index(inplace=True)
760
- overall_exposure = overall_exposure[['Player', 'Exposure']]
761
- overall_exposure = overall_exposure.set_index('Player')
762
- overall_exposure = overall_exposure.sort_values(by='Exposure', ascending=False)
763
- overall_exposure['Exposure'] = overall_exposure['Exposure'].astype(float).map(lambda n: '{:.2%}'.format(n))
764
-
765
- with st.container():
766
- col1, col2 = st.columns([1, 6])
767
-
768
- with col1:
769
- if portfolio_file is not None:
770
- st.header('Exposure View')
771
- st.dataframe(overall_exposure)
772
-
773
- with col2:
774
- if portfolio_file is not None:
775
- st.header('Portfolio View')
776
- split_portfolio = split_portfolio.reset_index()
777
- split_portfolio['Lineup'] = split_portfolio['index'] + 1
778
- display_portfolio = split_portfolio[['Lineup', 'QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST', 'Salary', 'Main_Stack', 'Main_Stack_Size', 'Projection', 'Ownership']]
779
- display_portfolio = display_portfolio.set_index('Lineup')
780
- st.dataframe(display_portfolio.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Ownership']).format(precision=2))
781
-
782
  with tab2:
783
  col1, col2 = st.columns([1, 7])
784
  with col1:
@@ -796,7 +680,7 @@ with tab2:
796
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
797
  if site_var1 == 'Draftkings':
798
  if slate_var1 == 'User':
799
- raw_baselines = proj_dataframe[['Player', 'Salary', 'Position', 'Team', 'Opp', 'Median', 'Own']].copy()
800
  elif slate_var1 != 'User':
801
  raw_baselines = dk_roo_raw[dk_roo_raw['slate'] == str(slate_var1)]
802
  raw_baselines = raw_baselines[raw_baselines['version'] == 'overall']
@@ -854,12 +738,11 @@ with tab2:
854
  with st.container():
855
  if st.button("Simulate Contest"):
856
  with st.container():
857
- st.write('Contest Simulation Starting')
858
  for key in st.session_state.keys():
859
  del st.session_state[key]
860
 
861
  if slate_var1 == 'User':
862
- initial_proj = proj_dataframe[['Player', 'Team', 'Position', 'Median', 'Own', 'Floor', 'Ceiling', 'Salary']].copy()
863
 
864
  # Define the calculation to be applied
865
  def calculate_own(position, own, mean_own, factor, max_own=75):
@@ -884,7 +767,7 @@ with tab2:
884
 
885
  elif slate_var1 != 'User':
886
  # Copy only the necessary columns
887
- initial_proj = raw_baselines[['Player', 'Team', 'Position', 'Median', 'Own', 'Floor', 'Ceiling', 'Salary']].copy()
888
 
889
  # Define the calculation to be applied
890
  def calculate_own(position, own, mean_own, factor, max_own=75):
@@ -1070,12 +953,10 @@ with tab2:
1070
  'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
1071
  }
1072
 
1073
- st.write('Seed frame creation')
1074
  FinalPortfolio, maps_dict = run_seed_frame(10, Strength_var, strength_grow, Teams_used, 1000000, field_growth)
1075
 
1076
  Sim_Winners = sim_contest(2500, FinalPortfolio, CleanPortfolio, maps_dict, up_dict, insert_port)
1077
-
1078
- st.write('Contest simulation complete')
1079
  # Initial setup
1080
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
1081
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
@@ -1084,11 +965,13 @@ with tab2:
1084
  type_cast_dict = {'Salary': int, 'Projection': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float16}
1085
  Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
1086
 
 
 
1087
  # Sorting
1088
  st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by='GPP_Proj', ascending=False)
1089
 
1090
  # Data Copying
1091
- st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
1092
 
1093
  # Conditional Replacement
1094
  columns_to_replace = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
@@ -1100,107 +983,94 @@ with tab2:
1100
 
1101
  for col in columns_to_replace:
1102
  st.session_state.Sim_Winner_Export[col].replace(replace_dict, inplace=True)
 
 
1103
 
1104
- player_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,0:9].values, return_counts=True)),
1105
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1106
- player_freq['Freq'] = player_freq['Freq'].astype(int)
1107
- player_freq['Position'] = player_freq['Player'].map(maps_dict['Pos_map'])
1108
- player_freq['Salary'] = player_freq['Player'].map(maps_dict['Salary_map'])
1109
- player_freq['Proj Own'] = player_freq['Player'].map(maps_dict['Own_map']) / 100
1110
- player_freq['Exposure'] = player_freq['Freq']/(2500)
1111
- player_freq['Edge'] = player_freq['Exposure'] - player_freq['Proj Own']
1112
- player_freq['Team'] = player_freq['Player'].map(maps_dict['Team_map'])
1113
  for checkVar in range(len(team_list)):
1114
- player_freq['Team'] = player_freq['Team'].replace(item_list, team_list)
1115
-
1116
- st.session_state.player_freq = player_freq[['Player', 'Position', 'Team', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1117
 
1118
- qb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,0:1].values, return_counts=True)),
1119
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1120
- qb_freq['Freq'] = qb_freq['Freq'].astype(int)
1121
- qb_freq['Position'] = qb_freq['Player'].map(maps_dict['Pos_map'])
1122
- qb_freq['Salary'] = qb_freq['Player'].map(maps_dict['Salary_map'])
1123
- qb_freq['Proj Own'] = qb_freq['Player'].map(maps_dict['Own_map']) / 100
1124
- qb_freq['Exposure'] = qb_freq['Freq']/(2500)
1125
- qb_freq['Edge'] = qb_freq['Exposure'] - qb_freq['Proj Own']
1126
- qb_freq['Team'] = qb_freq['Player'].map(maps_dict['Team_map'])
1127
  for checkVar in range(len(team_list)):
1128
- qb_freq['Team'] = qb_freq['Team'].replace(item_list, team_list)
1129
-
1130
- st.session_state.qb_freq = qb_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1131
 
1132
- rb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[1, 2]].values, return_counts=True)),
1133
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1134
- rb_freq['Freq'] = rb_freq['Freq'].astype(int)
1135
- rb_freq['Position'] = rb_freq['Player'].map(maps_dict['Pos_map'])
1136
- rb_freq['Salary'] = rb_freq['Player'].map(maps_dict['Salary_map'])
1137
- rb_freq['Proj Own'] = rb_freq['Player'].map(maps_dict['Own_map']) / 100
1138
- rb_freq['Exposure'] = rb_freq['Freq']/2500
1139
- rb_freq['Edge'] = rb_freq['Exposure'] - rb_freq['Proj Own']
1140
- rb_freq['Team'] = rb_freq['Player'].map(maps_dict['Team_map'])
1141
  for checkVar in range(len(team_list)):
1142
- rb_freq['Team'] = rb_freq['Team'].replace(item_list, team_list)
1143
-
1144
- st.session_state.rb_freq = rb_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1145
 
1146
- wr_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[3, 4, 5]].values, return_counts=True)),
1147
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1148
- wr_freq['Freq'] = wr_freq['Freq'].astype(int)
1149
- wr_freq['Position'] = wr_freq['Player'].map(maps_dict['Pos_map'])
1150
- wr_freq['Salary'] = wr_freq['Player'].map(maps_dict['Salary_map'])
1151
- wr_freq['Proj Own'] = wr_freq['Player'].map(maps_dict['Own_map']) / 100
1152
- wr_freq['Exposure'] = wr_freq['Freq']/2500
1153
- wr_freq['Edge'] = wr_freq['Exposure'] - wr_freq['Proj Own']
1154
- wr_freq['Team'] = wr_freq['Player'].map(maps_dict['Team_map'])
1155
  for checkVar in range(len(team_list)):
1156
- wr_freq['Team'] = wr_freq['Team'].replace(item_list, team_list)
1157
-
1158
- st.session_state.wr_freq = wr_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1159
 
1160
- te_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[6]].values, return_counts=True)),
1161
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1162
- te_freq['Freq'] = te_freq['Freq'].astype(int)
1163
- te_freq['Position'] = te_freq['Player'].map(maps_dict['Pos_map'])
1164
- te_freq['Salary'] = te_freq['Player'].map(maps_dict['Salary_map'])
1165
- te_freq['Proj Own'] = te_freq['Player'].map(maps_dict['Own_map']) / 100
1166
- te_freq['Exposure'] = te_freq['Freq']/2500
1167
- te_freq['Edge'] = te_freq['Exposure'] - te_freq['Proj Own']
1168
- te_freq['Team'] = te_freq['Player'].map(maps_dict['Team_map'])
1169
  for checkVar in range(len(team_list)):
1170
- te_freq['Team'] = te_freq['Team'].replace(item_list, team_list)
1171
-
1172
- st.session_state.te_freq = te_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1173
 
1174
- flex_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[7]].values, return_counts=True)),
1175
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1176
- flex_freq['Freq'] = flex_freq['Freq'].astype(int)
1177
- flex_freq['Position'] = flex_freq['Player'].map(maps_dict['Pos_map'])
1178
- flex_freq['Salary'] = flex_freq['Player'].map(maps_dict['Salary_map'])
1179
- flex_freq['Proj Own'] = flex_freq['Player'].map(maps_dict['Own_map']) / 100
1180
- flex_freq['Exposure'] = flex_freq['Freq']/2500
1181
- flex_freq['Edge'] = flex_freq['Exposure'] - flex_freq['Proj Own']
1182
- flex_freq['Team'] = flex_freq['Player'].map(maps_dict['Team_map'])
1183
  for checkVar in range(len(team_list)):
1184
- flex_freq['Team'] = flex_freq['Team'].replace(item_list, team_list)
1185
-
1186
- st.session_state.flex_freq = flex_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1187
 
1188
- dst_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,8:9].values, return_counts=True)),
1189
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1190
- dst_freq['Freq'] = dst_freq['Freq'].astype(int)
1191
- dst_freq['Position'] = dst_freq['Player'].map(maps_dict['Pos_map'])
1192
- dst_freq['Salary'] = dst_freq['Player'].map(maps_dict['Salary_map'])
1193
- dst_freq['Proj Own'] = dst_freq['Player'].map(maps_dict['Own_map']) / 100
1194
- dst_freq['Exposure'] = dst_freq['Freq']/2500
1195
- dst_freq['Edge'] = dst_freq['Exposure'] - dst_freq['Proj Own']
1196
- dst_freq['Team'] = dst_freq['Player'].map(maps_dict['Team_map'])
1197
  for checkVar in range(len(team_list)):
1198
- dst_freq['Team'] = dst_freq['Team'].replace(item_list, team_list)
1199
-
1200
- st.session_state.dst_freq = dst_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
1201
 
1202
  with st.container():
1203
- simulate_container = st.empty()
1204
  if 'player_freq' in st.session_state:
1205
  player_split_var2 = st.radio("Are you wanting to isolate any lineups with specific players?", ('Full Players', 'Specific Players'), key='player_split_var2')
1206
  if player_split_var2 == 'Specific Players':
@@ -1209,7 +1079,7 @@ with tab2:
1209
  find_var2 = st.session_state.player_freq.Player.values.tolist()
1210
 
1211
  if player_split_var2 == 'Specific Players':
1212
- st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame[np.equal.outer(st.session_state.Sim_Winner_Frame.to_numpy(copy=False), find_var2).any(axis=1).all(axis=1)]
1213
  if player_split_var2 == 'Full Players':
1214
  st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame
1215
  if 'Sim_Winner_Display' in st.session_state:
@@ -1217,20 +1087,19 @@ with tab2:
1217
  if 'Sim_Winner_Export' in st.session_state:
1218
  st.download_button(
1219
  label="Export Tables",
1220
- data=convert_df_to_csv(st.session_state.Sim_Winner_Export),
1221
  file_name='NFL_consim_export.csv',
1222
  mime='text/csv',
1223
  )
1224
 
1225
  with st.container():
1226
- freq_container = st.empty()
1227
  tab1, tab2, tab3, tab4, tab5, tab6, tab7 = st.tabs(['Overall Exposures', 'QB Exposures', 'RB Exposures', 'WR Exposures', 'TE Exposures', 'FLEX Exposures', 'DST Exposures'])
1228
  with tab1:
1229
  if 'player_freq' in st.session_state:
1230
  st.dataframe(st.session_state.player_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1231
  st.download_button(
1232
  label="Export Exposures",
1233
- data=convert_df_to_csv(st.session_state.player_freq),
1234
  file_name='player_freq_export.csv',
1235
  mime='text/csv',
1236
  )
@@ -1239,7 +1108,7 @@ with tab2:
1239
  st.dataframe(st.session_state.qb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1240
  st.download_button(
1241
  label="Export Exposures",
1242
- data=convert_df_to_csv(st.session_state.qb_freq),
1243
  file_name='qb_freq_export.csv',
1244
  mime='text/csv',
1245
  )
@@ -1248,7 +1117,7 @@ with tab2:
1248
  st.dataframe(st.session_state.rb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1249
  st.download_button(
1250
  label="Export Exposures",
1251
- data=convert_df_to_csv(st.session_state.rb_freq),
1252
  file_name='rb_freq_export.csv',
1253
  mime='text/csv',
1254
  )
@@ -1257,7 +1126,7 @@ with tab2:
1257
  st.dataframe(st.session_state.wr_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1258
  st.download_button(
1259
  label="Export Exposures",
1260
- data=convert_df_to_csv(st.session_state.wr_freq),
1261
  file_name='wr_freq_export.csv',
1262
  mime='text/csv',
1263
  )
@@ -1266,7 +1135,7 @@ with tab2:
1266
  st.dataframe(st.session_state.te_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1267
  st.download_button(
1268
  label="Export Exposures",
1269
- data=convert_df_to_csv(st.session_state.te_freq),
1270
  file_name='te_freq_export.csv',
1271
  mime='text/csv',
1272
  )
@@ -1275,7 +1144,7 @@ with tab2:
1275
  st.dataframe(st.session_state.flex_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1276
  st.download_button(
1277
  label="Export Exposures",
1278
- data=convert_df_to_csv(st.session_state.flex_freq),
1279
  file_name='flex_freq_export.csv',
1280
  mime='text/csv',
1281
  )
@@ -1284,7 +1153,7 @@ with tab2:
1284
  st.dataframe(st.session_state.dst_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1285
  st.download_button(
1286
  label="Export Exposures",
1287
- data=convert_df_to_csv(st.session_state.dst_freq),
1288
  file_name='dst_freq_export.csv',
1289
  mime='text/csv',
1290
  )
@@ -1295,4 +1164,5 @@ del t_stamp
1295
  del dkid_dict, fdid_dict
1296
  del static_exposure, overall_exposure
1297
  del insert_port1, Contest_Size, sharp_split, Strength_var, scaling_var, Sort_function, Sim_function, strength_grow, field_growth
1298
- del raw_baselines
 
 
30
  }
31
 
32
  gc_con = gspread.service_account_from_dict(credentials)
33
+
34
  return gc_con
35
 
36
  gcservice_account = init_conn()
 
74
 
75
  return dk_ids, fd_ids
76
 
77
+ dk_roo_raw = load_dk_player_projections()
78
+ fd_roo_raw = load_fd_player_projections()
79
+ t_stamp = f"Last Update: " + str(dk_roo_raw['timestamp'][0]) + f" CST"
80
+ dkid_dict, fdid_dict = set_export_ids()
81
 
82
+ static_exposure = pd.DataFrame(columns=['Player', 'count'])
83
+ overall_exposure = pd.DataFrame(columns=['Player', 'count'])
84
+
85
  def sim_contest(Sim_size, FinalPortfolio, CleanPortfolio, maps_dict, up_dict, insert_port):
86
  SimVar = 1
87
  Sim_Winners = []
 
143
  while RunsVar <= seed_depth_def:
144
  if RunsVar <= 3:
145
  FieldStrength = Strength_var_def
146
+ FinalPortfolio, maps_dict = get_correlated_portfolio_for_sim(Total_Runs_def * .25, sharp_split, field_growth)
147
+ FinalPortfolio2, maps_dict2 = get_uncorrelated_portfolio_for_sim(Total_Runs_def * .25, sharp_split, field_growth)
148
  FinalPortfolio_init = pd.concat([FinalPortfolio, FinalPortfolio2], axis=0)
149
  maps_dict.update(maps_dict2)
150
  elif RunsVar > 3 and RunsVar <= 4:
151
  FieldStrength += (strength_grow_def + ((30 - len(Teams_used_def)) * .001))
152
+ FinalPortfolio3, maps_dict3 = get_correlated_portfolio_for_sim(Total_Runs_def * .25, sharp_split, field_growth)
153
+ FinalPortfolio4, maps_dict4 = get_uncorrelated_portfolio_for_sim(Total_Runs_def * .25, sharp_split, field_growth)
154
  FinalPortfolio_merge_3 = pd.concat([FinalPortfolio_init, FinalPortfolio3], axis=0)
155
  FinalPortfolio_merge_4 = pd.concat([FinalPortfolio_merge_3, FinalPortfolio4], axis=0)
156
  FinalPortfolio_step_2 = FinalPortfolio_merge_4.drop_duplicates(subset = ['Projection', 'Own'],keep = 'last').reset_index(drop = True)
 
158
  maps_dict.update(maps_dict4)
159
  elif RunsVar > 4:
160
  FieldStrength = 1
161
+ FinalPortfolio5, maps_dict5 = get_correlated_portfolio_for_sim(Total_Runs_def * .25, sharp_split, field_growth)
162
+ FinalPortfolio6, maps_dict6 = get_uncorrelated_portfolio_for_sim(Total_Runs_def * .25, sharp_split, field_growth)
163
  FinalPortfolio_merge_5 = pd.concat([FinalPortfolio_step_2, FinalPortfolio5], axis=0)
164
  FinalPortfolio_merge_6 = pd.concat([FinalPortfolio_merge_5, FinalPortfolio6], axis=0)
165
  FinalPortfolio_export = FinalPortfolio_merge_6.drop_duplicates(subset = ['Projection', 'Own'],keep = 'last').reset_index(drop = True)
 
214
 
215
  df_out = pd.concat(ref_dict['pos_dfs'], ignore_index=True)
216
 
217
+ return ref_dict
218
 
219
  def calculate_range_var(count, min_val, FieldStrength, field_growth):
220
  var = round(len(count[0]) * FieldStrength)
 
225
 
226
  def create_random_portfolio(Total_Sample_Size, raw_baselines, field_growth):
227
 
228
+ full_pos_player_dict = get_overall_merged_df()
229
  max_var = len(raw_baselines[raw_baselines['Position'] == 'QB'])
230
 
231
  field_growth_rounded = round(field_growth)
 
472
 
473
  return RandomPortfolio, maps_dict
474
 
 
 
 
 
 
 
 
 
475
  tab1, tab2 = st.tabs(['Uploads', 'Contest Sim'])
476
 
477
  with tab1:
 
504
  player_salary_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Salary))
505
  player_proj_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Median))
506
  player_own_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Own))
 
507
 
508
  with col2:
509
  st.info("The Portfolio file must contain only columns in order and explicitly named: 'QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', and 'DST'. Upload your projections first to avoid an error message.")
 
571
  split_portfolio['TE'].map(player_own_dict),
572
  split_portfolio['FLEX'].map(player_own_dict),
573
  split_portfolio['DST'].map(player_own_dict)])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
574
 
575
 
576
  except:
 
627
  split_portfolio['TE'].map(player_own_dict),
628
  split_portfolio['FLEX'].map(player_own_dict),
629
  split_portfolio['DST'].map(player_own_dict)])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
 
631
  except:
632
  split_portfolio = portfolio_dataframe
 
660
  split_portfolio['TE'].map(player_own_dict),
661
  split_portfolio['FLEX'].map(player_own_dict),
662
  split_portfolio['DST'].map(player_own_dict)])
663
+
664
+ gc.collect()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
665
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
666
  with tab2:
667
  col1, col2 = st.columns([1, 7])
668
  with col1:
 
680
  site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'))
681
  if site_var1 == 'Draftkings':
682
  if slate_var1 == 'User':
683
+ raw_baselines = proj_dataframe[['Player', 'Salary', 'Position', 'Team', 'Opp', 'Median', 'Own']]
684
  elif slate_var1 != 'User':
685
  raw_baselines = dk_roo_raw[dk_roo_raw['slate'] == str(slate_var1)]
686
  raw_baselines = raw_baselines[raw_baselines['version'] == 'overall']
 
738
  with st.container():
739
  if st.button("Simulate Contest"):
740
  with st.container():
 
741
  for key in st.session_state.keys():
742
  del st.session_state[key]
743
 
744
  if slate_var1 == 'User':
745
+ initial_proj = proj_dataframe[['Player', 'Team', 'Position', 'Median', 'Own', 'Floor', 'Ceiling', 'Salary']]
746
 
747
  # Define the calculation to be applied
748
  def calculate_own(position, own, mean_own, factor, max_own=75):
 
767
 
768
  elif slate_var1 != 'User':
769
  # Copy only the necessary columns
770
+ initial_proj = raw_baselines[['Player', 'Team', 'Position', 'Median', 'Own', 'Floor', 'Ceiling', 'Salary']]
771
 
772
  # Define the calculation to be applied
773
  def calculate_own(position, own, mean_own, factor, max_own=75):
 
953
  'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
954
  }
955
 
 
956
  FinalPortfolio, maps_dict = run_seed_frame(10, Strength_var, strength_grow, Teams_used, 1000000, field_growth)
957
 
958
  Sim_Winners = sim_contest(2500, FinalPortfolio, CleanPortfolio, maps_dict, up_dict, insert_port)
959
+
 
960
  # Initial setup
961
  Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
962
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
 
965
  type_cast_dict = {'Salary': int, 'Projection': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float16}
966
  Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
967
 
968
+ del FinalPortfolio, insert_port, type_cast_dict
969
+
970
  # Sorting
971
  st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by='GPP_Proj', ascending=False)
972
 
973
  # Data Copying
974
+ st.session_state.Sim_Winner_Export = Sim_Winner_Frame
975
 
976
  # Conditional Replacement
977
  columns_to_replace = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST']
 
983
 
984
  for col in columns_to_replace:
985
  st.session_state.Sim_Winner_Export[col].replace(replace_dict, inplace=True)
986
+
987
+ del replace_dict, Sim_Winner_Frame, Sim_Winners
988
 
989
+ st.session_state.player_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,0:9].values, return_counts=True)),
990
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
991
+ st.session_state.player_freq['Freq'] = st.session_state.player_freq['Freq'].astype(int)
992
+ st.session_state.player_freq['Position'] = st.session_state.player_freq['Player'].map(maps_dict['Pos_map'])
993
+ st.session_state.player_freq['Salary'] = st.session_state.player_freq['Player'].map(maps_dict['Salary_map'])
994
+ st.session_state.player_freq['Proj Own'] = st.session_state.player_freq['Player'].map(maps_dict['Own_map']) / 100
995
+ st.session_state.player_freq['Exposure'] = st.session_state.player_freq['Freq']/(2500)
996
+ st.session_state.player_freq['Edge'] = st.session_state.player_freq['Exposure'] - st.session_state.player_freq['Proj Own']
997
+ st.session_state.player_freq['Team'] = st.session_state.player_freq['Player'].map(maps_dict['Team_map'])
998
  for checkVar in range(len(team_list)):
999
+ st.session_state.player_freq['Team'] = st.session_state.player_freq['Team'].replace(item_list, team_list)
 
 
1000
 
1001
+ st.session_state.qb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,0:1].values, return_counts=True)),
1002
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1003
+ st.session_state.qb_freq['Freq'] = st.session_state.qb_freq['Freq'].astype(int)
1004
+ st.session_state.qb_freq['Position'] = st.session_state.qb_freq['Player'].map(maps_dict['Pos_map'])
1005
+ st.session_state.qb_freq['Salary'] = st.session_state.qb_freq['Player'].map(maps_dict['Salary_map'])
1006
+ st.session_state.qb_freq['Proj Own'] = st.session_state.qb_freq['Player'].map(maps_dict['Own_map']) / 100
1007
+ st.session_state.qb_freq['Exposure'] = st.session_state.qb_freq['Freq']/(2500)
1008
+ st.session_state.qb_freq['Edge'] = st.session_state.qb_freq['Exposure'] - st.session_state.qb_freq['Proj Own']
1009
+ st.session_state.qb_freq['Team'] = st.session_state.qb_freq['Player'].map(maps_dict['Team_map'])
1010
  for checkVar in range(len(team_list)):
1011
+ st.session_state.qb_freq['Team'] = st.session_state.qb_freq['Team'].replace(item_list, team_list)
 
 
1012
 
1013
+ st.session_state.rb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[1, 2]].values, return_counts=True)),
1014
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1015
+ st.session_state.rb_freq['Freq'] = st.session_state.rb_freq['Freq'].astype(int)
1016
+ st.session_state.rb_freq['Position'] = st.session_state.rb_freq['Player'].map(maps_dict['Pos_map'])
1017
+ st.session_state.rb_freq['Salary'] = st.session_state.rb_freq['Player'].map(maps_dict['Salary_map'])
1018
+ st.session_state.rb_freq['Proj Own'] = st.session_state.rb_freq['Player'].map(maps_dict['Own_map']) / 100
1019
+ st.session_state.rb_freq['Exposure'] = st.session_state.rb_freq['Freq']/2500
1020
+ st.session_state.rb_freq['Edge'] = st.session_state.rb_freq['Exposure'] - st.session_state.rb_freq['Proj Own']
1021
+ st.session_state.rb_freq['Team'] = st.session_state.rb_freq['Player'].map(maps_dict['Team_map'])
1022
  for checkVar in range(len(team_list)):
1023
+ st.session_state.rb_freq['Team'] = st.session_state.rb_freq['Team'].replace(item_list, team_list)
 
 
1024
 
1025
+ st.session_state.wr_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[3, 4, 5]].values, return_counts=True)),
1026
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1027
+ st.session_state.wr_freq['Freq'] = st.session_state.wr_freq['Freq'].astype(int)
1028
+ st.session_state.wr_freq['Position'] = st.session_state.wr_freq['Player'].map(maps_dict['Pos_map'])
1029
+ st.session_state.wr_freq['Salary'] = st.session_state.wr_freq['Player'].map(maps_dict['Salary_map'])
1030
+ st.session_state.wr_freq['Proj Own'] = st.session_state.wr_freq['Player'].map(maps_dict['Own_map']) / 100
1031
+ st.session_state.wr_freq['Exposure'] = st.session_state.wr_freq['Freq']/2500
1032
+ st.session_state.wr_freq['Edge'] = st.session_state.wr_freq['Exposure'] - st.session_state.wr_freq['Proj Own']
1033
+ st.session_state.wr_freq['Team'] = st.session_state.wr_freq['Player'].map(maps_dict['Team_map'])
1034
  for checkVar in range(len(team_list)):
1035
+ st.session_state.wr_freq['Team'] = st.session_state.wr_freq['Team'].replace(item_list, team_list)
 
 
1036
 
1037
+ st.session_state.te_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[6]].values, return_counts=True)),
1038
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1039
+ st.session_state.te_freq['Freq'] = st.session_state.te_freq['Freq'].astype(int)
1040
+ st.session_state.te_freq['Position'] = st.session_state.te_freq['Player'].map(maps_dict['Pos_map'])
1041
+ st.session_state.te_freq['Salary'] = st.session_state.te_freq['Player'].map(maps_dict['Salary_map'])
1042
+ st.session_state.te_freq['Proj Own'] = st.session_state.te_freq['Player'].map(maps_dict['Own_map']) / 100
1043
+ st.session_state.te_freq['Exposure'] = st.session_state.te_freq['Freq']/2500
1044
+ st.session_state.te_freq['Edge'] = st.session_state.te_freq['Exposure'] - st.session_state.te_freq['Proj Own']
1045
+ st.session_state.te_freq['Team'] = st.session_state.te_freq['Player'].map(maps_dict['Team_map'])
1046
  for checkVar in range(len(team_list)):
1047
+ st.session_state.te_freq['Team'] = st.session_state.te_freq['Team'].replace(item_list, team_list)
 
 
1048
 
1049
+ st.session_state.flex_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,[7]].values, return_counts=True)),
1050
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1051
+ st.session_state.flex_freq['Freq'] = st.session_state.flex_freq['Freq'].astype(int)
1052
+ st.session_state.flex_freq['Position'] = st.session_state.flex_freq['Player'].map(maps_dict['Pos_map'])
1053
+ st.session_state.flex_freq['Salary'] = st.session_state.flex_freq['Player'].map(maps_dict['Salary_map'])
1054
+ st.session_state.flex_freq['Proj Own'] = st.session_state.flex_freq['Player'].map(maps_dict['Own_map']) / 100
1055
+ st.session_state.flex_freq['Exposure'] = st.session_state.flex_freq['Freq']/2500
1056
+ st.session_state.flex_freq['Edge'] = st.session_state.flex_freq['Exposure'] - st.session_state.flex_freq['Proj Own']
1057
+ st.session_state.flex_freq['Team'] = st.session_state.flex_freq['Player'].map(maps_dict['Team_map'])
1058
  for checkVar in range(len(team_list)):
1059
+ st.session_state.flex_freq['Team'] = st.session_state.flex_freq['Team'].replace(item_list, team_list)
 
 
1060
 
1061
+ st.session_state.dst_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Frame.iloc[:,8:9].values, return_counts=True)),
1062
  columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
1063
+ st.session_state.dst_freq['Freq'] = st.session_state.dst_freq['Freq'].astype(int)
1064
+ st.session_state.dst_freq['Position'] = st.session_state.dst_freq['Player'].map(maps_dict['Pos_map'])
1065
+ st.session_state.dst_freq['Salary'] = st.session_state.dst_freq['Player'].map(maps_dict['Salary_map'])
1066
+ st.session_state.dst_freq['Proj Own'] = st.session_state.dst_freq['Player'].map(maps_dict['Own_map']) / 100
1067
+ st.session_state.dst_freq['Exposure'] = st.session_state.dst_freq['Freq']/2500
1068
+ st.session_state.dst_freq['Edge'] = st.session_state.dst_freq['Exposure'] - st.session_state.dst_freq['Proj Own']
1069
+ st.session_state.dst_freq['Team'] = st.session_state.dst_freq['Player'].map(maps_dict['Team_map'])
1070
  for checkVar in range(len(team_list)):
1071
+ st.session_state.dst_freq['Team'] = st.session_state.dst_freq['Team'].replace(item_list, team_list)
 
 
1072
 
1073
  with st.container():
 
1074
  if 'player_freq' in st.session_state:
1075
  player_split_var2 = st.radio("Are you wanting to isolate any lineups with specific players?", ('Full Players', 'Specific Players'), key='player_split_var2')
1076
  if player_split_var2 == 'Specific Players':
 
1079
  find_var2 = st.session_state.player_freq.Player.values.tolist()
1080
 
1081
  if player_split_var2 == 'Specific Players':
1082
+ st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame[np.equal.outer(st.session_state.Sim_Winner_Frame.to_numpy(), find_var2).any(axis=1).all(axis=1)]
1083
  if player_split_var2 == 'Full Players':
1084
  st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame
1085
  if 'Sim_Winner_Display' in st.session_state:
 
1087
  if 'Sim_Winner_Export' in st.session_state:
1088
  st.download_button(
1089
  label="Export Tables",
1090
+ data=st.session_state.Sim_Winner_Export.to_csv().encode('utf-8'),
1091
  file_name='NFL_consim_export.csv',
1092
  mime='text/csv',
1093
  )
1094
 
1095
  with st.container():
 
1096
  tab1, tab2, tab3, tab4, tab5, tab6, tab7 = st.tabs(['Overall Exposures', 'QB Exposures', 'RB Exposures', 'WR Exposures', 'TE Exposures', 'FLEX Exposures', 'DST Exposures'])
1097
  with tab1:
1098
  if 'player_freq' in st.session_state:
1099
  st.dataframe(st.session_state.player_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1100
  st.download_button(
1101
  label="Export Exposures",
1102
+ data=st.session_state.player_freq.to_csv().encode('utf-8'),
1103
  file_name='player_freq_export.csv',
1104
  mime='text/csv',
1105
  )
 
1108
  st.dataframe(st.session_state.qb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1109
  st.download_button(
1110
  label="Export Exposures",
1111
+ data=st.session_state.qb_freq.to_csv().encode('utf-8'),
1112
  file_name='qb_freq_export.csv',
1113
  mime='text/csv',
1114
  )
 
1117
  st.dataframe(st.session_state.rb_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1118
  st.download_button(
1119
  label="Export Exposures",
1120
+ data=st.session_state.rb_freq.to_csv().encode('utf-8'),
1121
  file_name='rb_freq_export.csv',
1122
  mime='text/csv',
1123
  )
 
1126
  st.dataframe(st.session_state.wr_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1127
  st.download_button(
1128
  label="Export Exposures",
1129
+ data=st.session_state.wr_freq.to_csv().encode('utf-8'),
1130
  file_name='wr_freq_export.csv',
1131
  mime='text/csv',
1132
  )
 
1135
  st.dataframe(st.session_state.te_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1136
  st.download_button(
1137
  label="Export Exposures",
1138
+ data=st.session_state.te_freq.to_csv().encode('utf-8'),
1139
  file_name='te_freq_export.csv',
1140
  mime='text/csv',
1141
  )
 
1144
  st.dataframe(st.session_state.flex_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1145
  st.download_button(
1146
  label="Export Exposures",
1147
+ data=st.session_state.flex_freq.to_csv().encode('utf-8'),
1148
  file_name='flex_freq_export.csv',
1149
  mime='text/csv',
1150
  )
 
1153
  st.dataframe(st.session_state.dst_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(freq_format, precision=2), use_container_width = True)
1154
  st.download_button(
1155
  label="Export Exposures",
1156
+ data=st.session_state.dst_freq.to_csv().encode('utf-8'),
1157
  file_name='dst_freq_export.csv',
1158
  mime='text/csv',
1159
  )
 
1164
  del dkid_dict, fdid_dict
1165
  del static_exposure, overall_exposure
1166
  del insert_port1, Contest_Size, sharp_split, Strength_var, scaling_var, Sort_function, Sim_function, strength_grow, field_growth
1167
+ del raw_baselines
1168
+ del freq_format