henriquepgomide / caRtola

Extração de dados da API do CartolaFC, análise exploratória dos dados e modelos preditivos em R e Python - 2014-22. [EN] Data munging, analysis and modeling of CartolaFC - the most popular fantasy football game in Brazil. Data cover years 2014-23.
MIT License
451 stars 253 forks source link

Dados 2017 - Criar função (R, Python, Julia...) para desagregar os dados da rodada de 2017. #52

Closed joaomamorim closed 4 years ago

joaomamorim commented 5 years ago

Observei que o arquivo de scouts de 2017 estão com os dados acumulados, já os dados agregados não está acumulado.

Em que parte do código isso foi tratado? Vi o problema sendo tratado para o ano de 2015 apenas.

arnaldog12 commented 5 years ago

tem certeza, @joaomamorim? lembro de quando estava tratando os dados, os dados de 2017 não eram acumulativos. Mas, talvez isso tenha mudado e eu não percebi.

Por favor, se você tratá-los, submeta um pull request com esses dados.

henriquepgomide commented 5 years ago

@joaomamorim , os scouts de 2017 e 2018 estão com os dados acumulados como você bem detectou. O script que trata estes dados está disponível neste link

Se for do seu interesse posso criar uma função para fazer isso no Python ou no R.

Abraço

arnaldog12 commented 5 years ago

@joaomamorim, eu criei uma função python para pegar os scouts desagregados de uma certa rodada. Está aqui:

def get_scouts_for_round(df, round_):
    suffixes = ('_curr', '_prev')
    cols_current = [col + suffixes[0] for col in COLS_SCOUTS]
    cols_prev = [col + suffixes[1] for col in COLS_SCOUTS]

    df_round = df[df.rodada == round_]
    if round_ == 1: return df_round

    df_round_prev = df[df.rodada < round_].groupby('id')[COLS_SCOUTS].max()
    df_players = df_round.merge(df_round_prev, how='left', on='id', suffixes=suffixes)

    # if is the first round of a player, the scouts of previous rounds will be NaNs. Thus, set them to zero
    df_players.fillna(value=0, inplace=True)

    # compute the scouts 
    df_players[cols_current] = df_players[cols_current].values - df_players[cols_prev].values

    # update the columns
    df_players.drop(labels=cols_prev, axis=1, inplace=True)
    df_players = df_players.rename(columns=dict(zip(cols_current, COLS_SCOUTS)))
    df_players.SG = df_players.SG.clip(lower=0)

    return df_players

Vale salientar que essa função espera que as colunas que representam a rodada e o id do atleta sejam chamadas rodada e id, respectivamente.

aí é só rodar esse código para desagregar os scouts em um dataframe df:

df_clean = pd.DataFrame([])

for i in range(1, 39):
    df_round = get_scouts_for_round(df, i)
    df_clean = df_clean.append(df_round, ignore_index=True)

df = df_clean.copy()

Espero que ajude!