James McCool commited on
Commit
ad242a2
·
1 Parent(s): 0c21721

Enhance player data handling by updating load functions in load_dk_fd_file, load_file, and load_ss_file to incorporate sport-specific headers, improving CSV and lineup processing for various sports in app.py and global functions.

Browse files
app.py CHANGED
@@ -32,7 +32,7 @@ stacking_sports = ['MLB', 'NHL', 'NFL', 'LOL']
32
  player_wrong_names_mlb = ['Enrique Hernandez', 'Joseph Cantillo', 'Mike Soroka', 'Jakob Bauers', 'Temi Fágbénlé']
33
  player_right_names_mlb = ['Kike Hernandez', 'Joey Cantillo', 'Michael Soroka', 'Jake Bauers', 'Temi Fagbenle']
34
 
35
- def create_position_export_dict(column_name, csv_file):
36
  try:
37
  # Remove any numbers from the column name to get the position
38
  import re
@@ -42,14 +42,32 @@ def create_position_export_dict(column_name, csv_file):
42
 
43
  # Filter CSV file by position
44
  if 'Position' in csv_file.columns:
45
- if position_filter == 'SP':
46
- filtered_df = csv_file[
47
- csv_file['Roster Position'] == 'P'
48
- ]
49
  else:
50
- filtered_df = csv_file[
51
- csv_file['Position'].str.contains(position_filter, na=False, regex=False)
52
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  else:
54
  # Fallback to all players if no position column found
55
  filtered_df = csv_file
@@ -163,22 +181,19 @@ with tab1:
163
  if csv_file:
164
  if type_var == 'Showdown':
165
  st.session_state['csv_file']['Position'] = 'FLEX'
166
-
167
- if sport_var == 'GOLF':
168
- st.session_state['csv_file']['Position'] = 'FLEX'
169
- st.session_state['csv_file']['Team'] = 'GOLF'
170
- elif sport_var == 'TENNIS':
171
- st.session_state['csv_file']['Position'] = 'FLEX'
172
- st.session_state['csv_file']['Team'] = 'TENNIS'
173
- elif sport_var == 'MMA':
174
- st.session_state['csv_file']['Position'] = 'FLEX'
175
- st.session_state['csv_file']['Team'] = 'MMA'
176
- elif sport_var == 'NASCAR':
177
- st.session_state['csv_file']['Position'] = 'FLEX'
178
- st.session_state['csv_file']['Team'] = 'NASCAR'
179
- elif sport_var == 'F1':
180
- st.session_state['csv_file']['Position'] = 'FLEX'
181
- st.session_state['csv_file']['Team'] = 'F1'
182
  # st.session_state['csv_file'] = st.session_state['csv_file'].drop_duplicates(subset=['Name'])
183
  st.success('Projections file loaded successfully!')
184
  st.dataframe(st.session_state['csv_file'].head(10))
@@ -204,19 +219,19 @@ with tab1:
204
  if 'portfolio' not in st.session_state:
205
  if portfolio_file:
206
  if upload_toggle == 'SaberSim (Just IDs)':
207
- st.session_state['export_portfolio'], st.session_state['portfolio'] = load_ss_file(portfolio_file, st.session_state['csv_file'])
208
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].dropna(how='all')
209
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].reset_index(drop=True)
210
  st.session_state['portfolio'] = st.session_state['portfolio'].dropna(how='all')
211
  st.session_state['portfolio'] = st.session_state['portfolio'].reset_index(drop=True)
212
  elif upload_toggle == 'Draftkings/Fanduel (Names + IDs)':
213
- st.session_state['export_portfolio'], st.session_state['portfolio'] = load_dk_fd_file(portfolio_file, st.session_state['csv_file'])
214
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].dropna(how='all')
215
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].reset_index(drop=True)
216
  st.session_state['portfolio'] = st.session_state['portfolio'].dropna(how='all')
217
  st.session_state['portfolio'] = st.session_state['portfolio'].reset_index(drop=True)
218
  else:
