Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds NIBRS Endpoints for Regions #699

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crime_data/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ def output_csv(data, code, headers=None):
api.add_resource(crime_data.resources.meta.StateLK,'/lookup/state')

api.add_resource(crime_data.resources.nibrs_counts.NIBRSCountNational, '/nibrs/<string:offense_name>/<string:queryType>/national/<string:variable>')
api.add_resource(crime_data.resources.nibrs_counts.NIBRSCountRegion, '/nibrs/<string:offense_name>/<string:queryType>/regions/<string:region_name>/<string:variable>')
api.add_resource(crime_data.resources.nibrs_counts.NIBRSCountState, '/nibrs/<string:offense_name>/<string:queryType>/states/<string:state_abbr>/<string:variable>')
api.add_resource(crime_data.resources.nibrs_counts.NIBRSCountAgency, '/nibrs/<string:offense_name>/<string:queryType>/agency/<string:ori>/<string:variable>')

Expand Down
394 changes: 391 additions & 3 deletions crime_data/common/cdemodels.py

Large diffs are not rendered by default.

64 changes: 64 additions & 0 deletions crime_data/common/marshmallow_schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -1274,6 +1274,70 @@ class NIBRSStateOffenseCountSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSStateOffenseCount
ordered = True
class NIBRSRegionVictimDenormCountSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionVictimDenormCount
ordered = True

class NIBRSRegionVictimDenormSexSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionVictimDenormSex
ordered = True

class NIBRSRegionVictimDenormRaceSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionVictimDenormRace
ordered = True

class NIBRSRegionVictimDenormEthnicitySchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionVictimDenormEthnicity
ordered = True

class NIBRSRegionVictimDenormAgeSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionVictimDenormAge
ordered = True

class NIBRSRegionDenormVictimOffenderRelationshipSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionDenormVictimOffenderRelationship
ordered = True

class NIBRSRegionVictimDenormLocationSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionVictimDenormLocation
ordered = True

class NIBRSRegionOffenderDenormCountSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionOffenderDenormCount
ordered = True

class NIBRSRegionOffenderDenormSexSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionOffenderDenormSex
ordered = True

class NIBRSRegionOffenderDenormRaceSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionOffenderDenormRace
ordered = True

class NIBRSRegionOffenderDenormAgeSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionOffenderDenormAge
ordered = True

class NIBRSRegionOffenderDenormEthnicitySchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionOffenderDenormEthnicity
ordered = True

class NIBRSRegionOffenseCountSchema(ma.ModelSchema):
class Meta:
model = cdemodels.NIBRSRegionOffenseCount
ordered = True

class PoliceEmploymentDataNationSchema(ma.ModelSchema):
class Meta:
Expand Down
62 changes: 62 additions & 0 deletions crime_data/resources/nibrs_counts.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,68 @@ def get(self, args, variable,queryType, offense_name=None):
ui = creator.munge_set()
return self.without_metadata(ui, args)

