Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -47,7 +47,58 @@ freq_format = {'Proj Own': '{:.2%}', 'Exposure': '{:.2%}', 'Edge': '{:.2%}'}
|
|
47 |
def convert_df_to_csv(df):
|
48 |
return df.to_csv().encode('utf-8')
|
49 |
|
50 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
RunsVar = 1
|
52 |
seed_depth_def = seed_depth1
|
53 |
Strength_var_def = Strength_var
|
@@ -925,59 +976,9 @@ with tab2:
|
|
925 |
'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
|
926 |
}
|
927 |
|
928 |
-
|
929 |
-
FinalPortfolio, maps_dict = run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_Runs)
|
930 |
-
|
931 |
-
Sim_size = linenum_var1
|
932 |
-
SimVar = 1
|
933 |
-
Sim_Winners = []
|
934 |
-
fp_array = FinalPortfolio.values
|
935 |
-
|
936 |
-
if insert_port == 1:
|
937 |
-
up_array = CleanPortfolio.values
|
938 |
-
|
939 |
-
# Pre-vectorize functions
|
940 |
-
vec_projection_map = np.vectorize(maps_dict['Projection_map'].__getitem__)
|
941 |
-
vec_stdev_map = np.vectorize(maps_dict['STDev_map'].__getitem__)
|
942 |
-
|
943 |
-
if insert_port == 1:
|
944 |
-
vec_up_projection_map = np.vectorize(up_dict['Projection_map'].__getitem__)
|
945 |
-
vec_up_stdev_map = np.vectorize(up_dict['STDev_map'].__getitem__)
|
946 |
-
|
947 |
-
st.write('Simulating contest on frames')
|
948 |
-
|
949 |
-
while SimVar <= Sim_size:
|
950 |
-
if insert_port == 1:
|
951 |
-
fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size-len(CleanPortfolio))]
|
952 |
-
elif insert_port == 0:
|
953 |
-
fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size)]
|
954 |
-
|
955 |
-
sample_arrays1 = np.c_[
|
956 |
-
fp_random,
|
957 |
-
np.sum(np.random.normal(
|
958 |
-
loc=vec_projection_map(fp_random[:, :-5]),
|
959 |
-
scale=vec_stdev_map(fp_random[:, :-5])),
|
960 |
-
axis=1)
|
961 |
-
]
|
962 |
-
|
963 |
-
if insert_port == 1:
|
964 |
-
sample_arrays2 = np.c_[
|
965 |
-
up_array,
|
966 |
-
np.sum(np.random.normal(
|
967 |
-
loc=vec_up_projection_map(up_array[:, :-5]),
|
968 |
-
scale=vec_up_stdev_map(up_array[:, :-5])),
|
969 |
-
axis=1)
|
970 |
-
]
|
971 |
-
sample_arrays = np.vstack((sample_arrays1, sample_arrays2))
|
972 |
-
else:
|
973 |
-
sample_arrays = sample_arrays1
|
974 |
-
|
975 |
-
final_array = sample_arrays[sample_arrays[:, 9].argsort()[::-1]]
|
976 |
-
best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
|
977 |
-
Sim_Winners.append(best_lineup)
|
978 |
-
SimVar += 1
|
979 |
|
980 |
-
|
981 |
# Initial setup
|
982 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
|
983 |
Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
|
@@ -1011,7 +1012,7 @@ with tab2:
|
|
1011 |
st.session_state.player_freq['Position'] = st.session_state.player_freq['Player'].map(maps_dict['Pos_map'])
|
1012 |
st.session_state.player_freq['Salary'] = st.session_state.player_freq['Player'].map(maps_dict['Salary_map'])
|
1013 |
st.session_state.player_freq['Proj Own'] = st.session_state.player_freq['Player'].map(maps_dict['Own_map']) / 100
|
1014 |
-
st.session_state.player_freq['Exposure'] = st.session_state.player_freq['Freq']/(
|
1015 |
st.session_state.player_freq['Edge'] = st.session_state.player_freq['Exposure'] - st.session_state.player_freq['Proj Own']
|
1016 |
st.session_state.player_freq['Team'] = st.session_state.player_freq['Player'].map(maps_dict['Team_map'])
|
1017 |
for checkVar in range(len(team_list)):
|
@@ -1023,7 +1024,7 @@ with tab2:
|
|
1023 |
st.session_state.qb_freq['Position'] = st.session_state.qb_freq['Player'].map(maps_dict['Pos_map'])
|
1024 |
st.session_state.qb_freq['Salary'] = st.session_state.qb_freq['Player'].map(maps_dict['Salary_map'])
|
1025 |
st.session_state.qb_freq['Proj Own'] = st.session_state.qb_freq['Player'].map(maps_dict['Own_map']) / 100
|
1026 |
-
st.session_state.qb_freq['Exposure'] = st.session_state.qb_freq['Freq']/(
|
1027 |
st.session_state.qb_freq['Edge'] = st.session_state.qb_freq['Exposure'] - st.session_state.qb_freq['Proj Own']
|
1028 |
st.session_state.qb_freq['Team'] = st.session_state.qb_freq['Player'].map(maps_dict['Team_map'])
|
1029 |
for checkVar in range(len(team_list)):
|
@@ -1035,7 +1036,7 @@ with tab2:
|
|
1035 |
st.session_state.rb_freq['Position'] = st.session_state.rb_freq['Player'].map(maps_dict['Pos_map'])
|
1036 |
st.session_state.rb_freq['Salary'] = st.session_state.rb_freq['Player'].map(maps_dict['Salary_map'])
|
1037 |
st.session_state.rb_freq['Proj Own'] = st.session_state.rb_freq['Player'].map(maps_dict['Own_map']) / 100
|
1038 |
-
st.session_state.rb_freq['Exposure'] = st.session_state.rb_freq['Freq']/
|
1039 |
st.session_state.rb_freq['Edge'] = st.session_state.rb_freq['Exposure'] - st.session_state.rb_freq['Proj Own']
|
1040 |
st.session_state.rb_freq['Team'] = st.session_state.rb_freq['Player'].map(maps_dict['Team_map'])
|
1041 |
for checkVar in range(len(team_list)):
|
@@ -1047,7 +1048,7 @@ with tab2:
|
|
1047 |
st.session_state.wr_freq['Position'] = st.session_state.wr_freq['Player'].map(maps_dict['Pos_map'])
|
1048 |
st.session_state.wr_freq['Salary'] = st.session_state.wr_freq['Player'].map(maps_dict['Salary_map'])
|
1049 |
st.session_state.wr_freq['Proj Own'] = st.session_state.wr_freq['Player'].map(maps_dict['Own_map']) / 100
|
1050 |
-
st.session_state.wr_freq['Exposure'] = st.session_state.wr_freq['Freq']/
|
1051 |
st.session_state.wr_freq['Edge'] = st.session_state.wr_freq['Exposure'] - st.session_state.wr_freq['Proj Own']
|
1052 |
st.session_state.wr_freq['Team'] = st.session_state.wr_freq['Player'].map(maps_dict['Team_map'])
|
1053 |
for checkVar in range(len(team_list)):
|
@@ -1059,7 +1060,7 @@ with tab2:
|
|
1059 |
st.session_state.flex_freq['Position'] = st.session_state.flex_freq['Player'].map(maps_dict['Pos_map'])
|
1060 |
st.session_state.flex_freq['Salary'] = st.session_state.flex_freq['Player'].map(maps_dict['Salary_map'])
|
1061 |
st.session_state.flex_freq['Proj Own'] = st.session_state.flex_freq['Player'].map(maps_dict['Own_map']) / 100
|
1062 |
-
st.session_state.flex_freq['Exposure'] = st.session_state.flex_freq['Freq']/
|
1063 |
st.session_state.flex_freq['Edge'] = st.session_state.flex_freq['Exposure'] - st.session_state.flex_freq['Proj Own']
|
1064 |
st.session_state.flex_freq['Team'] = st.session_state.flex_freq['Player'].map(maps_dict['Team_map'])
|
1065 |
for checkVar in range(len(team_list)):
|
@@ -1071,7 +1072,7 @@ with tab2:
|
|
1071 |
st.session_state.dst_freq['Position'] = st.session_state.dst_freq['Player'].map(maps_dict['Pos_map'])
|
1072 |
st.session_state.dst_freq['Salary'] = st.session_state.dst_freq['Player'].map(maps_dict['Salary_map'])
|
1073 |
st.session_state.dst_freq['Proj Own'] = st.session_state.dst_freq['Player'].map(maps_dict['Own_map']) / 100
|
1074 |
-
st.session_state.dst_freq['Exposure'] = st.session_state.dst_freq['Freq']/
|
1075 |
st.session_state.dst_freq['Edge'] = st.session_state.dst_freq['Exposure'] - st.session_state.dst_freq['Proj Own']
|
1076 |
st.session_state.dst_freq['Team'] = st.session_state.dst_freq['Player'].map(maps_dict['Team_map'])
|
1077 |
for checkVar in range(len(team_list)):
|
@@ -1100,8 +1101,7 @@ with tab2:
|
|
1100 |
)
|
1101 |
|
1102 |
with st.container():
|
1103 |
-
|
1104 |
-
tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(['Overall Exposures', 'QB Exposures', 'RB Exposures', 'WR Exposures', 'FLEX Exposures', 'S_FLEX Exposures'])
|
1105 |
with tab1:
|
1106 |
if 'player_freq' in st.session_state:
|
1107 |
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)
|
@@ -1147,14 +1147,6 @@ with tab2:
|
|
1147 |
file_name='flex_freq_export.csv',
|
1148 |
mime='text/csv',
|
1149 |
)
|
1150 |
-
with tab6:
|
1151 |
-
if 'dst_freq' in st.session_state:
|
1152 |
-
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)
|
1153 |
-
st.download_button(
|
1154 |
-
label="Export Exposures",
|
1155 |
-
data=st.session_state.dst_freq.to_csv().encode('utf-8'),
|
1156 |
-
file_name='dst_freq_export.csv',
|
1157 |
-
mime='text/csv',
|
1158 |
-
)
|
1159 |
|
1160 |
-
|
|
|
|
47 |
def convert_df_to_csv(df):
|
48 |
return df.to_csv().encode('utf-8')
|
49 |
|
50 |
+
def sim_contest(Sim_size, FinalPortfolio, CleanPortfolio, maps_dict, up_dict, insert_port):
|
51 |
+
SimVar = 1
|
52 |
+
Sim_Winners = []
|
53 |
+
fp_array = FinalPortfolio.values
|
54 |
+
|
55 |
+
if insert_port == 1:
|
56 |
+
up_array = CleanPortfolio.values
|
57 |
+
|
58 |
+
# Pre-vectorize functions
|
59 |
+
vec_projection_map = np.vectorize(maps_dict['Projection_map'].__getitem__)
|
60 |
+
vec_stdev_map = np.vectorize(maps_dict['STDev_map'].__getitem__)
|
61 |
+
|
62 |
+
if insert_port == 1:
|
63 |
+
vec_up_projection_map = np.vectorize(up_dict['Projection_map'].__getitem__)
|
64 |
+
vec_up_stdev_map = np.vectorize(up_dict['STDev_map'].__getitem__)
|
65 |
+
|
66 |
+
st.write('Simulating contest on frames')
|
67 |
+
|
68 |
+
while SimVar <= Sim_size:
|
69 |
+
if insert_port == 1:
|
70 |
+
fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size-len(CleanPortfolio))]
|
71 |
+
elif insert_port == 0:
|
72 |
+
fp_random = fp_array[np.random.choice(fp_array.shape[0], Contest_Size)]
|
73 |
+
|
74 |
+
sample_arrays1 = np.c_[
|
75 |
+
fp_random,
|
76 |
+
np.sum(np.random.normal(
|
77 |
+
loc=vec_projection_map(fp_random[:, :-5]),
|
78 |
+
scale=vec_stdev_map(fp_random[:, :-5])),
|
79 |
+
axis=1)
|
80 |
+
]
|
81 |
+
|
82 |
+
if insert_port == 1:
|
83 |
+
sample_arrays2 = np.c_[
|
84 |
+
up_array,
|
85 |
+
np.sum(np.random.normal(
|
86 |
+
loc=vec_up_projection_map(up_array[:, :-5]),
|
87 |
+
scale=vec_up_stdev_map(up_array[:, :-5])),
|
88 |
+
axis=1)
|
89 |
+
]
|
90 |
+
sample_arrays = np.vstack((sample_arrays1, sample_arrays2))
|
91 |
+
else:
|
92 |
+
sample_arrays = sample_arrays1
|
93 |
+
|
94 |
+
final_array = sample_arrays[sample_arrays[:, 10].argsort()[::-1]]
|
95 |
+
best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
|
96 |
+
Sim_Winners.append(best_lineup)
|
97 |
+
SimVar += 1
|
98 |
+
|
99 |
+
return Sim_Winners
|
100 |
+
|
101 |
+
def run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_Runs, field_growth):
|
102 |
RunsVar = 1
|
103 |
seed_depth_def = seed_depth1
|
104 |
Strength_var_def = Strength_var
|
|
|
976 |
'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
|
977 |
}
|
978 |
|
979 |
+
FinalPortfolio, maps_dict = run_seed_frame(5, Strength_var, strength_grow, Teams_used, 1000000, field_growth)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
980 |
|
981 |
+
Sim_Winners = sim_contest(5000, FinalPortfolio, CleanPortfolio, maps_dict, up_dict, insert_port)
|
982 |
# Initial setup
|
983 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
|
984 |
Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
|
|
|
1012 |
st.session_state.player_freq['Position'] = st.session_state.player_freq['Player'].map(maps_dict['Pos_map'])
|
1013 |
st.session_state.player_freq['Salary'] = st.session_state.player_freq['Player'].map(maps_dict['Salary_map'])
|
1014 |
st.session_state.player_freq['Proj Own'] = st.session_state.player_freq['Player'].map(maps_dict['Own_map']) / 100
|
1015 |
+
st.session_state.player_freq['Exposure'] = st.session_state.player_freq['Freq']/(5000)
|
1016 |
st.session_state.player_freq['Edge'] = st.session_state.player_freq['Exposure'] - st.session_state.player_freq['Proj Own']
|
1017 |
st.session_state.player_freq['Team'] = st.session_state.player_freq['Player'].map(maps_dict['Team_map'])
|
1018 |
for checkVar in range(len(team_list)):
|
|
|
1024 |
st.session_state.qb_freq['Position'] = st.session_state.qb_freq['Player'].map(maps_dict['Pos_map'])
|
1025 |
st.session_state.qb_freq['Salary'] = st.session_state.qb_freq['Player'].map(maps_dict['Salary_map'])
|
1026 |
st.session_state.qb_freq['Proj Own'] = st.session_state.qb_freq['Player'].map(maps_dict['Own_map']) / 100
|
1027 |
+
st.session_state.qb_freq['Exposure'] = st.session_state.qb_freq['Freq']/(5000)
|
1028 |
st.session_state.qb_freq['Edge'] = st.session_state.qb_freq['Exposure'] - st.session_state.qb_freq['Proj Own']
|
1029 |
st.session_state.qb_freq['Team'] = st.session_state.qb_freq['Player'].map(maps_dict['Team_map'])
|
1030 |
for checkVar in range(len(team_list)):
|
|
|
1036 |
st.session_state.rb_freq['Position'] = st.session_state.rb_freq['Player'].map(maps_dict['Pos_map'])
|
1037 |
st.session_state.rb_freq['Salary'] = st.session_state.rb_freq['Player'].map(maps_dict['Salary_map'])
|
1038 |
st.session_state.rb_freq['Proj Own'] = st.session_state.rb_freq['Player'].map(maps_dict['Own_map']) / 100
|
1039 |
+
st.session_state.rb_freq['Exposure'] = st.session_state.rb_freq['Freq']/5000
|
1040 |
st.session_state.rb_freq['Edge'] = st.session_state.rb_freq['Exposure'] - st.session_state.rb_freq['Proj Own']
|
1041 |
st.session_state.rb_freq['Team'] = st.session_state.rb_freq['Player'].map(maps_dict['Team_map'])
|
1042 |
for checkVar in range(len(team_list)):
|
|
|
1048 |
st.session_state.wr_freq['Position'] = st.session_state.wr_freq['Player'].map(maps_dict['Pos_map'])
|
1049 |
st.session_state.wr_freq['Salary'] = st.session_state.wr_freq['Player'].map(maps_dict['Salary_map'])
|
1050 |
st.session_state.wr_freq['Proj Own'] = st.session_state.wr_freq['Player'].map(maps_dict['Own_map']) / 100
|
1051 |
+
st.session_state.wr_freq['Exposure'] = st.session_state.wr_freq['Freq']/5000
|
1052 |
st.session_state.wr_freq['Edge'] = st.session_state.wr_freq['Exposure'] - st.session_state.wr_freq['Proj Own']
|
1053 |
st.session_state.wr_freq['Team'] = st.session_state.wr_freq['Player'].map(maps_dict['Team_map'])
|
1054 |
for checkVar in range(len(team_list)):
|
|
|
1060 |
st.session_state.flex_freq['Position'] = st.session_state.flex_freq['Player'].map(maps_dict['Pos_map'])
|
1061 |
st.session_state.flex_freq['Salary'] = st.session_state.flex_freq['Player'].map(maps_dict['Salary_map'])
|
1062 |
st.session_state.flex_freq['Proj Own'] = st.session_state.flex_freq['Player'].map(maps_dict['Own_map']) / 100
|
1063 |
+
st.session_state.flex_freq['Exposure'] = st.session_state.flex_freq['Freq']/5000
|
1064 |
st.session_state.flex_freq['Edge'] = st.session_state.flex_freq['Exposure'] - st.session_state.flex_freq['Proj Own']
|
1065 |
st.session_state.flex_freq['Team'] = st.session_state.flex_freq['Player'].map(maps_dict['Team_map'])
|
1066 |
for checkVar in range(len(team_list)):
|
|
|
1072 |
st.session_state.dst_freq['Position'] = st.session_state.dst_freq['Player'].map(maps_dict['Pos_map'])
|
1073 |
st.session_state.dst_freq['Salary'] = st.session_state.dst_freq['Player'].map(maps_dict['Salary_map'])
|
1074 |
st.session_state.dst_freq['Proj Own'] = st.session_state.dst_freq['Player'].map(maps_dict['Own_map']) / 100
|
1075 |
+
st.session_state.dst_freq['Exposure'] = st.session_state.dst_freq['Freq']/5000
|
1076 |
st.session_state.dst_freq['Edge'] = st.session_state.dst_freq['Exposure'] - st.session_state.dst_freq['Proj Own']
|
1077 |
st.session_state.dst_freq['Team'] = st.session_state.dst_freq['Player'].map(maps_dict['Team_map'])
|
1078 |
for checkVar in range(len(team_list)):
|
|
|
1101 |
)
|
1102 |
|
1103 |
with st.container():
|
1104 |
+
tab1, tab2, tab3, tab4, tab5 = st.tabs(['Overall Exposures', 'QB Exposures', 'RB Exposures', 'WR Exposures', 'FLEX Exposures'])
|
|
|
1105 |
with tab1:
|
1106 |
if 'player_freq' in st.session_state:
|
1107 |
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)
|
|
|
1147 |
file_name='flex_freq_export.csv',
|
1148 |
mime='text/csv',
|
1149 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1150 |
|
1151 |
+
|
1152 |
+
gc.collect()
|