sábado, 10 de noviembre de 2018

Calcular acumulados con Pandas


Si se tiene un dataset con transacciones históricas de usuarios, y se quiere hacer variables que midan acumulados en cada momento (eje: monto consumo en últimos 30dias, promedio consumo el últimos 90 días, etc.), puede usarse el siguiente script que usa funciones de pandas para calcularlo.

Conceptualmente seria así:














Script:
import pandas as pd

def cumulative(data, id2, fdate, not_feature, windows=[30, 90]):
    """calcula acumulados para describir tendencia"""
    data2 = data.copy()
    headers = data2.columns.values.tolist()
    headers = [x for x in headers if x not in not_feature]
    for col in headers:
        print('calculating windows for:',col)
        for d in windows:
            nd = str(d)+'d'
            data2[col+'_sum_'+nd] = data2.set_index('fecha').groupby(id2)[col].rolling(nd).sum().values
    return data2

if __name__ == '__main__':
    path = 'https://www.dropbox.com/s/3g4rz8a0lpvkag4/payment.csv?dl=1'
    data = pd.read_csv(path)
    data['fecha'] = pd.to_datetime(data['fecha'])
    data = data.sort_values(['user_id', 'fecha'], ascending=[True, True])
    not_feature = ['fecha', 'user_id']
    data2 = cumulative(data, 'user_id', 'fecha', not_feature, windows=[30, 90])
    data2.to_csv('data2.csv')



No hay comentarios:

Publicar un comentario