pydfs-lineup-optimizer icon indicating copy to clipboard operation
pydfs-lineup-optimizer copied to clipboard

Get Projected Ownership from CSV

Open kryptickevin opened this issue 4 years ago • 3 comments

First off, thank you @DimaKudosh for this tool you have provided, as well as the support you give here. It's an incredibly useful thing to have, and I appreciate your efforts.

I know others have mentioned issues with importing projected ownerships from their CSV's using a custom column "Projected Ownership", but even after spending hours trying to solve this problem I cannot seem to figure out how to get it to use my provided data. I do not want to manually provide player ownership data in my script, but rather have it load from my CSV (for example, a normal FanDuel export with a "Projected Ownership" column added at the end).

I currently have this code:

` from pydfs_lineup_optimizer import get_optimizer, Site, Sport, CSVLineupExporter, TeamStack, PositionsStack, PlayersGroup, Player

optimizer = get_optimizer(Site.FANDUEL, Sport.FOOTBALL) optimizer.set_max_repeating_players(########) optimizer.set_min_salary_cap(########) optimizer.load_players_from_csv(#########) optimizer.##############

for player in optimizer.players: player.projected_ownership = get_projected_ownership(player) optimizer.set_projected_ownership(max_projected_ownership=0.6)

exporter = CSVLineupExporter(optimizer.optimize(#)) exporter.export(#########') `

How can I do this? Any help is greatly appreciated.

kryptickevin avatar Nov 13 '20 04:11 kryptickevin

I would set these values when you create players. In my opinion, do not use load_players_from_csv because it assumes your projections are in the DK salary file, which is likely not the case. Instead, create the Player objects and use load_players.

Here is how I create players. Assume I have projections in a pandas dataframe, I apply this function row-wise:

    def row_to_player(self, row):
        """Converts dataframe row to Player object

        Args:
            row (namedtuple): dataframe row

        Returns:
            Player
        """
        valid_kwargs = (
            'is_injured', 'max_exposure', 'min_exposure', 
            'projected_ownership', 'game_info', 'roster_order', 
            'min_deviation', 'max_deviation', 'is_confirmed_starter', 
            'fppg_floor', 'fppg_ceil'
        )
        
        kwargs = {field: getattr(row, field) for field in row._fields
                  if field in valid_kwargs}

        return Player (
            player_id=row.player, 
            first_name=self._first_name(row.player),
            last_name=self._last_name(row.player),
            positions=[row.pos],
            team=row.team,
            salary=row.salary,
            fppg=row.proj,
            **kwargs
        )

sansbacon avatar Nov 25 '20 22:11 sansbacon

First off, thank you @DimaKudosh for this tool you have provided, as well as the support you give here. It's an incredibly useful thing to have, and I appreciate your efforts.

I know others have mentioned issues with importing projected ownerships from their CSV's using a custom column "Projected Ownership", but even after spending hours trying to solve this problem I cannot seem to figure out how to get it to use my provided data. I do not want to manually provide player ownership data in my script, but rather have it load from my CSV (for example, a normal FanDuel export with a "Projected Ownership" column added at the end).

I currently have this code:

` from pydfs_lineup_optimizer import get_optimizer, Site, Sport, CSVLineupExporter, TeamStack, PositionsStack, PlayersGroup, Player

optimizer = get_optimizer(Site.FANDUEL, Sport.FOOTBALL) optimizer.set_max_repeating_players(########) optimizer.set_min_salary_cap(########) optimizer.load_players_from_csv(#########) optimizer.##############

for player in optimizer.players: player.projected_ownership = get_projected_ownership(player) optimizer.set_projected_ownership(max_projected_ownership=0.6)

exporter = CSVLineupExporter(optimizer.optimize(#)) exporter.export(#########') `

How can I do this? Any help is greatly appreciated.

Did you ever figure out how to do this? @kryptickevin

@sansbacon i would use your method, but Im a real novice with python, and far more experienced with excel and its easy enough for me to just add 1 column into my csv. Would you be willing to help me through your explanation via email or something?

lightninglarry avatar Jul 13 '21 17:07 lightninglarry

Я бы установил эти значения при создании игроков. На мой взгляд, не используйте load_players_from_csv, потому что он предполагает, что ваши прогнозы находятся в файле зарплаты DK, что, вероятно, не так. Вместо этого создайте объекты Player и используйте load_players.

Вот как я создаю игроков. Предположим, у меня есть проекции в фрейме данных pandas, я применяю эту функцию построчно:

    def row_to_player(self, row):
        """Converts dataframe row to Player object

        Args:
            row (namedtuple): dataframe row

        Returns:
            Player
        """
        valid_kwargs = (
            'is_injured', 'max_exposure', 'min_exposure', 
            'projected_ownership', 'game_info', 'roster_order', 
            'min_deviation', 'max_deviation', 'is_confirmed_starter', 
            'fppg_floor', 'fppg_ceil'
        )
        
        kwargs = {field: getattr(row, field) for field in row._fields
                  if field in valid_kwargs}

        return Player (
            player_id=row.player, 
            first_name=self._first_name(row.player),
            last_name=self._last_name(row.player),
            positions=[row.pos],
            team=row.team,
            salary=row.salary,
            fppg=row.proj,
            **kwargs
        )

I also want to import another csv file, do I just insert your code?

sayabeck avatar Nov 15 '21 11:11 sayabeck