219
- st.session_state['export_portfolio'], st.session_state['portfolio'] = load_file(portfolio_file)
220
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].dropna(how='all')
221
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].reset_index(drop=True)
222
  st.session_state['portfolio'] = st.session_state['portfolio'].dropna(how='all')
@@ -259,7 +274,7 @@ with tab1:
259
  )
260
 
261
  if projections_file:
262
- export_projections, projections = load_file(projections_file)
263
  if projections is not None:
264
  st.success('Projections file loaded successfully!')
265
  try:
@@ -1609,7 +1624,7 @@ with tab2:
1609
  for col in st.session_state['export_file'].columns:
1610
  if col not in excluded_cols:
1611
  # Create position-specific export dictionary on the fly
1612
- position_dict = create_position_export_dict(col, st.session_state['csv_file'])
1613
  st.session_state['export_file'][col] = st.session_state['export_file'][col].map(position_dict)
1614
 
1615
  if 'export_file' in st.session_state:
 
32
  player_wrong_names_mlb = ['Enrique Hernandez', 'Joseph Cantillo', 'Mike Soroka', 'Jakob Bauers', 'Temi Fágbénlé']
33
  player_right_names_mlb = ['Kike Hernandez', 'Joey Cantillo', 'Michael Soroka', 'Jake Bauers', 'Temi Fagbenle']
34
 
35
+ def create_position_export_dict(column_name, csv_file, site_var, type_var, sport_var):
36
  try:
37
  # Remove any numbers from the column name to get the position
38
  import re
 
42
 
43
  # Filter CSV file by position
44
  if 'Position' in csv_file.columns:
45
+ if type_var == 'Showdown':
46
+ filtered_df = csv_file.copy()
 
 
47
  else:
48
+ if position_filter == 'SP':
49
+ filtered_df = csv_file[
50
+ csv_file['Roster Position'] == 'P'
51
+ ]
52
+ elif position_filter == 'CPT':
53
+ filtered_df = csv_file.copy()
54
+ elif position_filter == 'FLEX' or position_filter == 'UTIL':
55
+ if sport_var == 'NFL':
56
+ filtered_df = csv_file['Position'].isin(['RB', 'WR', 'TE'])
57
+ elif sport_var == 'SOC':
58
+ filtered_df = csv_file['Position'].str.contains(['D', 'M', 'F'], na=False, regex=False)
59
+ elif sport_var == 'NCAAF':
60
+ filtered_df = csv_file['Position'].isin(['RB', 'WR'])
61
+ elif sport_var == 'NHL':
62
+ filtered_df = csv_file['Position'].str.contains(['C', 'W', 'D'], na=False, regex=False)
63
+ else:
64
+ filtered_df = csv_file.copy()
65
+ elif position_filter == 'SFLEX':
66
+ filtered_df = csv_file.copy()
67
+ else:
68
+ filtered_df = csv_file[
69
+ csv_file['Position'].str.contains(position_filter, na=False, regex=False)
70
+ ]
71
  else:
72
  # Fallback to all players if no position column found
73
  filtered_df = csv_file
 
181
  if csv_file:
182
  if type_var == 'Showdown':
183
  st.session_state['csv_file']['Position'] = 'FLEX'
184
+ else:
185
+ if sport_var == 'GOLF':
186
+ st.session_state['csv_file']['Position'] = 'FLEX'
187
+ st.session_state['csv_file']['Team'] = 'GOLF'
188
+ elif sport_var == 'TENNIS':
189
+ st.session_state['csv_file']['Position'] = 'FLEX'
190
+ st.session_state['csv_file']['Team'] = 'TENNIS'
191
+ elif sport_var == 'MMA':
192
+ st.session_state['csv_file']['Position'] = 'FLEX'
193
+ st.session_state['csv_file']['Team'] = 'MMA'
194
+ elif sport_var == 'NASCAR':
195
+ st.session_state['csv_file']['Position'] = 'FLEX'
196
+ st.session_state['csv_file']['Team'] = 'NASCAR'
 
 
 
197
  # st.session_state['csv_file'] = st.session_state['csv_file'].drop_duplicates(subset=['Name'])
198
  st.success('Projections file loaded successfully!')
