James McCool
		
	commited on
		
		
					Commit 
							
							·
						
						02245bb
	
1
								Parent(s):
							
							fbbb0e8
								
Add team ownership calculation in hedging_preset.py to enhance lineup generation. Introduced a new function to sum hitter ownership by team and adjusted lineup target calculations for improved accuracy. This change allows for better team-based lineup strategies.
Browse files
    	
        global_func/hedging_preset.py
    CHANGED
    
    | @@ -2,6 +2,7 @@ import pandas as pd | |
| 2 | 
             
            import math
         | 
| 3 | 
             
            from global_func.small_field_preset import small_field_preset
         | 
| 4 | 
             
            from global_func.large_field_preset import large_field_preset
         | 
|  | |
| 5 |  | 
| 6 | 
             
            def hedging_preset(portfolio: pd.DataFrame, lineup_target: int, projections_file: pd.DataFrame):
         | 
| 7 |  | 
| @@ -12,6 +13,28 @@ def hedging_preset(portfolio: pd.DataFrame, lineup_target: int, projections_file | |
| 12 | 
             
                check_own_df = check_own_df.sort_values(by='ownership', ascending=False)
         | 
| 13 | 
             
                top_owned = check_own_df['player_names'].head(list_size).tolist()
         | 
| 14 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 15 | 
             
                concat_portfolio = pd.DataFrame(columns=portfolio.columns)
         | 
| 16 |  | 
| 17 | 
             
                for player in top_owned:
         | 
| @@ -33,9 +56,16 @@ def hedging_preset(portfolio: pd.DataFrame, lineup_target: int, projections_file | |
| 33 | 
             
                    locked_df = working_df[lock_mask]
         | 
| 34 | 
             
                    print(locked_df.head(10))
         | 
| 35 |  | 
| 36 | 
            -
                    removed_lineups = small_field_preset(removed_df, math.ceil(lineup_target / (list_size *  | 
| 37 | 
            -
                    locked_lineups = large_field_preset(locked_df, math.ceil(lineup_target / (list_size *  | 
| 38 |  | 
| 39 | 
             
                    concat_portfolio = pd.concat([concat_portfolio, removed_lineups, locked_lineups])
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 40 |  | 
| 41 | 
             
                return concat_portfolio.head(lineup_target)
         | 
|  | |
| 2 | 
             
            import math
         | 
| 3 | 
             
            from global_func.small_field_preset import small_field_preset
         | 
| 4 | 
             
            from global_func.large_field_preset import large_field_preset
         | 
| 5 | 
            +
            from global_func.get_portfolio_names import trim_portfolio
         | 
| 6 |  | 
| 7 | 
             
            def hedging_preset(portfolio: pd.DataFrame, lineup_target: int, projections_file: pd.DataFrame):
         | 
| 8 |  | 
|  | |
| 13 | 
             
                check_own_df = check_own_df.sort_values(by='ownership', ascending=False)
         | 
| 14 | 
             
                top_owned = check_own_df['player_names'].head(list_size).tolist()
         | 
| 15 |  | 
| 16 | 
            +
                def get_team_hitter_ownership(projections_file: pd.DataFrame):
         | 
| 17 | 
            +
                    """
         | 
| 18 | 
            +
                    Calculate the sum ownership of hitters on each team.
         | 
| 19 | 
            +
                    Excludes SP and P positions and sums ownership by team.
         | 
| 20 | 
            +
                    
         | 
| 21 | 
            +
                    Args:
         | 
| 22 | 
            +
                        projections_file (pd.DataFrame): DataFrame with 'position', 'team', and 'ownership' columns
         | 
| 23 | 
            +
                        
         | 
| 24 | 
            +
                    Returns:
         | 
| 25 | 
            +
                        pd.Series: Series with team names as index and total hitter ownership as values, sorted descending
         | 
| 26 | 
            +
                    """
         | 
| 27 | 
            +
                    # Filter out pitchers (SP and P positions)
         | 
| 28 | 
            +
                    hitters_df = projections_file[~projections_file['position'].isin(['P', 'SP'])]
         | 
| 29 | 
            +
                    
         | 
| 30 | 
            +
                    # Group by team and sum ownership
         | 
| 31 | 
            +
                    team_ownership = hitters_df.groupby('team')['ownership'].sum().sort_values(ascending=False)
         | 
| 32 | 
            +
                
         | 
| 33 | 
            +
                    return team_ownership
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                team_ownership = get_team_hitter_ownership(projections_file)
         | 
| 36 | 
            +
                top_owned_teams = team_ownership.head(list_size).index.tolist()
         | 
| 37 | 
            +
             | 
| 38 | 
             
                concat_portfolio = pd.DataFrame(columns=portfolio.columns)
         | 
| 39 |  | 
| 40 | 
             
                for player in top_owned:
         | 
|  | |
| 56 | 
             
                    locked_df = working_df[lock_mask]
         | 
| 57 | 
             
                    print(locked_df.head(10))
         | 
| 58 |  | 
| 59 | 
            +
                    removed_lineups = small_field_preset(removed_df, math.ceil(lineup_target / (list_size * 3)), excluded_cols)
         | 
| 60 | 
            +
                    locked_lineups = large_field_preset(locked_df, math.ceil(lineup_target / (list_size * 3)), excluded_cols)
         | 
| 61 |  | 
| 62 | 
             
                    concat_portfolio = pd.concat([concat_portfolio, removed_lineups, locked_lineups])
         | 
| 63 | 
            +
                
         | 
| 64 | 
            +
                for team in top_owned_teams:
         | 
| 65 | 
            +
                    working_df = portfolio.copy()
         | 
| 66 | 
            +
                    teams_df = working_df[working_df['Stack'] == team]
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    team_lineups = large_field_preset(teams_df, math.ceil(lineup_target / (list_size * 3)), excluded_cols)
         | 
| 69 | 
            +
                    concat_portfolio = pd.concat([concat_portfolio, team_lineups])
         | 
| 70 |  | 
| 71 | 
             
                return concat_portfolio.head(lineup_target)
         | 
