def aggregate_gross_floor_area(self, yr_e, buildings): chart_data = [] y_display_map = { 0: '0-99k', 100000: '100-199k', 200000: '200k-299k', 300000: '300k-399k', 400000: '400-499k', 500000: '500-599k', 600000: '600-699k', 700000: '700-799k', 800000: '800-899k', 900000: '900-999k', 1000000: 'over 1,000k', } max_bin = max(y_display_map) # Group buildings in this year_ending group into ranges grouped_ranges = defaultdict(list) for b in buildings: area = b['y'] # make sure anything greater than the biggest bin gets put in # the biggest bin range_bin = min(max_bin, round_down_hundred_thousand(area)) grouped_ranges[range_bin].append(b) # Now iterate over range groups to make each chart item for range_floor, buildings_in_range in grouped_ranges.items(): chart_data.append({ 'x': median([b['x'] for b in buildings_in_range]), 'y': y_display_map[range_floor], 'yr_e': yr_e }) return chart_data
def aggregate_use_description(self, yr_e, buildings): # Group buildings in this year_ending group into uses chart_data = [] grouped_uses = defaultdict(list) for b in buildings: grouped_uses[str(b['y']).lower()].append(b) # Now iterate over use groups to make each chart item for use, buildings_in_uses in grouped_uses.items(): chart_data.append({ 'x': median([b['x'] for b in buildings_in_uses]), 'y': use.capitalize(), 'yr_e': yr_e }) return chart_data
def aggregate_year_built(self, yr_e, buildings): # Group buildings in this year_ending group into decades chart_data = [] grouped_decades = defaultdict(list) for b in buildings: grouped_decades['%s0' % str(b['y'])[:-1]].append(b) # Now iterate over decade groups to make each chart item for decade, buildings_in_decade in grouped_decades.items(): chart_data.append({ 'x': median( [b['x'] for b in buildings_in_decade] ), 'y': '%s-%s' % (decade, '%s9' % str(decade)[:-1]), # 1990-1999 'yr_e': yr_e }) return chart_data
def aggregate_year_built(self, yr_e, buildings): # Group buildings in this year_ending group into decades chart_data = [] grouped_decades = defaultdict(list) for b in buildings: grouped_decades['%s0' % str(b['y'])[:-1]].append(b) # Now iterate over decade groups to make each chart item for decade, buildings_in_decade in grouped_decades.items(): chart_data.append({ 'x': median([b['x'] for b in buildings_in_decade]), 'y': '%s-%s' % (decade, '%s9' % str(decade)[:-1]), # 1990-1999 'yr_e': yr_e }) return chart_data
def aggregate_gross_floor_area(self, yr_e, buildings): chart_data = [] y_display_map = { 0: '0-99k', 100000: '100-199k', 200000: '200k-299k', 300000: '300k-399k', 400000: '400-499k', 500000: '500-599k', 600000: '600-699k', 700000: '700-799k', 800000: '800-899k', 900000: '900-999k', 1000000: 'over 1,000k', } max_bin = max(y_display_map.keys()) # Group buildings in this year_ending group into ranges grouped_ranges = defaultdict(list) for b in buildings: area = b['y'] # make sure anything greater than the biggest bin gets put in # the biggest bin range_bin = min(max_bin, round_down_hundred_thousand(area)) grouped_ranges[range_bin].append(b) # Now iterate over range groups to make each chart item for range_floor, buildings_in_range in grouped_ranges.items(): chart_data.append({ 'x': median( [b['x'] for b in buildings_in_range] ), 'y': y_display_map[range_floor], 'yr_e': yr_e }) return chart_data