Exemplo n.º 1
0
def test_waterfall_not_implemented(sample_data):
    """ It should raise Error for not implemented features """
    kwargs = {
        'upperGroup': {'id': 'category_id', 'label': 'category_name'},
        'insideGroup': {'id': 'product_id', 'groupsOrder': 'ord'},
        'date': 'date',
        'value': 'played',
        'start': {'label': 'Trimestre 1', 'id': 't1'},
        'end': {'label': 'Trimester 2', 'id': 't2'},
        'breakdown': ['id']
    }
    df = pd.DataFrame(sample_data)
    with pytest.raises(NotImplementedError) as exc_info:
        waterfall(df, **kwargs)
    assert str(exc_info.value) == 'We will add breakdown support ' \
                                  'on your request, please contact the devs'

    kwargs = {
        'upperGroup': {'id': 'category_id', 'label': 'category_name'},
        'date': 'date',
        'value': 'played',
        'start': {'label': 'Trimestre 1', 'id': 't1'},
        'end': {'label': 'Trimester 2', 'id': 't2'},
    }
    df = pd.DataFrame(sample_data)
    with pytest.raises(NotImplementedError) as exc_info:
        waterfall(df, **kwargs)
    assert str(exc_info.value) == 'We will add support for upperGroup only ' \
                                  'on you request, please contact the devs'
Exemplo n.º 2
0
def test_waterfall_null():
    kwargs = {
        'upperGroup': {
            'id': 'category_id',
            'label': 'category_name'
        },
        'insideGroup': {
            'id': 'product_id',
            'groupsOrder': 'ord'
        },
        'date': 'date',
        'value': 'played',
        'start': {
            'label': 'Trimestre 1',
            'id': 't1'
        },
        'end': {
            'label': 'Trimester 2',
            'id': 't2'
        },
    }

    data = None
    df = pd.DataFrame(data)
    df = waterfall(df, **kwargs)
    wa = [{k: v for k, v in zip(df.columns, row)} for row in df.values]
    assert wa == []
Exemplo n.º 3
0
def test_waterfall_upperGroup_groupsOrder(sample_data):
    for line in sample_data:
        line['category_order'] = len(line['category_name'])
        del line['ord']

    kwargs = {
        'upperGroup': {
            'id': 'category_id',
            'label': 'category_name',
            'groupsOrder': 'category_order'
        },
        'insideGroup': {
            'id': 'product_id'
        },
        'date': 'date',
        'value': 'played',
        'start': {'label': 'Trimestre 1', 'id': 't1'},
        'end': {'label': 'Trimester 2', 'id': 't2'},
    }

    expected = [
        {'variation': nan, 'label': 'Trimestre 1', 'value': 14.0, 'groups': nan, 'type': nan,
         'order': nan},
        {'variation': inf, 'label': 'Tom', 'value': 1.0, 'groups': 'tom', 'type': 'parent',
         'order': 3.0},
        {'variation': inf, 'label': 'bom', 'value': 1.0, 'groups': 'tom', 'type': 'child',
         'order': nan},
        {'variation': -0.23076923076923078, 'label': 'Clap', 'value': -3.0, 'groups': 'clap',
         'type': 'parent', 'order': 4.0},
        {'variation': -1.0, 'label': 'clap clap', 'value': -1.0, 'groups': 'clap',
         'type': 'child', 'order': nan},
        {'variation': -0.16666666666666666, 'label': 'super clap', 'value': -2.0,
         'groups': 'clap', 'type': 'child', 'order': nan},
        {'variation': 99.0, 'label': 'Snare', 'value': 99.0, 'groups': 'snare',
         'type': 'parent', 'order': 5.0},
        {'variation': 99.0, 'label': 'tac', 'value': 99.0, 'groups': 'snare', 'type': 'child',
         'order': nan},
        {'variation': nan, 'label': 'Trimester 2', 'value': 111.0, 'groups': nan, 'type': nan,
         'order': nan}
    ]

    df = pd.DataFrame(sample_data)
    df = waterfall(df, **kwargs)
    wa = [{k: v for k, v in zip(df.columns, row)} for row in df.values]
    assert wa[0].keys() == expected[0].keys()
    for i in range(len(expected)):
        testing.assert_equal(wa[i], expected[i])