199
  st.dataframe(st.session_state['csv_file'].head(10))
 
219
  if 'portfolio' not in st.session_state:
220
  if portfolio_file:
221
  if upload_toggle == 'SaberSim (Just IDs)':
222
+ st.session_state['export_portfolio'], st.session_state['portfolio'] = load_ss_file(portfolio_file, st.session_state['csv_file'], site_var, type_var, sport_var)
223
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].dropna(how='all')
224
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].reset_index(drop=True)
225
  st.session_state['portfolio'] = st.session_state['portfolio'].dropna(how='all')
226
  st.session_state['portfolio'] = st.session_state['portfolio'].reset_index(drop=True)
227
  elif upload_toggle == 'Draftkings/Fanduel (Names + IDs)':
228
+ st.session_state['export_portfolio'], st.session_state['portfolio'] = load_dk_fd_file(portfolio_file, st.session_state['csv_file'], site_var, type_var, sport_var)
229
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].dropna(how='all')
230
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].reset_index(drop=True)
231
  st.session_state['portfolio'] = st.session_state['portfolio'].dropna(how='all')
232
  st.session_state['portfolio'] = st.session_state['portfolio'].reset_index(drop=True)
233
  else:
234
+ st.session_state['export_portfolio'], st.session_state['portfolio'] = load_file(portfolio_file, site_var, type_var, sport_var, 'portfolio')
235
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].dropna(how='all')
236
  st.session_state['export_portfolio'] = st.session_state['export_portfolio'].reset_index(drop=True)
237
  st.session_state['portfolio'] = st.session_state['portfolio'].dropna(how='all')
 
274
  )
275
 
276
  if projections_file:
277
+ export_projections, projections = load_file(projections_file, site_var, type_var, sport_var, 'projections')
278
  if projections is not None:
279
  st.success('Projections file loaded successfully!')
280
  try:
 
1624
  for col in st.session_state['export_file'].columns:
1625
  if col not in excluded_cols:
1626
  # Create position-specific export dictionary on the fly
1627
+ position_dict = create_position_export_dict(col, st.session_state['csv_file'], site_var, type_var, sport_var)
1628
  st.session_state['export_file'][col] = st.session_state['export_file'][col].map(position_dict)
1629
 
1630
  if 'export_file' in st.session_state:
global_func/exposure_spread.py CHANGED
@@ -99,7 +99,7 @@ def check_nascar_position_eligibility(column_name, player_positions):
99
  return any(pos in ['D'] for pos in player_positions)
100
  return True
101
 
102
- def check_cfb_position_eligibility(column_name, player_positions):
103
  if 'QB' in column_name:
104
  return 'QB' in player_positions
105
  elif 'RB' in column_name:
@@ -108,7 +108,7 @@ def check_cfb_position_eligibility(column_name, player_positions):
108
  return 'WR' in player_positions
109
  elif 'FLEX' in column_name:
110
  return any(pos in ['RB', 'WR'] for pos in player_positions)
111
- elif 'SUPERFLEX' in column_name:
112
  return any(pos in ['RB', 'WR', 'QB'] for pos in player_positions)
113
  return False
114
 
@@ -122,9 +122,9 @@ def check_nhl_position_eligibility(column_name, player_positions):
122
  elif 'G' in column_name:
123
  return 'G' in player_positions
124
  elif 'FLEX' in column_name:
125
- return True # UTIL can be any position
126
  elif 'UTIL' in column_name:
127
- return True # UTIL can be any position
128
  return False
129
 
130
  def check_position_eligibility(sport, column_name, player_positions):
@@ -267,11 +267,12 @@ def exposure_spread(working_frame, exposure_player, exposure_target, exposure_st
267
  (projections_df['position'].apply(lambda x: has_position_overlap(x, comp_player_position)))
268
  ]
269
  if sport_var in stacking_sports:
270
- if row['Size'] == 5 and comp_team != row['Stack']:
271
- remove_mask = comparable_players.apply(
272
- lambda row: not any(team in list(row) for team in working_frame['Stack'][row]), axis=1
273
- )
274
- comparable_players = comparable_players[remove_mask]
 
