Create variables in time
Project description
create_vars
from create_vars.vars import *
import pandas as pd
import random
import numpy as np
Criando variáveis numéricas e categóricas
Install
pip install create_vars
How to use
Criando dataframe aleatório
Criando DataFrame com variáveis categóricas e numéricas
# Criando o DataFrame
data = {
'ID_cliente': [random.choice(list(range(1, 101)))for _ in range(100)],
'Safra': [random.choice([202207, 202209, 202212, 202301, 202207, 202302, 202305, 202306]) for _ in range(100)],
'Feat_cat': [random.choice(['A', 'B', 'C']) for _ in range(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()
ID_cliente | Safra | Feat_cat | Feat_num1 | Feat_num2 | |
---|---|---|---|---|---|
0 | 75 | 202207 | A | 72 | 66 |
1 | 30 | 202209 | B | 44 | 90 |
2 | 70 | 202301 | B | 82 | 33 |
3 | 76 | 202302 | A | 37 | 70 |
4 | 81 | 202305 | C | 76 | 17 |
O 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: int64
A 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: int64
Safra de ref
Criando safra de referencia no formato YYYYMM:
df['safra_ref'] = '20230702'
Também podemos utilizar o formato YYYYMMDD.
Variáveis numéricas
A 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()
ID_cliente | Safra | Feat_num1_sum_1M | Feat_num1_mean_1M | Feat_num1_count_1M | Feat_num1_sum_2M | Feat_num1_mean_2M | Feat_num1_count_2M | Feat_num1_sum_3M | Feat_num1_mean_3M | ... | Feat_num2_count_6M | Feat_num2_sum_9M | Feat_num2_mean_9M | Feat_num2_count_9M | Feat_num2_sum_12M | Feat_num2_mean_12M | Feat_num2_count_12M | Feat_num2_sum_15M | Feat_num2_mean_15M | Feat_num2_count_15M | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 75 | 202207 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 66 | 66.0 | 1 |
1 | 30 | 202209 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | 90.0 | 90.0 | 1.0 | 90 | 90.0 | 1 |
2 | 70 | 202301 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | 111.0 | 55.5 | 2.0 | 111.0 | 55.5 | 2.0 | 111 | 55.5 | 2 |
3 | 76 | 202302 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | 1.0 | 70.0 | 70.0 | 1.0 | 70.0 | 70.0 | 1.0 | 70 | 70.0 | 1 |
4 | 81 | 202305 | NaN | NaN | NaN | NaN | NaN | NaN | 76.0 | 76.0 | ... | 1.0 | 17.0 | 17.0 | 1.0 | 17.0 | 17.0 | 1.0 | 17 | 17.0 | 1 |
5 rows × 44 columns
Variáveis categóricas
Para 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()
ID_cliente | Safra | Feat_cat_nunique_1M | Feat_cat_mode_1M | Feat_cat_nunique_2M | Feat_cat_mode_2M | Feat_cat_nunique_3M | Feat_cat_mode_3M | Feat_cat_nunique_6M | Feat_cat_mode_6M | Feat_cat_nunique_9M | Feat_cat_mode_9M | Feat_cat_nunique_12M | Feat_cat_mode_12M | Feat_cat_nunique_15M | Feat_cat_mode_15M | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 75 | 202207 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1 | A |
1 | 30 | 202209 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | B | 1 | B |
2 | 70 | 202301 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2.0 | A | 2.0 | A | 2 | A |
3 | 76 | 202302 | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | A | 1.0 | A | 1.0 | A | 1 | A |
4 | 81 | 202305 | NaN | NaN | NaN | NaN | 1.0 | C | 1.0 | C | 1.0 | C | 1.0 | C | 1 | C |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for create_vars-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bdaa1f870834b318e7e3a23b6efe5f2a0b0680cef31e236ebec0d85ca0b0327a |
|
MD5 | fd1d0fa0121e60cf55ccf9af86f78f6a |
|
BLAKE2b-256 | 5b67b6479f8f0e277f8c56e7021241dca38d600085f6b937282041ab3a7bc192 |