Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,15 +5,12 @@ for name in dir():
|
|
| 5 |
if not name.startswith('_'):
|
| 6 |
del globals()[name]
|
| 7 |
|
| 8 |
-
import pulp
|
| 9 |
import numpy as np
|
| 10 |
import pandas as pd
|
| 11 |
import streamlit as st
|
| 12 |
import gspread
|
| 13 |
-
import time
|
| 14 |
import random
|
| 15 |
-
import
|
| 16 |
-
import os
|
| 17 |
|
| 18 |
@st.cache_resource
|
| 19 |
def init_conn():
|
|
@@ -36,7 +33,7 @@ def init_conn():
|
|
| 36 |
gc = gspread.service_account_from_dict(credentials)
|
| 37 |
return gc
|
| 38 |
|
| 39 |
-
|
| 40 |
|
| 41 |
game_format = {'Win Percentage': '{:.2%}','First Inning Lead Percentage': '{:.2%}',
|
| 42 |
'Fifth Inning Lead Percentage': '{:.2%}', '8+ runs': '{:.2%}', 'DK LevX': '{:.2%}', 'FD LevX': '{:.2%}'}
|
|
@@ -644,12 +641,6 @@ with tab1:
|
|
| 644 |
static_exposure['Exposure'] = static_exposure['count'] / len(split_portfolio)
|
| 645 |
static_exposure = static_exposure[['Player', 'Exposure']]
|
| 646 |
|
| 647 |
-
del player_salary_dict
|
| 648 |
-
del player_proj_dict
|
| 649 |
-
del player_own_dict
|
| 650 |
-
del player_team_dict
|
| 651 |
-
del static_col_raw
|
| 652 |
-
del static_col
|
| 653 |
with st.container():
|
| 654 |
col1, col2 = st.columns([3, 3])
|
| 655 |
|
|
@@ -686,13 +677,14 @@ with tab1:
|
|
| 686 |
display_portfolio = split_portfolio[['Lineup', 'QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX', 'Salary', 'Projection', 'Ownership']]
|
| 687 |
display_portfolio = display_portfolio.set_index('Lineup')
|
| 688 |
st.dataframe(display_portfolio.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Ownership']).format(precision=2))
|
| 689 |
-
|
| 690 |
-
del exposure_col_raw
|
| 691 |
-
del exposure_col
|
| 692 |
with tab2:
|
| 693 |
col1, col2 = st.columns([1, 7])
|
| 694 |
with col1:
|
| 695 |
-
|
|
|
|
|
|
|
|
|
|
| 696 |
slate_var1 = 'User'
|
| 697 |
site_var1 = 'Draftkings'
|
| 698 |
if proj_file is not None:
|
|
@@ -727,18 +719,6 @@ with tab2:
|
|
| 727 |
|
| 728 |
with col2:
|
| 729 |
if st.button("Simulate Contest"):
|
| 730 |
-
try:
|
| 731 |
-
del dst_freq
|
| 732 |
-
del flex_freq
|
| 733 |
-
del te_freq
|
| 734 |
-
del wr_freq
|
| 735 |
-
del rb_freq
|
| 736 |
-
del qb_freq
|
| 737 |
-
del player_freq
|
| 738 |
-
del Sim_Winner_Export
|
| 739 |
-
del Sim_Winner_Frame
|
| 740 |
-
except:
|
| 741 |
-
pass
|
| 742 |
with st.container():
|
| 743 |
st.write('Contest Simulation Starting')
|
| 744 |
seed_depth1 = 10
|
|
@@ -780,8 +760,6 @@ with tab2:
|
|
| 780 |
OwnFrame['Own%'] = np.where(OwnFrame['Own%'] > 75, 75, OwnFrame['Own%'])
|
| 781 |
OwnFrame['Own'] = OwnFrame['Own%'] * (800 / OwnFrame['Own%'].sum())
|
| 782 |
Overall_Proj = OwnFrame[['Player', 'Team', 'Position', 'Median', 'Own', 'Salary']]
|
| 783 |
-
|
| 784 |
-
del OwnFrame
|
| 785 |
|
| 786 |
if insert_port == 1:
|
| 787 |
UserPortfolio = portfolio_dataframe[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']]
|
|
@@ -806,8 +784,6 @@ with tab2:
|
|
| 806 |
Teams_used = Teams_used.drop(columns=['index'])
|
| 807 |
Teams_used_dictraw = Teams_used.drop(columns=['team_item'])
|
| 808 |
Teams_used_dict = Teams_used_dictraw.to_dict()
|
| 809 |
-
|
| 810 |
-
del Teams_used_dictraw
|
| 811 |
|
| 812 |
team_list = Teams_used['Team'].to_list()
|
| 813 |
item_list = Teams_used['team_item'].to_list()
|
|
@@ -815,8 +791,6 @@ with tab2:
|
|
| 815 |
FieldStrength_raw = Strength_var + ((30 - len(Teams_used)) * .01)
|
| 816 |
FieldStrength = FieldStrength_raw - (FieldStrength_raw * (20000 / Contest_Size))
|
| 817 |
|
| 818 |
-
del FieldStrength_raw
|
| 819 |
-
|
| 820 |
if FieldStrength < 0:
|
| 821 |
FieldStrength = Strength_var
|
| 822 |
field_split = Strength_var
|
|
@@ -859,11 +833,6 @@ with tab2:
|
|
| 859 |
s_pos_players = pd.concat([qbs_raw, rbs_raw, wrs_raw])
|
| 860 |
pos_players.dropna(subset=['Median']).reset_index(drop=True)
|
| 861 |
pos_players = pos_players.reset_index(drop=True)
|
| 862 |
-
|
| 863 |
-
del qbs_raw
|
| 864 |
-
del defs_raw
|
| 865 |
-
del rbs_raw
|
| 866 |
-
del wrs_raw
|
| 867 |
|
| 868 |
if insert_port == 1:
|
| 869 |
try:
|
|
@@ -956,10 +925,6 @@ with tab2:
|
|
| 956 |
'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
|
| 957 |
}
|
| 958 |
|
| 959 |
-
del cleaport_players
|
| 960 |
-
del Overall_Proj
|
| 961 |
-
del nerf_frame
|
| 962 |
-
|
| 963 |
st.write('Seed frame creation')
|
| 964 |
FinalPortfolio, maps_dict = run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_Runs)
|
| 965 |
|
|
@@ -1011,174 +976,191 @@ with tab2:
|
|
| 1011 |
best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
|
| 1012 |
Sim_Winners.append(best_lineup)
|
| 1013 |
SimVar += 1
|
| 1014 |
-
|
| 1015 |
-
|
| 1016 |
-
# del smple_arrays
|
| 1017 |
-
# del smple_arrays1
|
| 1018 |
-
# del smple_arrays2
|
| 1019 |
-
# del final_array
|
| 1020 |
-
# del best_lineup
|
| 1021 |
st.write('Contest simulation complete')
|
| 1022 |
# Initial setup
|
| 1023 |
Sim_Winner_Frame = pd.DataFrame(np.concatenate(Sim_Winners), columns=FinalPortfolio.columns.tolist() + ['Fantasy'])
|
| 1024 |
Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['Projection'] + Sim_Winner_Frame['Fantasy']) / 2
|
|
|
|
|
|
|
| 1025 |
|
| 1026 |
# Type Casting
|
| 1027 |
-
type_cast_dict = {'Salary': int, 'Projection': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.
|
| 1028 |
Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
|
| 1029 |
|
|
|
|
|
|
|
| 1030 |
# Sorting
|
| 1031 |
-
Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by='GPP_Proj', ascending=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1032 |
|
| 1033 |
# Data Copying
|
| 1034 |
-
|
| 1035 |
|
| 1036 |
# Conditional Replacement
|
| 1037 |
columns_to_replace = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']
|
|
|
|
|
|
|
| 1038 |
|
| 1039 |
-
player_freq = pd.DataFrame(np.column_stack(np.unique(
|
| 1040 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1041 |
-
player_freq['Freq'] = player_freq['Freq'].astype(int)
|
| 1042 |
-
player_freq['Position'] = player_freq['Player'].map(maps_dict['Pos_map'])
|
| 1043 |
-
player_freq['Salary'] = player_freq['Player'].map(maps_dict['Salary_map'])
|
| 1044 |
-
player_freq['Proj Own'] = player_freq['Player'].map(maps_dict['Own_map']) / 100
|
| 1045 |
-
player_freq['Exposure'] = player_freq['Freq']/(Sim_size)
|
| 1046 |
-
player_freq['Edge'] = player_freq['Exposure'] - player_freq['Proj Own']
|
| 1047 |
-
player_freq['Team'] = player_freq['Player'].map(maps_dict['Team_map'])
|
| 1048 |
for checkVar in range(len(team_list)):
|
| 1049 |
-
player_freq['Team'] = player_freq['Team'].replace(item_list, team_list)
|
| 1050 |
-
|
| 1051 |
-
player_freq = player_freq[['Player', 'Position', 'Team', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
|
| 1052 |
|
| 1053 |
-
qb_freq = pd.DataFrame(np.column_stack(np.unique(
|
| 1054 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1055 |
-
qb_freq['Freq'] = qb_freq['Freq'].astype(int)
|
| 1056 |
-
qb_freq['Position'] = qb_freq['Player'].map(maps_dict['Pos_map'])
|
| 1057 |
-
qb_freq['Salary'] = qb_freq['Player'].map(maps_dict['Salary_map'])
|
| 1058 |
-
qb_freq['Proj Own'] = qb_freq['Player'].map(maps_dict['Own_map']) / 100
|
| 1059 |
-
qb_freq['Exposure'] = qb_freq['Freq']/(Sim_size)
|
| 1060 |
-
qb_freq['Edge'] = qb_freq['Exposure'] - qb_freq['Proj Own']
|
| 1061 |
-
qb_freq['Team'] = qb_freq['Player'].map(maps_dict['Team_map'])
|
| 1062 |
for checkVar in range(len(team_list)):
|
| 1063 |
-
qb_freq['Team'] = qb_freq['Team'].replace(item_list, team_list)
|
| 1064 |
|
| 1065 |
-
|
| 1066 |
-
|
| 1067 |
-
rb_freq = pd.DataFrame(np.column_stack(np.unique(Sim_Winner_Frame.iloc[:,[1, 2]].values, return_counts=True)),
|
| 1068 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1069 |
-
rb_freq['Freq'] = rb_freq['Freq'].astype(int)
|
| 1070 |
-
rb_freq['Position'] = rb_freq['Player'].map(maps_dict['Pos_map'])
|
| 1071 |
-
rb_freq['Salary'] = rb_freq['Player'].map(maps_dict['Salary_map'])
|
| 1072 |
-
rb_freq['Proj Own'] = rb_freq['Player'].map(maps_dict['Own_map']) / 100
|
| 1073 |
-
rb_freq['Exposure'] = rb_freq['Freq']/Sim_size
|
| 1074 |
-
rb_freq['Edge'] = rb_freq['Exposure'] - rb_freq['Proj Own']
|
| 1075 |
-
rb_freq['Team'] = rb_freq['Player'].map(maps_dict['Team_map'])
|
| 1076 |
for checkVar in range(len(team_list)):
|
| 1077 |
-
rb_freq['Team'] = rb_freq['Team'].replace(item_list, team_list)
|
| 1078 |
-
|
| 1079 |
-
rb_freq = rb_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
|
| 1080 |
|
| 1081 |
-
wr_freq = pd.DataFrame(np.column_stack(np.unique(
|
| 1082 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1083 |
-
wr_freq['Freq'] = wr_freq['Freq'].astype(int)
|
| 1084 |
-
wr_freq['Position'] = wr_freq['Player'].map(maps_dict['Pos_map'])
|
| 1085 |
-
wr_freq['Salary'] = wr_freq['Player'].map(maps_dict['Salary_map'])
|
| 1086 |
-
wr_freq['Proj Own'] = wr_freq['Player'].map(maps_dict['Own_map']) / 100
|
| 1087 |
-
wr_freq['Exposure'] = wr_freq['Freq']/Sim_size
|
| 1088 |
-
wr_freq['Edge'] = wr_freq['Exposure'] - wr_freq['Proj Own']
|
| 1089 |
-
wr_freq['Team'] = wr_freq['Player'].map(maps_dict['Team_map'])
|
| 1090 |
for checkVar in range(len(team_list)):
|
| 1091 |
-
wr_freq['Team'] = wr_freq['Team'].replace(item_list, team_list)
|
| 1092 |
-
|
| 1093 |
-
wr_freq = wr_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
|
| 1094 |
|
| 1095 |
-
flex_freq = pd.DataFrame(np.column_stack(np.unique(
|
| 1096 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1097 |
-
flex_freq['Freq'] = flex_freq['Freq'].astype(int)
|
| 1098 |
-
flex_freq['Position'] = flex_freq['Player'].map(maps_dict['Pos_map'])
|
| 1099 |
-
flex_freq['Salary'] = flex_freq['Player'].map(maps_dict['Salary_map'])
|
| 1100 |
-
flex_freq['Proj Own'] = flex_freq['Player'].map(maps_dict['Own_map']) / 100
|
| 1101 |
-
flex_freq['Exposure'] = flex_freq['Freq']/Sim_size
|
| 1102 |
-
flex_freq['Edge'] = flex_freq['Exposure'] - flex_freq['Proj Own']
|
| 1103 |
-
flex_freq['Team'] = flex_freq['Player'].map(maps_dict['Team_map'])
|
| 1104 |
for checkVar in range(len(team_list)):
|
| 1105 |
-
flex_freq['Team'] = flex_freq['Team'].replace(item_list, team_list)
|
| 1106 |
-
|
| 1107 |
-
flex_freq = flex_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
|
| 1108 |
|
| 1109 |
-
dst_freq = pd.DataFrame(np.column_stack(np.unique(
|
| 1110 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1111 |
-
dst_freq['Freq'] = dst_freq['Freq'].astype(int)
|
| 1112 |
-
dst_freq['Position'] = dst_freq['Player'].map(maps_dict['Pos_map'])
|
| 1113 |
-
dst_freq['Salary'] = dst_freq['Player'].map(maps_dict['Salary_map'])
|
| 1114 |
-
dst_freq['Proj Own'] = dst_freq['Player'].map(maps_dict['Own_map']) / 100
|
| 1115 |
-
dst_freq['Exposure'] = dst_freq['Freq']/Sim_size
|
| 1116 |
-
dst_freq['Edge'] = dst_freq['Exposure'] - dst_freq['Proj Own']
|
| 1117 |
-
dst_freq['Team'] = dst_freq['Player'].map(maps_dict['Team_map'])
|
| 1118 |
for checkVar in range(len(team_list)):
|
| 1119 |
-
dst_freq['Team'] = dst_freq['Team'].replace(item_list, team_list)
|
| 1120 |
-
|
| 1121 |
-
dst_freq = dst_freq[['Player', 'Team', 'Position', 'Salary', 'Proj Own', 'Exposure', 'Edge']]
|
| 1122 |
|
| 1123 |
with st.container():
|
| 1124 |
-
|
| 1125 |
-
|
| 1126 |
-
|
| 1127 |
-
|
| 1128 |
-
|
| 1129 |
-
|
| 1130 |
-
|
| 1131 |
-
|
| 1132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1133 |
|
| 1134 |
with st.container():
|
| 1135 |
freq_container = st.empty()
|
| 1136 |
tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(['Overall Exposures', 'QB Exposures', 'RB Exposures', 'WR Exposures', 'FLEX Exposures', 'S_FLEX Exposures'])
|
| 1137 |
with tab1:
|
| 1138 |
-
|
| 1139 |
-
|
| 1140 |
-
|
| 1141 |
-
|
| 1142 |
-
|
| 1143 |
-
|
| 1144 |
-
|
|
|
|
| 1145 |
with tab2:
|
| 1146 |
-
|
| 1147 |
-
|
| 1148 |
-
|
| 1149 |
-
|
| 1150 |
-
|
| 1151 |
-
|
| 1152 |
-
|
|
|
|
| 1153 |
with tab3:
|
| 1154 |
-
|
| 1155 |
-
|
| 1156 |
-
|
| 1157 |
-
|
| 1158 |
-
|
| 1159 |
-
|
| 1160 |
-
|
|
|
|
| 1161 |
with tab4:
|
| 1162 |
-
|
| 1163 |
-
|
| 1164 |
-
|
| 1165 |
-
|
| 1166 |
-
|
| 1167 |
-
|
| 1168 |
-
|
|
|
|
| 1169 |
with tab5:
|
| 1170 |
-
|
| 1171 |
-
|
| 1172 |
-
|
| 1173 |
-
|
| 1174 |
-
|
| 1175 |
-
|
| 1176 |
-
|
|
|
|
| 1177 |
with tab6:
|
| 1178 |
-
|
| 1179 |
-
|
| 1180 |
-
|
| 1181 |
-
|
| 1182 |
-
|
| 1183 |
-
|
| 1184 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
if not name.startswith('_'):
|
| 6 |
del globals()[name]
|
| 7 |
|
|
|
|
| 8 |
import numpy as np
|
| 9 |
import pandas as pd
|
| 10 |
import streamlit as st
|
| 11 |
import gspread
|
|
|
|
| 12 |
import random
|
| 13 |
+
import gc
|
|
|
|
| 14 |
|
| 15 |
@st.cache_resource
|
| 16 |
def init_conn():
|
|
|
|
| 33 |
gc = gspread.service_account_from_dict(credentials)
|
| 34 |
return gc
|
| 35 |
|
| 36 |
+
gcservice_account = init_conn()
|
| 37 |
|
| 38 |
game_format = {'Win Percentage': '{:.2%}','First Inning Lead Percentage': '{:.2%}',
|
| 39 |
'Fifth Inning Lead Percentage': '{:.2%}', '8+ runs': '{:.2%}', 'DK LevX': '{:.2%}', 'FD LevX': '{:.2%}'}
|
|
|
|
| 641 |
static_exposure['Exposure'] = static_exposure['count'] / len(split_portfolio)
|
| 642 |
static_exposure = static_exposure[['Player', 'Exposure']]
|
| 643 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 644 |
with st.container():
|
| 645 |
col1, col2 = st.columns([3, 3])
|
| 646 |
|
|
|
|
| 677 |
display_portfolio = split_portfolio[['Lineup', 'QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX', 'Salary', 'Projection', 'Ownership']]
|
| 678 |
display_portfolio = display_portfolio.set_index('Lineup')
|
| 679 |
st.dataframe(display_portfolio.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Ownership']).format(precision=2))
|
| 680 |
+
|
|
|
|
|
|
|
| 681 |
with tab2:
|
| 682 |
col1, col2 = st.columns([1, 7])
|
| 683 |
with col1:
|
| 684 |
+
if st.button("Load/Reset Data", key='reset1'):
|
| 685 |
+
st.cache_data.clear()
|
| 686 |
+
for key in st.session_state.keys():
|
| 687 |
+
del st.session_state[key]
|
| 688 |
slate_var1 = 'User'
|
| 689 |
site_var1 = 'Draftkings'
|
| 690 |
if proj_file is not None:
|
|
|
|
| 719 |
|
| 720 |
with col2:
|
| 721 |
if st.button("Simulate Contest"):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 722 |
with st.container():
|
| 723 |
st.write('Contest Simulation Starting')
|
| 724 |
seed_depth1 = 10
|
|
|
|
| 760 |
OwnFrame['Own%'] = np.where(OwnFrame['Own%'] > 75, 75, OwnFrame['Own%'])
|
| 761 |
OwnFrame['Own'] = OwnFrame['Own%'] * (800 / OwnFrame['Own%'].sum())
|
| 762 |
Overall_Proj = OwnFrame[['Player', 'Team', 'Position', 'Median', 'Own', 'Salary']]
|
|
|
|
|
|
|
| 763 |
|
| 764 |
if insert_port == 1:
|
| 765 |
UserPortfolio = portfolio_dataframe[['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']]
|
|
|
|
| 784 |
Teams_used = Teams_used.drop(columns=['index'])
|
| 785 |
Teams_used_dictraw = Teams_used.drop(columns=['team_item'])
|
| 786 |
Teams_used_dict = Teams_used_dictraw.to_dict()
|
|
|
|
|
|
|
| 787 |
|
| 788 |
team_list = Teams_used['Team'].to_list()
|
| 789 |
item_list = Teams_used['team_item'].to_list()
|
|
|
|
| 791 |
FieldStrength_raw = Strength_var + ((30 - len(Teams_used)) * .01)
|
| 792 |
FieldStrength = FieldStrength_raw - (FieldStrength_raw * (20000 / Contest_Size))
|
| 793 |
|
|
|
|
|
|
|
| 794 |
if FieldStrength < 0:
|
| 795 |
FieldStrength = Strength_var
|
| 796 |
field_split = Strength_var
|
|
|
|
| 833 |
s_pos_players = pd.concat([qbs_raw, rbs_raw, wrs_raw])
|
| 834 |
pos_players.dropna(subset=['Median']).reset_index(drop=True)
|
| 835 |
pos_players = pos_players.reset_index(drop=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 836 |
|
| 837 |
if insert_port == 1:
|
| 838 |
try:
|
|
|
|
| 925 |
'team_check_map':dict(zip(cleaport_players.Player,nerf_frame.Team))
|
| 926 |
}
|
| 927 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 928 |
st.write('Seed frame creation')
|
| 929 |
FinalPortfolio, maps_dict = run_seed_frame(seed_depth1, Strength_var, strength_grow, Teams_used, Total_Runs)
|
| 930 |
|
|
|
|
| 976 |
best_lineup = final_array[final_array[:, -1].argsort(kind='stable')[::-1][:1]]
|
| 977 |
Sim_Winners.append(best_lineup)
|
| 978 |
SimVar += 1
|
| 979 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 980 |
st.write('Contest simulation complete')
|
| 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
|
| 984 |
+
Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['Projection'].astype(str) + Sim_Winner_Frame['Salary'].astype(str) + Sim_Winner_Frame['Own'].astype(str)
|
| 985 |
+
Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
|
| 986 |
|
| 987 |
# Type Casting
|
| 988 |
+
type_cast_dict = {'Salary': int, 'Projection': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32}
|
| 989 |
Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
|
| 990 |
|
| 991 |
+
del FinalPortfolio, insert_port, type_cast_dict
|
| 992 |
+
|
| 993 |
# Sorting
|
| 994 |
+
st.session_state.Sim_Winner_Frame = Sim_Winner_Frame.sort_values(by=['win_count', 'GPP_Proj'], ascending= [False, False]).copy().drop_duplicates(subset='unique_id').head(100)
|
| 995 |
+
st.session_state.Sim_Winner_Frame.drop(columns='unique_id', inplace=True)
|
| 996 |
+
|
| 997 |
+
# Data Copying
|
| 998 |
+
st.session_state.Sim_Winner_Export = Sim_Winner_Frame.copy()
|
| 999 |
|
| 1000 |
# Data Copying
|
| 1001 |
+
st.session_state.Sim_Winner_Display = Sim_Winner_Frame.copy()
|
| 1002 |
|
| 1003 |
# Conditional Replacement
|
| 1004 |
columns_to_replace = ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'S_FLEX']
|
| 1005 |
+
|
| 1006 |
+
del Sim_Winner_Frame, Sim_Winners
|
| 1007 |
|
| 1008 |
+
st.session_state.player_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[0, 1, 2, 3, 4, 5, 6, 7]].values, return_counts=True)),
|
| 1009 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1010 |
+
st.session_state.player_freq['Freq'] = st.session_state.player_freq['Freq'].astype(int)
|
| 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']/(Sim_size)
|
| 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)):
|
| 1018 |
+
st.session_state.player_freq['Team'] = st.session_state.player_freq['Team'].replace(item_list, team_list)
|
|
|
|
|
|
|
| 1019 |
|
| 1020 |
+
st.session_state.qb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[0]].values, return_counts=True)),
|
| 1021 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1022 |
+
st.session_state.qb_freq['Freq'] = st.session_state.qb_freq['Freq'].astype(int)
|
| 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']/(Sim_size)
|
| 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)):
|
| 1030 |
+
st.session_state.qb_freq['Team'] = st.session_state.qb_freq['Team'].replace(item_list, team_list)
|
| 1031 |
|
| 1032 |
+
st.session_state.rb_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[1, 2]].values, return_counts=True)),
|
|
|
|
|
|
|
| 1033 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1034 |
+
st.session_state.rb_freq['Freq'] = st.session_state.rb_freq['Freq'].astype(int)
|
| 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']/Sim_size
|
| 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)):
|
| 1042 |
+
st.session_state.rb_freq['Team'] = st.session_state.rb_freq['Team'].replace(item_list, team_list)
|
|
|
|
|
|
|
| 1043 |
|
| 1044 |
+
st.session_state.wr_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[3, 4, 5]].values, return_counts=True)),
|
| 1045 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1046 |
+
st.session_state.wr_freq['Freq'] = st.session_state.wr_freq['Freq'].astype(int)
|
| 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']/Sim_size
|
| 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)):
|
| 1054 |
+
st.session_state.wr_freq['Team'] = st.session_state.wr_freq['Team'].replace(item_list, team_list)
|
|
|
|
|
|
|
| 1055 |
|
| 1056 |
+
st.session_state.flex_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[6]].values, return_counts=True)),
|
| 1057 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1058 |
+
st.session_state.flex_freq['Freq'] = st.session_state.flex_freq['Freq'].astype(int)
|
| 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']/Sim_size
|
| 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)):
|
| 1066 |
+
st.session_state.flex_freq['Team'] = st.session_state.flex_freq['Team'].replace(item_list, team_list)
|
|
|
|
|
|
|
| 1067 |
|
| 1068 |
+
st.session_state.dst_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.Sim_Winner_Display.iloc[:,[7]].values, return_counts=True)),
|
| 1069 |
columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True)
|
| 1070 |
+
st.session_state.dst_freq['Freq'] = st.session_state.dst_freq['Freq'].astype(int)
|
| 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']/Sim_size
|
| 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)):
|
| 1078 |
+
st.session_state.dst_freq['Team'] = st.session_state.dst_freq['Team'].replace(item_list, team_list)
|
|
|
|
|
|
|
| 1079 |
|
| 1080 |
with st.container():
|
| 1081 |
+
if 'player_freq' in st.session_state:
|
| 1082 |
+
player_split_var2 = st.radio("Are you wanting to isolate any lineups with specific players?", ('Full Players', 'Specific Players'), key='player_split_var2')
|
| 1083 |
+
if player_split_var2 == 'Specific Players':
|
| 1084 |
+
find_var2 = st.multiselect('Which players must be included in the lineups?', options = st.session_state.player_freq['Player'].unique())
|
| 1085 |
+
elif player_split_var2 == 'Full Players':
|
| 1086 |
+
find_var2 = st.session_state.player_freq.Player.values.tolist()
|
| 1087 |
+
|
| 1088 |
+
if player_split_var2 == 'Specific Players':
|
| 1089 |
+
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)]
|
| 1090 |
+
if player_split_var2 == 'Full Players':
|
| 1091 |
+
st.session_state.Sim_Winner_Display = st.session_state.Sim_Winner_Frame
|
| 1092 |
+
if 'Sim_Winner_Display' in st.session_state:
|
| 1093 |
+
st.dataframe(st.session_state.Sim_Winner_Display.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').background_gradient(cmap='RdYlGn_r', subset=['Own']).format(precision=2), use_container_width = True)
|
| 1094 |
+
if 'Sim_Winner_Export' in st.session_state:
|
| 1095 |
+
st.download_button(
|
| 1096 |
+
label="Export Tables",
|
| 1097 |
+
data=convert_df_to_csv(st.session_state.Sim_Winner_Export),
|
| 1098 |
+
file_name='NFL_consim_export.csv',
|
| 1099 |
+
mime='text/csv',
|
| 1100 |
+
)
|
| 1101 |
|
| 1102 |
with st.container():
|
| 1103 |
freq_container = st.empty()
|
| 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)
|
| 1108 |
+
st.download_button(
|
| 1109 |
+
label="Export Exposures",
|
| 1110 |
+
data=st.session_state.player_freq.to_csv().encode('utf-8'),
|
| 1111 |
+
file_name='player_freq_export.csv',
|
| 1112 |
+
mime='text/csv',
|
| 1113 |
+
)
|
| 1114 |
with tab2:
|
| 1115 |
+
if 'qb_freq' in st.session_state:
|
| 1116 |
+
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)
|
| 1117 |
+
st.download_button(
|
| 1118 |
+
label="Export Exposures",
|
| 1119 |
+
data=st.session_state.qb_freq.to_csv().encode('utf-8'),
|
| 1120 |
+
file_name='qb_freq_export.csv',
|
| 1121 |
+
mime='text/csv',
|
| 1122 |
+
)
|
| 1123 |
with tab3:
|
| 1124 |
+
if 'rb_freq' in st.session_state:
|
| 1125 |
+
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)
|
| 1126 |
+
st.download_button(
|
| 1127 |
+
label="Export Exposures",
|
| 1128 |
+
data=st.session_state.rb_freq.to_csv().encode('utf-8'),
|
| 1129 |
+
file_name='rb_freq_export.csv',
|
| 1130 |
+
mime='text/csv',
|
| 1131 |
+
)
|
| 1132 |
with tab4:
|
| 1133 |
+
if 'wr_freq' in st.session_state:
|
| 1134 |
+
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)
|
| 1135 |
+
st.download_button(
|
| 1136 |
+
label="Export Exposures",
|
| 1137 |
+
data=st.session_state.wr_freq.to_csv().encode('utf-8'),
|
| 1138 |
+
file_name='wr_freq_export.csv',
|
| 1139 |
+
mime='text/csv',
|
| 1140 |
+
)
|
| 1141 |
with tab5:
|
| 1142 |
+
if 'flex_freq' in st.session_state:
|
| 1143 |
+
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)
|
| 1144 |
+
st.download_button(
|
| 1145 |
+
label="Export Exposures",
|
| 1146 |
+
data=st.session_state.flex_freq.to_csv().encode('utf-8'),
|
| 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 |
+
del gcservice_account
|
| 1161 |
+
del static_exposure, overall_exposure
|
| 1162 |
+
del insert_port1, Contest_Size, sharp_split, Strength_var, scaling_var, Sort_function, Sim_function, strength_grow, field_growth
|
| 1163 |
+
del raw_baselines
|
| 1164 |
+
del freq_format
|
| 1165 |
+
|
| 1166 |
+
gc.collect()
|