275
 
276
  if remove_teams is not None:
277
  remove_mask = comparable_players.apply(
@@ -291,10 +292,11 @@ def exposure_spread(working_frame, exposure_player, exposure_target, exposure_st
291
  if working_frame.iloc[row]['salary'] - projections_df[projections_df['player_names'] == row_data[col]]['salary'].iloc[0] + projections_df[projections_df['player_names'] == exposure_player]['salary'].iloc[0] <= salary_max:
292
  # Get the replacement player's positions
293
  replacement_player_positions = projections_df[projections_df['player_names'] == row_data[col]]['position'].iloc[0].split('/')
 
294
 
295
  # Check if the replacement player is eligible for this column
296
  if type_var == 'Classic':
297
- if check_position_eligibility(sport_var, col, replacement_player_positions):
298
  working_frame.at[row, col] = exposure_player
299
  change_counter += 1
300
  break
 
99
  return any(pos in ['D'] for pos in player_positions)
100
  return True
101
 
102
+ def check_ncaaf_position_eligibility(column_name, player_positions):
103
  if 'QB' in column_name:
104
  return 'QB' in player_positions
105
  elif 'RB' in column_name:
 
108
  return 'WR' in player_positions
109
  elif 'FLEX' in column_name:
110
  return any(pos in ['RB', 'WR'] for pos in player_positions)
111
+ elif 'SFLEX' in column_name:
112
  return any(pos in ['RB', 'WR', 'QB'] for pos in player_positions)
113
  return False
114
 
 
122
  elif 'G' in column_name:
123
  return 'G' in player_positions
124
  elif 'FLEX' in column_name:
125
+ return any(pos in ['C', 'W', 'D'] for pos in player_positions)
126
  elif 'UTIL' in column_name:
127
+ return any(pos in ['C', 'W', 'D'] for pos in player_positions)
128
  return False
129
 
130
  def check_position_eligibility(sport, column_name, player_positions):
 
267
  (projections_df['position'].apply(lambda x: has_position_overlap(x, comp_player_position)))
268
  ]
269
  if sport_var in stacking_sports:
270
+ if sport_var in stacking_sports:
271
+ if working_frame.iloc[row]['Size'] == 5 and comp_team != working_frame.iloc[row]['Stack']:
272
+ remove_mask = comparable_players.apply(
273
+ lambda player_row: not any(team in list(player_row) for team in [working_frame.iloc[row]['Stack']]), axis=1
274
+ )
275
+ comparable_players = comparable_players[remove_mask]
276
 
277
  if remove_teams is not None:
278
  remove_mask = comparable_players.apply(
 
292
  if working_frame.iloc[row]['salary'] - projections_df[projections_df['player_names'] == row_data[col]]['salary'].iloc[0] + projections_df[projections_df['player_names'] == exposure_player]['salary'].iloc[0] <= salary_max:
293
  # Get the replacement player's positions
294
  replacement_player_positions = projections_df[projections_df['player_names'] == row_data[col]]['position'].iloc[0].split('/')
295
+ exposure_player_positions = projections_df[projections_df['player_names'] == exposure_player]['position'].iloc[0].split('/')
296
 
297
  # Check if the replacement player is eligible for this column
298
  if type_var == 'Classic':
299
+ if check_position_eligibility(sport_var, col, exposure_player_positions):
300
  working_frame.at[row, col] = exposure_player
301
  change_counter += 1
302
  break
global_func/load_dk_fd_file.py CHANGED
@@ -5,7 +5,82 @@ import time
5
  from rapidfuzz import process
6
  import re
7
 
8
- def load_dk_fd_file(lineups, csv_file):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  df = csv_file.copy()
10
  try:
11
  name_dict = dict(zip(df['Name + ID'], df['Name']))
@@ -34,6 +109,8 @@ def load_dk_fd_file(lineups, csv_file):
34
  except:
35
  pass
36
 
 
 
37
  export_df = lineups_df.copy()
38
 
39
  # Map the IDs to names
 
5
  from rapidfuzz import process
6
  import re
7
 
8
+ sport_headers = {
9
+ 'Draftkings': {
10
+ 'Classic' : {
11
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
12
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
13
+ 'F1' : ['CPT', 'DRIVER1', 'DRIVER2', 'DRIVER3', 'DRIVER4', 'CONST'],
14
+ 'SOC' : ['F1', 'F2', 'M1', 'M2', 'D1', 'D2', 'GK', 'UTIL'],
15
+ 'TENNIS' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
16
+ 'WNBA' : ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'],
17
+ 'NASCAR' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
18
+ 'MLB' : ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3'],
19
+ 'NFL' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'],
20
+ 'CFL' : ['QB', 'RB', 'WR1', 'WR2', 'FLEX1', 'FLEX2', 'DST'],
21
+ 'LOL' : ['CPT', 'TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'],
22
+ 'CSGO' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
23
+ 'COD' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'TEAM'],
24
+ 'NHL' : ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'UTIL', 'G'],
25
+ 'NCAAF' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'SFLEX'],
26
+ },
27
+ 'Showdown' : {
28
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
29
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
30
+ 'F1' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
31
+ 'SOC' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
32
+ 'TENNIS' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
33
+ 'WNBA' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
34
+ 'NASCAR' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
35
+ 'MLB' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
36
+ 'NFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
37
+ 'CFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
38
+ 'LOL' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
39
+ 'CSGO' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
40
+ 'COD' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
41
+ 'NHL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
42
+ 'NCAAF' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
43
+ },
44
+ },
45
+ 'Fanduel': {
46
+ 'Classic' : {
47
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
48
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
49
+ 'F1' : ['CPT', 'DRIVER1', 'DRIVER2', 'DRIVER3', 'DRIVER4', 'CONST'],
50
+ 'SOC' : ['F1', 'F2', 'M1', 'M2', 'D1', 'D2', 'GK', 'UTIL'],
51
+ 'TENNIS' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
52
+ 'WNBA' : ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'],
53
+ 'NASCAR' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
54
+ 'MLB' : ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3'],
55
+ 'NFL' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'],
56
+ 'CFL' : ['QB', 'RB', 'WR1', 'WR2', 'FLEX1', 'FLEX2', 'DST'],
57
+ 'LOL' : ['CPT', 'TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'],
58
+ 'CSGO' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
59
+ 'COD' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'TEAM'],
60
+ 'NHL' : ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'UTIL', 'G'],
61
+ 'NCAAF' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'SFLEX'],
62
+ },
63
+ 'Showdown' : {
64
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
65
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
66
+ 'F1' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
67
+ 'SOC' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
68
+ 'TENNIS' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
69
+ 'WNBA' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
70
+ 'NASCAR' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
71
+ 'MLB' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
72
+ 'NFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
73
+ 'CFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
74
+ 'LOL' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
75
+ 'CSGO' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
76
+ 'COD' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
77
+ 'NHL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
78
+ 'NCAAF' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
79
+ },
80
+ },
81
+ }
82
+
83
+ def load_dk_fd_file(lineups, csv_file, site_var, type_var, sport_var):
84
  df = csv_file.copy()