Exemplo n.º 4
0
def test_waterfall_no_value_start():
    kwargs = {
        'upperGroup': {'id': 'category_id', 'label': 'category_name'},
        'insideGroup': {'id': 'product_id', 'groupsOrder': 'ord'},
        'date': 'date',
        'value': 'played',
        'start': {'label': 'Trimestre 1', 'id': 't1'},
        'end': {'label': 'Trimester 2', 'id': 't2'},
    }

    data = [
        {'ord': 1, 'category_name': 'Clap', 'category_id': 'clap',
         'product_id': 'super clap', 'date': 't2', 'played': 10},
        {'ord': 1, 'category_name': 'Snare', 'category_id': 'snare',
         'product_id': 'tac', 'date': 't2', 'played': 100},
        {'ord': 1, 'category_name': 'Tom', 'category_id': 'tom',
         'product_id': 'bom', 'date': 't2', 'played': 1}
    ]

    expected = [
        {'variation': nan, 'label': 'Trimestre 1', 'value': 0, 'groups': nan, 'type': nan,
         'order': nan},
        {'variation': inf, 'label': 'Clap', 'value': 10, 'groups': 'clap', 'type': 'parent',
         'order': nan},
        {'variation': inf, 'label': 'super clap', 'value': 10, 'groups': 'clap',
         'type': 'child', 'order': 1.0},
        {'variation': inf, 'label': 'Snare', 'value': 100.0, 'groups': 'snare',
         'type': 'parent', 'order': nan},
        {'variation': inf, 'label': 'tac', 'value': 100.0, 'groups': 'snare', 'type': 'child',
         'order': 1.0},
        {'variation': inf, 'label': 'Tom', 'value': 1.0, 'groups': 'tom', 'type': 'parent',
         'order': nan},
        {'variation': inf, 'label': 'bom', 'value': 1.0, 'groups': 'tom', 'type': 'child',
         'order': 1.0},
        {'variation': nan, 'label': 'Trimester 2', 'value': 111.0, 'groups': nan, 'type': nan,
         'order': nan}
    ]
    df = pd.DataFrame(data)
    df = waterfall(df, **kwargs)
    wa = [{k: v for k, v in zip(df.columns, row)} for row in df.values]
    assert wa[0].keys() == expected[0].keys()
    for i in range(len(expected)):
        testing.assert_equal(wa[i], expected[i])
Exemplo n.º 5
0
def test_waterfall_upperGroup_only(sample_data):
    kwargs = {
        'upperGroup': {
            'id': 'product_id',
            'groupsOrder': 'ord'
        },
        'date': 'date',
        'value': 'played',
        'start': {
            'label': 'Trimestre 1',
            'id': 't1'
        },
        'end': {
            'label': 'Trimester 2',
            'id': 't2'
        },
    }

    expected = [{
        'variation': nan,
        'label': 'Trimestre 1',
        'value': 14.0,
        'groups': 'Trimestre 1',
        'type': nan,
        'order': nan
    }, {
        'variation': inf,
        'label': 'bom',
        'value': 1.0,
        'groups': 'bom',
        'type': 'parent',
        'order': 1
    }, {
        'variation': -0.16666666666666666,
        'label': 'super clap',
        'value': -2.0,
        'groups': 'super clap',
        'type': 'parent',
        'order': 1
    }, {
        'variation': 99.0,
        'label': 'tac',
        'value': 99.0,
        'groups': 'tac',
        'type': 'parent',
        'order': 1
    }, {
        'variation': -1.000000,
        'label': 'clap clap',
        'value': -1.0,
        'groups': 'clap clap',
        'type': 'parent',
        'order': 10
    }, {
        'variation': nan,
        'label': 'Trimester 2',
        'value': 111.0,
        'groups': 'Trimester 2',
        'type': nan,
        'order': nan
    }]

    df = pd.DataFrame(sample_data)

    df = waterfall(df, **kwargs)
    wa = [{k: v for k, v in zip(df.columns, row)} for row in df.values]
    assert wa[0].keys() == expected[0].keys()
    for i in range(len(expected)):
        testing.assert_equal(wa[i], expected[i])