class NIBRSCountRegion(CdeResource):
@use_args(ArgumentsSchema)
@cache(max_age=DEFAULT_MAX_AGE, public=True)
def get(self, args, variable,queryType,region_name=None, offense_name=None):
self.verify_api_key(args)
if queryType == 'victim' and variable == 'count':
self.set_schema(marshmallow_schemas.NIBRSRegionVictimDenormCountSchema(many=True))
query = cdemodels.NIBRSRegionVictimDenormCount.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_count_victim','')
elif queryType == 'victim' and variable == 'sex':
self.set_schema(marshmallow_schemas.NIBRSRegionVictimDenormSexSchema(many=True))
query = cdemodels.NIBRSRegionVictimDenormSex.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_sex_victim','')
elif queryType =='victim' and variable == 'race':
self.set_schema(marshmallow_schemas.NIBRSRegionVictimDenormRaceSchema(many=True))
query = cdemodels.NIBRSRegionVictimDenormRace.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_race_victim','')
elif queryType == 'victim' and variable == 'ethnicity':
self.set_schema(marshmallow_schemas.NIBRSRegionVictimDenormEthnicitySchema(many=True))
query = cdemodels.NIBRSRegionVictimDenormEthnicity.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_ethnicity_victim','')
elif queryType == 'victim' and variable == 'age':
self.set_schema(marshmallow_schemas.NIBRSRegionVictimDenormAgeSchema(many=True))
query = cdemodels.NIBRSRegionVictimDenormAge.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_age_victim','')
elif queryType == 'victim' and variable == 'location':
self.set_schema(marshmallow_schemas.NIBRSRegionVictimDenormLocationSchema(many=True))
query = cdemodels.NIBRSRegionVictimDenormLocation.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_location','')
elif queryType == 'offender' and variable == 'count':
self.set_schema(marshmallow_schemas.NIBRSRegionOffenderDenormCountSchema(many=True))
query = cdemodels.NIBRSRegionOffenderDenormCount.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_count_offender','')
elif queryType == 'offender' and variable == 'sex':
self.set_schema(marshmallow_schemas.NIBRSRegionOffenderDenormSexSchema(many=True))
query = cdemodels.NIBRSRegionOffenderDenormSex.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_sex_offender','')
elif queryType == 'offender' and variable == 'race':
self.set_schema(marshmallow_schemas.NIBRSRegionOffenderDenormRaceSchema(many=True))
query = cdemodels.NIBRSRegionOffenderDenormRace.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_race_offender','')
elif queryType == 'offender' and variable == 'ethnicity':
self.set_schema(marshmallow_schemas.NIBRSRegionOffenderDenormEthnicitySchema(many=True))
query = cdemodels.NIBRSRegionOffenderDenormEthnicity.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_ethnicity_offender','')
elif queryType == 'offender' and variable == 'age':
self.set_schema(marshmallow_schemas.NIBRSRegionOffenderDenormAgeSchema(many=True))
query = cdemodels.NIBRSRegionOffenderDenormAge.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_age_offender','')
elif queryType == 'offense' and variable == 'count':
self.set_schema(marshmallow_schemas.NIBRSRegionOffenseCountSchema(many=True))
query = cdemodels.NIBRSRegionOffenseCount.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_offense_count','')
elif queryType == 'victim' and variable == 'relationships':
self.set_schema(marshmallow_schemas.NIBRSRegionDenormVictimOffenderRelationshipSchema(many=True))
query = cdemodels.NIBRSRegionDenormVictimOffenderRelationship.get(region_name=region_name,offense_name=get_offenses(offense_name))
creator = munger.UIComponentCreator(query.all(),'nibrs_relatiopnship','')
else:
return self.with_metadata([], args)
ui = creator.munge_set()
return self.without_metadata(ui, args)


class NIBRSCountState(CdeResource):
@use_args(ArgumentsSchema)
Expand Down
70 changes: 69 additions & 1 deletion dba/create_new/offender_nibrs_rollup_mv.sql
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,75 @@ coalesce(sum(case when age_range = '90-99' then count end), 0) as range_90_99,
coalesce(sum(case when age_range = 'UNKNOWN' then count end), 0) as unknown
from public.nibrs_offender_count group by agency_id, ori, offense_name, data_year;


--Region
CREATE MATERIALIZED VIEW nibrs_region_denorm_offender_sex AS
select s.region_code as region_code,
r.region_name as region_name,
n.offense_name as offense_name,
n.data_year as data_year,
SUM(n.male_count) as male_count,
SUM(n.female_count) as female_count,
SUM(n.unknown_count) as unknown_count
from public.nibrs_state_denorm_offender_sex n, public.state_lk s,public.region_lk r
where s.region_code = r.region_code group by s.region_code,r.region_name, n.offense_name, n.data_year;


