def import_crimes(self): session = get_session() table = get_datatable(self.table_id) model = table.get_model(self.geo_level) geo_code_attr = '%s_code' % self.geo_level with open(filepath) as f: reader = csv.DictReader(f, delimiter=",") for row in reader: args = {} for key, val in row.iteritems(): key = key.lower() if key == 'geo_code': args[geo_code_attr] = val elif key == 'total': args['total'] = int(val) else: args[key] = val item = model(**args) session.add(item) session.commit()
def get_election_data(geo_code, geo_level, election, session): party_data, total_valid_votes = get_stat_data( ['party'], geo_level, geo_code, session, table_dataset=election['dataset'], recode=lambda f, v: make_party_acronym(v), order_by='-total') results = { 'name': election['name'], 'party_distribution': party_data, } # voter registration and turnout table = get_datatable('voter_turnout_%s' % election['table_code']).table registered_voters, total_votes = session\ .query(table.c.registered_voters, table.c.total_votes) \ .filter(table.c.geo_level == geo_level) \ .filter(table.c.geo_code == geo_code) \ .one() results['registered_voters'] = { "name": "Number of registered voters", "values": {"this": registered_voters}, } results['average_turnout'] = { "name": "Of registered voters cast their vote", "values": {"this": round(float(total_votes) / registered_voters * 100, 2)}, "numerators": {"this": total_votes}, } return results
def get_election_data(geo_code, geo_level, election, session): party_data, total_valid_votes = get_stat_data( ["party"], geo_level, geo_code, session, table_name="party_votes_%s_%s" % (election["table_code"], geo_level), recode=lambda f, v: make_party_acronym(v), order_by="-total", ) # voter registration and turnout table = get_datatable("voter_turnout_%s" % election["table_code"]).table registered_voters, total_votes = ( session.query(table.c.registered_voters, table.c.total_votes) .filter(table.c.geo_level == geo_level) .filter(table.c.geo_code == geo_code) .one() ) return { "name": election["name"], "party_distribution": party_data, "registered_voters": {"name": "Number of registered voters", "values": {"this": registered_voters}}, "average_turnout": { "name": "Of registered voters cast their vote", "values": {"this": round(float(total_votes) / registered_voters * 100, 2)}, "numerators": {"this": total_votes}, }, }
def get_election_data(geo_code, geo_level, election, session): party_data, total_valid_votes = get_stat_data( ['party'], geo_level, geo_code, session, table_dataset=election['dataset'], recode=lambda f, v: make_party_acronym(v), order_by='-total') results = { 'name': election['name'], 'party_distribution': party_data, } # voter registration and turnout table = get_datatable('voter_turnout_%s' % election['table_code']) results['registered_voters'], _ = table.get_stat_data( geo_level, geo_code, 'registered_voters', percent=False, recode={'registered_voters': 'Number of registered voters'}) results['total_votes'], _ = table.get_stat_data( geo_level, geo_code, 'total_votes', percent=True, total='registered_voters', recode={'total_votes': 'Of registered voters cast their vote'}) return results
def get(self, request, *args, **kwargs): try: geo_ids = request.GET.get('geo_ids', 'country-ZA').split(',') data_geos, info_geos = self.get_geos(geo_ids) except LocationNotFound as e: return render_json_error(e.message, 404) try: table_ids = request.GET.get('table_ids', '').split(',') tables = [get_datatable(t) for t in table_ids] except KeyError as e: return render_json_error('Unknown table: %s' % e.message, 404) dataset = ', '.join(sorted(list(set(t.dataset_name for t in tables)))) years = ', '.join(sorted(list(set(t.year for t in tables)))) data = self.get_data(data_geos, tables) return render_json_to_response({ 'release': { 'name': dataset, 'years': years, }, 'tables': dict((t.id.upper(), t.as_dict()) for t in tables), 'data': data, 'geography': dict((g.full_geoid, g.as_dict()) for g in chain(data_geos, info_geos)), })
def get_crime_profile(geo_code, geo_level, session): child_crime, total = get_stat_data( ['crime'], geo_level, geo_code, session, only=['Neglect and ill-treatment of children'], percent=False) table = get_datatable(get_table_id(['crime'])) return { 'dataset': table.dataset_name, 'crime_against_children': { 'name': 'Crimes of neglect and ill-treatment of children in 2014', 'values': {'this': total}, 'metadata': {'universe': 'Crimes in 2014'}, }, }
def get(self, request, *args, **kwargs): try: self.geo_ids = request.GET.get('geo_ids', 'country-ZA').split(',') self.data_geos, self.info_geos = self.get_geos(self.geo_ids) except LocationNotFound as e: return render_json_error(e.message, 404) try: self.table_ids = request.GET.get('table_ids', '').split(',') self.tables = [get_datatable(t) for t in self.table_ids] except KeyError as e: return render_json_error('Unknown table: %s' % e.message, 404) if kwargs.get('action') == 'show': return self.show(request) if kwargs.get('action') == 'download': return self.download(request)
def get(self, request, *args, **kwargs): try: self.geo_ids = request.GET.get("geo_ids", "country-ZA").split(",") self.data_geos, self.info_geos = self.get_geos(self.geo_ids) except LocationNotFound as e: return render_json_error(e.message, 404) try: self.table_ids = request.GET.get("table_ids", "").split(",") self.tables = [get_datatable(t) for t in self.table_ids] except KeyError as e: return render_json_error("Unknown table: %s" % e.message, 404) if kwargs.get("action") == "show": return self.show(request) if kwargs.get("action") == "download": return self.download(request)
def get_election_data(geo_code, geo_level, election, session): party_data, total_valid_votes = get_stat_data( ['party'], geo_level, geo_code, session, table_name='party_votes_%s_%s' % (election['table_code'], geo_level), recode=lambda f, v: make_party_acronym(v), order_by='-total') # voter registration and turnout table = get_datatable('voter_turnout_%s' % election['table_code']).table registered_voters, total_votes = session\ .query(table.c.registered_voters, table.c.total_votes) \ .filter(table.c.geo_level == geo_level) \ .filter(table.c.geo_code == geo_code) \ .one() return { 'name': election['name'], 'party_distribution': party_data, 'registered_voters': { "name": "Number of registered voters", "values": { "this": registered_voters }, }, 'average_turnout': { "name": "Of registered voters cast their vote", "values": { "this": round(float(total_votes) / registered_voters * 100, 2) }, "numerators": { "this": total_votes }, } }
def get_crime_profile(geo_code, geo_level, session): child_crime, total = get_stat_data( ['crime'], geo_level, geo_code, session, only=['Neglect and ill-treatment of children'], percent=False) table = get_datatable(get_table_id(['crime'])) return { 'dataset': table.dataset_name, 'crime_against_children': { 'name': 'Crimes of neglect and ill-treatment of children in 2014', 'values': { 'this': total }, 'metadata': { 'universe': 'Crimes in 2014' }, }, }