Exemplo n.º 6
0
def test_waterfall_filter_two_col(sample_filter_data):
    """ It should return value for waterfall """
    kwargs = {
        'upperGroup': {'id': 'product_id', 'groupsOrder': 'ord'},
        'filters': ['filterA', 'filterB'],
        'date': 'date',
        'value': 'played',
        'start': {'label': 'Trimestre 1', 'id': 't1'},
        'end': {'label': 'Trimester 2', 'id': 't2'},
    }

    expected = [
        # mickey - dodo
        {
            'groups': 'Trimestre 1',
            'label': 'Trimestre 1',
            'type': nan,
            'value': 30.0,
            'variation': nan,
            'order': nan,
            'filterA': 'mickey',
            'filterB': 'dodo',
        },
        {
            'groups': 'bom',
            'label': 'bom',
            'type': 'parent',
            'value': 50.0,
            'variation': inf,
            'order': 1.0,
            'filterA': 'mickey',
            'filterB': 'dodo',
        },
        {
            'groups': 'super clap',
            'label': 'super clap',
            'type': 'parent',
            'value': 2.0,
            'variation': 0.13333333333333333,
            'order': 1.0,
            'filterA': 'mickey',
            'filterB': 'dodo',
        },
        {
            'groups': 'tac',
            'label': 'tac',
            'type': 'parent',
            'value': 10.0,
            'variation': 1.0,
            'order': 1.0,
            'filterA': 'mickey',
            'filterB': 'dodo',
        },
        {
            'groups': 'clap clap',
            'label': 'clap clap',
            'type': 'parent',
            'value': -5.0,
            'variation': -1.0,
            'order': 10.0,
            'filterA': 'mickey',
            'filterB': 'dodo',
        },
        {
            'groups': 'Trimester 2',
            'label': 'Trimester 2',
            'type': nan,
            'value': 87.0,
            'variation': nan,
            'order': nan,
            'filterA': 'mickey',
            'filterB': 'dodo',
        },
        # donald - dodo
        {
            'groups': 'Trimestre 1',
            'label': 'Trimestre 1',
            'type': nan,
            'value': 14.0,
            'variation': nan,
            'order': nan,
            'filterA': 'donald',
            'filterB': 'dodo',
        },
        {
            'groups': 'bom',
            'label': 'bom',
            'type': 'parent',
            'value': 1.0,
            'variation': inf,
            'order': 1.0,
            'filterA': 'donald',
            'filterB': 'dodo',
        },
        {
            'groups': 'super clap',
            'label': 'super clap',
            'type': 'parent',
            'value': -2.0,
            'variation': -0.16666666666666666,
            'order': 1.0,
            'filterA': 'donald',
            'filterB': 'dodo',
        },
        {
            'groups': 'tac',
            'label': 'tac',
            'type': 'parent',
            'value': 99.0,
            'variation': 99.0,
            'order': 1.0,
            'filterA': 'donald',
            'filterB': 'dodo',
        },
        {
            'groups': 'clap clap',
            'label': 'clap clap',
            'type': 'parent',
            'value': -1.0,
            'variation': -1.0,
            'order': 10.0,
            'filterA': 'donald',
            'filterB': 'dodo',
        },
        {
            'groups': 'Trimester 2',
            'label': 'Trimester 2',
            'type': nan,
            'value': 111.0,
            'variation': nan,
            'order': nan,
            'filterA': 'donald',
            'filterB': 'dodo',
        },
        # mickey - dada
        {
            'groups': 'Trimestre 1',
            'label': 'Trimestre 1',
            'type': nan,
            'value': 30.0,
            'variation': nan,
            'order': nan,
            'filterA': 'mickey',
            'filterB': 'dada',
        },
        {
            'groups': 'bom',
            'label': 'bom',
            'type': 'parent',
            'value': 50.0,
            'variation': inf,
            'order': 1.0,
            'filterA': 'mickey',
            'filterB': 'dada',
        },
        {
            'groups': 'super clap',
            'label': 'super clap',
            'type': 'parent',
            'value': 2.0,
            'variation': 0.13333333333333333,
            'order': 1.0,
            'filterA': 'mickey',
            'filterB': 'dada',
        },
        {
            'groups': 'tac',
            'label': 'tac',
            'type': 'parent',
            'value': 10.0,
            'variation': 1.0,
            'order': 1.0,
            'filterA': 'mickey',
            'filterB': 'dada',
        },
        {
            'groups': 'clap clap',
            'label': 'clap clap',
            'type': 'parent',
            'value': -5.0,
            'variation': -1.0,
            'order': 10.0,
            'filterA': 'mickey',
            'filterB': 'dada',
        },
        {
            'groups': 'Trimester 2',
            'label': 'Trimester 2',
            'type': nan,
            'value': 87.0,
            'variation': nan,
            'order': nan,
            'filterA': 'mickey',
            'filterB': 'dada',
        },
        # donald - dada
        {
            'groups': 'Trimestre 1',
            'label': 'Trimestre 1',
            'type': nan,
            'value': 14.0,
            'variation': nan,
            'order': nan,
            'filterA': 'donald',
            'filterB': 'dada',
        },
        {
            'groups': 'bom',
            'label': 'bom',
            'type': 'parent',
            'value': 1.0,
            'variation': inf,
            'order': 1.0,
            'filterA': 'donald',
            'filterB': 'dada',
        },
        {
            'groups': 'super clap',
            'label': 'super clap',
            'type': 'parent',
            'value': -2.0,
            'variation': -0.16666666666666666,
            'order': 1.0,
            'filterA': 'donald',
            'filterB': 'dada',
        },
        {
            'groups': 'tac',
            'label': 'tac',
            'type': 'parent',
            'value': 99.0,
            'variation': 99.0,
            'order': 1.0,
            'filterA': 'donald',
            'filterB': 'dada',
        },
        {
            'groups': 'clap clap',
            'label': 'clap clap',
            'type': 'parent',
            'value': -1.0,
            'variation': -1.0,
            'order': 10.0,
            'filterA': 'donald',
            'filterB': 'dada',
        },
        {
            'groups': 'Trimester 2',
            'label': 'Trimester 2',
            'type': nan,
            'value': 111.0,
            'variation': nan,
            'order': nan,
            'filterA': 'donald',
            'filterB': 'dada',
        },
    ]

    df = pd.DataFrame(sample_filter_data)

    df = waterfall(df, **kwargs).copy()
    wa = [{k: v for k, v in zip(df.columns, row)} for row in df.values]

    assert set(wa[0].keys()) == set(expected[0].keys())
    for i in range(len(expected)):
        testing.assert_equal(wa[i], expected[i])