Example #1
0
def compute_applications(data, base_date):
    previous_month_data = rs.records_for_month(data,
                                               dth.months_ago(base_date, 1))
    current_month_data = rs.records_for_month(data, base_date)
    difference = rs.total_amount_by(
        APPLICATIONS_GROUPBY, current_month_data) - rs.total_amount_by(
            APPLICATIONS_GROUPBY, previous_month_data)
    return difference.amount
Example #2
0
def food_expenses(expenses, base_date):
    data = rs.total_amount_by('category',
                              rs.records_for_month(expenses, base_date))
    if 'mercado' in data.index and 'restaurante' in data.index:
        return pd.Series(data.loc['mercado'].amount +
                         data.loc['restaurante'].amount) * -1
    else:
        return pd.Series(0)
Example #3
0
def distribution(expenses, incomes, categories={}):
    expenses_by_category = rs.total_amount_by('category', expenses)
    dist_by_spent = distribution_by_category(expenses, expenses)
    dist_by_income = distribution_by_category(
        expenses, incomes[incomes.category == 'renda']) * -1

    data = {
        'amount #': expenses_by_category.amount,
        '% by expenses': dist_by_spent.amount,
        '% by income': dist_by_income.amount,
        '% by income goal': categories,
    }

    return pd.DataFrame(data,
                        columns=list(data.keys())).sort_values('amount #')
Example #4
0
def preprocess_applications(funds):
    funds = normalize_amount(funds, 'application')
    funds = rs.total_amount_by(['date', 'title', 'type', 'account', 'goal'],
                               funds).reset_index()
    funds = rs.describe_over_time(funds, compute_applications)\
        .transpose()\
        .reset_index()\
        .melt(id_vars=APPLICATIONS_GROUPBY,
              var_name='date',
              value_name='amount')

    # Fix date to be in the beginning of month
    funds['date'] = pd.to_datetime(
        funds.date.map(lambda d: dth.beginning_of_month(rs.month_to_date(d))))
    funds['category'] = 'aplicação'

    # Remove first month because there is no record for its previous month
    funds = funds[funds.date > funds.date.min()]
    return funds
Example #5
0
def expenses_by_month(expenses):
    return rs.total_amount_by(rs.groupby_month(expenses), expenses)
Example #6
0
def incomes_by_month(incomes):
    income_salary = incomes[incomes.category == 'renda'][['date', 'amount']]
    return rs.total_amount_by(rs.groupby_month(income_salary), income_salary)
Example #7
0
def total_invested_by(column, invest):
    """Total invested grouped by column"""
    return rs.total_amount_by(column, ft.invested(invest))
Example #8
0
def applications_for_month(incomes, base_date):
    """Total applications on current month given base_date"""
    applications = rs.records_for_month(ft.applications(incomes), base_date)
    return rs.total_amount_by('title', applications)
Example #9
0
def total_discounts_by(column, incomes):
    """Total discounts grouped by column"""
    return rs.total_amount_by(column, ft.discounts(incomes))
Example #10
0
def total_income_by(column, incomes):
    """Total incomes/salaries grouped by column"""
    return rs.total_amount_by(column, ft.income(incomes))
Example #11
0
def total_applications_by(column, invest):
    """Total applications grouped by column"""
    return rs.total_amount_by(column, ft.applications(invest))
Example #12
0
def distribution_by_category(expenses, denominator):
    denominator_sum = denominator.amount.sum()
    expenses_by_category = rs.total_amount_by('category',
                                              expenses).sort_values('amount')
    return expenses_by_category / denominator_sum
Example #13
0
def preprocess_invested(funds):
    funds = normalize_amount(funds, 'gross amount')
    funds = rs.total_amount_by(['date', 'title', 'type', 'account', 'goal'],
                               funds).reset_index()
    funds['category'] = 'valor aplicado'
    return funds