James McCool commited on
Commit
18ef45f
·
1 Parent(s): 2e35766

Refactor ownership calculations in app.py to enhance accuracy for FanDuel and DraftKings. Updated dupes calculation to incorporate a scaling factor for Contest_Size, and streamlined ownership metrics by adjusting relevant columns. This improves the precision of player ownership analysis and contest lineup simulations.

Browse files
Files changed (1) hide show
  1. app.py +37 -18
app.py CHANGED
@@ -551,22 +551,22 @@ with tab1:
551
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
552
  Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['proj'].astype(str) + Sim_Winner_Frame['salary'].astype(str) + Sim_Winner_Frame['Team'].astype(str) + Sim_Winner_Frame['Secondary'].astype(str)
553
  # Add percent rank columns for ownership at each roster position
554
- dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank', 'FLEX5_Own_percent_rank']
555
- own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own', 'FLEX5_Own']
556
- Sim_Winner_Frame['CPT_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,0].map(maps_dict['cpt_Own_map']).rank(pct=True)
557
- Sim_Winner_Frame['FLEX1_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,1].map(maps_dict['Own_map']).rank(pct=True)
558
- Sim_Winner_Frame['FLEX2_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,2].map(maps_dict['Own_map']).rank(pct=True)
559
- Sim_Winner_Frame['FLEX3_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,3].map(maps_dict['Own_map']).rank(pct=True)
560
- Sim_Winner_Frame['FLEX4_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,4].map(maps_dict['Own_map']).rank(pct=True)
561
- Sim_Winner_Frame['FLEX5_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,5].map(maps_dict['Own_map']).rank(pct=True)
562
- Sim_Winner_Frame['CPT_Own'] = Sim_Winner_Frame.iloc[:,0].map(maps_dict['cpt_Own_map']) / 100
563
- Sim_Winner_Frame['FLEX1_Own'] = Sim_Winner_Frame.iloc[:,1].map(maps_dict['Own_map']) / 100
564
- Sim_Winner_Frame['FLEX2_Own'] = Sim_Winner_Frame.iloc[:,2].map(maps_dict['Own_map']) / 100
565
- Sim_Winner_Frame['FLEX3_Own'] = Sim_Winner_Frame.iloc[:,3].map(maps_dict['Own_map']) / 100
566
- Sim_Winner_Frame['FLEX4_Own'] = Sim_Winner_Frame.iloc[:,4].map(maps_dict['Own_map']) / 100
567
- Sim_Winner_Frame['FLEX5_Own'] = Sim_Winner_Frame.iloc[:,5].map(maps_dict['Own_map']) / 100
568
  # Calculate Dupes column for Fanduel
569
  if sim_site_var1 == 'Fanduel':
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  # Calculate ownership product and convert to probability
571
  Sim_Winner_Frame['own_product'] = (Sim_Winner_Frame[own_columns].product(axis=1)) + 0.0001
572
 
@@ -574,7 +574,7 @@ with tab1:
574
  Sim_Winner_Frame['avg_own_rank'] = Sim_Winner_Frame[dup_count_columns].mean(axis=1)
575
 
576
  # Calculate dupes formula
577
- Sim_Winner_Frame['dupes_calc'] = ((Sim_Winner_Frame['own_product'] * Sim_Winner_Frame['avg_own_rank']) * Contest_Size) + ((Sim_Winner_Frame['salary'] - 59800) / 100)
578
 
579
  # Round and handle negative values
580
  Sim_Winner_Frame['Dupes'] = np.where(
@@ -583,6 +583,22 @@ with tab1:
583
  np.round(Sim_Winner_Frame['dupes_calc'], 0) - 1
584
  )
585
  elif sim_site_var1 == 'Draftkings':
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
586
  # Calculate ownership product and convert to probability
587
  Sim_Winner_Frame['own_product'] = (Sim_Winner_Frame[own_columns].product(axis=1))
588
 
@@ -590,7 +606,7 @@ with tab1:
590
  Sim_Winner_Frame['avg_own_rank'] = Sim_Winner_Frame[dup_count_columns].mean(axis=1)
591
 
592
  # Calculate dupes formula
593
- Sim_Winner_Frame['dupes_calc'] = ((Sim_Winner_Frame['own_product'] * Sim_Winner_Frame['avg_own_rank']) * Contest_Size) + ((Sim_Winner_Frame['salary'] - 49800) / 100)
594
 
595
  # Round and handle negative values
596
  Sim_Winner_Frame['Dupes'] = np.where(
@@ -598,12 +614,15 @@ with tab1:
598
  0,
599
  np.round(Sim_Winner_Frame['dupes_calc'], 0) - 1
600
  )
601
- #Sim_Winner_Frame = Sim_Winner_Frame.drop(columns=dup_count_columns)
 
 
 
602
 
603
  Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
604
 
605
  # Type Casting
606
- type_cast_dict = {'salary': int, 'proj': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32, 'Own': np.float32}
607
  Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
608
 
609
  # Sorting
 
551
  Sim_Winner_Frame['GPP_Proj'] = (Sim_Winner_Frame['proj'] + Sim_Winner_Frame['Fantasy']) / 2
552
  Sim_Winner_Frame['unique_id'] = Sim_Winner_Frame['proj'].astype(str) + Sim_Winner_Frame['salary'].astype(str) + Sim_Winner_Frame['Team'].astype(str) + Sim_Winner_Frame['Secondary'].astype(str)
553
  # Add percent rank columns for ownership at each roster position
 
 
 
 
 
 
 
 
 
 
 
 
 
 
554
  # Calculate Dupes column for Fanduel
555
  if sim_site_var1 == 'Fanduel':
556
+ dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank']
557
+ own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own']
558
+ calc_columns = ['own_product', 'avg_own_rank', 'dupes_calc']
559
+ Sim_Winner_Frame['CPT_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,0].map(maps_dict['cpt_Own_map']).rank(pct=True)
560
+ Sim_Winner_Frame['FLEX1_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,1].map(maps_dict['Own_map']).rank(pct=True)
561
+ Sim_Winner_Frame['FLEX2_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,2].map(maps_dict['Own_map']).rank(pct=True)
562
+ Sim_Winner_Frame['FLEX3_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,3].map(maps_dict['Own_map']).rank(pct=True)
563
+ Sim_Winner_Frame['FLEX4_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,4].map(maps_dict['Own_map']).rank(pct=True)
564
+ Sim_Winner_Frame['CPT_Own'] = Sim_Winner_Frame.iloc[:,0].map(maps_dict['cpt_Own_map']) / 100
565
+ Sim_Winner_Frame['FLEX1_Own'] = Sim_Winner_Frame.iloc[:,1].map(maps_dict['Own_map']) / 100
566
+ Sim_Winner_Frame['FLEX2_Own'] = Sim_Winner_Frame.iloc[:,2].map(maps_dict['Own_map']) / 100
567
+ Sim_Winner_Frame['FLEX3_Own'] = Sim_Winner_Frame.iloc[:,3].map(maps_dict['Own_map']) / 100
568
+ Sim_Winner_Frame['FLEX4_Own'] = Sim_Winner_Frame.iloc[:,4].map(maps_dict['Own_map']) / 100
569
+
570
  # Calculate ownership product and convert to probability
571
  Sim_Winner_Frame['own_product'] = (Sim_Winner_Frame[own_columns].product(axis=1)) + 0.0001
572
 
 
574
  Sim_Winner_Frame['avg_own_rank'] = Sim_Winner_Frame[dup_count_columns].mean(axis=1)
575
 
576
  # Calculate dupes formula
577
+ Sim_Winner_Frame['dupes_calc'] = ((Sim_Winner_Frame['own_product'] * Sim_Winner_Frame['avg_own_rank']) * (Contest_Size * 1.5)) + ((Sim_Winner_Frame['salary'] - 59800) / 100)
578
 
579
  # Round and handle negative values
580
  Sim_Winner_Frame['Dupes'] = np.where(
 
583
  np.round(Sim_Winner_Frame['dupes_calc'], 0) - 1
584
  )
585
  elif sim_site_var1 == 'Draftkings':
586
+ dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank', 'FLEX5_Own_percent_rank']
587
+ own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own', 'FLEX5_Own']
588
+ calc_columns = ['own_product', 'avg_own_rank', 'dupes_calc']
589
+ Sim_Winner_Frame['CPT_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,0].map(maps_dict['cpt_Own_map']).rank(pct=True)
590
+ Sim_Winner_Frame['FLEX1_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,1].map(maps_dict['Own_map']).rank(pct=True)
591
+ Sim_Winner_Frame['FLEX2_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,2].map(maps_dict['Own_map']).rank(pct=True)
592
+ Sim_Winner_Frame['FLEX3_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,3].map(maps_dict['Own_map']).rank(pct=True)
593
+ Sim_Winner_Frame['FLEX4_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,4].map(maps_dict['Own_map']).rank(pct=True)
594
+ Sim_Winner_Frame['FLEX5_Own_percent_rank'] = Sim_Winner_Frame.iloc[:,5].map(maps_dict['Own_map']).rank(pct=True)
595
+ Sim_Winner_Frame['CPT_Own'] = Sim_Winner_Frame.iloc[:,0].map(maps_dict['cpt_Own_map']) / 100
596
+ Sim_Winner_Frame['FLEX1_Own'] = Sim_Winner_Frame.iloc[:,1].map(maps_dict['Own_map']) / 100
597
+ Sim_Winner_Frame['FLEX2_Own'] = Sim_Winner_Frame.iloc[:,2].map(maps_dict['Own_map']) / 100
598
+ Sim_Winner_Frame['FLEX3_Own'] = Sim_Winner_Frame.iloc[:,3].map(maps_dict['Own_map']) / 100
599
+ Sim_Winner_Frame['FLEX4_Own'] = Sim_Winner_Frame.iloc[:,4].map(maps_dict['Own_map']) / 100
600
+ Sim_Winner_Frame['FLEX5_Own'] = Sim_Winner_Frame.iloc[:,5].map(maps_dict['Own_map']) / 100
601
+
602
  # Calculate ownership product and convert to probability
603
  Sim_Winner_Frame['own_product'] = (Sim_Winner_Frame[own_columns].product(axis=1))
604
 
 
606
  Sim_Winner_Frame['avg_own_rank'] = Sim_Winner_Frame[dup_count_columns].mean(axis=1)
607
 
608
  # Calculate dupes formula
609
+ Sim_Winner_Frame['dupes_calc'] = ((Sim_Winner_Frame['own_product'] * Sim_Winner_Frame['avg_own_rank']) * (Contest_Size * 1.5)) + ((Sim_Winner_Frame['salary'] - 49800) / 100)
610
 
611
  # Round and handle negative values
612
  Sim_Winner_Frame['Dupes'] = np.where(
 
614
  0,
615
  np.round(Sim_Winner_Frame['dupes_calc'], 0) - 1
616
  )
617
+ Sim_Winner_Frame['Dupes'] = np.round(Sim_Winner_Frame['Dupes'], 0)
618
+ Sim_Winner_Frame = Sim_Winner_Frame.drop(columns=dup_count_columns)
619
+ Sim_Winner_Frame = Sim_Winner_Frame.drop(columns=own_columns)
620
+ Sim_Winner_Frame = Sim_Winner_Frame.drop(columns=calc_columns)
621
 
622
  Sim_Winner_Frame = Sim_Winner_Frame.assign(win_count=Sim_Winner_Frame['unique_id'].map(Sim_Winner_Frame['unique_id'].value_counts()))
623
 
624
  # Type Casting
625
+ type_cast_dict = {'salary': int, 'proj': np.float16, 'Fantasy': np.float16, 'GPP_Proj': np.float32, 'Own': np.float32, 'Dupes': int}
626
  Sim_Winner_Frame = Sim_Winner_Frame.astype(type_cast_dict)
627
 
628
  # Sorting