Package: create-vars
create_varsfromcreate_vars.varsimport*importpandasaspdimportrandomimportnumpyasnpCriando variáveis numéricas e categóricasInstallpipinstallcreate_varsHow to useCriando dataframe aleatórioCriando DataFrame com variáveis categóricas e numéricas# Criando o DataFramedata={'ID_cliente':[random.choice(list(range(1,101)))for_inrange(100)],'Safra':[random.choice([202207,202209,202212,202301,202207,202302,202305,202306])for_inrange(100)],'Feat_cat':[random.choice(['A','B','C'])for_inrange(100)],'Feat_num1':np.random.randint(0,100,size=100),'Feat_num2':np.random.randint(0,100,size=100)}df=pd.DataFrame(data)df.head()<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>ID_clienteSafraFeat_catFeat_num1Feat_num2075202207A7266130202209B4490270202301B8233376202302A3770481202305C7617O Dataframe criado tem o ID do cliente aleatório, que pode se repetir em
datas diferentes.Por exemplo:df.groupby('ID_cliente')['Safra'].value_counts().sort_values(ascending=False)ID_cliente  Safra 
11          202207    2
70          202301    2
3           202305    1
73          202209    1
79          202207    1
                     ..
35          202302    1
34          202305    1
            202306    1
33          202306    1
99          202306    1
Name: count, Length: 98, dtype: int64A safra corresponde a data que cada variável foi calculada. Ela precisa
estar no formato YYYYMM ou YYYYMMDD. Para o nosso exemplo teremos a
seguinte distribuição das datas:df['Safra'].value_counts().sort_index()Safra
202207    23
202209    12
202212     5
202301    13
202302    15
202305    15
202306    17
Name: count, dtype: int64Safra de refCriando safra de referencia no formato YYYYMM:df['safra_ref']='20230702'Também podemos utilizar o formato YYYYMMDD.Variáveis numéricasA partir do ID_cliente do cliente e da Safra, agrupamos as entradas e
calculamos variáveis do tipo ‘sum’, ‘mean’ e ‘count’ que são fornecidas
em forma de lista em ‘operations’ para variáveis numéricas. As variáveis
utilizadas são listadas em ‘value_var’ e calculadas nas janelas de tempo
em ‘window’ para a data de referência em ‘ref_time_var’.id_cols=['ID_cliente','Safra']trns_time='Safra'ref_time='safra_ref'value_var=['Feat_num1','Feat_num2']window=[-1,-2,-3,-6,-9,-12,-15]operations=['sum','mean','count']df_vars_num=create_vars_in_time(df,id_cols,trns_time,ref_time,value_var,window,operations)df_vars_num.head()<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>ID_clienteSafraFeat_num1_sum_1MFeat_num1_mean_1MFeat_num1_count_1MFeat_num1_sum_2MFeat_num1_mean_2MFeat_num1_count_2MFeat_num1_sum_3MFeat_num1_mean_3M...Feat_num2_count_6MFeat_num2_sum_9MFeat_num2_mean_9MFeat_num2_count_9MFeat_num2_sum_12MFeat_num2_mean_12MFeat_num2_count_12MFeat_num2_sum_15MFeat_num2_mean_15MFeat_num2_count_15M075202207NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaN6666.01130202209NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN90.090.01.09090.01270202301NaNNaNNaNNaNNaNNaNNaNNaN...NaN111.055.52.0111.055.52.011155.52376202302NaNNaNNaNNaNNaNNaNNaNNaN...1.070.070.01.070.070.01.07070.01481202305NaNNaNNaNNaNNaNNaN76.076.0...1.017.017.01.017.017.01.01717.015 rows × 44 columnsVariáveis categóricasPara variáveis categóricas, as operações são ‘nunique’ e mode.id_cols=['ID_cliente','Safra']trns_time='Safra'ref_time='safra_ref'value_var=['Feat_cat']window=[-1,-2,-3,-6,-9,-12,-15]operations=['nunique',mode]df_vars_cat=create_vars_in_time(df,id_cols,trns_time,ref_time,value_var,window,operations)df_vars_cat.head()<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>ID_clienteSafraFeat_cat_nunique_1MFeat_cat_mode_1MFeat_cat_nunique_2MFeat_cat_mode_2MFeat_cat_nunique_3MFeat_cat_mode_3MFeat_cat_nunique_6MFeat_cat_mode_6MFeat_cat_nunique_9MFeat_cat_mode_9MFeat_cat_nunique_12MFeat_cat_mode_12MFeat_cat_nunique_15MFeat_cat_mode_15M075202207NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN1A130202209NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN1.0B1B270202301NaNNaNNaNNaNNaNNaNNaNNaN2.0A2.0A2A376202302NaNNaNNaNNaNNaNNaN1.0A1.0A1.0A1A481202305NaNNaNNaNNaN1.0C1.0C1.0C1.0C1C