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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

joaomamorim opened this issue · comments

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.

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.

@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

@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!