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

Import Own Projections

Open rickenrocker24 opened this issue 3 years ago • 7 comments

How do you import your own projections (will need to import them several times for updated projections) into the Opto for NBA/MLB? I have a CSV file that I would like to use, is this possible?

rickenrocker24 avatar May 04 '21 17:05 rickenrocker24

i just vlookup from my projections into whatever sites your using FPPG column. make sure there are no blanks though, put 0 for any N/A

lightninglarry avatar May 04 '21 19:05 lightninglarry

@rickenrocker24 The load_players method allows you to create a list of Player objects and then add them to the optimizer. There is no requirement that you use a site-supplied CSV file.

import pandas as pd
from pydfs_lineup_optimizer import get_optimizer, Site, Sport, Player


def row_to_player(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
    )

o = get_optimizer(site=Site.DRAFTKINGS, sport=Sport.FOOTBALL)
df = pd.read_csv('my_projections.csv')
players = df.apply(row_to_player, axis=1)
o.load_players(players)

sansbacon avatar May 06 '21 22:05 sansbacon

i just vlookup from my projections into whatever sites your using FPPG column. make sure there are no blanks though, put 0 for any N/A

How would I go by just updating the FPPG column from another spreadsheet? I hate excel btw lol

rickenrocker24 avatar May 07 '21 03:05 rickenrocker24

@rickenrocker24 The load_players method allows you to create a list of Player objects and then add them to the optimizer. There is no requirement that you use a site-supplied CSV file.

import pandas as pd
from pydfs_lineup_optimizer import get_optimizer, Site, Sport, Player


def row_to_player(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
    )

o = get_optimizer(site=Site.DRAFTKINGS, sport=Sport.FOOTBALL)
df = pd.read_csv('my_projections.csv')
players = df.apply(row_to_player, axis=1)
o.load_players(players)

I'll give this a try...thanks for providing the script.

rickenrocker24 avatar May 07 '21 03:05 rickenrocker24

@ rickenrocker24 Метод load_players позволяет вам создать список объектов Player, а затем добавить их в оптимизатор. Использование CSV-файла, предоставленного сайтом, не является обязательным.

import pandas as pd
from pydfs_lineup_optimizer import get_optimizer, Site, Sport, Player


def row_to_player(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
    )

o = get_optimizer(site=Site.DRAFTKINGS, sport=Sport.FOOTBALL)
df = pd.read_csv('my_projections.csv')
players = df.apply(row_to_player, axis=1)
o.load_players(players)

Я попробую ... спасибо за предоставленный сценарий.

did it work?

sayabeck avatar Nov 15 '21 08:11 sayabeck

@ rickenrocker24 Метод load_players позволяет вам создать список объектов Player, а затем добавить их в оптимизатор. Использование CSV-файла, предоставленного сайтом, не является обязательным.

import pandas as pd
from pydfs_lineup_optimizer import get_optimizer, Site, Sport, Player


def row_to_player(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
    )

o = get_optimizer(site=Site.DRAFTKINGS, sport=Sport.FOOTBALL)
df = pd.read_csv('my_projections.csv')
players = df.apply(row_to_player, axis=1)
o.load_players(players)

Я попробую ... спасибо за предоставленный сценарий.

did it work?

I haven't got it to work yet but if you find out let me know

rickenrocker24 avatar Nov 15 '21 18:11 rickenrocker24

You could also read in your projections and merge it with the salary csv in Pandas. Then create a data frame with the required columns. Example for FD below.

`salaries= pd.read_csv('FanDuel-MLB-2022 ET-04 ET-15 ET-74601-players-list.csv') fproj = pd.read_csv('MLB_2022-04-15_players.csv') data = pd.merge(sh, fc, left_on=['Nickname', 'Team'], right_on=['Player', 'Team'], how='inner') data['FPPG'] = (data['Proj']) data = data[['Id', 'Position', 'First Name', 'Nickname', 'Last Name', 'FPPG', 'Played', 'Salary', 'Game', 'Team', 'Opponent', 'Injury Indicator', 'Injury Details', 'Tier', 'Roster Position', 'Projected Ownership', 'Projection Ceil']]

data.to_csv('my_projections.csv')`

Then you can load it into the optimizer via CSV.

BenikaH avatar Apr 16 '22 16:04 BenikaH