85
  try:
86
  name_dict = dict(zip(df['Name + ID'], df['Name']))
 
109
  except:
110
  pass
111
 
112
+ lineups_df.columns = sport_headers[site_var][type_var][sport_var]
113
+
114
  export_df = lineups_df.copy()
115
 
116
  # Map the IDs to names
global_func/load_file.py CHANGED
@@ -8,7 +8,82 @@ import re
8
  ## import global functions
9
  from global_func.clean_player_name import clean_player_name
10
 
11
- def load_file(upload):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  if upload is not None:
13
  try:
14
  clean_name = re.sub(r' \(\d+\)', '', upload.name)
@@ -27,6 +102,9 @@ def load_file(upload):
27
  for col in df.columns:
28
  if "Unnamed" in col:
29
  df = df.drop(columns=[col])
 
 
 
30
 
31
  export_df = df.copy()
32
 
 
8
  ## import global functions
9
  from global_func.clean_player_name import clean_player_name
10
 
11
+ sport_headers = {
12
+ 'Draftkings': {
13
+ 'Classic' : {
14
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
15
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
16
+ 'F1' : ['CPT', 'DRIVER1', 'DRIVER2', 'DRIVER3', 'DRIVER4', 'CONST'],
17
+ 'SOC' : ['F1', 'F2', 'M1', 'M2', 'D1', 'D2', 'GK', 'UTIL'],
18
+ 'TENNIS' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
19
+ 'WNBA' : ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'],
20
+ 'NASCAR' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
21
+ 'MLB' : ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3'],
22
+ 'NFL' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'],
23
+ 'CFL' : ['QB', 'RB', 'WR1', 'WR2', 'FLEX1', 'FLEX2', 'DST'],
24
+ 'LOL' : ['CPT', 'TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'],
25
+ 'CSGO' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
26
+ 'COD' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'TEAM'],
27
+ 'NHL' : ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'UTIL', 'G'],
28
+ 'NCAAF' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'SFLEX'],
29
+ },
30
+ 'Showdown' : {
31
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
32
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
33
+ 'F1' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
34
+ 'SOC' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
35
+ 'TENNIS' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
36
+ 'WNBA' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
37
+ 'NASCAR' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
38
+ 'MLB' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
39
+ 'NFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
40
+ 'CFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
41
+ 'LOL' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
42
+ 'CSGO' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
43
+ 'COD' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
44
+ 'NHL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
45
+ 'NCAAF' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
46
+ },
47
+ },
48
+ 'Fanduel': {
49
+ 'Classic' : {
50
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
51
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
52
+ 'F1' : ['CPT', 'DRIVER1', 'DRIVER2', 'DRIVER3', 'DRIVER4', 'CONST'],
53
+ 'SOC' : ['F1', 'F2', 'M1', 'M2', 'D1', 'D2', 'GK', 'UTIL'],
54
+ 'TENNIS' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
55
+ 'WNBA' : ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'],
56
+ 'NASCAR' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
57
+ 'MLB' : ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3'],
58
+ 'NFL' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'],
59
+ 'CFL' : ['QB', 'RB', 'WR1', 'WR2', 'FLEX1', 'FLEX2', 'DST'],
60
+ 'LOL' : ['CPT', 'TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'],
61
+ 'CSGO' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
62
+ 'COD' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'TEAM'],
63
+ 'NHL' : ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'UTIL', 'G'],
64
+ 'NCAAF' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'SFLEX'],
65
+ },
66
+ 'Showdown' : {
67
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
68
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
69
+ 'F1' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
70
+ 'SOC' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
71
+ 'TENNIS' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
72
+ 'WNBA' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
73
+ 'NASCAR' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
74
+ 'MLB' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
75
+ 'NFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
76
+ 'CFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
77
+ 'LOL' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
78
+ 'CSGO' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
79
+ 'COD' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
80
+ 'NHL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
81
+ 'NCAAF' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
82
+ },
83
+ },
84
+ }
85
+
86
+ def load_file(upload, site_var, type_var, sport_var, upload_type):
87
  if upload is not None:
