Skip to main content

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()
<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_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()
<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_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()
<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_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

create_vars-0.0.1.tar.gz (10.4 kB view hashes)

Uploaded Source

Built Distribution

create_vars-0.0.1-py3-none-any.whl (9.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page