CREATE MATERIALIZED VIEW nibrs_region_denorm_offender_count AS
select s.region_code as region_code,
r.region_name as region_name,
n.offense_name as offense_name,
n.data_year as data_year,
sum(n.count) as count
from public.nibrs_offender_count n, public.state_lk s,public.region_lk r
where s.region_code = r.region_code group by s.region_code,r.region_name, n.offense_name, n.data_year;

CREATE MATERIALIZED VIEW nibrs_region_denorm_offender_race AS
select s.region_code as region_code,
r.region_name as region_name,
n.offense_name as offense_name,
n.data_year as data_year,
sum(n.asian) as asian,
sum(n.native_hawaiian) as native_hawaiian,
sum(n.black) as black,
sum(n.american_indian) as american_indian,
sum(n.unknown) as unknown,
sum(n.white) as white
from public.nibrs_state_denorm_offender_race n, public.state_lk s,public.region_lk r
where s.region_code = r.region_code
group by s.region_code,r.region_name, n.offense_name, n.data_year;

CREATE MATERIALIZED VIEW nibrs_region_denorm_offender_ethnicity AS
select s.region_code as region_code,
r.region_name as region_name,
n.offense_name as offense_name,
n.data_year as data_year,
sum(n.hispanic) as hispanic,
sum(n.multiple) as multiple,
sum(n.not_Hispanic) as not_Hispanic,
sum(n.unknown) as unknown
from public.nibrs_state_denorm_offender_ethnicity n, public.state_lk s,public.region_lk r
where s.region_code = r.region_code
group by s.region_code,r.region_name, n.offense_name, n.data_year;

CREATE MATERIALIZED VIEW nibrs_region_denorm_offender_age AS
select s.region_code as region_code,
r.region_name as region_name,
n.offense_name as offense_name,
n.data_year as data_year,
sum(n.range_0_9) as range_0_9,
sum(n.range_10_19) as range_10_19,
sum(n.range_20_29) as range_20_29,
sum(n.range_30_39) as range_30_39,
sum(n.range_40_49) as range_40_49,
sum(n.range_50_59) as range_50_59,
sum(n.range_60_69) as range_60_69,
sum(n.range_70_79) as range_70_79,
sum(n.range_80_89) as range_80_89,
sum(n.range_90_99) as range_90_99,
sum(n.unknown) as unknown
from public.nibrs_state_denorm_offender_age n, public.state_lk s,public.region_lk r
where s.region_code = r.region_code
group by s.region_code,r.region_name, n.offense_name, n.data_year;
UPDATE nibrs_offender_count
SET state_abbr = TRIM(state_abbr),ori = TRIM(ori),
offense_name = TRIM(offense_name),sex_code = TRIM(sex_code),
Expand Down
14 changes: 13 additions & 1 deletion dba/create_new/offense_counts_nibrs_rollup_mv.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ sum(offense_count) as offense_count
from public.nibrs_offense_count group by offense_name, data_year;


CREATE MATERIALIZED VIEW nibrs_state_denorm_offense_count AS
CREATE MATERIALIZED VIEW nibrs_region_denorm_offense_count AS
select state_id as state_id,
state_abbr as state_abbr,
offense_name as offense_name,
Expand All @@ -25,6 +25,18 @@ sum(incident_count) as incident_count,
sum(offense_count) as offense_count
from public.nibrs_offense_count group by agency_id, ori, offense_name, data_year;

--region
CREATE MATERIALIZED VIEW nibrs_region_denorm_offense_count AS
select s.region_code as region_code,
r.region_name as region_name,
n.offense_name as offense_name,
n.data_year as data_year,
sum(n.incident_count) as incident_count,
sum(n.offense_count) as offense_count
from public.nibrs_state_denorm_offense_count n, public.state_lk s,public.region_lk r
where s.region_code = r.region_code
group by s.region_code,r.region_name, n.offense_name, n.data_year;;

UPDATE nibrs_offense_count
SET state_abbr = TRIM(state_abbr),ori = TRIM(ori),
offense_name = TRIM(offense_name),
Loading