88
  try:
89
  clean_name = re.sub(r' \(\d+\)', '', upload.name)
 
102
  for col in df.columns:
103
  if "Unnamed" in col:
104
  df = df.drop(columns=[col])
105
+
106
+ if upload_type == 'portfolio':
107
+ df.columns = sport_headers[site_var][type_var][sport_var]
108
 
109
  export_df = df.copy()
110
 
global_func/load_ss_file.py CHANGED
@@ -5,7 +5,82 @@ import time
5
  from rapidfuzz import process
6
  import re
7
 
8
- def load_ss_file(lineups, csv_file):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  df = csv_file.copy()
10
  try:
11
  name_dict = dict(zip(df['ID'], df['Name']))
@@ -29,6 +104,7 @@ def load_ss_file(lineups, csv_file):
29
  st.error('Please upload either a CSV or Excel file for lineups')
30
  return None, None
31
  lineups_df = lineups_df.dropna(how='any')
 
32
  export_df = lineups_df.copy()
33
 
34
  # Map the IDs to names
 
5
  from rapidfuzz import process
6
  import re
7
 
8
+ sport_headers = {
9
+ 'Draftkings': {
10
+ 'Classic' : {
11
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
12
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
13
+ 'F1' : ['CPT', 'DRIVER1', 'DRIVER2', 'DRIVER3', 'DRIVER4', 'CONST'],
14
+ 'SOC' : ['F1', 'F2', 'M1', 'M2', 'D1', 'D2', 'GK', 'UTIL'],
15
+ 'TENNIS' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
16
+ 'WNBA' : ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'],
17
+ 'NASCAR' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
18
+ 'MLB' : ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3'],
19
+ 'NFL' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'],
20
+ 'CFL' : ['QB', 'RB', 'WR1', 'WR2', 'FLEX1', 'FLEX2', 'DST'],
21
+ 'LOL' : ['CPT', 'TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'],
22
+ 'CSGO' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
23
+ 'COD' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'TEAM'],
24
+ 'NHL' : ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'UTIL', 'G'],
25
+ 'NCAAF' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'SFLEX'],
26
+ },
27
+ 'Showdown' : {
28
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
29
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
30
+ 'F1' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
31
+ 'SOC' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
32
+ 'TENNIS' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
33
+ 'WNBA' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
34
+ 'NASCAR' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
35
+ 'MLB' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
36
+ 'NFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
37
+ 'CFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
38
+ 'LOL' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
39
+ 'CSGO' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
40
+ 'COD' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
41
+ 'NHL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
42
+ 'NCAAF' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
43
+ },
44
+ },
45
+ 'Fanduel': {
46
+ 'Classic' : {
47
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
48
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
49
+ 'F1' : ['CPT', 'DRIVER1', 'DRIVER2', 'DRIVER3', 'DRIVER4', 'CONST'],
50
+ 'SOC' : ['F1', 'F2', 'M1', 'M2', 'D1', 'D2', 'GK', 'UTIL'],
51
+ 'TENNIS' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
52
+ 'WNBA' : ['G1', 'G2', 'F1', 'F2', 'F3', 'UTIL'],
53
+ 'NASCAR' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
54
+ 'MLB' : ['SP1', 'SP2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3'],
55
+ 'NFL' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'TE', 'FLEX', 'DST'],
56
+ 'CFL' : ['QB', 'RB', 'WR1', 'WR2', 'FLEX1', 'FLEX2', 'DST'],
57
+ 'LOL' : ['CPT', 'TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'],
58
+ 'CSGO' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
59
+ 'COD' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'TEAM'],
60
+ 'NHL' : ['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'UTIL', 'G'],
61
+ 'NCAAF' : ['QB', 'RB1', 'RB2', 'WR1', 'WR2', 'WR3', 'FLEX', 'SFLEX'],
62
+ },
63
+ 'Showdown' : {
64
+ 'MMA' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
65
+ 'GOLF' : ['FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5', 'FLEX6'],
66
+ 'F1' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
67
+ 'SOC' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
68
+ 'TENNIS' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
69
+ 'WNBA' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
70
+ 'NASCAR' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
71
+ 'MLB' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
72
+ 'NFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
73
+ 'CFL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
74
+ 'LOL' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
75
+ 'CSGO' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
76
+ 'COD' : ['CPT1', 'CPT2', 'FLEX1', 'FLEX2'],
77
+ 'NHL' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
78
+ 'NCAAF' : ['CPT', 'FLEX1', 'FLEX2', 'FLEX3', 'FLEX4', 'FLEX5'],
79
+ },
80
+ },
81
+ }
82
+
83
+ def load_ss_file(lineups, csv_file, site_var, type_var, sport_var):
84
  df = csv_file.copy()
85
  try:
86
  name_dict = dict(zip(df['ID'], df['Name']))
 
104
  st.error('Please upload either a CSV or Excel file for lineups')
105
  return None, None
106
  lineups_df = lineups_df.dropna(how='any')
107
+ lineups_df.columns = sport_headers[site_var][type_var][sport_var]
108
  export_df = lineups_df.copy()
109
 
110
  # Map the IDs to names