Beispiel #1
0
    def test_percentile_with_custom_key(self):
        object1 = create_object({
            'id': 1,
            'value': 0.1,
            'metric_custom_value': 0.1
        })
        object2 = create_object({
            'id': 2,
            'value': 0.2,
            'metric_custom_value': 0.1
        })
        object3 = create_object({
            'id': 3,
            'value': 0.4,
            'metric_custom_value': 0.3
        })
        object4 = create_object({
            'id': 4,
            'value': 0.4,
            'metric_custom_value': 0.4
        })

        data = [object1, object2, object3, object4]
        results = percentile(data, percentile_type='custom_value')

        expect(results).to.have.length(4)
        expect(object1.percentile_custom_value).to.eq(0)
        expect(object2.percentile_custom_value).to.eq(0)
        expect(object3.percentile_custom_value).to.eq(50)
        expect(object4.percentile_custom_value).to.eq(75)
Beispiel #2
0
    def test_percentile_with_missing_field(self):
        object1 = create_object({'id': 1, 'value': 0.1})
        object2 = create_object({'id': 2, 'value': 0.2})
        object3 = create_object({'id': 3, 'value': 0.4})

        data = [object1, object2, object3]
        results = percentile(data, percentile_type='custom_value')

        expect(results).to.have.length(3)
        expect(hasattr(object1, 'percentile_custom_value')).to.be.false()
        expect(hasattr(object2, 'percentile_custom_value')).to.be.false()
        expect(hasattr(object3, 'percentile_custom_value')).to.be.false()
Beispiel #3
0
    def test_percentile(self):
        object1 = create_object({'id': 1, 'metric_value': 0.1})
        object2 = create_object({'id': 2, 'metric_value': 0.2})
        object3 = create_object({'id': 3, 'metric_value': 0.4})
        object4 = create_object({'id': 4, 'metric_value': 0.5})

        data = [object2, object4, object3, object1]
        results = percentile(data, percentile_type='value')

        expect(results).to.have.length(4)
        expect(object1.percentile_value).to.eq(0)
        expect(object2.percentile_value).to.eq(25)
        expect(object3.percentile_value).to.eq(50)
        expect(object4.percentile_value).to.eq(75)
Beispiel #4
0
def top_percentile(year=now().year, percentile_groups=PERCENTILE_GROUPS):
    """ This is calculate top percentile of top_percentile_value
    :return: list of (officer_id, percentile_value)
    # """
    if any(t not in PERCENTILE_GROUPS for t in percentile_groups):
        raise ValueError("percentile_group is invalid")
    computed_data = []
    for percentile_group in percentile_groups:
        percentile_types = PERCENTILE_MAP[percentile_group][
            'percentile_funcs'].keys()
        new_data = _compute_metric(year, percentile_group)
        computed_data = merge_metric(computed_data, new_data, percentile_types)
        for percentile_type in percentile_types:
            computed_data = percentile(computed_data,
                                       percentile_type=percentile_type,
                                       decimal_places=4)

    return computed_data
 def _compute_police_district_percentiles(self):
     scores = Area.police_districts_with_allegation_per_capita()
     return {
         district.id: district.percentile_allegation_per_capita
         for district in percentile(scores, key='allegation_per_capita')
     }
Beispiel #6
0
 def test_percentile_with_no_data(self):
     expect(percentile([], 0)).to.be.eq([])