Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
st.set_page_config(layout="wide")
|
3 |
+
|
4 |
+
for name in dir():
|
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 |
+
tab1, tab2 = st.tabs(['Uploads', 'Manage Portfolio'])
|
16 |
+
|
17 |
+
with tab1:
|
18 |
+
with st.container():
|
19 |
+
col1, col2 = st.columns([3, 3])
|
20 |
+
|
21 |
+
with col1:
|
22 |
+
st.info("The Projections file can have any columns in any order, but must contain columns explicitly named: 'Player', 'Salary', 'Position', 'Team', 'Opp', 'Median', and 'Own'. Upload your projections first to avoid an error message.")
|
23 |
+
proj_file = st.file_uploader("Upload Projections File", key = 'proj_uploader')
|
24 |
+
|
25 |
+
if proj_file is not None:
|
26 |
+
try:
|
27 |
+
proj_dataframe = pd.read_csv(proj_file)
|
28 |
+
proj_dataframe = proj_dataframe.dropna(subset='Median')
|
29 |
+
proj_dataframe['Player'] = proj_dataframe['Player'].str.strip()
|
30 |
+
try:
|
31 |
+
proj_dataframe['Own'] = proj_dataframe['Own'].str.strip('%').astype(float)
|
32 |
+
except:
|
33 |
+
pass
|
34 |
+
|
35 |
+
except:
|
36 |
+
proj_dataframe = pd.read_excel(proj_file)
|
37 |
+
proj_dataframe = proj_dataframe.dropna(subset='Median')
|
38 |
+
proj_dataframe['Player'] = proj_dataframe['Player'].str.strip()
|
39 |
+
try:
|
40 |
+
proj_dataframe['Own'] = proj_dataframe['Own'].str.strip('%').astype(float)
|
41 |
+
except:
|
42 |
+
pass
|
43 |
+
st.table(proj_dataframe.head(10))
|
44 |
+
player_salary_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Salary))
|
45 |
+
player_proj_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Median))
|
46 |
+
player_own_dict = dict(zip(proj_dataframe.Player, proj_dataframe.Own))
|
47 |
+
|
48 |
+
with col2:
|
49 |
+
st.info("The Portfolio file must contain only columns in order and explicitly named: 'PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', and 'UTIL'. Upload your projections first to avoid an error message.")
|
50 |
+
portfolio_file = st.file_uploader("Upload Portfolio File", key = 'portfolio_uploader')
|
51 |
+
|
52 |
+
if portfolio_file is not None:
|
53 |
+
try:
|
54 |
+
portfolio_dataframe = pd.read_csv(portfolio_file)
|
55 |
+
|
56 |
+
except:
|
57 |
+
portfolio_dataframe = pd.read_excel(portfolio_file)
|
58 |
+
|
59 |
+
try:
|
60 |
+
try:
|
61 |
+
portfolio_dataframe.columns=['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'UTIL']
|
62 |
+
split_portfolio = portfolio_dataframe
|
63 |
+
split_portfolio[['PG', 'PG_ID']] = split_portfolio.PG.str.split("(", n=1, expand = True)
|
64 |
+
split_portfolio[['SG', 'SG_ID']] = split_portfolio.SG.str.split("(", n=1, expand = True)
|
65 |
+
split_portfolio[['SF', 'SF_ID']] = split_portfolio.SF.str.split("(", n=1, expand = True)
|
66 |
+
split_portfolio[['PF', 'PF_ID']] = split_portfolio.PF.str.split("(", n=1, expand = True)
|
67 |
+
split_portfolio[['C', 'C_ID']] = split_portfolio.C.str.split("(", n=1, expand = True)
|
68 |
+
split_portfolio[['G', 'G_ID']] = split_portfolio.G.str.split("(", n=1, expand = True)
|
69 |
+
split_portfolio[['F', 'F_ID']] = split_portfolio.F.str.split("(", n=1, expand = True)
|
70 |
+
split_portfolio[['UTIL', 'UTIL_ID']] = split_portfolio.UTIL.str.split("(", n=1, expand = True)
|
71 |
+
|
72 |
+
split_portfolio['PG'] = split_portfolio['PG'].str.strip()
|
73 |
+
split_portfolio['SG'] = split_portfolio['SG'].str.strip()
|
74 |
+
split_portfolio['SF'] = split_portfolio['SF'].str.strip()
|
75 |
+
split_portfolio['PF'] = split_portfolio['PF'].str.strip()
|
76 |
+
split_portfolio['C'] = split_portfolio['C'].str.strip()
|
77 |
+
split_portfolio['G'] = split_portfolio['G'].str.strip()
|
78 |
+
split_portfolio['F'] = split_portfolio['F'].str.strip()
|
79 |
+
split_portfolio['UTIL'] = split_portfolio['UTIL'].str.strip()
|
80 |
+
|
81 |
+
split_portfolio['Salary'] = sum([split_portfolio['PG'].map(player_salary_dict),
|
82 |
+
split_portfolio['SG'].map(player_salary_dict),
|
83 |
+
split_portfolio['SF'].map(player_salary_dict),
|
84 |
+
split_portfolio['PF'].map(player_salary_dict),
|
85 |
+
split_portfolio['C'].map(player_salary_dict),
|
86 |
+
split_portfolio['G'].map(player_salary_dict),
|
87 |
+
split_portfolio['F'].map(player_salary_dict),
|
88 |
+
split_portfolio['UTIL'].map(player_salary_dict)])
|
89 |
+
|
90 |
+
split_portfolio['Projection'] = sum([split_portfolio['PG'].map(player_proj_dict),
|
91 |
+
split_portfolio['SG'].map(player_proj_dict),
|
92 |
+
split_portfolio['SF'].map(player_proj_dict),
|
93 |
+
split_portfolio['PF'].map(player_proj_dict),
|
94 |
+
split_portfolio['C'].map(player_proj_dict),
|
95 |
+
split_portfolio['G'].map(player_proj_dict),
|
96 |
+
split_portfolio['F'].map(player_proj_dict),
|
97 |
+
split_portfolio['UTIL'].map(player_proj_dict)])
|
98 |
+
|
99 |
+
split_portfolio['Ownership'] = sum([split_portfolio['PG'].map(player_own_dict),
|
100 |
+
split_portfolio['SG'].map(player_own_dict),
|
101 |
+
split_portfolio['SF'].map(player_own_dict),
|
102 |
+
split_portfolio['PF'].map(player_own_dict),
|
103 |
+
split_portfolio['C'].map(player_own_dict),
|
104 |
+
split_portfolio['G'].map(player_own_dict),
|
105 |
+
split_portfolio['F'].map(player_own_dict),
|
106 |
+
split_portfolio['UTIL'].map(player_own_dict)])
|
107 |
+
|
108 |
+
st.table(split_portfolio.head(10))
|
109 |
+
|
110 |
+
|
111 |
+
except:
|
112 |
+
portfolio_dataframe.columns=['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'UTIL']
|
113 |
+
|
114 |
+
split_portfolio = portfolio_dataframe
|
115 |
+
split_portfolio[['PG_ID', 'PG']] = split_portfolio.PG.str.split(":", n=1, expand = True)
|
116 |
+
split_portfolio[['SG_ID', 'SG']] = split_portfolio.SG.str.split(":", n=1, expand = True)
|
117 |
+
split_portfolio[['SF_ID', 'SF']] = split_portfolio.SF.str.split(":", n=1, expand = True)
|
118 |
+
split_portfolio[['PF_ID', 'PF']] = split_portfolio.PF.str.split(":", n=1, expand = True)
|
119 |
+
split_portfolio[['C_ID', 'C']] = split_portfolio.C.str.split(":", n=1, expand = True)
|
120 |
+
split_portfolio[['G_ID', 'G']] = split_portfolio.G.str.split(":", n=1, expand = True)
|
121 |
+
split_portfolio[['F_ID', 'F']] = split_portfolio.F.str.split(":", n=1, expand = True)
|
122 |
+
split_portfolio[['UTIL_ID', 'UTIL']] = split_portfolio.UTIL.str.split(":", n=1, expand = True)
|
123 |
+
|
124 |
+
split_portfolio['PG'] = split_portfolio['PG'].str.strip()
|
125 |
+
split_portfolio['SG'] = split_portfolio['SG'].str.strip()
|
126 |
+
split_portfolio['SF'] = split_portfolio['SF'].str.strip()
|
127 |
+
split_portfolio['PF'] = split_portfolio['PF'].str.strip()
|
128 |
+
split_portfolio['C'] = split_portfolio['C'].str.strip()
|
129 |
+
split_portfolio['G'] = split_portfolio['G'].str.strip()
|
130 |
+
split_portfolio['F'] = split_portfolio['F'].str.strip()
|
131 |
+
split_portfolio['UTIL'] = split_portfolio['UTIL'].str.strip()
|
132 |
+
|
133 |
+
split_portfolio['Salary'] = sum([split_portfolio['PG'].map(player_salary_dict),
|
134 |
+
split_portfolio['SG'].map(player_salary_dict),
|
135 |
+
split_portfolio['SF'].map(player_salary_dict),
|
136 |
+
split_portfolio['PF'].map(player_salary_dict),
|
137 |
+
split_portfolio['C'].map(player_salary_dict),
|
138 |
+
split_portfolio['G'].map(player_salary_dict),
|
139 |
+
split_portfolio['F'].map(player_salary_dict),
|
140 |
+
split_portfolio['UTIL'].map(player_salary_dict)])
|
141 |
+
|
142 |
+
split_portfolio['Projection'] = sum([split_portfolio['PG'].map(player_proj_dict),
|
143 |
+
split_portfolio['SG'].map(player_proj_dict),
|
144 |
+
split_portfolio['SF'].map(player_proj_dict),
|
145 |
+
split_portfolio['PF'].map(player_proj_dict),
|
146 |
+
split_portfolio['C'].map(player_proj_dict),
|
147 |
+
split_portfolio['G'].map(player_proj_dict),
|
148 |
+
split_portfolio['F'].map(player_proj_dict),
|
149 |
+
split_portfolio['UTIL'].map(player_proj_dict)])
|
150 |
+
|
151 |
+
|
152 |
+
split_portfolio['Ownership'] = sum([split_portfolio['PG'].map(player_own_dict),
|
153 |
+
split_portfolio['SG'].map(player_own_dict),
|
154 |
+
split_portfolio['SF'].map(player_own_dict),
|
155 |
+
split_portfolio['PF'].map(player_own_dict),
|
156 |
+
split_portfolio['C'].map(player_own_dict),
|
157 |
+
split_portfolio['G'].map(player_own_dict),
|
158 |
+
split_portfolio['F'].map(player_own_dict),
|
159 |
+
split_portfolio['UTIL'].map(player_own_dict)])
|
160 |
+
|
161 |
+
st.table(split_portfolio.head(10))
|
162 |
+
|
163 |
+
except:
|
164 |
+
split_portfolio = portfolio_dataframe
|
165 |
+
|
166 |
+
split_portfolio['Salary'] = sum([split_portfolio['PG'].map(player_salary_dict),
|
167 |
+
split_portfolio['SG'].map(player_salary_dict),
|
168 |
+
split_portfolio['SF'].map(player_salary_dict),
|
169 |
+
split_portfolio['PF'].map(player_salary_dict),
|
170 |
+
split_portfolio['C'].map(player_salary_dict),
|
171 |
+
split_portfolio['G'].map(player_salary_dict),
|
172 |
+
split_portfolio['F'].map(player_salary_dict),
|
173 |
+
split_portfolio['UTIL'].map(player_salary_dict)])
|
174 |
+
|
175 |
+
split_portfolio['Projection'] = sum([split_portfolio['PG'].map(player_proj_dict),
|
176 |
+
split_portfolio['SG'].map(player_proj_dict),
|
177 |
+
split_portfolio['SF'].map(player_proj_dict),
|
178 |
+
split_portfolio['PF'].map(player_proj_dict),
|
179 |
+
split_portfolio['C'].map(player_proj_dict),
|
180 |
+
split_portfolio['G'].map(player_proj_dict),
|
181 |
+
split_portfolio['F'].map(player_proj_dict),
|
182 |
+
split_portfolio['UTIL'].map(player_proj_dict)])
|
183 |
+
|
184 |
+
|
185 |
+
split_portfolio['Ownership'] = sum([split_portfolio['PG'].map(player_own_dict),
|
186 |
+
split_portfolio['SG'].map(player_own_dict),
|
187 |
+
split_portfolio['SF'].map(player_own_dict),
|
188 |
+
split_portfolio['PF'].map(player_own_dict),
|
189 |
+
split_portfolio['C'].map(player_own_dict),
|
190 |
+
split_portfolio['G'].map(player_own_dict),
|
191 |
+
split_portfolio['F'].map(player_own_dict),
|
192 |
+
split_portfolio['UTIL'].map(player_own_dict)])
|
193 |
+
|
194 |
+
gc.collect()
|
195 |
+
|
196 |
+
with tab2:
|