From 9d79555fbe38daef8cdcadccf5044f71ff06c977 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 12 Apr 2018 09:47:44 -0500 Subject: [PATCH 001/140] initial loader --- Makefile | 42 ++++++++++++++++++++++++++++++++++++++++++ NOTES.md | 7 +++++++ data/.gitkeep | 0 data/parking/.gitkeep | 0 dupes/.gitkeep | 0 sql/tables/tickets.sql | 21 +++++++++++++++++++++ 6 files changed, 70 insertions(+) create mode 100644 Makefile create mode 100644 NOTES.md create mode 100644 data/.gitkeep create mode 100644 data/parking/.gitkeep create mode 100644 dupes/.gitkeep create mode 100644 sql/tables/tickets.sql diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d8b1e6b --- /dev/null +++ b/Makefile @@ -0,0 +1,42 @@ +YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2017b +ILTICKETS_DB_URL=postgres://localhost/iltickets +ILTICKETS_DB_ROOT_URL=postgres://localhost +ILTICKETS_DB_NAME=iltickets + +.PHONY: download_parking + +download_parking : $(patsubst %, data/parking/A50951_%.csv, $(YEARS)) + + +define check_database + psql $(ILTICKETS_DB_URL) -c "select 1;" > /dev/null 2>&1 || +endef + + +define check_public_relation + psql $(ILTICKETS_URL) -c "\d public.$*" > /dev/null 2>&1 || +endef + + + +create_db : + $(check_database) psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" + + +create_table_% : sql/tables/%.sql + $(check_public_relation) psql $(ILTICKETS_DB_URL) -f $< + + +create_schema : + psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" + + +dupes/parking-%.csv : data/parking/A50951_%.csv + psql $(ILTICKETS_DB_URL) -c "CREATE TEMPORARY TABLE tmp_table_parking_$* AS SELECT * FROM public.tickets WITH NO DATA; COPY tmp_table_parking_$* FROM '$(CURDIR)/$<' with delimiter ',' csv header; INSERT INTO public.tickets SELECT * FROM tmp_table_parking_$* ON CONFLICT DO NOTHING; COPY (select ticket_number, count(ticket_number) as count from tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" + +# \copy public.tickets from '$(CURDIR)/$<' with delimiter ',' csv header;" && touch db/parking-$* + + +data/parking/A505951_%.csv : + aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$* data/parking/ + diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..76cbfd1 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,7 @@ +Years with dupes: + +* 2007 +* 2012 +* 2013 +* 2014 + diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/parking/.gitkeep b/data/parking/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/dupes/.gitkeep b/dupes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sql/tables/tickets.sql b/sql/tables/tickets.sql new file mode 100644 index 0000000..411aa4f --- /dev/null +++ b/sql/tables/tickets.sql @@ -0,0 +1,21 @@ +CREATE TABLE public.tickets ( + ticket_number bigint primary key, + violation_code character varying, + violation_description character varying, + issue_date timestamp without time zone, + violation_location character varying, + unit character varying, + unit_description character varying, + vehicle_make character varying, + license_plate_number character varying, + license_plate_state character varying, + license_plate_type character varying, + zipcode character varying, + ticket_queue character varying, + notice_level character varying, + fine_level1_amount double precision, + current_amount_due double precision, + total_payments double precision, + hearing_disposition character varying, + notice_number bigint +); From 5323d845ea74302d2e1bcd8b3e2f581d43dd4772 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 24 Apr 2018 12:44:00 -0700 Subject: [PATCH 002/140] initial commit --- .gitignore | 5 +++++ README.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2586cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +data/ +dupes/ +env/ +Ticket data/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..a054107 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# Illinois Ticket Data Loader + +## Requirements + +* GNU make +* ProPublica Illinois S3 bucket credentials + +## Configuration + +You must set some environment variables. + +``` +export ILTICKETS_DB_URL=postgres://localhost/iltickets +export ILTICKETS_DB_ROOT_URL=postgres://localhost +export ILTICKETS_DB_NAME=iltickets +``` + +(I know, they kind of violate DRY.) + +## Running + +### One shot + +``` +make all +``` + +### Reset the database + +``` +make drop_db +``` + +### Download + +``` +make download_parking +``` + +### Load into DB + +``` +make load_parking +``` + +### Remove files + +*Not implemented. You must do this manually.* + +## Duplicate handling + +To load, we first load the data into a `tmp` PostgreSQL schema (we can't use "real" temporary tables because of some limitations with how RDS handles the copy command, so to keep things portable use just use schemas). + +We then copy from the `tmp` schema to the `public` schema, ignoring duplicates. We currently keep the existing record and throw out the old one (`ON CONFLICT DO NOTHING`) but could replace. + +Dupes are written to the `dupes` directory as CSVs for each year where dupes were found. + + From 3449dc5d198069ed0c729103237cd58eea95544b Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Jun 2018 16:55:17 -0500 Subject: [PATCH 003/140] WIP makefile + benchmarks --- Makefile | 22 +++++++++++++--------- NOTES.md | 6 ++++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index d8b1e6b..572e0f9 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,10 @@ -YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2017b -ILTICKETS_DB_URL=postgres://localhost/iltickets -ILTICKETS_DB_ROOT_URL=postgres://localhost -ILTICKETS_DB_NAME=iltickets +YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 -.PHONY: download_parking +.PHONY: all download_parking load_parking +all: create_db create_table_tickets create_schema download_parking load_parking download_parking : $(patsubst %, data/parking/A50951_%.csv, $(YEARS)) +load_parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) define check_database @@ -31,12 +30,17 @@ create_schema : psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" -dupes/parking-%.csv : data/parking/A50951_%.csv - psql $(ILTICKETS_DB_URL) -c "CREATE TEMPORARY TABLE tmp_table_parking_$* AS SELECT * FROM public.tickets WITH NO DATA; COPY tmp_table_parking_$* FROM '$(CURDIR)/$<' with delimiter ',' csv header; INSERT INTO public.tickets SELECT * FROM tmp_table_parking_$* ON CONFLICT DO NOTHING; COPY (select ticket_number, count(ticket_number) as count from tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" +drop_db : create_db + psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* + -# \copy public.tickets from '$(CURDIR)/$<' with delimiter ',' csv header;" && touch db/parking-$* +dupes/parking-%.csv : data/parking/A50951_%.csv + psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.tickets WITH NO DATA;" + psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with delimiter ',' csv header;" + psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.tickets SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" + psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" + psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" data/parking/A505951_%.csv : aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$* data/parking/ - diff --git a/NOTES.md b/NOTES.md index 76cbfd1..5353b72 100644 --- a/NOTES.md +++ b/NOTES.md @@ -5,3 +5,9 @@ Years with dupes: * 2013 * 2014 + +Import on current medium DB instance: + +* Roughly ~1:01:00 on PP IL wifi + + From 0fb037a22a862676e84619621f45d92f811b26c8 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 13 Jun 2018 15:31:25 -0500 Subject: [PATCH 004/140] add some git keeps --- data/cameras/.gitkeep | 0 data/processed/.gitkeep | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/cameras/.gitkeep create mode 100644 data/processed/.gitkeep diff --git a/data/cameras/.gitkeep b/data/cameras/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/processed/.gitkeep b/data/processed/.gitkeep new file mode 100644 index 0000000..e69de29 From 13a2933a0856d5ae1f372b190325d5150cd4056d Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 13 Jun 2018 15:31:53 -0500 Subject: [PATCH 005/140] improve makefile and add camera data loader --- Makefile | 61 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 572e0f9..37e6e46 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,17 @@ -YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 +YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -.PHONY: all download_parking load_parking +.PHONY: all bootstrap_db download_parking load_parking download_cameras load_parking -all: create_db create_table_tickets create_schema download_parking load_parking -download_parking : $(patsubst %, data/parking/A50951_%.csv, $(YEARS)) +all: bootstrap_db load_parking load_cameras + +bootstrap_db : create_db create_table_parking create_table_cameras create_schema + +download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) load_parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) +download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) +load_cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) + define check_database psql $(ILTICKETS_DB_URL) -c "select 1;" > /dev/null 2>&1 || @@ -13,10 +19,19 @@ endef define check_public_relation - psql $(ILTICKETS_URL) -c "\d public.$*" > /dev/null 2>&1 || + psql $(ILTICKETS_DB_URL) -c "\d public.$*" > /dev/null 2>&1 || endef +define check_tmp_parking_relation + psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_parking_$*" > /dev/null 2>&1 || +endef + + +define check_tmp_cameras_relation + psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_cameras_$*" > /dev/null 2>&1 || +endef + create_db : $(check_database) psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" @@ -34,13 +49,39 @@ drop_db : create_db psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* -dupes/parking-%.csv : data/parking/A50951_%.csv - psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.tickets WITH NO DATA;" - psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with delimiter ',' csv header;" +data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt + python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.csv + + +data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.txt + python processors/clean_csv.py $< > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.csv + + +dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv + $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.tickets WITH NO DATA;" + psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.tickets SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" + touch $< + + +dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv + $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" + psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" + psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" + psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" + psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" + touch $< + +dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv + $(check_tmp_cameras_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" + psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_cameras_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" + psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.cameras SELECT * FROM tmp.tmp_table_cameras_$* ON CONFLICT DO NOTHING;" + psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_cameras_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" + psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_cameras_$*;" + touch $< -data/parking/A505951_%.csv : - aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$* data/parking/ +data/parking/A505951_PARK_Year_%.txt : + aws s3 sync s3://data.il.propublica.org/il-tickets/parking/$(@F) data/parking/$(@F) From d674643e334425a18ca074371c86885c264e43b3 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 13 Jun 2018 15:32:34 -0500 Subject: [PATCH 006/140] add sql definitions for parking and cameras, though the schema is identical --- sql/tables/{tickets.sql => cameras.sql} | 21 ++++++++++++--------- sql/tables/parking.sql | 24 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 9 deletions(-) rename sql/tables/{tickets.sql => cameras.sql} (79%) create mode 100644 sql/tables/parking.sql diff --git a/sql/tables/tickets.sql b/sql/tables/cameras.sql similarity index 79% rename from sql/tables/tickets.sql rename to sql/tables/cameras.sql index 411aa4f..6e308e3 100644 --- a/sql/tables/tickets.sql +++ b/sql/tables/cameras.sql @@ -1,21 +1,24 @@ -CREATE TABLE public.tickets ( +CREATE TABLE public.cameras ( ticket_number bigint primary key, - violation_code character varying, - violation_description character varying, issue_date timestamp without time zone, violation_location character varying, - unit character varying, - unit_description character varying, - vehicle_make character varying, license_plate_number character varying, license_plate_state character varying, license_plate_type character varying, zipcode character varying, - ticket_queue character varying, - notice_level character varying, + violation_code character varying, + violation_description character varying, + unit character varying, + unit_description character varying, + vehicle_make character varying, fine_level1_amount double precision, + fine_level2_amount double precision, current_amount_due double precision, total_payments double precision, + ticket_queue character varying, + ticket_queue_date timestamp without time zone, + notice_level character varying, hearing_disposition character varying, - notice_number bigint + notice_number bigint, + officer character varying ); diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql new file mode 100644 index 0000000..f829d57 --- /dev/null +++ b/sql/tables/parking.sql @@ -0,0 +1,24 @@ +CREATE TABLE public.parking ( + ticket_number bigint primary key, + issue_date timestamp without time zone, + violation_location character varying, + license_plate_number character varying, + license_plate_state character varying, + license_plate_type character varying, + zipcode character varying, + violation_code character varying, + violation_description character varying, + unit character varying, + unit_description character varying, + vehicle_make character varying, + fine_level1_amount double precision, + fine_level2_amount double precision, + current_amount_due double precision, + total_payments double precision, + ticket_queue character varying, + ticket_queue_date timestamp without time zone, + notice_level character varying, + hearing_disposition character varying, + notice_number bigint, + officer character varying +); From f94b7e64f0e6172639cac8c839d263747935dcbc Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 13 Jun 2018 15:32:50 -0500 Subject: [PATCH 007/140] add csv cleaning processor --- processors/clean_csv.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 processors/clean_csv.py diff --git a/processors/clean_csv.py b/processors/clean_csv.py new file mode 100644 index 0000000..0cd7128 --- /dev/null +++ b/processors/clean_csv.py @@ -0,0 +1,25 @@ +import csv +import multiprocessing +import sys + + +def clean(filename): + pool = multiprocessing.Pool(4) + writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) + with open(filename) as f: + reader = csv.reader(f, delimiter="$", quoting=csv.QUOTE_ALL, quotechar='"') + headers = next(reader) + writer.writerow(headers) + + for row in reader: + try: + if row[8].startswith('WINDOWS MISSING OR CRACKED BEYOND') or row[8].startswith('SUSPENSION MODIFIED BEYOND'): + fixed_cols = row[8].replace('"', '').split('$') + row = row[:8] + fixed_cols + row[9:] + + writer.writerow(row) + except IndexError: + print(row, file=sys.stderr) + +if __name__ == '__main__': + clean(sys.argv[1]) From 58490beb706a96d6e6a4288617dbc806c2afa009 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 13 Jun 2018 15:52:13 -0500 Subject: [PATCH 008/140] add dev env var file --- env/dev.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 env/dev.sh diff --git a/env/dev.sh b/env/dev.sh new file mode 100644 index 0000000..583c268 --- /dev/null +++ b/env/dev.sh @@ -0,0 +1,3 @@ +export ILTICKETS_DB_URL=postgres://localhost/iltickets +export ILTICKETS_DB_ROOT_URL=postgres://localhost +export ILTICKETS_DB_NAME=iltickets From 4a04340209fd9d738b1e0ce7e44998eccbc9ca15 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 13 Jun 2018 15:52:48 -0500 Subject: [PATCH 009/140] remove duplicate recipe and consolidate aliases --- Makefile | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 37e6e46..3ef3227 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,15 @@ YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -.PHONY: all bootstrap_db download_parking load_parking download_cameras load_parking +.PHONY: all bootstrap_db download_parking load_parking download_cameras load_parking load download all: bootstrap_db load_parking load_cameras bootstrap_db : create_db create_table_parking create_table_cameras create_schema +load: load_cameras load_parking + +download: download_cameras download_parking + download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) load_parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) @@ -66,15 +70,6 @@ dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv touch $< -dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv - $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" - psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" - psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" - psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" - psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" - touch $< - - dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv $(check_tmp_cameras_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_cameras_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" From 9759acc5ab53a85f01b2205f50375af54a61a99c Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 13 Jun 2018 15:53:06 -0500 Subject: [PATCH 010/140] update readme to account for consolidated aliases and some broken parts --- README.md | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a054107..bd09126 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ ## Requirements * GNU make +* Python 3 +* PostgreSQL * ProPublica Illinois S3 bucket credentials ## Configuration @@ -15,16 +17,30 @@ export ILTICKETS_DB_ROOT_URL=postgres://localhost export ILTICKETS_DB_NAME=iltickets ``` -(I know, they kind of violate DRY.) +(I know, they kind of violate DRY. This whole thing kind of violates DRY.) + +A default configuration can be imported by running: + +``` +source env/dev.sh +``` ## Running ### One shot +Slow version: + ``` make all ``` +Faster version (for machines with multiple cores): + +``` +make bootstrap_db && make -j 8 load +``` + ### Reset the database ``` @@ -33,20 +49,33 @@ make drop_db ### Download +**This is currently broken.** + ``` -make download_parking +make download ``` ### Load into DB +``` +make load +``` + +Or: + ``` make load_parking +make load_cameras ``` ### Remove files *Not implemented. You must do this manually.* +## Error handling + +Bad CSV rows are written to `data/processed/_err.csv`. These should only ever be the final "total" line from each file. + ## Duplicate handling To load, we first load the data into a `tmp` PostgreSQL schema (we can't use "real" temporary tables because of some limitations with how RDS handles the copy command, so to keep things portable use just use schemas). From 1c690cb487e1391511292744a1f93cbe548ef775 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 6 Jul 2018 08:44:25 -0700 Subject: [PATCH 011/140] add clean commands --- Makefile | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 3ef3227..4028409 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,11 @@ YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -.PHONY: all bootstrap_db download_parking load_parking download_cameras load_parking load download +.PHONY: all bootstrap_db download_parking load_parking download_cameras load_parking load download clean clean_files all: bootstrap_db load_parking load_cameras +clean: drop_db clean + bootstrap_db : create_db create_table_parking create_table_cameras create_schema load: load_cameras load_parking @@ -78,5 +80,9 @@ dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_cameras_$*;" touch $< -data/parking/A505951_PARK_Year_%.txt : - aws s3 sync s3://data.il.propublica.org/il-tickets/parking/$(@F) data/parking/$(@F) + +clean_files : + rm -Rf data/cameras/* + rm -Rf data/parking/* + rm -Rf data/processed/* + rm -Rf dupes/* From 481659738a85880335a4b5383cefebf6ab2ec0a6 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 6 Jul 2018 08:44:34 -0700 Subject: [PATCH 012/140] move up download command --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 4028409..5f06f6f 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,10 @@ drop_db : create_db psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* +data/parking/A505951_PARK_Year_%.txt : + aws s3 sync s3://data.il.propublica.org/il-tickets/parking/$(@F) data/parking/$(@F) + + data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.csv From d6a6e3e7a235c3d25a2cc848e8dab165e93786e9 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 6 Jul 2018 08:54:28 -0700 Subject: [PATCH 013/140] fix circular reference --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5f06f6f..b5188a4 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 all: bootstrap_db load_parking load_cameras -clean: drop_db clean +clean: drop_db clean_files bootstrap_db : create_db create_table_parking create_table_cameras create_schema From f2eb5d76c211042f04bf20e06921845681ea601f Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 6 Jul 2018 08:55:00 -0700 Subject: [PATCH 014/140] fix typo in download rule --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b5188a4..d03125b 100644 --- a/Makefile +++ b/Makefile @@ -55,8 +55,8 @@ drop_db : create_db psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* -data/parking/A505951_PARK_Year_%.txt : - aws s3 sync s3://data.il.propublica.org/il-tickets/parking/$(@F) data/parking/$(@F) +data/parking/A50951_PARK_Year_%.txt : + aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$(@F) $@ data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt From a47a428f931ad83b0d53f3db88e9620bea4fd4f0 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 6 Jul 2018 08:58:33 -0700 Subject: [PATCH 015/140] download command for cameras --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index d03125b..d112af4 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,10 @@ data/parking/A50951_PARK_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$(@F) $@ +data/cameras/A50951_AUCM_Year_%.txt : + aws s3 cp s3://data.il.propublica.org/il-tickets/cameras/$(@F) $@ + + data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.csv From d6cb83512bfd2f5975493e067193f24722f5798f Mon Sep 17 00:00:00 2001 From: kat-alo Date: Mon, 9 Jul 2018 12:58:35 -0500 Subject: [PATCH 016/140] change error file from .csv to .txt, closes #8 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index d112af4..67d4815 100644 --- a/Makefile +++ b/Makefile @@ -64,11 +64,11 @@ data/cameras/A50951_AUCM_Year_%.txt : data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt - python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.csv + python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.txt - python processors/clean_csv.py $< > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.csv + python processors/clean_csv.py $< > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.txt dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv From 774d81f5a532d22fd63b395f823faef9a8d8d60b Mon Sep 17 00:00:00 2001 From: kat-alo Date: Mon, 9 Jul 2018 12:59:49 -0500 Subject: [PATCH 017/140] change psql table name from 'tickets' to 'parking', closes #10 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 67d4815..eafc80e 100644 --- a/Makefile +++ b/Makefile @@ -72,9 +72,9 @@ data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.tx dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv - $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.tickets WITH NO DATA;" + $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" - psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.tickets SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" + psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" touch $< From a032a238c43cad5b0f4c0e22822eb2f98b7109d0 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 10 Jul 2018 23:50:08 -0700 Subject: [PATCH 018/140] add skeletal file --- processors/geocode_addresses.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 processors/geocode_addresses.py diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py new file mode 100644 index 0000000..5fe66fe --- /dev/null +++ b/processors/geocode_addresses.py @@ -0,0 +1,22 @@ +import geocoder +import records +import sys + +db = records.Database('postgres://localhost/iltickets') + +def process(offset): + rows = db.query(""" + select + distinct violation_location, zipcode + from parking + limit :offset + offset :offset + """, offset=offset) + import ipdb; ipdb.set_trace(); + # geocoder.google( + pass + + +if __name__ == '__main__': + offset = sys.argv[1] + process(offset) From 25ed78c8356482599199d2264cce8d0a4d71a441 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 11 Jul 2018 09:31:58 -0700 Subject: [PATCH 019/140] factor out cleaning functions --- processors/clean_csv.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 0cd7128..dcc14df 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -1,25 +1,42 @@ import csv -import multiprocessing +import re import sys +address_re = re.compile(r"(\d*)(\d{2})(\s)", re.IGNORECASE) + +def clean_commas(row): + if row[8].startswith('WINDOWS MISSING OR CRACKED BEYOND') or row[8].startswith('SUSPENSION MODIFIED BEYOND'): + fixed_cols = row[8].replace('"', '').split('$') + row = row[:8] + fixed_cols + row[9:] + return row + + +def clean_location(row): + address = "{2}, Chicago, IL".format(*row) + address = clean_address(address) + row.append(address) + return row + + +def clean_address(address): + return address_re.sub(r'\g<1>00\g<3>', address).lower() + def clean(filename): - pool = multiprocessing.Pool(4) writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) with open(filename) as f: - reader = csv.reader(f, delimiter="$", quoting=csv.QUOTE_ALL, quotechar='"') + reader = csv.reader(f, delimiter="$", quotechar='"') headers = next(reader) writer.writerow(headers) for row in reader: try: - if row[8].startswith('WINDOWS MISSING OR CRACKED BEYOND') or row[8].startswith('SUSPENSION MODIFIED BEYOND'): - fixed_cols = row[8].replace('"', '').split('$') - row = row[:8] + fixed_cols + row[9:] - + row = clean_commas(row) + row = clean_location(row) writer.writerow(row) except IndexError: print(row, file=sys.stderr) + if __name__ == '__main__': clean(sys.argv[1]) From 83f0d84f5448294b392d267c50db37eda24ae386 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 11 Jul 2018 09:32:33 -0700 Subject: [PATCH 020/140] simple offset-based geocoder script, plus related schema updates --- processors/geocode_addresses.py | 29 ++++++++++++++++++++--------- sql/tables/parking.sql | 3 ++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py index 5fe66fe..66735f9 100644 --- a/processors/geocode_addresses.py +++ b/processors/geocode_addresses.py @@ -1,22 +1,33 @@ import geocoder import records +import json import sys db = records.Database('postgres://localhost/iltickets') -def process(offset): +def process(limit, offset): rows = db.query(""" select - distinct violation_location, zipcode + distinct address from parking - limit :offset + where geocode is null + limit :limit offset :offset - """, offset=offset) - import ipdb; ipdb.set_trace(); - # geocoder.google( - pass + """, offset=offset, limit=limit) + + for row in rows: + geocode = geocoder.google(row['address']) + db.query(""" + update + parking + set + geocode=:geocode + where + address=:address + """, geocode=json.dumps(geocode.geojson), address=row['address']) if __name__ == '__main__': - offset = sys.argv[1] - process(offset) + limit = sys.argv[1] + offset = sys.argv[2] + process(limit, offset) diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql index f829d57..e313aad 100644 --- a/sql/tables/parking.sql +++ b/sql/tables/parking.sql @@ -20,5 +20,6 @@ CREATE TABLE public.parking ( notice_level character varying, hearing_disposition character varying, notice_number bigint, - officer character varying + officer character varying, + address character varying ); From 9a07337b20919ac6df9e41f68ba221b75a060dbf Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 11 Jul 2018 12:57:47 -0700 Subject: [PATCH 021/140] Add geocodes table --- sql/tables/geocodes.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 sql/tables/geocodes.sql diff --git a/sql/tables/geocodes.sql b/sql/tables/geocodes.sql new file mode 100644 index 0000000..e2814dc --- /dev/null +++ b/sql/tables/geocodes.sql @@ -0,0 +1,11 @@ +CREATE TABLE public.geocodes ( + id serial primary key, + address character varying, + geocoded_address character varying, + geocoded_lng double precision, + geocoded_lat double precision, + geocoded_city character varying, + geocoded_state character varying, + geocode_accuracy character varying, + geocode_geojson jsonb +) From 4620e378f7736d7a5d5d8f3e640182ed0417e6b2 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 11 Jul 2018 12:58:05 -0700 Subject: [PATCH 022/140] add geocode tale maker to makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index eafc80e..494f9a4 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ all: bootstrap_db load_parking load_cameras clean: drop_db clean_files -bootstrap_db : create_db create_table_parking create_table_cameras create_schema +bootstrap_db : create_db create_table_parking create_table_cameras create_table_geocodes create_schema load: load_cameras load_parking From 62950cb74ee95159fbd7b71de4ea8d0ecff62b17 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 11 Jul 2018 12:58:31 -0700 Subject: [PATCH 023/140] error trapping, insert into unique db, and more fields in geocode insertion --- processors/clean_csv.py | 2 +- processors/geocode_addresses.py | 58 ++++++++++++++++++++++++++------- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index dcc14df..01fd5f7 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -14,7 +14,7 @@ def clean_commas(row): def clean_location(row): address = "{2}, Chicago, IL".format(*row) address = clean_address(address) - row.append(address) + row.append(address.strip()) return row diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py index 66735f9..5824031 100644 --- a/processors/geocode_addresses.py +++ b/processors/geocode_addresses.py @@ -8,23 +8,59 @@ def process(limit, offset): rows = db.query(""" select - distinct address - from parking - where geocode is null + p.address as address + from + parking p + left join + geocodes g on + p.address = g.address + where + g.address is null + group by p.address + order by p.address limit :limit offset :offset """, offset=offset, limit=limit) for row in rows: geocode = geocoder.google(row['address']) - db.query(""" - update - parking - set - geocode=:geocode - where - address=:address - """, geocode=json.dumps(geocode.geojson), address=row['address']) + geojson = geocode.geojson + try: + db.query(""" + insert into + geocodes ( + address, + geocoded_address, + geocoded_lng, + geocoded_lat, + geocoded_city, + geocoded_state, + geocode_accuracy, + geocode_geojson + ) values ( + :address, + :geocoded_address, + :geocoded_lng, + :geocoded_lat, + :geocoded_city, + :geocoded_state, + :geocode_accuracy, + :geocode_geojson + ) + on conflict do nothing + """, + geocode_geojson=json.dumps(geocode.geojson), + geocoded_address=geojson['features'][0]['properties']['address'], + geocoded_lng=geojson['features'][0]['geometry']['coordinates'][0], + geocoded_lat=geojson['features'][0]['geometry']['coordinates'][1], + geocoded_city=geojson['features'][0]['properties']['city'], + geocoded_state=geojson['features'][0]['properties']['state'], + geocode_accuracy=geojson['features'][0]['properties']['accuracy'], + address=row['address'] + ) + print('geocoded %s -> %s' % (row['address'], geojson['features'][0]['properties']['address'])) + except: + print('error w %s' % row['address'], file=sys.stderr) if __name__ == '__main__': From 3e331e1e4459f3b7dc359de7473eea2a6d301966 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 11 Jul 2018 21:07:11 -0700 Subject: [PATCH 024/140] use ranges, not offsets and limits, in geocoder. also use update, TODO capture additional steps --- processors/geocode_addresses.py | 48 +++++++++++---------------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py index 5824031..9bf48f7 100644 --- a/processors/geocode_addresses.py +++ b/processors/geocode_addresses.py @@ -8,46 +8,30 @@ def process(limit, offset): rows = db.query(""" select - p.address as address + address from - parking p - left join - geocodes g on - p.address = g.address + geocodes where - g.address is null - group by p.address - order by p.address - limit :limit - offset :offset - """, offset=offset, limit=limit) + geocode_geojson is null and + id >= :min and + id < :max + """, min=offset, max=offset+limit) for row in rows: geocode = geocoder.google(row['address']) geojson = geocode.geojson try: db.query(""" - insert into - geocodes ( - address, - geocoded_address, - geocoded_lng, - geocoded_lat, - geocoded_city, - geocoded_state, - geocode_accuracy, - geocode_geojson - ) values ( - :address, - :geocoded_address, - :geocoded_lng, - :geocoded_lat, - :geocoded_city, - :geocoded_state, - :geocode_accuracy, - :geocode_geojson - ) - on conflict do nothing + update geocodes set + geocoded_address=:geocoded_address, + geocoded_lng=:geocoded_lng, + geocoded_lat=:geocoded_lat, + geocoded_city=:geocoded_city, + geocoded_state=:geocoded_state, + geocode_accuracy=:geocode_accuracy, + geocode_geojson=:geocode_geojson + where + address=:address """, geocode_geojson=json.dumps(geocode.geojson), geocoded_address=geojson['features'][0]['properties']['address'], From b4b4d5a10cf7db6c08d9d37d3dfa8141979a54f6 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 13 Jul 2018 08:10:21 -0700 Subject: [PATCH 025/140] add some views --- sql/views/community_area_city_stickers.sql | 39 ++++++++++++++++++++++ sql/views/geocode_accuracy.sql | 18 ++++++++++ 2 files changed, 57 insertions(+) create mode 100644 sql/views/community_area_city_stickers.sql create mode 100644 sql/views/geocode_accuracy.sql diff --git a/sql/views/community_area_city_stickers.sql b/sql/views/community_area_city_stickers.sql new file mode 100644 index 0000000..f6628b1 --- /dev/null +++ b/sql/views/community_area_city_stickers.sql @@ -0,0 +1,39 @@ +create or replace view community_area_city_stickers +as + select + c.community, + count(p.ticket_number) as tickets, + count(p.ticket_number) / s.tot_hh as per_household, + s.tot_pop as total_population, + s.tot_hh as total_households, + s.white, + s.white / s.tot_pop as white_pct, + s.black, + s.black / s.tot_pop as black_pct, + s.hisp, + s.hisp / s.tot_pop as hisp_pct, + s.asian, + s.asian / s.tot_pop as asian_pct, + s.other, + s.other / s.tot_pop as other_pct + from parking p + inner join + geocodes g on p.address = g.address + inner join + community_area_geography c on st_within(g.geom, c.wkb_geometry) + inner join + community_area_stats s on s.geog = c.community + where + (p.violation_code = '0964125' or + violation_code = '0964125B') + and g.geocode_accuracy != 'GEOMETRIC_CENTER' + group by + c.community, + s.tot_pop, + s.tot_hh, + s.white, + s.black, + s.hisp, + s.asian, + s.other + order by per_household desc; diff --git a/sql/views/geocode_accuracy.sql b/sql/views/geocode_accuracy.sql new file mode 100644 index 0000000..6053eaa --- /dev/null +++ b/sql/views/geocode_accuracy.sql @@ -0,0 +1,18 @@ +create or replace view geocode_accuracy +as + select + total, + chicago_total, + chicago_total::decimal / total as chicago_pct + from ( + select + count(p.ticket_number) as total, + count(p.ticket_number) FILTER ( + where g.geocode_geojson is not null and + g.geocode_accuracy != 'GEOMETRIC_CENTER' and + g.geocoded_city = 'Chicago' + ) as chicago_total + from parking p + join + geocodes g on p.address = g.address + ) summary; From bec3bc2e8478923f3f35c0f6eb43797269424245 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 13 Jul 2018 08:11:29 -0700 Subject: [PATCH 026/140] massive makefile overhaul more declarative naming, views + community area stats, index and schema creation. --- Makefile | 82 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 494f9a4..8dc7793 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,26 @@ -YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 +#YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 +YEARS = 2011 2012 2013 2014 2015 +TABLES = parking cameras geocodes community_area_stats +VIEWS = community_area_city_stickers geocode_accuracy +DATADIRS = analysis cameras geodata parking processed -.PHONY: all bootstrap_db download_parking load_parking download_cameras load_parking load download clean clean_files +.PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras -all: bootstrap_db load_parking load_cameras +all: bootstrap parking +clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) -clean: drop_db clean_files +bootstrap : create_db tables schema +tables = $(patsubst %, table_%, $(TABLES)) +indexes = $(patsubst %, index_%, $(TABLES)) +views = $(patsubst %, view_%, $(VIEWS)) +analysis = $(patsubst %, data/analysis/%.csv, $(VIEWS)) -bootstrap_db : create_db create_table_parking create_table_cameras create_table_geocodes create_schema - -load: load_cameras load_parking - -download: download_cameras download_parking +parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) +cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) +load: cameras parking download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) -load_parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) - download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) -load_cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) define check_database @@ -41,13 +45,22 @@ endef create_db : $(check_database) psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" + psql $(ILTICKETS_DB_URL) -c "CREATE EXTENSION postgis;" + + +table_% : sql/tables/%.sql + $(check_public_relation) psql $(ILTICKETS_DB_URL) -f $< + +view_% : sql/views/%.sql + $(check_public_relation) psql $(ILTICKETS_DB_URL) -f $< -create_table_% : sql/tables/%.sql - $(check_public_relation) psql $(ILTICKETS_DB_URL) -f $< +index_% : + $(check_public_relation) psql $(ILTICKETS_DB_URL) -c "create index on $* (address);" -create_schema : + +schema : psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" @@ -55,6 +68,38 @@ drop_db : create_db psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* +load_geocodes : load_parking + psql $(ILTICKETS_DB_URL) -c "insert into geocodes (address) select address from parking group by address on conflict do nothing;" + + +data/geodata/community-areas.json : + curl "https://data.cityofchicago.org/api/geospatial/cauq-8yn6?method=export&format=GeoJSON" > $@ + + +data/geodata/community_area_stats.csv : + curl "https://datahub.cmap.illinois.gov/dataset/1d2dd970-f0a6-4736-96a1-3caeb431f5e4/resource/8c4e096e-c90c-4bef-9cf1-9028d094296e/download/ReferenceCCA20112015.csv" | sed -e "s:n/a::g" > data/geodata/community_area_stats.csv + + +data/analysis/%.csv : view_% + psql $(ILTICKETS_DB_URL) -c "\copy (select * from public.$*) TO '$(CURDIR)/data/analysis/$*.csv' with (delimiter ',', format csv, header);" + + +load_geodata_% : + psql $(ILTICKETS_DB_URL) -c "\copy public.$* FROM '$(CURDIR)/data/geodata/$*.csv' with (delimiter ',', format csv, header);" + + +load_community_areas : data/geodata/community_area_stats.csv + ogr2ogr -f "PostgreSQL" PG:"dbname=iltickets" "data/geodata/community-areas.json" -nln community_area_geography -overwrite + + +clean_community_areas : + psql $(ILTICKETS_DB_URL) -c "update community_area_stats set "GEOG"=upper("GEOG");" + + +sql/tables/community_area_stats.sql : data/geodata/community_area_stats.csv + csvsql $< > $@ + + data/parking/A50951_PARK_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$(@F) $@ @@ -89,8 +134,5 @@ dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv touch $< -clean_files : - rm -Rf data/cameras/* - rm -Rf data/parking/* - rm -Rf data/processed/* - rm -Rf dupes/* +clean_% : + rm -Rf data/$*/* From 6adaf651e99ef13800e43a03bcd8790162c320df Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 13 Jul 2018 08:17:40 -0700 Subject: [PATCH 027/140] match addresses on ID when inserting, better guardrails on grabbing elements of geocoded data ID matching is just more efficient since IDs are indexed and short. Some geocode's geojson objects don't have city, etc, so handled that was well. --- processors/geocode_addresses.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py index 9bf48f7..c302eb2 100644 --- a/processors/geocode_addresses.py +++ b/processors/geocode_addresses.py @@ -3,11 +3,13 @@ import json import sys + db = records.Database('postgres://localhost/iltickets') def process(limit, offset): rows = db.query(""" select + id, address from geocodes @@ -20,6 +22,7 @@ def process(limit, offset): for row in rows: geocode = geocoder.google(row['address']) geojson = geocode.geojson + try: db.query(""" update geocodes set @@ -31,20 +34,20 @@ def process(limit, offset): geocode_accuracy=:geocode_accuracy, geocode_geojson=:geocode_geojson where - address=:address + id=:id """, geocode_geojson=json.dumps(geocode.geojson), geocoded_address=geojson['features'][0]['properties']['address'], geocoded_lng=geojson['features'][0]['geometry']['coordinates'][0], geocoded_lat=geojson['features'][0]['geometry']['coordinates'][1], - geocoded_city=geojson['features'][0]['properties']['city'], - geocoded_state=geojson['features'][0]['properties']['state'], - geocode_accuracy=geojson['features'][0]['properties']['accuracy'], - address=row['address'] + geocoded_city=geojson['features'][0]['properties'].get('city'), + geocoded_state=geojson['features'][0]['properties'].get('state'), + geocode_accuracy=geojson['features'][0]['properties'].get('accuracy'), + id=row['id'] ) - print('geocoded %s -> %s' % (row['address'], geojson['features'][0]['properties']['address'])) + print('geocoded %s -> %s (id# %s)' % (row['address'], geojson['features'][0]['properties']['address'], row['id'])) except: - print('error w %s' % row['address'], file=sys.stderr) + print('error w/ %s' % row['address'], file=sys.stderr) if __name__ == '__main__': From c4c155827771e094b0b227aa1c0d0318744d82d5 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 13 Jul 2018 08:18:36 -0700 Subject: [PATCH 028/140] keep the dumps directory --- data/dumps/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/dumps/.gitkeep diff --git a/data/dumps/.gitkeep b/data/dumps/.gitkeep new file mode 100644 index 0000000..e69de29 From 4ac288f55f95da051192bcb16ac9126eeb812bf2 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 13 Jul 2018 08:19:17 -0700 Subject: [PATCH 029/140] table definition for community area stats from CMAP --- sql/tables/community_area_stats.sql | 157 ++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 sql/tables/community_area_stats.sql diff --git a/sql/tables/community_area_stats.sql b/sql/tables/community_area_stats.sql new file mode 100644 index 0000000..d0c876e --- /dev/null +++ b/sql/tables/community_area_stats.sql @@ -0,0 +1,157 @@ +create table community_area_stats ( + geog varchar not null, + pop_2000 decimal not null, + pop_2010 decimal not null, + pop_change decimal not null, + tot_pop decimal not null, + und19 decimal not null, + a20_34 decimal not null, + a35_49 decimal not null, + a50_64 decimal not null, + a65_79 decimal not null, + ov80 decimal not null, + med_age decimal not null, + white decimal not null, + hisp decimal not null, + black decimal not null, + asian decimal not null, + other decimal not null, + pop_hh decimal not null, + pop_16ov decimal not null, + in_lbfrc decimal not null, + emp decimal not null, + unemp decimal not null, + not_in_lbfrc decimal not null, + work_at_home decimal not null, + tot_comm decimal not null, + drove_al decimal not null, + carpool decimal not null, + transit decimal not null, + walk_bike decimal not null, + comm_other decimal not null, + pop_25ov decimal not null, + hs decimal not null, + bach decimal not null, + inc_lt_25k decimal not null, + inc_25_50k decimal not null, + inc_50_75k decimal not null, + inc_75_100k decimal not null, + inc_100_150k decimal not null, + inc_gt_150 decimal not null, + medinc decimal not null, + tot_hh decimal not null, + own_occ_hu decimal not null, + rent_occ_hu decimal not null, + vac_hu decimal not null, + hu_tot decimal not null, + hu_sng_det decimal not null, + hu_sng_att decimal not null, + hu_2un decimal not null, + hu_3_4un decimal not null, + hu_gt_5un decimal not null, + med_rooms decimal not null, + ha_aft2000 decimal not null, + ha_70_00 decimal not null, + ha_40_70 decimal not null, + ha_bef1940 decimal not null, + med_ha decimal not null, + br_0_1 decimal not null, + br_2 decimal not null, + br_3 decimal not null, + br_4 decimal not null, + br_5 decimal not null, + hv_lt_150k decimal not null, + hv_150_300k decimal not null, + hv_300_500k decimal not null, + hv_gt_500k decimal not null, + med_hv decimal not null, + tot_emp_res decimal not null, + res_naics1_type varchar not null, + res_naics2_type varchar not null, + res_naics3_type varchar not null, + res_naics4_type varchar not null, + res_naics5_type varchar not null, + res_naics1_count decimal not null, + res_naics2_count decimal not null, + res_naics3_count decimal not null, + res_naics4_count decimal not null, + res_naics5_count decimal not null, + tot_emp_work decimal not null, + work_naics1_type varchar not null, + work_naics2_type varchar not null, + work_naics3_type varchar not null, + work_naics4_type varchar not null, + work_naics5_type varchar not null, + work_naics1_count decimal not null, + work_naics2_count decimal not null, + work_naics3_count decimal not null, + work_naics4_count decimal not null, + work_naics5_count decimal not null, + res_city1_type varchar not null, + res_city2_type varchar not null, + res_city3_type varchar not null, + res_city4_type varchar not null, + res_city5_type varchar not null, + res_city1_count decimal not null, + res_city2_count decimal not null, + res_city3_count decimal not null, + res_city4_count decimal not null, + res_city5_count decimal not null, + work_city1_type varchar not null, + work_city2_type varchar not null, + work_city3_type varchar not null, + work_city4_type varchar not null, + work_city5_type varchar not null, + work_city1_count decimal not null, + work_city2_count decimal not null, + work_city3_count decimal not null, + work_city4_count decimal not null, + work_city5_count decimal not null, + medincfam_hcost boolean, + medincfam_tcost boolean, + medincfam_htcost boolean, + ret_hcost boolean, + ret_tcost boolean, + ret_htcost boolean, + spfam_hcost boolean, + spfam_tcost boolean, + spfam_htcost boolean, + modincfam_hcost boolean, + modincfam_tcost boolean, + modincfam_htcost boolean, + ides_emp boolean, + emp_change boolean, + pct_change boolean, + avg_vmt decimal not null, + ret_sales boolean, + res_eav boolean, + cmrcl_eav boolean, + ind_eav boolean, + rail_eav boolean, + farm_eav boolean, + min_eav boolean, + tot_eav boolean, + walkscore boolean, + open_space_per_1000 decimal not null, + tot_acres decimal not null, + sf decimal not null, + sfperc decimal not null, + mf decimal not null, + mfperc decimal not null, + mix decimal, + mixperc decimal, + comm decimal not null, + commperc decimal not null, + inst decimal not null, + instperc decimal not null, + ind decimal, + indperc decimal, + trans decimal not null, + transperc decimal not null, + ag decimal, + agperc decimal, + open decimal not null, + openperc decimal not null, + vacant decimal not null, + vacperc decimal not null +); From 5447790a836bf305899b8a996d9b93cfb9738cdb Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 13 Jul 2018 09:46:09 -0700 Subject: [PATCH 030/140] add amusingly embarassing note to readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bd09126..533e120 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,10 @@ Slow version: make all ``` -Faster version (for machines with multiple cores): +Faster, slightly embarassing version (for machines with multiple cores): ``` -make bootstrap_db && make -j 8 load +make bootstrap tables load_geocodes load_geodata_community_area_stats load_community_areas && make -j 8 parking && make indexes views analysis ``` ### Reset the database From 018cbc449e3a02df607b3f5a4b31c40ec86265d7 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Mon, 16 Jul 2018 10:42:53 -0500 Subject: [PATCH 031/140] corrects = and :, cuts drop_db dependency on create_db, corrects reference to URL when DB_NAME needed, closes #22 --- Makefile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 8dc7793..8235b69 100644 --- a/Makefile +++ b/Makefile @@ -10,10 +10,10 @@ all: bootstrap parking clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) bootstrap : create_db tables schema -tables = $(patsubst %, table_%, $(TABLES)) -indexes = $(patsubst %, index_%, $(TABLES)) -views = $(patsubst %, view_%, $(VIEWS)) -analysis = $(patsubst %, data/analysis/%.csv, $(VIEWS)) +tables : $(patsubst %, table_%, $(TABLES)) +indexes : $(patsubst %, index_%, $(TABLES)) +views : $(patsubst %, view_%, $(VIEWS)) +analysis : $(patsubst %, data/analysis/%.csv, $(VIEWS)) parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) @@ -45,7 +45,7 @@ endef create_db : $(check_database) psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" - psql $(ILTICKETS_DB_URL) -c "CREATE EXTENSION postgis;" + psql $(ILTICKETS_DB_NAME) -c "CREATE EXTENSION postgis;" table_% : sql/tables/%.sql @@ -61,10 +61,10 @@ index_% : schema : - psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" + psql $(ILTICKETS_DB_NAME) -c "CREATE SCHEMA tmp;" -drop_db : create_db +drop_db : psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* From 94d7e211e327275a30cc767b0f2a6f7c8dae2f88 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Mon, 16 Jul 2018 10:47:05 -0500 Subject: [PATCH 032/140] adds csvkit requirement to README closes #23 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 533e120..02354d1 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ * Python 3 * PostgreSQL * ProPublica Illinois S3 bucket credentials +* CSVKit (with Homebrew already installed, run: `pip install csvkit`) ## Configuration From 8bd83a20362234b829a67f716e244cb3ca8157e6 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 18 Jul 2018 17:17:30 -0500 Subject: [PATCH 033/140] replicate katlyn's makefile fixes --- Makefile | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 8dc7793..b79d48e 100644 --- a/Makefile +++ b/Makefile @@ -6,14 +6,14 @@ DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras -all: bootstrap parking +all: bootstrap tables load_geocodes load_geodata_community_area_stats load_community_areas parking indexes views analysis clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) bootstrap : create_db tables schema -tables = $(patsubst %, table_%, $(TABLES)) -indexes = $(patsubst %, index_%, $(TABLES)) -views = $(patsubst %, view_%, $(VIEWS)) -analysis = $(patsubst %, data/analysis/%.csv, $(VIEWS)) +tables : $(patsubst %, table_%, $(TABLES)) +indexes : $(patsubst %, index_%, $(TABLES)) +views : $(patsubst %, view_%, $(VIEWS)) +analysis : $(patsubst %, data/analysis/%.csv, $(VIEWS)) parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) @@ -64,14 +64,10 @@ schema : psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" -drop_db : create_db +drop_db : psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* -load_geocodes : load_parking - psql $(ILTICKETS_DB_URL) -c "insert into geocodes (address) select address from parking group by address on conflict do nothing;" - - data/geodata/community-areas.json : curl "https://data.cityofchicago.org/api/geospatial/cauq-8yn6?method=export&format=GeoJSON" > $@ From aff7213534e24c353328217d69398dc72343496f Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 18 Jul 2018 17:18:00 -0500 Subject: [PATCH 034/140] correct dependency in load_community_areas make command --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b79d48e..3be8d6c 100644 --- a/Makefile +++ b/Makefile @@ -84,8 +84,8 @@ load_geodata_% : psql $(ILTICKETS_DB_URL) -c "\copy public.$* FROM '$(CURDIR)/data/geodata/$*.csv' with (delimiter ',', format csv, header);" -load_community_areas : data/geodata/community_area_stats.csv - ogr2ogr -f "PostgreSQL" PG:"dbname=iltickets" "data/geodata/community-areas.json" -nln community_area_geography -overwrite +load_community_areas : data/geodata/community-areas.json + ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/community-areas.json" -nln community_area_geography -overwrite clean_community_areas : From f482c25c63f0e8df284ba73b64b3ceca86192386 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 18 Jul 2018 17:20:18 -0500 Subject: [PATCH 035/140] fix community area matching, closes #25 o'hare and 'the loop' were causing problems, this rewrites them to correctly match across datasets --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3be8d6c..e3cbd37 100644 --- a/Makefile +++ b/Makefile @@ -89,7 +89,7 @@ load_community_areas : data/geodata/community-areas.json clean_community_areas : - psql $(ILTICKETS_DB_URL) -c "update community_area_stats set "GEOG"=upper("GEOG");" + psql $(ILTICKETS_DB_URL) -c "update community_area_stats set "GEOG"=upper("GEOG"); update community_area_stats set geog = 'OHARE' where geog = 'O''HARE'; update community_area_stats set geog = 'LOOP' where geog = 'THE LOOP';" sql/tables/community_area_stats.sql : data/geodata/community_area_stats.csv From 55fb3d956cbf4ec97f44abb15b45839da4c1e646 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 20 Jul 2018 11:04:26 -0500 Subject: [PATCH 036/140] load dump file --- Makefile | 7 +++++++ sql/views/community_area_city_stickers.sql | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e3cbd37..11090c6 100644 --- a/Makefile +++ b/Makefile @@ -104,6 +104,13 @@ data/cameras/A50951_AUCM_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/cameras/$(@F) $@ +data/dumps/geocodes.dump : + aws s3 cp s3://data.il.propublica.org/il-tickets/dumps/geocodes.dump data/dumps/geocodes.dump + + +load_geocodes : data/dumps/geocodes.dump table_geocodes + pg_restore -d "$(ILTICKETS_DB_URL)" --clean -t geocodes data/dumps/geocodes.dump + data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt diff --git a/sql/views/community_area_city_stickers.sql b/sql/views/community_area_city_stickers.sql index f6628b1..684070e 100644 --- a/sql/views/community_area_city_stickers.sql +++ b/sql/views/community_area_city_stickers.sql @@ -25,7 +25,7 @@ as community_area_stats s on s.geog = c.community where (p.violation_code = '0964125' or - violation_code = '0964125B') + p.violation_code = '0964125B') and g.geocode_accuracy != 'GEOMETRIC_CENTER' group by c.community, From fabde92115d878c735ce7108216a3f9c7cfc5c36 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 20 Jul 2018 14:37:50 -0500 Subject: [PATCH 037/140] ignore permissions from dump file, closes #30 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 11090c6..b5027d5 100644 --- a/Makefile +++ b/Makefile @@ -109,7 +109,7 @@ data/dumps/geocodes.dump : load_geocodes : data/dumps/geocodes.dump table_geocodes - pg_restore -d "$(ILTICKETS_DB_URL)" --clean -t geocodes data/dumps/geocodes.dump + pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes.dump data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt From 9f4498fbca9267a54b7d3c10585202697dea7f57 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 20 Jul 2018 14:38:54 -0500 Subject: [PATCH 038/140] add db string to environment --- env/dev.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/env/dev.sh b/env/dev.sh index 583c268..db67905 100644 --- a/env/dev.sh +++ b/env/dev.sh @@ -1,3 +1,4 @@ export ILTICKETS_DB_URL=postgres://localhost/iltickets export ILTICKETS_DB_ROOT_URL=postgres://localhost export ILTICKETS_DB_NAME=iltickets +export ILTICKETS_DB_STRING="dbname=iltickets" From a9a5c98675a0cf935ad925c46d7af8d04535b259 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 10:38:05 -0500 Subject: [PATCH 039/140] refactor make top level command signatures consolidate 'bootstrap' and 'geo' into make targets --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b5027d5..d639ca1 100644 --- a/Makefile +++ b/Makefile @@ -6,10 +6,11 @@ DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras -all: bootstrap tables load_geocodes load_geodata_community_area_stats load_community_areas parking indexes views analysis +all: bootstrap geo parking indexes views analysis clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) bootstrap : create_db tables schema +geo: load_geocodes load_geodata_community_area_stats load_community_areas clean_community_areas tables : $(patsubst %, table_%, $(TABLES)) indexes : $(patsubst %, index_%, $(TABLES)) views : $(patsubst %, view_%, $(VIEWS)) From 08d9f69e8912b818becf2fc648a34d2cc3bc6eac Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 10:46:00 -0500 Subject: [PATCH 040/140] remove csvsql schema generation from makefile and turn into a note in the readme3 --- Makefile | 4 ---- README.md | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index d639ca1..4edb8fe 100644 --- a/Makefile +++ b/Makefile @@ -93,10 +93,6 @@ clean_community_areas : psql $(ILTICKETS_DB_URL) -c "update community_area_stats set "GEOG"=upper("GEOG"); update community_area_stats set geog = 'OHARE' where geog = 'O''HARE'; update community_area_stats set geog = 'LOOP' where geog = 'THE LOOP';" -sql/tables/community_area_stats.sql : data/geodata/community_area_stats.csv - csvsql $< > $@ - - data/parking/A50951_PARK_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$(@F) $@ diff --git a/README.md b/README.md index 533e120..6005abe 100644 --- a/README.md +++ b/README.md @@ -84,4 +84,8 @@ We then copy from the `tmp` schema to the `public` schema, ignoring duplicates. Dupes are written to the `dupes` directory as CSVs for each year where dupes were found. +## Notes + +* `sql/tables/community_area_stats.sql` was generated with CSVKit's `csvsql` command like so: `csvsql data/geodate/community_area_stats.csv > sql/tables/community_area_stats.sql` + From e8aa465b477ad2128a6bd7a3e3005d6db1c3044e Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 10:56:41 -0500 Subject: [PATCH 041/140] clean up restore permissions, change filename for now --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4edb8fe..16d6616 100644 --- a/Makefile +++ b/Makefile @@ -101,12 +101,12 @@ data/cameras/A50951_AUCM_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/cameras/$(@F) $@ -data/dumps/geocodes.dump : - aws s3 cp s3://data.il.propublica.org/il-tickets/dumps/geocodes.dump data/dumps/geocodes.dump +data/dumps/geocodes-city-stickers.dump : + aws s3 cp s3://data.il.propublica.org/il-tickets/dumps/geocodes-city-stickers.dump data/dumps/geocodes-city-stickers.dump -load_geocodes : data/dumps/geocodes.dump table_geocodes - pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes.dump +load_geocodes : data/dumps/geocodes-city-stickers.dump table_geocodes + pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt From af0ff118eab59903388c097c0d1f54b34a057acc Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 10:57:05 -0500 Subject: [PATCH 042/140] remove irrelevant notes file --- NOTES.md | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 NOTES.md diff --git a/NOTES.md b/NOTES.md deleted file mode 100644 index 5353b72..0000000 --- a/NOTES.md +++ /dev/null @@ -1,13 +0,0 @@ -Years with dupes: - -* 2007 -* 2012 -* 2013 -* 2014 - - -Import on current medium DB instance: - -* Roughly ~1:01:00 on PP IL wifi - - From fe65910579207958505fa8b169a73a007d6c6fd7 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 10:58:53 -0500 Subject: [PATCH 043/140] flip order of explanation about config --- README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6005abe..66c7cba 100644 --- a/README.md +++ b/README.md @@ -9,22 +9,23 @@ ## Configuration -You must set some environment variables. +A default configuration can be imported by running: ``` -export ILTICKETS_DB_URL=postgres://localhost/iltickets -export ILTICKETS_DB_ROOT_URL=postgres://localhost -export ILTICKETS_DB_NAME=iltickets +source env/dev.sh ``` -(I know, they kind of violate DRY. This whole thing kind of violates DRY.) - -A default configuration can be imported by running: +Or you can set environment variables: ``` -source env/dev.sh +export ILTICKETS_DB_URL=postgres://localhost/iltickets +export ILTICKETS_DB_ROOT_URL=postgres://localhost +export ILTICKETS_DB_NAME=iltickets +export ILTICKETS_DB_STRING="dbname=iltickets" ``` +This variables are a bit repetitive. Of note is `ILTICKETS_DB_STRING`, which is the [`ogr2ogr`](http://www.gdal.org/drv_pg.html) connection string. + ## Running ### One shot From 7e9aac2f956ee8a1e26e37ab795475812e3b9dfd Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 10:59:11 -0500 Subject: [PATCH 044/140] reflect latest make targets --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 66c7cba..060beea 100644 --- a/README.md +++ b/README.md @@ -36,12 +36,14 @@ Slow version: make all ``` -Faster, slightly embarassing version (for machines with multiple cores): +Fast version: ``` -make bootstrap tables load_geocodes load_geodata_community_area_stats load_community_areas && make -j 8 parking && make indexes views analysis +make bootstrap geo && make -j 8 parking && make indexes views analysis ``` +Set `-j N` to reflect the number of processors available on your system. + ### Reset the database ``` From 1ec3af3b7141927906f9b74b20813cac5e547131 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 11:11:45 -0500 Subject: [PATCH 045/140] handle 00s, closes #38 --- processors/clean_csv.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 01fd5f7..a8cfdc7 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -2,7 +2,9 @@ import re import sys -address_re = re.compile(r"(\d*)(\d{2})(\s)", re.IGNORECASE) +block_re = re.compile(r"(\d*)(\d{2})(\s)", re.IGNORECASE) +twodigit_re = re.compile(r"^(00 )(.*)", re.IGNORECASE) + def clean_commas(row): if row[8].startswith('WINDOWS MISSING OR CRACKED BEYOND') or row[8].startswith('SUSPENSION MODIFIED BEYOND'): @@ -19,7 +21,15 @@ def clean_location(row): def clean_address(address): - return address_re.sub(r'\g<1>00\g<3>', address).lower() + """ + Simplistic block-level address parsing + + 6232 S. Loomis -> 6200 S. Loomis + 15 North State St -> 1 North State St + """ + ret = block_re.sub(r'\g<1>00\g<3>', address).lower() + ret = twodigit_re.sub(r'1 \g<2>', ret) + return ret def clean(filename): From dc2e482947ccf2e8392ec83d0eed4ef7624ec256 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 11:13:16 -0500 Subject: [PATCH 046/140] fix db url reference --- processors/geocode_addresses.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py index c302eb2..cb8ac08 100644 --- a/processors/geocode_addresses.py +++ b/processors/geocode_addresses.py @@ -1,10 +1,11 @@ import geocoder import records import json +import os import sys +db = records.Database(os.environ.get('ILTICKETS_DB_URL', 'postgres://localhost/iltickets')) -db = records.Database('postgres://localhost/iltickets') def process(limit, offset): rows = db.query(""" From 07fd94d20b5c4f0bfdd8351b9be4581b474b7e48 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 11:18:50 -0500 Subject: [PATCH 047/140] fix bad bug with wrong types for geocoder ranges --- processors/geocode_addresses.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py index cb8ac08..7f4eb3d 100644 --- a/processors/geocode_addresses.py +++ b/processors/geocode_addresses.py @@ -52,6 +52,6 @@ def process(limit, offset): if __name__ == '__main__': - limit = sys.argv[1] - offset = sys.argv[2] + limit = int(sys.argv[1]) + offset = int(sys.argv[2]) process(limit, offset) From 5bd3ece9845d3f18afeebd7a7af552a594c8774f Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 11:25:02 -0500 Subject: [PATCH 048/140] add quotes to community_area_stats table --- sql/tables/community_area_stats.sql | 310 ++++++++++++++-------------- 1 file changed, 155 insertions(+), 155 deletions(-) diff --git a/sql/tables/community_area_stats.sql b/sql/tables/community_area_stats.sql index d0c876e..e7fb106 100644 --- a/sql/tables/community_area_stats.sql +++ b/sql/tables/community_area_stats.sql @@ -1,157 +1,157 @@ create table community_area_stats ( - geog varchar not null, - pop_2000 decimal not null, - pop_2010 decimal not null, - pop_change decimal not null, - tot_pop decimal not null, - und19 decimal not null, - a20_34 decimal not null, - a35_49 decimal not null, - a50_64 decimal not null, - a65_79 decimal not null, - ov80 decimal not null, - med_age decimal not null, - white decimal not null, - hisp decimal not null, - black decimal not null, - asian decimal not null, - other decimal not null, - pop_hh decimal not null, - pop_16ov decimal not null, - in_lbfrc decimal not null, - emp decimal not null, - unemp decimal not null, - not_in_lbfrc decimal not null, - work_at_home decimal not null, - tot_comm decimal not null, - drove_al decimal not null, - carpool decimal not null, - transit decimal not null, - walk_bike decimal not null, - comm_other decimal not null, - pop_25ov decimal not null, - hs decimal not null, - bach decimal not null, - inc_lt_25k decimal not null, - inc_25_50k decimal not null, - inc_50_75k decimal not null, - inc_75_100k decimal not null, - inc_100_150k decimal not null, - inc_gt_150 decimal not null, - medinc decimal not null, - tot_hh decimal not null, - own_occ_hu decimal not null, - rent_occ_hu decimal not null, - vac_hu decimal not null, - hu_tot decimal not null, - hu_sng_det decimal not null, - hu_sng_att decimal not null, - hu_2un decimal not null, - hu_3_4un decimal not null, - hu_gt_5un decimal not null, - med_rooms decimal not null, - ha_aft2000 decimal not null, - ha_70_00 decimal not null, - ha_40_70 decimal not null, - ha_bef1940 decimal not null, - med_ha decimal not null, - br_0_1 decimal not null, - br_2 decimal not null, - br_3 decimal not null, - br_4 decimal not null, - br_5 decimal not null, - hv_lt_150k decimal not null, - hv_150_300k decimal not null, - hv_300_500k decimal not null, - hv_gt_500k decimal not null, - med_hv decimal not null, - tot_emp_res decimal not null, - res_naics1_type varchar not null, - res_naics2_type varchar not null, - res_naics3_type varchar not null, - res_naics4_type varchar not null, - res_naics5_type varchar not null, - res_naics1_count decimal not null, - res_naics2_count decimal not null, - res_naics3_count decimal not null, - res_naics4_count decimal not null, - res_naics5_count decimal not null, - tot_emp_work decimal not null, - work_naics1_type varchar not null, - work_naics2_type varchar not null, - work_naics3_type varchar not null, - work_naics4_type varchar not null, - work_naics5_type varchar not null, - work_naics1_count decimal not null, - work_naics2_count decimal not null, - work_naics3_count decimal not null, - work_naics4_count decimal not null, - work_naics5_count decimal not null, - res_city1_type varchar not null, - res_city2_type varchar not null, - res_city3_type varchar not null, - res_city4_type varchar not null, - res_city5_type varchar not null, - res_city1_count decimal not null, - res_city2_count decimal not null, - res_city3_count decimal not null, - res_city4_count decimal not null, - res_city5_count decimal not null, - work_city1_type varchar not null, - work_city2_type varchar not null, - work_city3_type varchar not null, - work_city4_type varchar not null, - work_city5_type varchar not null, - work_city1_count decimal not null, - work_city2_count decimal not null, - work_city3_count decimal not null, - work_city4_count decimal not null, - work_city5_count decimal not null, - medincfam_hcost boolean, - medincfam_tcost boolean, - medincfam_htcost boolean, - ret_hcost boolean, - ret_tcost boolean, - ret_htcost boolean, - spfam_hcost boolean, - spfam_tcost boolean, - spfam_htcost boolean, - modincfam_hcost boolean, - modincfam_tcost boolean, - modincfam_htcost boolean, - ides_emp boolean, - emp_change boolean, - pct_change boolean, - avg_vmt decimal not null, - ret_sales boolean, - res_eav boolean, - cmrcl_eav boolean, - ind_eav boolean, - rail_eav boolean, - farm_eav boolean, - min_eav boolean, - tot_eav boolean, - walkscore boolean, - open_space_per_1000 decimal not null, - tot_acres decimal not null, - sf decimal not null, - sfperc decimal not null, - mf decimal not null, - mfperc decimal not null, - mix decimal, - mixperc decimal, - comm decimal not null, - commperc decimal not null, - inst decimal not null, - instperc decimal not null, - ind decimal, - indperc decimal, - trans decimal not null, - transperc decimal not null, - ag decimal, - agperc decimal, - open decimal not null, - openperc decimal not null, - vacant decimal not null, - vacperc decimal not null + "geog" varchar not null, + "2000_pop" decimal not null, + "2010_pop" decimal not null, + "pop_change" decimal not null, + "tot_pop" decimal not null, + "und19" decimal not null, + "a20_34" decimal not null, + "a35_49" decimal not null, + "a50_64" decimal not null, + "a65_79" decimal not null, + "ov80" decimal not null, + "med_age" decimal not null, + "white" decimal not null, + "hisp" decimal not null, + "black" decimal not null, + "asian" decimal not null, + "other" decimal not null, + "pop_hh" decimal not null, + "pop_16ov" decimal not null, + "in_lbfrc" decimal not null, + "emp" decimal not null, + "unemp" decimal not null, + "not_in_lbfrc" decimal not null, + "work_at_home" decimal not null, + "tot_comm" decimal not null, + "drove_al" decimal not null, + "carpool" decimal not null, + "transit" decimal not null, + "walk_bike" decimal not null, + "comm_other" decimal not null, + "pop_25ov" decimal not null, + "hs" decimal not null, + "bach" decimal not null, + "inc_lt_25k" decimal not null, + "inc_25_50k" decimal not null, + "inc_50_75k" decimal not null, + "inc_75_100k" decimal not null, + "inc_100_150k" decimal not null, + "inc_gt_150" decimal not null, + "medinc" decimal not null, + "tot_hh" decimal not null, + "own_occ_hu" decimal not null, + "rent_occ_hu" decimal not null, + "vac_hu" decimal not null, + "hu_tot" decimal not null, + "hu_sng_det" decimal not null, + "hu_sng_att" decimal not null, + "hu_2un" decimal not null, + "hu_3_4un" decimal not null, + "hu_gt_5un" decimal not null, + "med_rooms" decimal not null, + "ha_aft2000" decimal not null, + "ha_70_00" decimal not null, + "ha_40_70" decimal not null, + "ha_bef1940" decimal not null, + "med_ha" decimal not null, + "br_0_1" decimal not null, + "br_2" decimal not null, + "br_3" decimal not null, + "br_4" decimal not null, + "br_5" decimal not null, + "hv_lt_150k" decimal not null, + "hv_150_300k" decimal not null, + "hv_300_500k" decimal not null, + "hv_gt_500k" decimal not null, + "med_hv" decimal not null, + "tot_emp_res" decimal not null, + "res_naics1_type" varchar not null, + "res_naics2_type" varchar not null, + "res_naics3_type" varchar not null, + "res_naics4_type" varchar not null, + "res_naics5_type" varchar not null, + "res_naics1_count" decimal not null, + "res_naics2_count" decimal not null, + "res_naics3_count" decimal not null, + "res_naics4_count" decimal not null, + "res_naics5_count" decimal not null, + "tot_emp_work" decimal not null, + "work_naics1_type" varchar not null, + "work_naics2_type" varchar not null, + "work_naics3_type" varchar not null, + "work_naics4_type" varchar not null, + "work_naics5_type" varchar not null, + "work_naics1_count" decimal not null, + "work_naics2_count" decimal not null, + "work_naics3_count" decimal not null, + "work_naics4_count" decimal not null, + "work_naics5_count" decimal not null, + "res_city1_type" varchar not null, + "res_city2_type" varchar not null, + "res_city3_type" varchar not null, + "res_city4_type" varchar not null, + "res_city5_type" varchar not null, + "res_city1_count" decimal not null, + "res_city2_count" decimal not null, + "res_city3_count" decimal not null, + "res_city4_count" decimal not null, + "res_city5_count" decimal not null, + "work_city1_type" varchar not null, + "work_city2_type" varchar not null, + "work_city3_type" varchar not null, + "work_city4_type" varchar not null, + "work_city5_type" varchar not null, + "work_city1_count" decimal not null, + "work_city2_count" decimal not null, + "work_city3_count" decimal not null, + "work_city4_count" decimal not null, + "work_city5_count" decimal not null, + "medincfam_hcost" boolean, + "medincfam_tcost" boolean, + "medincfam_htcost" boolean, + "ret_hcost" boolean, + "ret_tcost" boolean, + "ret_htcost" boolean, + "spfam_hcost" boolean, + "spfam_tcost" boolean, + "spfam_htcost" boolean, + "modincfam_hcost" boolean, + "modincfam_tcost" boolean, + "modincfam_htcost" boolean, + "ides_emp" boolean, + "emp_change" boolean, + "pct_change" boolean, + "avg_vmt" decimal not null, + "ret_sales" boolean, + "res_eav" boolean, + "cmrcl_eav" boolean, + "ind_eav" boolean, + "rail_eav" boolean, + "farm_eav" boolean, + "min_eav" boolean, + "tot_eav" boolean, + "walkscore" boolean, + "open_space_per_1000" decimal not null, + "tot_acres" decimal not null, + "sf" decimal not null, + "sfperc" decimal not null, + "mf" decimal not null, + "mfperc" decimal not null, + "mix" decimal, + "mixperc" decimal, + "comm" decimal not null, + "commperc" decimal not null, + "inst" decimal not null, + "instperc" decimal not null, + "ind" decimal, + "indperc" decimal, + "trans" decimal not null, + "transperc" decimal not null, + "ag" decimal, + "agperc" decimal, + "open" decimal not null, + "openperc" decimal not null, + "vacant" decimal not null, + "vacperc" decimal not null ); From 328049a51d7cbcfa3ae4f52c9b734b00156b7884 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 11:26:29 -0500 Subject: [PATCH 049/140] add geom column that's been giving us the flux --- sql/tables/geocodes.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/tables/geocodes.sql b/sql/tables/geocodes.sql index e2814dc..7d1dc62 100644 --- a/sql/tables/geocodes.sql +++ b/sql/tables/geocodes.sql @@ -7,5 +7,6 @@ CREATE TABLE public.geocodes ( geocoded_city character varying, geocoded_state character varying, geocode_accuracy character varying, - geocode_geojson jsonb + geocode_geojson jsonb, + geom geometry(Geometry,4326) ) From 46683fae0248e765bafbcf4ffd87525935c8ee43 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 11:27:37 -0500 Subject: [PATCH 050/140] include just city sticker accuracy in geocode accuracy view --- sql/views/geocode_accuracy.sql | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/sql/views/geocode_accuracy.sql b/sql/views/geocode_accuracy.sql index 6053eaa..154c783 100644 --- a/sql/views/geocode_accuracy.sql +++ b/sql/views/geocode_accuracy.sql @@ -3,7 +3,10 @@ as select total, chicago_total, - chicago_total::decimal / total as chicago_pct + chicago_total::decimal / total as chicago_pct, + citysticker_total, + geocode_citysticker_total, + geocode_citysticker_total::decimal / citysticker_total as geocode_citysticker_pct from ( select count(p.ticket_number) as total, @@ -15,4 +18,25 @@ as from parking p join geocodes g on p.address = g.address - ) summary; + ) chicago_summary, + ( + select + count(*) as citysticker_total + from + parking p + where + (p.violation_code = '0964125' or p.violation_code = '0964125B') + ) citysticker_summary, + ( + select count(*) as geocode_citysticker_total + from + parking p + inner join + geocodes g on p.address = g.address + inner join + community_area_geography c on st_within(g.geom, c.wkb_geometry) + where + (p.violation_code = '0964125' or p.violation_code = '0964125B') + and g.geocode_accuracy != 'GEOMETRIC_CENTER' + ) geocode_summary +; From 8a91b61c54f1f362f95ebf6b16835cf249801116 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 23 Jul 2018 11:28:16 -0500 Subject: [PATCH 051/140] add analysis view that joins every geocode with its community area --- sql/views/geocodes_communityareas.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sql/views/geocodes_communityareas.sql diff --git a/sql/views/geocodes_communityareas.sql b/sql/views/geocodes_communityareas.sql new file mode 100644 index 0000000..f0227f0 --- /dev/null +++ b/sql/views/geocodes_communityareas.sql @@ -0,0 +1,16 @@ +create or replace view geocodes_communityareas +as + select + g.address, + g.geocoded_address, + c.community, + g.geocoded_lat, + g.geocoded_lng, + g.geocoded_city, + g.geocoded_state, + g.geocode_accuracy + from + geocodes g + inner join + community_area_geography c on st_within(g.geom, c.wkb_geometry) + ; From b75b2a1e93b071d6ab327cf0691ceeff76b489a0 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Wed, 25 Jul 2018 16:28:20 -0500 Subject: [PATCH 052/140] allows psql view to be updated when view is updated --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fd5a34d..6936662 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ table_% : sql/tables/%.sql view_% : sql/views/%.sql - $(check_public_relation) psql $(ILTICKETS_DB_URL) -f $< + psql $(ILTICKETS_DB_URL) -f $< index_% : From b41e4a6dc97f2451ac1e66bb52dd238b63a8afe5 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Wed, 25 Jul 2018 16:28:57 -0500 Subject: [PATCH 053/140] adds median income to community area stats csv --- sql/views/community_area_city_stickers.sql | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/views/community_area_city_stickers.sql b/sql/views/community_area_city_stickers.sql index 684070e..99de27d 100644 --- a/sql/views/community_area_city_stickers.sql +++ b/sql/views/community_area_city_stickers.sql @@ -15,7 +15,8 @@ as s.asian, s.asian / s.tot_pop as asian_pct, s.other, - s.other / s.tot_pop as other_pct + s.other / s.tot_pop as other_pct, + s.medinc from parking p inner join geocodes g on p.address = g.address @@ -35,5 +36,6 @@ as s.black, s.hisp, s.asian, - s.other + s.other, + s.medinc order by per_household desc; From 0bae864ae5bd647621e2e24c6713b61300197383 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Tue, 21 Aug 2018 18:25:52 -0500 Subject: [PATCH 054/140] adds all years to data and salts n hashes the license plate numbers, closes #42, #43 --- Makefile | 13 ++++++++----- processors/clean_csv.py | 19 ++++++++++++++++--- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 6936662..fe95f79 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,12 @@ -#YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -YEARS = 2011 2012 2013 2014 2015 +YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 TABLES = parking cameras geocodes community_area_stats VIEWS = community_area_city_stickers geocode_accuracy DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras +.INTERMEDIATE: salt.txt -all: bootstrap geo parking indexes views analysis +all: processors/salt.txt bootstrap geo parking indexes views analysis clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) bootstrap : create_db tables schema @@ -81,7 +81,7 @@ data/analysis/%.csv : view_% psql $(ILTICKETS_DB_URL) -c "\copy (select * from public.$*) TO '$(CURDIR)/data/analysis/$*.csv' with (delimiter ',', format csv, header);" -load_geodata_% : +load_geodata_% : data/geodata/community_area_stats.csv psql $(ILTICKETS_DB_URL) -c "\copy public.$* FROM '$(CURDIR)/data/geodata/$*.csv' with (delimiter ',', format csv, header);" @@ -108,8 +108,11 @@ data/dumps/geocodes-city-stickers.dump : load_geocodes : data/dumps/geocodes-city-stickers.dump table_geocodes pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump +processors/salt.txt : + python processors/create_salt.py + data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt - python processors/clean_csv.py $< > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt + python processors/clean_csv.py $^ processors/salt.txt > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.txt diff --git a/processors/clean_csv.py b/processors/clean_csv.py index a8cfdc7..de4ec36 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -1,6 +1,7 @@ import csv import re import sys +from Crypto.Hash import SHA256 block_re = re.compile(r"(\d*)(\d{2})(\s)", re.IGNORECASE) twodigit_re = re.compile(r"^(00 )(.*)", re.IGNORECASE) @@ -32,9 +33,20 @@ def clean_address(address): return ret -def clean(filename): +def hash_plates(row, salt): + hash = SHA256.new() + plate = row[3] + to_hash = (plate + salt).encode('utf-8') + hash.update(to_hash) + row[3]= hash.hexdigest() + return row + + +def clean(data_filename, salt_filename): + with open(salt_filename, 'r') as f: + salt = f.read() writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) - with open(filename) as f: + with open(data_filename) as f: reader = csv.reader(f, delimiter="$", quotechar='"') headers = next(reader) writer.writerow(headers) @@ -43,10 +55,11 @@ def clean(filename): try: row = clean_commas(row) row = clean_location(row) + row = hash_plates(row, salt) writer.writerow(row) except IndexError: print(row, file=sys.stderr) if __name__ == '__main__': - clean(sys.argv[1]) + clean(sys.argv[1], sys.argv[2]) From 50cb16dc1cd1d7c163bd82430fe62edf7089d8d7 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Tue, 21 Aug 2018 19:46:53 -0500 Subject: [PATCH 055/140] corrects naming of salt.txt file for the intermediate declaration I realized it was wrong on the bus my b --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fe95f79..12618f5 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ VIEWS = community_area_city_stickers geocode_accuracy DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras -.INTERMEDIATE: salt.txt +.INTERMEDIATE: processors/salt.txt all: processors/salt.txt bootstrap geo parking indexes views analysis clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) From dedcd075f1c6ab7478798c631a804390ce4a27e0 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Wed, 22 Aug 2018 11:12:56 -0500 Subject: [PATCH 056/140] exports parking table as one big csv and zips file, closes #50, closes #49 --- Makefile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 12618f5..820c3ee 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ TABLES = parking cameras geocodes community_area_stats VIEWS = community_area_city_stickers geocode_accuracy DATADIRS = analysis cameras geodata parking processed -.PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras +.PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt all: processors/salt.txt bootstrap geo parking indexes views analysis @@ -23,6 +23,8 @@ load: cameras parking download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) +zip_n_ship : data/processed/parking_tickets.zip + define check_database psql $(ILTICKETS_DB_URL) -c "select 1;" > /dev/null 2>&1 || @@ -119,6 +121,12 @@ data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.tx python processors/clean_csv.py $< > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.txt +data/processed/parking_tickets.csv : + psql $(ILTICKETS_DB_URL) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" + +data/processed/parking_tickets.zip : data/processed/parking_tickets.csv + zip $@ $^ + dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" From ceeafe648288944317c136a28027eea056fa5801 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Wed, 22 Aug 2018 11:38:52 -0500 Subject: [PATCH 057/140] zip_n_ship makefile command now also exports zip to s3 --- Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 820c3ee..2d4f6ca 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ DATADIRS = analysis cameras geodata parking processed .INTERMEDIATE: processors/salt.txt all: processors/salt.txt bootstrap geo parking indexes views analysis -clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) +clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema geo: load_geocodes load_geodata_community_area_stats load_community_areas clean_community_areas @@ -23,7 +23,7 @@ load: cameras parking download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) -zip_n_ship : data/processed/parking_tickets.zip +zip_n_ship : upload_zip define check_database @@ -127,6 +127,9 @@ data/processed/parking_tickets.csv : data/processed/parking_tickets.zip : data/processed/parking_tickets.csv zip $@ $^ +upload_zip : data/processed/parking_tickets.zip + aws s3 cp $^ s3://data-publica/il_parking_tickets_20180822.zip + dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" From a5ecadcf81f40493301fdcb8368a2755862b1fbc Mon Sep 17 00:00:00 2001 From: kat-alo Date: Wed, 22 Aug 2018 11:40:16 -0500 Subject: [PATCH 058/140] forget to add the salt creator my b --- processors/create_salt.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 processors/create_salt.py diff --git a/processors/create_salt.py b/processors/create_salt.py new file mode 100644 index 0000000..3882248 --- /dev/null +++ b/processors/create_salt.py @@ -0,0 +1,12 @@ +import string +import random + +def main(): + salt = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(15)) + salt_file = open("processors/salt.txt", "w") + salt_file.write(salt) + salt_file.close() + return salt_file + +if __name__ == '__main__': + main() \ No newline at end of file From 55d484d7f3d7a1dfe4cf3a13048e128c8ee3c618 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Wed, 22 Aug 2018 15:34:41 -0500 Subject: [PATCH 059/140] adds unit_key.csv to zip file to upload to s3 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2d4f6ca..468be01 100644 --- a/Makefile +++ b/Makefile @@ -124,7 +124,7 @@ data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.tx data/processed/parking_tickets.csv : psql $(ILTICKETS_DB_URL) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" -data/processed/parking_tickets.zip : data/processed/parking_tickets.csv +data/processed/parking_tickets.zip : data/unit_key.csv data/processed/parking_tickets.csv zip $@ $^ upload_zip : data/processed/parking_tickets.zip From 2f64ebda1278bbb687cada19302e53c589bf6d87 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Wed, 22 Aug 2018 15:51:52 -0500 Subject: [PATCH 060/140] adding unit_key.csv to data/ in case Nicolas Cage needs it --- data/unit_key.csv | 388 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 388 insertions(+) create mode 100644 data/unit_key.csv diff --git a/data/unit_key.csv b/data/unit_key.csv new file mode 100644 index 0000000..e9548f7 --- /dev/null +++ b/data/unit_key.csv @@ -0,0 +1,388 @@ +,,,,,, +CANVAS TABLE,,,,,TABLE FOR WBEZ, +Reporting District,Department Name,Department Description,Department Category,,Reporting District,Department Category +18,CPD,1160 N. Larrabee,CPD,,18,CPD +19,CPD,2452 W. Belmont,CPD,,19,CPD +20,CPD,5400 N. Lincoln Ave,CPD,,20,CPD +21,CPD,300 E 29th Street,CPD,,21,CPD +22,CPD,1900 W. Monterey,CPD,,22,CPD +23,CPD,3600 N. Halsted,CPD,,23,CPD +24,CPD,6464 N. Clark,CPD,,24,CPD +25,CPD,5555 W. Grand,CPD,,25,CPD +26,CPD-Other,Other Police,CPD,,26,CPD +27,CPD-Other,Other Police,CPD,,27,CPD +28,CPD-Other,Other Police,CPD,,28,CPD +29,CPD-Other,Other Police,CPD,,29,CPD +30,CPD-Other,Other Police,CPD,,30,CPD +31,CPD-Other,Other Police,CPD,,31,CPD +32,CPD-Other,Other Police,CPD,,32,CPD +33,CPD-Other,Other Police,CPD,,33,CPD +35,CPD-Other,Other Police,CPD,,35,CPD +43,CPD-Other,Other Police,CPD,,43,CPD +44,CPD-Other,Recruit Training,CPD,,44,CPD +45,CPD-Other,District Reinstatement,CPD,,45,CPD +49,CPD-Other,Other Police,CPD,,49,CPD +50,CPD-Airport,O'Hare Airport,CPD,,50,CPD +51,CPD-Airport,Midway Airport,CPD,,51,CPD +53,Miscellaneous,Bureau of Electricity,Miscellaneous/Other,,53,Other +55,CPD,Mounted Unit,CPD,,55,CPD +57,CPD,Detail Unit,CPD,,57,CPD +59,CPD,Marine Unit,CPD,,59,CPD +60,CPD-Other,Helicopter Unit,CPD,,60,CPD +61,CPD-Other,Other Police,CPD,,61,CPD +69,CPD-Other,Other Police,CPD,,69,CPD +70,CPD-Other,Other Police,CPD,,70,CPD +71,CPD-Other,Other Police,CPD,,71,CPD +73,CPD-Other,Other Police,CPD,,73,CPD +74,CPD-Other,Other Police,CPD,,74,CPD +75,CPD-Other,Other Police,CPD,,75,CPD +77,CPD-Other,Other Police,CPD,,77,CPD +78,CPD-Other,Other Police,CPD,,78,CPD +79,CPD-Other,Special Investigations Unit,CPD,,79,CPD +80,CPD-Other,Other Police,CPD,,80,CPD +81,CPD-Other,Other Police,CPD,,81,CPD +87,CPD-Other,Other Police,CPD,,87,CPD +92,Miscellaneous,Chicago State University,Miscellaneous/Other,,92,Other +93,CPD-Other,Other Police,CPD,,93,CPD +99,CPD-Other,Other Police,CPD,,99,CPD +100,CPD-Other,Other Police,CPD,,100,CPD +101,CPD-Other,Police Board,CPD,,101,CPD +110,CPD-Other,Other Police,CPD,,110,CPD +111,CPD-Other,Department Administration,CPD,,111,CPD +112,CPD-Other,Bureau of Professional Standards,CPD,,112,CPD +113,CPD-Other,Independent Police Review Authority,CPD,,113,CPD +114,CPD-Other,Office of Legal Affairs,CPD,,114,CPD +115,CPD-Other,CAPS Project Office,CPD,,115,CPD +116,CPD-Other,Deployment Operations Center Section,CPD,,116,CPD +117,CPD-Other,Office of Asst Superintendent ,CPD,,117,CPD +118,CPD-Other,Chaplains Section,CPD,,118,CPD +119,CPD-Other,Other Police,CPD,,119,CPD +120,CPD-Other,Bureau of Admin Services,CPD,,120,CPD +121,CPD-Other,Internal Affairs Division,CPD,,121,CPD +122,CPD-Other,Finance Division,CPD,,122,CPD +123,CPD-Other,Human Resources Division,CPD,,123,CPD +124,CPD-Other,Education and Training Division,CPD,,124,CPD +125,CPD-Other,Information Services Division,CPD,,125,CPD +126,CPD-Other,Inspection Division,CPD,,126,CPD +127,CPD-Other,Research and Development Division,CPD,,127,CPD +128,CPD-Other,Professional Counseling Services,CPD,,128,CPD +129,CPD-Other,Management and Labor Affairs Section,CPD,,129,CPD +130,CPD-Other,Other Police,CPD,,130,CPD +131,CPD-Other,Domestic Violence Office,CPD,,131,CPD +132,CPD-Other,Neighborhood Relations Division,CPD,,132,CPD +133,CPD-Other,Other Police,CPD,,133,CPD +134,CPD-Other,Field Technology Training Unit,CPD,,134,CPD +135,CPD-Other,CAPS Implementation,CPD,,135,CPD +136,CPD-Other,Special Events and Liaison Section,CPD,,136,CPD +139,CPD,Back to Streets,CPD,,139,CPD +140,CPD,Security Detail,CPD,,140,CPD +141,CPD-Other,Special Functions Group,CPD,,141,CPD +142,CPD-Other,Bureau of Patrol - Administration,CPD,,142,CPD +143,CPD-Other,Court Liaison Section,CPD,,143,CPD +145,CPD-Other,Traffic Section - Administration,CPD,,145,CPD +146,CPD-Other,Major Accident,CPD,,146,CPD +147,CPD-Other,Senior Citizen Services Section,CPD,,147,CPD +148,CPD-Other,Traffic Court/Records Unit,CPD,,148,CPD +151,CPD,Traffic Enforcement,CPD,,151,CPD +152,CPD,Loop Traffic,CPD,,152,CPD +153,CPD,Mobile Strike Force,CPD,,153,CPD +154,CPD-Other,Traffic Safety and Training Unit,CPD,,154,CPD +157,CPD-Other,Other Police,CPD,,157,CPD +160,CPD-Other,Facilities Management Unit,CPD,,160,CPD +161,CPD-Other,General Support Division,CPD,,161,CPD +162,CPD-Other,Records Services Division,CPD,,162,CPD +163,CPD-Other,Records Inquiry Section,CPD,,163,CPD +166,CPD-Other,Field Services Section,CPD,,166,CPD +167,CPD-Other,Evidence and Recovered Property Unit,CPD,,167,CPD +168,CPD-Other,Auto Pounds Section,CPD,,168,CPD +169,CPD-Other,Police Document Services Section,CPD,,169,CPD +170,CPD-Other,Counter Terrorism/Intelligence Division,CPD,,170,CPD +171,CPD-Other,Central Detention Section,CPD,,171,CPD +172,CPD-Other,Equipment and Supply Section,CPD,,172,CPD +173,CPD-Other,Fleet Liaison,CPD,,173,CPD +175,CPD-Other,Telephone Audit Unit,CPD,,175,CPD +177,CPD-Other,Forensics Services Section,CPD,,177,CPD +179,CPD-Other,Reproduction and Graphic Arts,CPD,,179,CPD +180,CPD-Other,Bureau of Investigative Services,CPD,,180,CPD +182,CPD-Other,Other Police,CPD,,182,CPD +184,CPD-Other,Youth Investigation Section,CPD,,184,CPD +188,CPD-Other,Organized Crime Division,CPD,,188,CPD +189,CPD-Other,Narcotics Section,CPD,,189,CPD +191,CPD-Other,Intelligence Section,CPD,,191,CPD +192,CPD-Other,Vice Control Section,CPD,,192,CPD +193,CPD-Other,Gang Investigation Section,CPD,,193,CPD +195,CPD-Other,Office of Management Accountability,CPD,,195,CPD +196,CPD-Other,Asset Forfeiture Unit,CPD,,196,CPD +198,CPD-Other,Other Police,CPD,,198,CPD +202,CPD-Other,Other Police,CPD,,202,CPD +205,CPD-Other,Other Police,CPD,,205,CPD +209,CPD-Other,Other Police,CPD,,209,CPD +211,CPD-Other,"Deputy Chief, Area 1",CPD,,211,CPD +212,CPD-Other,"Deputy Chief, Area 2",CPD,,212,CPD +213,CPD-Other,"Deputy Chief, Area 3",CPD,,213,CPD +214,CPD-Other,"Deputy Chief, Area 4",CPD,,214,CPD +215,CPD-Other,"Deputy Chief, Area 5",CPD,,215,CPD +216,CPD,Bike Patrol Unit,CPD,,216,CPD +217,CPD-Other,Other Police,CPD,,217,CPD +225,CPD-Other,Other Police,CPD,,225,CPD +231,CPD-Other,Medical Services Section,CPD,,231,CPD +232,CPD-Other,Other Police,CPD,,232,CPD +235,CPD-Other,Other Police,CPD,,235,CPD +252,CPD,OEMC,CPD,,252,CPD +253,CPD,Target Response Unit,CPD,,253,CPD +257,CPD-Other,Other Police,CPD,,257,CPD +262,CPD-Other,Other Police,CPD,,262,CPD +276,CPD-Other,OEMC Detail,CPD,,276,CPD +284,CPD,Youth Division/School Patrol,CPD,,284,CPD +301,CPD-Other,Other Police,CPD,,301,CPD +309,CPD-Other,Other Police,CPD,,309,CPD +729,Miscellaneous,CPM,Chicago Parking Meter,,729,Other +341,CPD-Other,K9 Unit,CPD,,341,CPD +0TEM,CPD-Other,Other Police,CPD,,0TEM,CPD +1024,CPD-Other,Other Police,CPD,,1024,CPD +1032,CPD-Other,Other Police,CPD,,1032,CPD +1122,CPD-Other,Other Police,CPD,,1122,CPD +1524,CPD-Other,Other Police,CPD,,1524,CPD +158,CPD-Other,Other Police,CPD,,158,CPD +1611,CPD-Other,Other Police,CPD,,1611,CPD +1623,CPD-Other,Other Police,CPD,,1623,CPD +1644,CPD-Other,Other Police,CPD,,1644,CPD +165,CPD-Other,Other Police,CPD,,165,CPD +1723,CPD-Other,Other Police,CPD,,1723,CPD +1732,CPD-Other,Other Police,CPD,,1732,CPD +1733,CPD-Other,Other Police,CPD,,1733,CPD +2123,CPD-Other,Other Police,CPD,,2123,CPD +2124,CPD-Other,Other Police,CPD,,2124,CPD +2131,CPD-Other,Other Police,CPD,,2131,CPD +2142,CPD-Other,Other Police,CPD,,2142,CPD +242,CPD-Other,Other Police,CPD,,242,CPD +2431,CPD-Other,Other Police,CPD,,2431,CPD +244,CPD-Other,Other Police,CPD,,244,CPD +250,CPD-Other,Other Police,CPD,,250,CPD +255,CPD-Other,Other Police,CPD,,255,CPD +272,CPD-Other,Other Police,CPD,,272,CPD +2,CPD,5101 S. Wentworth,CPD,,2,CPD +3,CPD,7040 S. Cottage Grove,CPD,,3,CPD +4,CPD,2255 E. 103rd Street,CPD,,4,CPD +5,CPD,727 E. 11th Street,CPD,,5,CPD +6,CPD,7808 S. Halsted,CPD,,6,CPD +7,CPD,6120 S. Racine,CPD,,7,CPD +8,CPD,3420 W 63rd,CPD,,8,CPD +9,CPD,3120 S Halsted,CPD,,9,CPD +10,CPD,3315 W. Ogden,CPD,,10,CPD +11,CPD,3151 W. Harrison,CPD,,11,CPD +12,CPD,100 S. Racine,CPD,,12,CPD +13,CPD,"937 N. Wood, 2nd Fl",CPD,,13,CPD +14,CPD,2150 N. California,CPD,,14,CPD +15,CPD,5701 W. Madison,CPD,,15,CPD +16,CPD,5151 N. Milwaukee,CPD,,16,CPD +17,CPD,4650 N. Pulaski,CPD,,17,CPD +311,CPD-Other,Gang Team 1,CPD,,311,CPD +312,CPD-Other,Gang Team 2,CPD,,312,CPD +313,CPD-Other,Gang Team 3,CPD,,313,CPD +314,CPD-Other,Gang Team 4,CPD,,314,CPD +315,CPD-Other,Gang Team 5,CPD,,315,CPD +325,CPD-Other,Other Police,CPD,,325,CPD +333,Miscellaneous,Mayor's Office of People w Disabilities,Miscellaneous/Other,,333,Other +351,CPD-Other,Other Police,CPD,,351,CPD +353,CPD,Operation Closed Market,CPD,,353,CPD +355,CPD-Other,Other Police,CPD,,355,CPD +376,CPD-Other,Alternate Response Section,CPD,,376,CPD +377,CPD-Other,Evidence Technician Team - North,CPD,,377,CPD +384,CPD-Other,Juvenile Intervention,CPD,,384,CPD +385,CPD-Other,Other Police,CPD,,385,CPD +393,CPD-Other,Gang Enforcement Section,CPD,,393,CPD +398,CPD-Other,Other Police,CPD,,398,CPD +404,CPD-Other,Other Police,CPD,,404,CPD +412,CPD-Other,Other Police,CPD,,412,CPD +416,CPD-Other,Other Police,CPD,,416,CPD +419,CPD-Other,Other Police,CPD,,419,CPD +424,CPD-Other,Other Police,CPD,,424,CPD +432,CPD-Other,Other Police,CPD,,432,CPD +433,CPD-Other,Other Police,CPD,,433,CPD +443,CPD-Other,Other Police,CPD,,443,CPD +446,CPD-Other,Other Police,CPD,,446,CPD +451,CPD-Other,Other Police,CPD,,451,CPD +455,CPD-Other,Other Police,CPD,,455,CPD +464,CPD-Other,Other Police,CPD,,464,CPD +471,Miscellaneous,Pacific Railroad,Miscellaneous/Other,,471,Other +476,CPD-Other,Other Police,CPD,,476,CPD +477,CPD-Other,Evidence Technician Team - South,CPD,,477,CPD +488,CPD-Other,Other Police,CPD,,488,CPD +490,Miscellaneous,Cook County Sheriff,Miscellaneous/Other,,490,Other +491,Miscellaneous,Cook County Sheriff,Miscellaneous/Other,,491,Other +492,Miscellaneous,Aviation- Midway/Ohare,Miscellaneous/Other,,492,Other +493,CPD,Union Pacific Railroad,CPD,,493,CPD +494,CPD,Amtrak,CPD,,494,CPD +495,Miscellaneous,Streets and Sanitation,Streets and San,,495,Other +496,Miscellaneous,UIC,Miscellaneous/Other,,496,Other +497,Miscellaneous,Illinois State Police,Miscellaneous/Other,,497,Other +498,DOF,Department of Finance,DOF,,498,DOF +499,Miscellaneous,Streets and Sanitation,Streets and San,,499,Other +500,Miscellaneous,C-DOT,Miscellaneous/Other,,500,Other +501,Miscellaneous,City Clerk Office,Miscellaneous/Other,,501,Other +502,DOF,SERCO,SERCO,,502,Other +503,DOF,Business License Investigation,DOF,,503,DOF +504,Miscellaneous,SERCO/City Clerk,Miscellaneous/Other,,504,Other +505,CPD-Other,Other Police,CPD,,505,Other +506,CPD-Other,Other Police,CPD,,506,Other +507,CPD-Other,Other Police,CPD,,507,Other +511,Miscellaneous,Chicago Transit Authority,Miscellaneous/Other,,511,Other +512,CPD-Other,Other Police,CPD,,512,CPD +522,CPD-Other,Other Police,CPD,,522,CPD +524,CPD-Other,Other Police,CPD,,524,CPD +532,CPD-Other,Other Police,CPD,,532,CPD +533,CPD-Other,Other Police,CPD,,533,CPD +541,CPD-Other,Fraternal Order of Police,CPD,,541,CPD +542,CPD-Other,Detached Services - Security Detail,CPD,,542,CPD +543,CPD-Other,Detached Services - Misc Detail,CPD,,543,CPD +545,CPD-Other,PBPA Sergeant,CPD,,545,CPD +547,CPD-Other,Chicago Police Memorial Foundation,CPD,,547,CPD +549,CPD-Other,Inspector General Detail,CPD,,549,CPD +551,CPD-Other,Other Police,CPD,,551,CPD +557,CPD,Bureau of Patrol - Crossing Guard,CPD,,557,CPD +571,CPD-Other,Other Police,CPD,,571,CPD +577,CPD-Other,Other Police,CPD,,577,CPD +588,CPD-Other,34 E. 112th. Pl.,CPD,,588,CPD +601,CPD-Other,Detective Division - Administration,CPD,,601,CPD +603,CPD-Other,Other Police,CPD,,603,CPD +604,CPD-Other,Bomb and Arson Section,CPD,,604,CPD +605,CPD-Other,FBI Task Force Unit,CPD,,605,CPD +606,CPD-Other,Central Investigations Section,CPD,,606,CPD +607,CPD-Other,Cold Case Unit,CPD,,607,CPD +608,CPD-Other,Major Accident Investigation,CPD,,608,CPD +609,CPD-Other,Financial Crimes Unit,CPD,,609,CPD +610,CPD-Other,Detective Division - Area 1,CPD,,610,CPD +611,CPD-Other,Other Police,CPD,,611,CPD +612,CPD-Other,Other Police,CPD,,612,CPD +613,CPD-Other,Other Police,CPD,,613,CPD +616,CPD-Other,Other Police,CPD,,616,CPD +620,CPD-Other,Detective Division - Area 2,CPD,,620,CPD +621,Miscellaneous,Cook County Police,Miscellaneous/Other,,621,Other +630,CPD-Other,Detective Division - Area 3,CPD,,630,CPD +631,CPD-Other,Other Police,CPD,,631,CPD +632,CPD-Other,Other Police,CPD,,632,CPD +634,CPD-Other,Other Police,CPD,,634,CPD +638,CPD-Other,Other Police,CPD,,638,CPD +640,CPD-Other,Detective Division - Area 4,CPD,,640,CPD +642,CPD-Other,Other Police,CPD,,642,CPD +644,CPD-Other,Other Police,CPD,,644,CPD +650,CPD-Other,Detective Division - Area 5,CPD,,650,CPD +653,CPD-Other,Other Police,CPD,,653,CPD +658,CPD-Other,Other Police,CPD,,658,CPD +676,CPD-Other,Other Police,CPD,,676,CPD +694,Miscellaneous,Kennedy-King College,Miscellaneous/Other,,694,Other +701,CPD,Mass Transit,CPD,,701,CPD +702,CPD-Other,CTA Security,CPD,,702,CPD +703,CPD,Meigs Field (Summer Mobile),CPD,,703,CPD +705,CPD-Other,Other Police,CPD,,705,CPD +711,CPD-Other,Other Police,CPD,,711,CPD +713,CPD-Other,Other Police,CPD,,713,CPD +715,CPD,Taylor,CPD,,715,CPD +724,CPD-Other,Other Police,CPD,,724,CPD +728,Miscellaneous,"LAZ Parking Chicago, LLC",LAZ,,728,Other +731,CPD-Other,Other Police,CPD,,731,CPD +734,CPD-Other,Other Police,CPD,,734,CPD +752,CPD-Other,Other Police,CPD,,752,CPD +755,CPD-Other,Other Police,CPD,,755,CPD +765,CPD,P. Housing Horner Station,CPD,,765,CPD +792,Miscellaneous,Cook County Sheriff,Miscellaneous/Other,,792,Other +804,CPD-Other,Other Police,CPD,,804,CPD +813,CPD-Other,Other Police,CPD,,813,CPD +825,CPD-Other,Other Police,CPD,,825,CPD +827,CPD-Other,Other Police,CPD,,827,CPD +828,CPD-Other,Other Police,CPD,,828,CPD +829,CPD-Other,Other Police,CPD,,829,CPD +833,CPD-Other,Other Police,CPD,,833,CPD +834,CPD-Other,Other Police,CPD,,834,CPD +836,CPD-Other,Other Police,CPD,,836,CPD +838,CPD-Other,Other Police,CPD,,838,CPD +857,CPD-Other,Other Police,CPD,,857,CPD +859,CPD-Other,Other Police,CPD,,859,CPD +860,CPD-Other,Other Police,CPD,,860,CPD +861,CPD-Other,Other Police,CPD,,861,CPD +862,Miscellaneous,University of Chicago,Miscellaneous/Other,,862,Other +870,Miscellaneous,Chicago Park District,Miscellaneous/Other,,870,Other +892,Miscellaneous,St Xavier University,Miscellaneous/Other,,892,Other +896,CPD-Other,Other Police,CPD,,896,CPD +902,CPD-Other,Other Police,CPD,,902,CPD +911,CPD-Other,Other Police,CPD,,911,CPD +915,CPD-Other,Other Police,CPD,,915,CPD +921,CPD-Other,Other Police,CPD,,921,CPD +925,CPD-Other,Other Police,CPD,,925,CPD +931,CPD-Other,Other Police,CPD,,931,CPD +933,CPD-Other,Other Police,CPD,,933,CPD +935,CPD-Other,Other Police,CPD,,935,CPD +1702,CPD-Other,Other Police,CPD,,1702,CPD +2036,CPD-Other,Other Police,CPD,,2036,CPD +2599,CPD-Other,Other Police,CPD,,2599,CPD +3452,CPD-Other,Other Police,CPD,,3452,CPD +3620,CPD-Other,Other Police,CPD,,3620,CPD +6054,CPD-Other,Other Police,CPD,,6054,CPD +6215,Miscellaneous,Cook County Police ,Miscellaneous/Other,,6215,Other +CTA,CTA,CTA,CTA,,CTA,Other +cta,CTA,CTA,CTA,,cta,Other +pl,CPD-Other,Other Police,CPD,,pl,CPD +RDFX,Red Light,Red Light,Red light,,RDFX,Red Light +0,Unidentified,NULL OR ZERO,Miscellaneous/Other,,0,Other +,Unidentified,NULL OR ZERO,Miscellaneous/Other,,,Other +1,CPD,1718 S. State,CPD,,1,CPD +300,CPD-Other,Other Police,CPD,,300,CPD +402,CPD-Other,Other Police,CPD,,402,CPD +42,CPD-Other,Other Police,CPD,,42,CPD +452,CPD-Other,Other Police,CPD,,452,CPD +48,CPD-Other,Other Police,CPD,,48,CPD +509,CPD-Other,Other Police,CPD,,509,CPD +54,CPD-Other,Other Police,CPD,,54,CPD +584,CPD-Other,Other Police,CPD,,584,CPD +585,CPD-Other,Other Police,CPD,,585,CPD +595,CPD-Other,Other Police,CPD,,595,CPD +641,CPD-Other,Other Police,CPD,,641,CPD +693,CPD-Other,Other Police,CPD,,693,CPD +704,CPD-Other,Other Police,CPD,,704,CPD +717,CPD-Other,Other Police,CPD,,717,CPD +749,CPD-Other,Other Police,CPD,,749,CPD +76,CPD-Other,Other Police,CPD,,76,CPD +777,CPD-Other,Other Police,CPD,,777,CPD +802,CPD-Other,Other Police,CPD,,802,CPD +812,CPD-Other,Other Police,CPD,,812,CPD +824,CPD-Other,Other Police,CPD,,824,CPD +832,CPD-Other,Other Police,CPD,,832,CPD +835,CPD-Other,Other Police,CPD,,835,CPD +88,CPD-Other,Other Police,CPD,,88,CPD +90,CPD-Other,Other Police,CPD,,90,CPD +922,CPD-Other,Other Police,CPD,,922,CPD +924,CPD-Other,Other Police,CPD,,924,CPD +927,CPD-Other,Other Police,CPD,,927,CPD +96,CPD-Other,Other Police,CPD,,96,CPD +968,CPD-Other,Other Police,CPD,,968,CPD +990,CPD-Other,Other Police,CPD,,990,CPD +D2,CPD-Other,Other Police,CPD,,D2,CPD +K52,CPD-Other,Other Police,CPD,,K52,CPD +712,CPD-Other,Office of 1st Deputy Superintendent,CPD,,712,CPD +8489,CPD,CPD,CPD,,8489,CPD +SPD,Speed,Speed,Speed,,SPD,Speed +526,Miscellaneous,Navy Pier Security,Miscellaneous/Other,,526,Other +XERX,Red Light,Red Light,Red light,,XERX,Red Light +241,CPD-Other,Troubled Building Section,CPD,,241,CPD +261,CPD-Other,Court Section,CPD,,261,CPD +277,CPD-Other,Forensic Services,CPD,,277,CPD +411,CPD-Other,Area Central Deputy Chief,CPD,,411,CPD +413,CPD-Other,Area North Deputy Chief,CPD,,413,CPD +442,CPD-Other,Bomb Unit,CPD,,442,CPD +2111,CPD-Other,Other Police,CPD,,2111,CPD +3837,CPD-Other,Other Police,CPD,,3837,CPD +401,CPD-Other,Other Police,CPD,,401,CPD +414,CPD-Other,Other Police,CPD,,414,CPD +415,CPD-Other,Other Police,CPD,,415,CPD +707,CPD-Other,Other Police,CPD,,707,CPD +814,CPD-Other,Other Police,CPD,,814,CPD +789,CPD-Other,Other Police,CPD,,789,CPD +410,CPD-Other,Other Police,CPD,,410,CPD +109,CPD-Other,Other Police,CPD,,109,CPD +TEST,CPD-Other,Other Police,CPD,,TEST,CPD +899,Miscellaneous,McCormick Place,Miscellaneous/Other,,899,Other +900,Miscellaneous,Homeland Security,Miscellaneous/Other,,900,Other +714,CPD-Other,Summer Bike Patrol,CPD,,714,CPD +9999,Miscellaneous,Miscellaneous,Miscellaneous/Other,,9999,Other +1111,Miscellaneous,Miscellaneous,Miscellaneous/Other,,1111,Other \ No newline at end of file From 36e35e20590ee700ae252f1d8abd6b21b209497a Mon Sep 17 00:00:00 2001 From: kat-alo Date: Thu, 23 Aug 2018 10:13:38 -0500 Subject: [PATCH 061/140] adds data dict to zip file for s3 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 468be01..0f3e896 100644 --- a/Makefile +++ b/Makefile @@ -124,7 +124,7 @@ data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.tx data/processed/parking_tickets.csv : psql $(ILTICKETS_DB_URL) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" -data/processed/parking_tickets.zip : data/unit_key.csv data/processed/parking_tickets.csv +data/processed/parking_tickets.zip : data/data_dictionary.txt data/unit_key.csv data/processed/parking_tickets.csv zip $@ $^ upload_zip : data/processed/parking_tickets.zip From 19d0577f4e70c453a64abdc7ca569c3d6124d02f Mon Sep 17 00:00:00 2001 From: kat-alo Date: Thu, 23 Aug 2018 10:16:12 -0500 Subject: [PATCH 062/140] adding requirements text file --- requirements.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2b9996d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,17 @@ +appnope==0.1.0 +backcall==0.1.0 +decorator==4.3.0 +ipython==6.5.0 +ipython-genutils==0.2.0 +jedi==0.12.1 +parso==0.3.1 +pexpect==4.6.0 +pickleshare==0.7.4 +prompt-toolkit==1.0.15 +ptyprocess==0.6.0 +pycrypto==2.6.1 +Pygments==2.2.0 +simplegeneric==0.8.1 +six==1.11.0 +traitlets==4.3.2 +wcwidth==0.1.7 From aa1b7b18fa28ea3052c14fa5660e084daa2f2e22 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Thu, 23 Aug 2018 10:23:10 -0500 Subject: [PATCH 063/140] updating gitignore, closes #58 --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index c2586cc..686db17 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ data/ dupes/ env/ Ticket data/ +__pycache__/ +il-ticket-loader/ +processors/salt.txt From 5c57664ef5cf9e07c4ad445dfc8b05ac791587a2 Mon Sep 17 00:00:00 2001 From: kat-alo Date: Thu, 23 Aug 2018 10:35:49 -0500 Subject: [PATCH 064/140] updating readme to include data dictionary and python requirements, closes #52 --- README.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ca4ce2..e0f2e3a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ * Python 3 * PostgreSQL * ProPublica Illinois S3 bucket credentials -* CSVKit (with Homebrew already installed, run: `pip install csvkit`) + +Run `pip install -r requirements.txt` to install Python dependencies. ## Configuration @@ -92,4 +93,31 @@ Dupes are written to the `dupes` directory as CSVs for each year where dupes wer * `sql/tables/community_area_stats.sql` was generated with CSVKit's `csvsql` command like so: `csvsql data/geodate/community_area_stats.csv > sql/tables/community_area_stats.sql` +## Data Dictionary + +The City of Chicago has told us that an official data dictionary does not exist. But through interviews with finance department officials and other reporting, this is how we can best describe the data contained in these records: +• `ticket_number`: a unique ID for each citation +• `issue_date`: date and time the ticket was issued +• `violation_location`: street address where the ticket was issued +• `license_plate_number`: contains a hash, making it possible to determine whether tickets were issued to the same vehicle, while anonymizing the actual license plate numbers. +• `license_plate_state`: what state the license plate is from, expressed as a two-letter abbreviation +• `license_plate_type`: the vast majority of license plates are for passenger vehicles. But also included are trucks, temporary plates and taxi cabs, among many others. +• `zipcode`: the ZIP code associated with the vehicle registration +• `violation_code`: municipal code associated with violation; these have changed slightly over time +• `violation_description`: name of violation +• `unit`: This number relates to subcategories within units, such as police precincts or private contractors. A file with a unit crosswalk obtained from the Department of Finance is included in the data download. +• `unit_description`: the agency that issued the ticket, typically “CPD” for Chicago Police Department or “DOF” for Department of Finance, which can include subcontractors. +• `vehicle_make`: vehicle make +• `fine_level1_amount`: original cost of citation +• `fine_level2_amount`: price of citation plus any late penalties or collections fees. Unpaid tickets can double in price and accrue a 22-percent collection charge. +• `current_amount_due`: total amount due for that citation and any related late penalties as of May 14, 2018, when data was last updated. +• `total_payments`: total amount paid for ticket and associated penalties as of May 14, 2018, when data was last updated. +• `ticket_queue`: This category describes the most recent status of the ticket. These are marked “Paid” if the ticket was paid; “Dismissed” if the ticket was dismissed, (either internally or as a result of an appeal); “Hearing Req” if the ticket was contested and awaiting a hearing at the time the data was pulled; “Notice” if the ticket was not yet paid and the city sent a notice to the address on file for that vehicle; “Court” if the ticket is involved in some sort of court case, not including bankruptcy; “Bankruptcy” if the ticket was unpaid and included as a debt in a consumer bankruptcy case; and “Define” if the city cannot identify the vehicle owner and collect on a debt. Current as of May 14, 2018, when the data was last updated. +• `ticket_queue_date`: when the “ticket_queue” was last updated. +• `notice_level`: This field describes the type of notice the city has sent a motorist. The types of notices include: “VIOL,” which means a notice of violation was sent; “SEIZ” indicates the vehicle is on the city’s boot list; “DETR” indicates a hearing officer found the vehicle owner was found liable for the citation; “FINL” indicates the unpaid ticket was sent to collections; and “DLS” means the city intends to seek a license suspension. If the field is blank, no notice was sent. +• `hearing_disposition`: outcome of a hearing, either “Liable” or “Not Liable.” If the ticket was not contested this field is blank. +• `notice_number`: a unique ID attached to the notice, if one was sent. +• `officer`: a unique ID for the specific police officer or parking enforcement aide who issued the ticket. +• `address`: full address of the form “, Chicago, IL ”. Addresses in this field are normalized to the block level (e.g. 1983 N. Ashland is transformed to 1900 N. Ashland) for more efficient geocoding and analysis. This field was computed by ProPublica and does not exist in the original data. + From b3d54efdf449d9f3cf93c4effda51ed5e0be9153 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 12 Oct 2018 15:47:32 -0500 Subject: [PATCH 065/140] account for reason for dismissal from older data --- processors/clean_csv.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index de4ec36..7d6acd1 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -38,22 +38,30 @@ def hash_plates(row, salt): plate = row[3] to_hash = (plate + salt).encode('utf-8') hash.update(to_hash) - row[3]= hash.hexdigest() + row.append(hash.hexdigest()) return row def clean(data_filename, salt_filename): + addcol = False # Some source files have "reason for dismissmal" column with open(salt_filename, 'r') as f: salt = f.read() writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) with open(data_filename) as f: - reader = csv.reader(f, delimiter="$", quotechar='"') + reader = csv.reader((line.replace('\0','') for line in f), delimiter="$", quotechar='"') headers = next(reader) + if 'Reason for Dismissal' not in headers: + headers = headers[:-1] + ['Reason for Dismissal'] + headers[-1:] + addcol = True + headers.append('address') + headers.append('license_hash') writer.writerow(headers) for row in reader: try: row = clean_commas(row) + if addcol: + row = row[:-1] + [''] + row[-1:] row = clean_location(row) row = hash_plates(row, salt) writer.writerow(row) From aed07200b4433c68fb0341e54dfe06b7980c7995 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 12 Oct 2018 15:48:28 -0500 Subject: [PATCH 066/140] makefile cleanup --- Makefile | 60 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 468be01..7c5bca9 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,20 @@ -YEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -TABLES = parking cameras geocodes community_area_stats -VIEWS = community_area_city_stickers geocode_accuracy +#YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 +YEARS = 2014 2015 2016 2017 +DATATABLES = parking cameras +GEOTABLES = communityareas wards2015 +VIEWS = blocksummary_intermediate blocksummary_total blocksummary_yearly DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt -all: processors/salt.txt bootstrap geo parking indexes views analysis +all: bootstrap geo parking views clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema -geo: load_geocodes load_geodata_community_area_stats load_community_areas clean_community_areas -tables : $(patsubst %, table_%, $(TABLES)) -indexes : $(patsubst %, index_%, $(TABLES)) +geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) +tables : $(patsubst %, table_%, $(DATATABLES)) +indexes : $(patsubst %, index_%, $(DATATABLES)) primary_key_geocodes views : $(patsubst %, view_%, $(VIEWS)) analysis : $(patsubst %, data/analysis/%.csv, $(VIEWS)) @@ -23,7 +25,7 @@ load: cameras parking download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) -zip_n_ship : upload_zip +zip_n_ship : processors/salt.txt upload_zip define check_database @@ -48,7 +50,7 @@ endef create_db : $(check_database) psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" - psql $(ILTICKETS_DB_NAME) -c "CREATE EXTENSION postgis;" + psql $(ILTICKETS_DB_URL) -c "CREATE EXTENSION postgis;" table_% : sql/tables/%.sql @@ -60,39 +62,31 @@ view_% : sql/views/%.sql index_% : - $(check_public_relation) psql $(ILTICKETS_DB_URL) -c "create index on $* (address);" + $(check_public_relation) psql $(ILTICKETS_DB_URL) -c "create index on $* using hash (address);" + + +primary_key_geocodes : + psql $(ILTICKETS_DB_URL) -c "alter table geocodes add primary key (id)"; schema : - psql $(ILTICKETS_DB_NAME) -c "CREATE SCHEMA tmp;" + psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" drop_db : psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* -data/geodata/community-areas.json : +data/geodata/communityareas.json : curl "https://data.cityofchicago.org/api/geospatial/cauq-8yn6?method=export&format=GeoJSON" > $@ -data/geodata/community_area_stats.csv : - curl "https://datahub.cmap.illinois.gov/dataset/1d2dd970-f0a6-4736-96a1-3caeb431f5e4/resource/8c4e096e-c90c-4bef-9cf1-9028d094296e/download/ReferenceCCA20112015.csv" | sed -e "s:n/a::g" > data/geodata/community_area_stats.csv - - -data/analysis/%.csv : view_% - psql $(ILTICKETS_DB_URL) -c "\copy (select * from public.$*) TO '$(CURDIR)/data/analysis/$*.csv' with (delimiter ',', format csv, header);" - +data/geodata/wards2015.json : + curl "https://data.cityofchicago.org/api/geospatial/sp34-6z76?method=export&format=GeoJSON" > $@ -load_geodata_% : data/geodata/community_area_stats.csv - psql $(ILTICKETS_DB_URL) -c "\copy public.$* FROM '$(CURDIR)/data/geodata/$*.csv' with (delimiter ',', format csv, header);" - -load_community_areas : data/geodata/community-areas.json - ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/community-areas.json" -nln community_area_geography -overwrite - - -clean_community_areas : - psql $(ILTICKETS_DB_URL) -c "update community_area_stats set "GEOG"=upper("GEOG"); update community_area_stats set geog = 'OHARE' where geog = 'O''HARE'; update community_area_stats set geog = 'LOOP' where geog = 'THE LOOP';" +load_geodata_% : data/geodata/%.json + ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/$*.json" -nln $* -overwrite data/parking/A50951_PARK_Year_%.txt : @@ -109,14 +103,20 @@ data/dumps/geocodes-city-stickers.dump : load_geocodes : data/dumps/geocodes-city-stickers.dump table_geocodes pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump + #psql $(ILTICKETS_DB_URL) -c "delete from geocodes g1 using geocodes g2 where g1.id > g2.id and g1.geocoded_address = g2.geocoded_address;" + +.PRECIOUS: processors/salt.txt processors/salt.txt : python processors/create_salt.py -data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt - python processors/clean_csv.py $^ processors/salt.txt > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt + +.PRECIOUS: data/processed/A50951_PARK_Year_%_clean.csv +data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.txt processors/salt.txt + python processors/clean_csv.py $^ > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt +.PRECIOUS: data/processed/A50951_AUCM_Year_%_clean.csv data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.txt python processors/clean_csv.py $< > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.txt From 90d88b86d3f49a0893caf96cd667f13197c696ab Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 12 Oct 2018 15:48:50 -0500 Subject: [PATCH 067/140] add dismissal reason to schema --- sql/tables/parking.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql index e313aad..9a704d9 100644 --- a/sql/tables/parking.sql +++ b/sql/tables/parking.sql @@ -20,6 +20,8 @@ CREATE TABLE public.parking ( notice_level character varying, hearing_disposition character varying, notice_number bigint, + dismissal_reason character varying(128), officer character varying, - address character varying + address character varying(80), + license_hash character varying ); From 2c071b75d0c9a4fc509ef2d9c4137553e3f2400c Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 12 Oct 2018 15:54:50 -0500 Subject: [PATCH 068/140] block summary 'views' (really derived tables until hasura supports materialized views) --- sql/views/blocksummary_intermediate.sql | 16 ++++++++++++++++ sql/views/blocksummary_total.sql | 16 ++++++++++++++++ sql/views/blocksummary_yearly.sql | 23 +++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 sql/views/blocksummary_intermediate.sql create mode 100644 sql/views/blocksummary_total.sql create mode 100644 sql/views/blocksummary_yearly.sql diff --git a/sql/views/blocksummary_intermediate.sql b/sql/views/blocksummary_intermediate.sql new file mode 100644 index 0000000..c2ad09b --- /dev/null +++ b/sql/views/blocksummary_intermediate.sql @@ -0,0 +1,16 @@ +create table if not exists blocksummary_intermediate as + SELECT + p.address, + p.violation_code, + p.violation_description, + extract(year from p.issue_date) as year, + count(ticket_number) AS ticket_count, + sum(p.current_amount_due) AS amount_due, + sum(p.fine_level1_amount) AS fine_level1_amount, + sum(p.fine_level2_amount) AS fine_level2_amount, + sum(p.total_payments) AS total_payments + FROM parking p + GROUP BY p.address, p.violation_code, p.violation_description, year + ORDER BY (count(ticket_number)) DESC; + +create index on blocksummary_intermediate (address); diff --git a/sql/views/blocksummary_total.sql b/sql/views/blocksummary_total.sql new file mode 100644 index 0000000..1239bb3 --- /dev/null +++ b/sql/views/blocksummary_total.sql @@ -0,0 +1,16 @@ +create table blocksummary_total +as + SELECT + b.geocoded_address, + sum(b.ticket_count) AS ticket_count, + sum(b.amount_due) AS amount_due, + sum(b.fine_level1_amount) AS fine_level1_amount, + sum(b.fine_level2_amount) AS fine_level2_amount, + sum(b.total_payments) AS total_payments + FROM blocksummary_yearly b + GROUP BY b.geocoded_address + ORDER BY (sum(b.ticket_count)) DESC + ; + +alter table blocksummary_total + add constraint blocksummary_total_pk primary key (geocoded_address); diff --git a/sql/views/blocksummary_yearly.sql b/sql/views/blocksummary_yearly.sql new file mode 100644 index 0000000..140e465 --- /dev/null +++ b/sql/views/blocksummary_yearly.sql @@ -0,0 +1,23 @@ +create table blocksummary_yearly +as + SELECT + g.geocoded_address, + b.year, + b.violation_code, + b.violation_description, + sum(b.ticket_count) AS ticket_count, + sum(b.amount_due) AS amount_due, + sum(b.fine_level1_amount) AS fine_level1_amount, + sum(b.fine_level2_amount) AS fine_level2_amount, + sum(b.total_payments) AS total_payments + FROM blocksummary_intermediate b + JOIN geocodes g ON b.address = g.address + WHERE g.geocoded_address is not null + GROUP BY g.geocoded_address, b.year, b.violation_code, b.violation_description + ORDER BY (sum(b.ticket_count)) DESC + ; + +alter table blocksummary_yearly + add column id serial primary key; + +create index on blocksummary_yearly (geocoded_address); From 25656dcfca7fda7acc3f8ca1bbdafad0d409940d Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 12 Oct 2018 15:59:12 -0500 Subject: [PATCH 069/140] fix view creation order --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7c5bca9..96c11fd 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ YEARS = 2014 2015 2016 2017 DATATABLES = parking cameras GEOTABLES = communityareas wards2015 -VIEWS = blocksummary_intermediate blocksummary_total blocksummary_yearly +VIEWS = blocksummary_intermediate blocksummary_yearly blocksummary_total DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship From e062fb39bae85fa20d02d84ded3cd0efdceb640b Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 12 Oct 2018 15:59:29 -0500 Subject: [PATCH 070/140] update readme with additional reqs, view order --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e0f2e3a..cdd0dd8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,8 @@ * GNU make * Python 3 -* PostgreSQL +* GDAL +* PostgreSQL + PostGIS * ProPublica Illinois S3 bucket credentials Run `pip install -r requirements.txt` to install Python dependencies. @@ -41,11 +42,19 @@ make all Fast version: ``` -make bootstrap geo && make -j 8 parking && make indexes views analysis +make bootstrap geo && make -j 8 parking && make views ``` Set `-j N` to reflect the number of processors available on your system. +### Making views + +There are several derived tables. These must be run in order: + +1. `blocksummary_intermediate`: An intermediate table summarizing parking tickets by block. +1. `blocksummary_yearly`: Counts by year, ticket type, and geocoded block. +1. `blocksummary_total`: Total counts by geocoded block. + ### Reset the database ``` From b3186b3ef7126470682b93f301c38f7cdd8c8b22 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 18 Oct 2018 17:23:26 -0500 Subject: [PATCH 071/140] first tests. Found one that's not passing, too --- processors/__init__.py | 0 tests/__init__.py | 0 tests/test_clean.py | 17 +++++++++++++++++ 3 files changed, 17 insertions(+) create mode 100644 processors/__init__.py create mode 100644 tests/__init__.py create mode 100644 tests/test_clean.py diff --git a/processors/__init__.py b/processors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_clean.py b/tests/test_clean.py new file mode 100644 index 0000000..0aab70d --- /dev/null +++ b/tests/test_clean.py @@ -0,0 +1,17 @@ +import pytest +from processors import clean_csv + + +TEST_ADDRESSES = [ + ('04 W BLACKHAWK', '1 w blackhawk'), + ('5627 S CALUMET', '5600 s calumet'), + ('01800 N NEWCASTLE', '1800 n newcastle'), + ('2319 W FOSTER', '2300 w foster'), + ('03634 W SHAKESPEARE', '3600 w shakespeare'), + ('420 W 63RD ST', '400 w 63rd st'), +] + + +@pytest.mark.parametrize("input,expected", TEST_ADDRESSES) +def test_clean_address(input, expected): + assert clean_csv.clean_address(input) == expected From 4a7440d63aec6409a0b5458a1152370897e135ee Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 19 Oct 2018 14:01:39 -0500 Subject: [PATCH 072/140] trying out circleci --- .circleci/config.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..a4bf1bf --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,8 @@ +version: 2 +jobs: + build: + docker: + - image: circleci/python:3.6.6 + steps: + - checkout + - run: echo "A first hello" From 709abcffc8a420cf68caca4995dc1b72bf30b39a Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 19 Oct 2018 17:40:34 -0500 Subject: [PATCH 073/140] rename clean_csv test file for consistency --- tests/test_clean.py => test_clean_csv.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/test_clean.py => test_clean_csv.py (100%) diff --git a/tests/test_clean.py b/test_clean_csv.py similarity index 100% rename from tests/test_clean.py rename to test_clean_csv.py From 09792144008af9616bf7c993dbdbddb23f7dde44 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 19 Oct 2018 17:40:49 -0500 Subject: [PATCH 074/140] add test for clean_row function --- test_clean_csv.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test_clean_csv.py b/test_clean_csv.py index 0aab70d..b8298db 100644 --- a/test_clean_csv.py +++ b/test_clean_csv.py @@ -12,6 +12,20 @@ ] +TEST_BAD_ROWS = [ + ['68862242', '01/01/2018 08:45 am', '8731 S CRANDON', 'V739544', 'IL', 'PAS', '60629', '0976210B', 'WINDOWS MISSING OR CRACKED BEYOND 6"$145"', 'CPD-Other', 'OLDS', '25', '50', '0', '0', 'Dismissed', '04/01/2018', '', '', '0', '17169'], + ['68783813', '01/01/2018 11:59 pm', '2300 N LAWNDALE', '2219916', 'IL', 'PAS', '606393518', '0976210B', 'WINDOWS MISSING OR CRACKED BEYOND 6"$25"', 'CPD', 'CADI', '25', '50', '0', '0', 'Dismissed', '03/28/2018', '', 'Not Liable', '5210502980', '8242'], + ['68705090', '01/23/2018 12:46 am', '62 E CERMAK', '867T935', 'IL', 'TMP', '60653', '0976100A', 'SUSPENSION MODIFIED BEYOND 3"$1"', 'CPD', 'FORD', '25', '50', '50', '0', 'Notice', '02/01/2018', 'SEIZ', '', '5211010250', '3377'], +] + + @pytest.mark.parametrize("input,expected", TEST_ADDRESSES) def test_clean_address(input, expected): assert clean_csv.clean_address(input) == expected + + +@pytest.mark.parametrize("row", TEST_BAD_ROWS) +def test_clean_row(row): + clean_row = clean_csv.clean_commas(row) + assert len(clean_row) == len(row) + 1 + From 638bae7d2f4989553180f9ac0657c00fec8529c0 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 19 Oct 2018 17:45:18 -0500 Subject: [PATCH 075/140] use a config.yml that was autogenerated during project setup --- .circleci/config.yml | 51 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a4bf1bf..f964e54 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,55 @@ +# Python CircleCI 2.0 configuration file +# +# Check https://circleci.com/docs/2.0/language-python/ for more details +# version: 2 jobs: build: docker: - - image: circleci/python:3.6.6 + # specify the version you desire here + # use `-browsers` prefix for selenium tests, e.g. `3.6.1-browsers` + - image: circleci/python:3.6.1 + + # Specify service dependencies here if necessary + # CircleCI maintains a library of pre-built images + # documented at https://circleci.com/docs/2.0/circleci-images/ + - image: circleci/postgres:9.4 + + working_directory: ~/repo + steps: - checkout - - run: echo "A first hello" + + # Download and cache dependencies + - restore_cache: + keys: + - v1-dependencies-{{ checksum "requirements.txt" }} + # fallback to using the latest cache if no exact match is found + - v1-dependencies- + + - run: + name: install dependencies + command: | + python3 -m venv venv + . venv/bin/activate + pip install -r requirements.txt + + - save_cache: + paths: + - ./venv + key: v1-dependencies-{{ checksum "requirements.txt" }} + + # run tests! + # this example uses Django's built-in test-runner + # other common Python testing frameworks include pytest and nose + # https://pytest.org + # https://nose.readthedocs.io + - run: + name: run tests + command: | + . venv/bin/activate + pytest . + + - store_artifacts: + path: test-reports + destination: test-reports From 0882b442d9251b23d02bfcdbe0fae4a5ae3426b4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 19 Oct 2018 17:50:18 -0500 Subject: [PATCH 076/140] match zero or more leading zeros from address strings --- processors/clean_csv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 7d6acd1..b7a0512 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -3,7 +3,7 @@ import sys from Crypto.Hash import SHA256 -block_re = re.compile(r"(\d*)(\d{2})(\s)", re.IGNORECASE) +block_re = re.compile(r"0*(\d*)(\d{2})(\s)", re.IGNORECASE) twodigit_re = re.compile(r"^(00 )(.*)", re.IGNORECASE) From 08704d0c68124e1c51df694e29d7bd4bf3ec1f2e Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 19 Oct 2018 17:56:04 -0500 Subject: [PATCH 077/140] fix requirements for circle ci --- requirements.txt | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2b9996d..82cce39 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,17 +1,8 @@ -appnope==0.1.0 -backcall==0.1.0 -decorator==4.3.0 -ipython==6.5.0 -ipython-genutils==0.2.0 -jedi==0.12.1 -parso==0.3.1 -pexpect==4.6.0 -pickleshare==0.7.4 -prompt-toolkit==1.0.15 -ptyprocess==0.6.0 +atomicwrites==1.2.1 +attrs==18.2.0 +more-itertools==4.3.0 +pluggy==0.8.0 +py==1.7.0 pycrypto==2.6.1 -Pygments==2.2.0 -simplegeneric==0.8.1 +pytest==3.9.1 six==1.11.0 -traitlets==4.3.2 -wcwidth==0.1.7 From 71e9744e2d348d6af8392193f28af8f06fb3c502 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 22 Oct 2018 15:51:35 -0500 Subject: [PATCH 078/140] derive geocodes from original table --- Makefile | 29 ++++++++++++++--------------- README.md | 4 ++-- sql/views/geocodes.sql | 21 +++++++++++++++++++++ 3 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 sql/views/geocodes.sql diff --git a/Makefile b/Makefile index bd05032..9943d95 100644 --- a/Makefile +++ b/Makefile @@ -1,20 +1,19 @@ -#YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -YEARS = 2014 2015 2016 2017 +YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking cameras GEOTABLES = communityareas wards2015 -VIEWS = blocksummary_intermediate blocksummary_yearly blocksummary_total +VIEWS = geocodes blocksummary_intermediate blocksummary_yearly blocksummary_total DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt -all: bootstrap geo parking views +all: bootstrap geo parking address_indexes views clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema -geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) +geo: load_geocodes geocodes_primary_key $(patsubst %, load_geodata_%, $(GEOTABLES)) tables : $(patsubst %, table_%, $(DATATABLES)) -indexes : $(patsubst %, index_%, $(DATATABLES)) primary_key_geocodes +address_indexes : $(patsubst %, address_index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) analysis : $(patsubst %, data/analysis/%.csv, $(VIEWS)) @@ -61,14 +60,6 @@ view_% : sql/views/%.sql psql $(ILTICKETS_DB_URL) -f $< -index_% : - $(check_public_relation) psql $(ILTICKETS_DB_URL) -c "create index on $* using hash (address);" - - -primary_key_geocodes : - psql $(ILTICKETS_DB_URL) -c "alter table geocodes add primary key (id)"; - - schema : psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" @@ -103,7 +94,15 @@ data/dumps/geocodes-city-stickers.dump : load_geocodes : data/dumps/geocodes-city-stickers.dump table_geocodes pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump - #psql $(ILTICKETS_DB_URL) -c "delete from geocodes g1 using geocodes g2 where g1.id > g2.id and g1.geocoded_address = g2.geocoded_address;" + psql $(ILTICKETS_DB_URL) -c "alter table geocodes rename to raw_geocodes" + + +geocodes_primary_key : + psql $(ILTICKETS_DB_URL) -c "alter table raw_geocodes add primary key (id)"; + + +address_index_% : + $(check_public_relation) psql $(ILTICKETS_DB_URL) -c "create index on $* using hash (address);" .PRECIOUS: processors/salt.txt diff --git a/README.md b/README.md index cdd0dd8..5847d80 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ source env/dev.sh Or you can set environment variables: ``` -export ILTICKETS_DB_URL=postgres://localhost/iltickets -export ILTICKETS_DB_ROOT_URL=postgres://localhost +export ILTICKETS_DB_URL=postgresql://localhost/iltickets +export ILTICKETS_DB_ROOT_URL=postgresql://localhost export ILTICKETS_DB_NAME=iltickets export ILTICKETS_DB_STRING="dbname=iltickets" ``` diff --git a/sql/views/geocodes.sql b/sql/views/geocodes.sql new file mode 100644 index 0000000..ab9e8be --- /dev/null +++ b/sql/views/geocodes.sql @@ -0,0 +1,21 @@ +create table if not exists geocodes as + SELECT DISTINCT ON (geocoded_address) + address, + geocoded_address, + geocoded_lng, + geocoded_lat, + geocoded_city, + geocoded_state, + geocode_geojson->'features'->0->'properties'->>'postal' as geocoded_zip, + case + when split_part(geocoded_address, ' ', 2) not in ('N', 'E', 'S', 'W') then null + else split_part(geocoded_address, ' ', 2) + end as cardinal_direction + from raw_geocodes + order by geocoded_address, id; + +alter table geocodes + add column id serial primary key; + +create index on geocodes (address); +create index on geocodes (geocoded_address); From eb9d834ec6ec82c5a355456c155f1a297c39fa63 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 22 Oct 2018 16:34:50 -0500 Subject: [PATCH 079/140] try to speed up intermediate table query --- sql/views/blocksummary_intermediate.sql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sql/views/blocksummary_intermediate.sql b/sql/views/blocksummary_intermediate.sql index c2ad09b..3fb3a37 100644 --- a/sql/views/blocksummary_intermediate.sql +++ b/sql/views/blocksummary_intermediate.sql @@ -2,7 +2,6 @@ create table if not exists blocksummary_intermediate as SELECT p.address, p.violation_code, - p.violation_description, extract(year from p.issue_date) as year, count(ticket_number) AS ticket_count, sum(p.current_amount_due) AS amount_due, @@ -10,7 +9,7 @@ create table if not exists blocksummary_intermediate as sum(p.fine_level2_amount) AS fine_level2_amount, sum(p.total_payments) AS total_payments FROM parking p - GROUP BY p.address, p.violation_code, p.violation_description, year - ORDER BY (count(ticket_number)) DESC; + GROUP BY p.address, p.violation_code, year +; create index on blocksummary_intermediate (address); From d86dacdb2a86d5c83ca459dabf607d775a19ff77 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 23 Oct 2018 14:01:13 -0500 Subject: [PATCH 080/140] more makefile optimization --- Makefile | 52 ++++++++++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/Makefile b/Makefile index 9943d95..86acadf 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -DATATABLES = parking cameras +DATATABLES = parking GEOTABLES = communityareas wards2015 VIEWS = geocodes blocksummary_intermediate blocksummary_yearly blocksummary_total DATADIRS = analysis cameras geodata parking processed @@ -7,19 +7,17 @@ DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt -all: bootstrap geo parking address_indexes views +all: bootstrap geo parking indexes views clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema -geo: load_geocodes geocodes_primary_key $(patsubst %, load_geodata_%, $(GEOTABLES)) +geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) tables : $(patsubst %, table_%, $(DATATABLES)) -address_indexes : $(patsubst %, address_index_%, $(DATATABLES)) +indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) -analysis : $(patsubst %, data/analysis/%.csv, $(VIEWS)) parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) -load: cameras parking download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) @@ -28,40 +26,44 @@ zip_n_ship : processors/salt.txt upload_zip define check_database - psql $(ILTICKETS_DB_URL) -c "select 1;" > /dev/null 2>&1 || + psql $(ILTICKETS_DB_URL) -c "select 1;" > /dev/null 2>&1 endef define check_public_relation - psql $(ILTICKETS_DB_URL) -c "\d public.$*" > /dev/null 2>&1 || + psql $(ILTICKETS_DB_URL) -c "\d public.$*" > /dev/null 2>&1 endef define check_tmp_parking_relation - psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_parking_$*" > /dev/null 2>&1 || + psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_parking_$*" > /dev/null 2>&1 endef define check_tmp_cameras_relation - psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_cameras_$*" > /dev/null 2>&1 || + psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_cameras_$*" > /dev/null 2>&1 endef create_db : - $(check_database) psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" - psql $(ILTICKETS_DB_URL) -c "CREATE EXTENSION postgis;" + $(check_database) || psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" && \ + psql $(ILTICKETS_DB_URL) -c "CREATE EXTENSION IF NOT EXISTS postgis;" table_% : sql/tables/%.sql - $(check_public_relation) psql $(ILTICKETS_DB_URL) -f $< + $(check_public_relation) || psql $(ILTICKETS_DB_URL) -f $< view_% : sql/views/%.sql psql $(ILTICKETS_DB_URL) -f $< +index_% : sql/indexes/%.sql + psql $(ILTICKETS_DB_URL) -f $< + + schema : - psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA tmp;" + psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA IF NOT EXISTS tmp;" drop_db : @@ -93,16 +95,9 @@ data/dumps/geocodes-city-stickers.dump : load_geocodes : data/dumps/geocodes-city-stickers.dump table_geocodes - pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump - psql $(ILTICKETS_DB_URL) -c "alter table geocodes rename to raw_geocodes" - - -geocodes_primary_key : - psql $(ILTICKETS_DB_URL) -c "alter table raw_geocodes add primary key (id)"; - - -address_index_% : - $(check_public_relation) psql $(ILTICKETS_DB_URL) -c "create index on $* using hash (address);" + psql $(ILTICKETS_DB_URL) -c "\d public.raw_geocodes" > /dev/null 2>&1 || \ + pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump && \ + psql $(ILTICKETS_DB_URL) -c "alter table if exists geocodes rename to raw_geocodes" .PRECIOUS: processors/salt.txt @@ -130,22 +125,23 @@ upload_zip : data/processed/parking_tickets.zip aws s3 cp $^ s3://data-publica/il_parking_tickets_20180822.zip dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv - $(check_tmp_parking_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" + $(check_tmp_parking_relation) || psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" - psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_parking_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" touch $< dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv - $(check_tmp_cameras_relation) psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" + $(check_tmp_cameras_relation) || psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_cameras_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.cameras SELECT * FROM tmp.tmp_table_cameras_$* ON CONFLICT DO NOTHING;" - psql $(ILTICKETS_DB_URL) -c "\copy (select ticket_number, count(ticket_number) as count from tmp.tmp_table_cameras_$* group by ticket_number having count(ticket_number) > 1) TO '$(PWD)/dupes/parking-$*.csv' with delimiter ',' csv header;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_cameras_$*;" touch $< +vacuum : + psql $(ILTICKETS_DB_URL) -c "VACUUM FULL;" + clean_% : rm -Rf data/$*/* From a3b141b0ea32b153e323a0869fc38981346023f2 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 23 Oct 2018 14:01:41 -0500 Subject: [PATCH 081/140] make hash object once (cuts a few seconds off processing time) --- processors/clean_csv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index b7a0512..9bc9f95 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -5,6 +5,7 @@ block_re = re.compile(r"0*(\d*)(\d{2})(\s)", re.IGNORECASE) twodigit_re = re.compile(r"^(00 )(.*)", re.IGNORECASE) +hash = SHA256.new() def clean_commas(row): @@ -34,7 +35,6 @@ def clean_address(address): def hash_plates(row, salt): - hash = SHA256.new() plate = row[3] to_hash = (plate + salt).encode('utf-8') hash.update(to_hash) From 83ef99551727fa4d0ae55638f1215812da345c93 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 23 Oct 2018 14:02:33 -0500 Subject: [PATCH 082/140] use new year column in queries --- processors/clean_csv.py | 17 +++++++++++++++-- sql/tables/parking.sql | 6 ++++-- sql/views/blocksummary_intermediate.sql | 2 +- sql/views/blocksummary_yearly.sql | 3 +-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 9bc9f95..a3db2ce 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -42,6 +42,16 @@ def hash_plates(row, salt): return row +def extract_year(row): + row.append(int(row[1][6:10])) + return row + + +def extract_month(row): + row.append(int(row[1][:2])) + return row + + def clean(data_filename, salt_filename): addcol = False # Some source files have "reason for dismissmal" column with open(salt_filename, 'r') as f: @@ -50,11 +60,12 @@ def clean(data_filename, salt_filename): with open(data_filename) as f: reader = csv.reader((line.replace('\0','') for line in f), delimiter="$", quotechar='"') headers = next(reader) + + # 1996-2006 have this field, newer records do not if 'Reason for Dismissal' not in headers: headers = headers[:-1] + ['Reason for Dismissal'] + headers[-1:] addcol = True - headers.append('address') - headers.append('license_hash') + headers += ['address', 'license_hash', 'year', 'month'] writer.writerow(headers) for row in reader: @@ -64,6 +75,8 @@ def clean(data_filename, salt_filename): row = row[:-1] + [''] + row[-1:] row = clean_location(row) row = hash_plates(row, salt) + row = extract_year(row) + row = extract_month(row) writer.writerow(row) except IndexError: print(row, file=sys.stderr) diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql index 9a704d9..66b7f86 100644 --- a/sql/tables/parking.sql +++ b/sql/tables/parking.sql @@ -6,7 +6,7 @@ CREATE TABLE public.parking ( license_plate_state character varying, license_plate_type character varying, zipcode character varying, - violation_code character varying, + violation_code character varying(12), violation_description character varying, unit character varying, unit_description character varying, @@ -23,5 +23,7 @@ CREATE TABLE public.parking ( dismissal_reason character varying(128), officer character varying, address character varying(80), - license_hash character varying + license_hash character varying, + year int, + month int ); diff --git a/sql/views/blocksummary_intermediate.sql b/sql/views/blocksummary_intermediate.sql index 3fb3a37..8bb477d 100644 --- a/sql/views/blocksummary_intermediate.sql +++ b/sql/views/blocksummary_intermediate.sql @@ -2,7 +2,7 @@ create table if not exists blocksummary_intermediate as SELECT p.address, p.violation_code, - extract(year from p.issue_date) as year, + p.year as year, count(ticket_number) AS ticket_count, sum(p.current_amount_due) AS amount_due, sum(p.fine_level1_amount) AS fine_level1_amount, diff --git a/sql/views/blocksummary_yearly.sql b/sql/views/blocksummary_yearly.sql index 140e465..53c8df3 100644 --- a/sql/views/blocksummary_yearly.sql +++ b/sql/views/blocksummary_yearly.sql @@ -4,7 +4,6 @@ as g.geocoded_address, b.year, b.violation_code, - b.violation_description, sum(b.ticket_count) AS ticket_count, sum(b.amount_due) AS amount_due, sum(b.fine_level1_amount) AS fine_level1_amount, @@ -13,7 +12,7 @@ as FROM blocksummary_intermediate b JOIN geocodes g ON b.address = g.address WHERE g.geocoded_address is not null - GROUP BY g.geocoded_address, b.year, b.violation_code, b.violation_description + GROUP BY g.geocoded_address, b.year, b.violation_code ORDER BY (sum(b.ticket_count)) DESC ; From 7cc48697cb1d56ae993c94ef5a736df95fa47c2f Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 23 Oct 2018 14:02:46 -0500 Subject: [PATCH 083/140] commit index creating to sql files --- sql/indexes/parking.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/indexes/parking.sql diff --git a/sql/indexes/parking.sql b/sql/indexes/parking.sql new file mode 100644 index 0000000..e82c848 --- /dev/null +++ b/sql/indexes/parking.sql @@ -0,0 +1,2 @@ +create index if not exists parking_cluster on parking (address, violation_code, year); +cluster parking using parking_cluster; From 230cc5f9d2b17362f3f51aca6425468bf291839e Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 23 Oct 2018 14:03:34 -0500 Subject: [PATCH 084/140] move test file back where it belongs --- test_clean_csv.py => tests/test_clean_csv.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test_clean_csv.py => tests/test_clean_csv.py (100%) diff --git a/test_clean_csv.py b/tests/test_clean_csv.py similarity index 100% rename from test_clean_csv.py rename to tests/test_clean_csv.py From 7808e0bfed53c9f223cd8b391a892d281380f3d8 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 10:27:47 -0500 Subject: [PATCH 085/140] use C collation holy smokes --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 86acadf..a4e890b 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,7 @@ endef create_db : - $(check_database) || psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME)" && \ + $(check_database) || psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME) lc_collate \"C\" lc_ctype \"C\" template template0" && \ psql $(ILTICKETS_DB_URL) -c "CREATE EXTENSION IF NOT EXISTS postgis;" From 1211fcc3e3e4b305de903152582e79bcaae3c8a5 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 10:29:00 -0500 Subject: [PATCH 086/140] join through multiple addresses and lat / lngs --- sql/views/blocksummary_yearly.sql | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sql/views/blocksummary_yearly.sql b/sql/views/blocksummary_yearly.sql index 53c8df3..02c38ad 100644 --- a/sql/views/blocksummary_yearly.sql +++ b/sql/views/blocksummary_yearly.sql @@ -9,8 +9,11 @@ as sum(b.fine_level1_amount) AS fine_level1_amount, sum(b.fine_level2_amount) AS fine_level2_amount, sum(b.total_payments) AS total_payments - FROM blocksummary_intermediate b - JOIN geocodes g ON b.address = g.address + FROM blocksummary_intermediate b + JOIN + raw_geocodes r ON b.address = r.address + JOIN + geocodes g on r.address = g.address WHERE g.geocoded_address is not null GROUP BY g.geocoded_address, b.year, b.violation_code ORDER BY (sum(b.ticket_count)) DESC From 2152bf8b88c54096f48a5aa3ff667dd079a5e26d Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 10:44:14 -0500 Subject: [PATCH 087/140] the amount of branches with this fix is embarassing --- test_clean_csv.py => tests/test_clean_csv.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test_clean_csv.py => tests/test_clean_csv.py (100%) diff --git a/test_clean_csv.py b/tests/test_clean_csv.py similarity index 100% rename from test_clean_csv.py rename to tests/test_clean_csv.py From 8e7611d37d4fd4adea5196a1b16b1b6b8a61aec4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 11:03:02 -0500 Subject: [PATCH 088/140] fix mistake in hashing --- processors/clean_csv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index a3db2ce..8512710 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -5,7 +5,6 @@ block_re = re.compile(r"0*(\d*)(\d{2})(\s)", re.IGNORECASE) twodigit_re = re.compile(r"^(00 )(.*)", re.IGNORECASE) -hash = SHA256.new() def clean_commas(row): @@ -35,6 +34,7 @@ def clean_address(address): def hash_plates(row, salt): + hash = SHA256.new() plate = row[3] to_hash = (plate + salt).encode('utf-8') hash.update(to_hash) From 9ccfef6754cd5a0ac1bae86114418533fd62acd2 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 11:03:28 -0500 Subject: [PATCH 089/140] clean up clean_csv file and factor date extractors into wee functions --- processors/clean_csv.py | 44 +++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 8512710..c34cf46 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -8,6 +8,9 @@ def clean_commas(row): + """ + Handle unquoted commas in fields from CANVAS. + """ if row[8].startswith('WINDOWS MISSING OR CRACKED BEYOND') or row[8].startswith('SUSPENSION MODIFIED BEYOND'): fixed_cols = row[8].replace('"', '').split('$') row = row[:8] + fixed_cols + row[9:] @@ -15,6 +18,9 @@ def clean_commas(row): def clean_location(row): + """ + Clean up a parking address for geocoding by adding the Chicago, IL stuff to the end. + """ address = "{2}, Chicago, IL".format(*row) address = clean_address(address) row.append(address.strip()) @@ -34,6 +40,9 @@ def clean_address(address): def hash_plates(row, salt): + """ + Hash license plate number, with salt. + """ hash = SHA256.new() plate = row[3] to_hash = (plate + salt).encode('utf-8') @@ -42,17 +51,40 @@ def hash_plates(row, salt): return row -def extract_year(row): - row.append(int(row[1][6:10])) +def extract_year(datestring): + """ + Return year part of date string as integer. + """ + return int(datestring[6:10]) + + +def extract_month(datestring): + """ + Return month part of date string as integer. + """ + return int(row[1][:2]) + + +def add_year(row): + """ + Add year to row. + """ + row.append(extract_year(row[1])) return row -def extract_month(row): - row.append(int(row[1][:2])) +def add_month(row): + """ + Add month to row. + """ + row.append(extract_month(datestring)) return row def clean(data_filename, salt_filename): + """ + Clean up parking CSV. + """ addcol = False # Some source files have "reason for dismissmal" column with open(salt_filename, 'r') as f: salt = f.read() @@ -75,8 +107,8 @@ def clean(data_filename, salt_filename): row = row[:-1] + [''] + row[-1:] row = clean_location(row) row = hash_plates(row, salt) - row = extract_year(row) - row = extract_month(row) + row = add_year(row) + row = add_month(row) writer.writerow(row) except IndexError: print(row, file=sys.stderr) From 8dba7e99eb49caba343cbad7dd515163c7f312a6 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 11:08:32 -0500 Subject: [PATCH 090/140] functional extraction tests --- processors/clean_csv.py | 4 ++-- tests/test_clean_csv.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index c34cf46..18e9e3c 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -62,7 +62,7 @@ def extract_month(datestring): """ Return month part of date string as integer. """ - return int(row[1][:2]) + return int(datestring[:2]) def add_year(row): @@ -77,7 +77,7 @@ def add_month(row): """ Add month to row. """ - row.append(extract_month(datestring)) + row.append(extract_month(row[1])) return row diff --git a/tests/test_clean_csv.py b/tests/test_clean_csv.py index b8298db..215c30f 100644 --- a/tests/test_clean_csv.py +++ b/tests/test_clean_csv.py @@ -19,6 +19,13 @@ ] +# (input, (month, year)) +TEST_DATES = [ + ('03/05/2005 09:05 pm', (3, 2005)), + ('06/25/1999 04:00 pm', (6, 1999)), + ('10/02/2011 03:18 pm', (10, 2011)), +] + @pytest.mark.parametrize("input,expected", TEST_ADDRESSES) def test_clean_address(input, expected): assert clean_csv.clean_address(input) == expected @@ -29,3 +36,14 @@ def test_clean_row(row): clean_row = clean_csv.clean_commas(row) assert len(clean_row) == len(row) + 1 + +@pytest.mark.parametrize("input,expected", TEST_DATES) +def test_extract_month(input, expected): + month = clean_csv.extract_month(input) + assert month == expected[0] + + +@pytest.mark.parametrize("input,expected", TEST_DATES) +def test_extract_year(input, expected): + month = clean_csv.extract_year(input) + assert month == expected[1] From daaec3ea97dd61d885dc19fb78f7ce748acaf8c4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 12:18:48 -0500 Subject: [PATCH 091/140] sane checks on existence of geocode tables and views --- Makefile | 14 +++++++------- sql/views/geocodes.sql | 21 --------------------- 2 files changed, 7 insertions(+), 28 deletions(-) delete mode 100644 sql/views/geocodes.sql diff --git a/Makefile b/Makefile index 86acadf..6c03609 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ all: bootstrap geo parking indexes views clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema -geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) +geo: load_geocodes view_geocodes_normalized $(patsubst %, load_geodata_%, $(GEOTABLES)) tables : $(patsubst %, table_%, $(DATATABLES)) indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) @@ -55,7 +55,7 @@ table_% : sql/tables/%.sql view_% : sql/views/%.sql - psql $(ILTICKETS_DB_URL) -f $< + $(check_public_relation) || psql $(ILTICKETS_DB_URL) -f $< index_% : sql/indexes/%.sql @@ -79,7 +79,7 @@ data/geodata/wards2015.json : load_geodata_% : data/geodata/%.json - ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/$*.json" -nln $* -overwrite + $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/$*.json" -nln $* -overwrite data/parking/A50951_PARK_Year_%.txt : @@ -94,10 +94,10 @@ data/dumps/geocodes-city-stickers.dump : aws s3 cp s3://data.il.propublica.org/il-tickets/dumps/geocodes-city-stickers.dump data/dumps/geocodes-city-stickers.dump -load_geocodes : data/dumps/geocodes-city-stickers.dump table_geocodes - psql $(ILTICKETS_DB_URL) -c "\d public.raw_geocodes" > /dev/null 2>&1 || \ - pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump && \ - psql $(ILTICKETS_DB_URL) -c "alter table if exists geocodes rename to raw_geocodes" +load_geocodes : data/dumps/geocodes-city-stickers.dump + psql $(ILTICKETS_DB_URL) -c "\d public.geocodes" > /dev/null 2>&1 || \ + (psql $(ILTICKETS_DB_URL) -f sql/tables/geocodes.sql && \ + pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump) .PRECIOUS: processors/salt.txt diff --git a/sql/views/geocodes.sql b/sql/views/geocodes.sql deleted file mode 100644 index ab9e8be..0000000 --- a/sql/views/geocodes.sql +++ /dev/null @@ -1,21 +0,0 @@ -create table if not exists geocodes as - SELECT DISTINCT ON (geocoded_address) - address, - geocoded_address, - geocoded_lng, - geocoded_lat, - geocoded_city, - geocoded_state, - geocode_geojson->'features'->0->'properties'->>'postal' as geocoded_zip, - case - when split_part(geocoded_address, ' ', 2) not in ('N', 'E', 'S', 'W') then null - else split_part(geocoded_address, ' ', 2) - end as cardinal_direction - from raw_geocodes - order by geocoded_address, id; - -alter table geocodes - add column id serial primary key; - -create index on geocodes (address); -create index on geocodes (geocoded_address); From cfbbdef47cf0a15aed1ee54e289a317e34647b20 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 12:19:39 -0500 Subject: [PATCH 092/140] introduce geocodes_normalized view --- sql/views/geocodes_normalized.sql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sql/views/geocodes_normalized.sql diff --git a/sql/views/geocodes_normalized.sql b/sql/views/geocodes_normalized.sql new file mode 100644 index 0000000..d376d1c --- /dev/null +++ b/sql/views/geocodes_normalized.sql @@ -0,0 +1,21 @@ +create table if not exists geocodes_normalized as + SELECT DISTINCT ON (geocoded_address) + address, + geocoded_address, + geocoded_lng, + geocoded_lat, + geocoded_city, + geocoded_state, + geocode_geojson->'features'->0->'properties'->>'postal' as geocoded_zip, + case + when split_part(geocoded_address, ' ', 2) not in ('N', 'E', 'S', 'W') then null + else split_part(geocoded_address, ' ', 2) + end as cardinal_direction + from geocodes + order by geocoded_address, id; + +alter table geocodes_normalized + add column id serial primary key; + +create index on geocodes_normalized (address); +create index on geocodes_normalized (geocoded_address); From 171cf081300ffaa6123691f2d2dcff56ff27f7e8 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 12:36:49 -0500 Subject: [PATCH 093/140] used normalized table consistently --- Makefile | 4 ++-- sql/views/blocksummary_yearly.sql | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 80ce9ad..9708fb4 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking GEOTABLES = communityareas wards2015 -VIEWS = geocodes blocksummary_intermediate blocksummary_yearly blocksummary_total +VIEWS = geocodes_normalized blocksummary_intermediate blocksummary_yearly blocksummary_total DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship @@ -11,7 +11,7 @@ all: bootstrap geo parking indexes views clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema -geo: load_geocodes view_geocodes_normalized $(patsubst %, load_geodata_%, $(GEOTABLES)) +geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) tables : $(patsubst %, table_%, $(DATATABLES)) indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) diff --git a/sql/views/blocksummary_yearly.sql b/sql/views/blocksummary_yearly.sql index 02c38ad..c311de6 100644 --- a/sql/views/blocksummary_yearly.sql +++ b/sql/views/blocksummary_yearly.sql @@ -11,9 +11,9 @@ as sum(b.total_payments) AS total_payments FROM blocksummary_intermediate b JOIN - raw_geocodes r ON b.address = r.address + geocodes r ON b.address = r.address JOIN - geocodes g on r.address = g.address + geocodes_normalized g on r.address = g.address WHERE g.geocoded_address is not null GROUP BY g.geocoded_address, b.year, b.violation_code ORDER BY (sum(b.ticket_count)) DESC From daddd0d5d2d6c86cb1387f9e99a6b09840f26b9c Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 16:24:07 -0500 Subject: [PATCH 094/140] include geom in normalized geocode query --- sql/views/geocodes_normalized.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/views/geocodes_normalized.sql b/sql/views/geocodes_normalized.sql index d376d1c..bf7fcd8 100644 --- a/sql/views/geocodes_normalized.sql +++ b/sql/views/geocodes_normalized.sql @@ -10,7 +10,8 @@ create table if not exists geocodes_normalized as case when split_part(geocoded_address, ' ', 2) not in ('N', 'E', 'S', 'W') then null else split_part(geocoded_address, ' ', 2) - end as cardinal_direction + end as cardinal_direction, + geom from geocodes order by geocoded_address, id; From f2c273f2824651cc94d6235734927f606302b606 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 16:46:54 -0500 Subject: [PATCH 095/140] write files to dupes dir, closes #88 --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 9708fb4..d150700 100644 --- a/Makefile +++ b/Makefile @@ -129,7 +129,7 @@ dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" - touch $< + touch $@ dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv @@ -137,7 +137,8 @@ dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_cameras_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.cameras SELECT * FROM tmp.tmp_table_cameras_$* ON CONFLICT DO NOTHING;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_cameras_$*;" - touch $< + touch $@ + vacuum : psql $(ILTICKETS_DB_URL) -c "VACUUM FULL;" From 3bed0a404299baa0a92422e20f50acd89d6809f4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 17:07:25 -0500 Subject: [PATCH 096/140] clean, correct, and add query example to readme closes #89 --- Makefile | 4 --- README.md | 83 ++++++++++++++++++++++++++++++++----------------------- 2 files changed, 49 insertions(+), 38 deletions(-) diff --git a/Makefile b/Makefile index d150700..f4cf9d8 100644 --- a/Makefile +++ b/Makefile @@ -140,9 +140,5 @@ dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv touch $@ -vacuum : - psql $(ILTICKETS_DB_URL) -c "VACUUM FULL;" - - clean_% : rm -Rf data/$*/* diff --git a/README.md b/README.md index 5847d80..ac56459 100644 --- a/README.md +++ b/README.md @@ -42,19 +42,11 @@ make all Fast version: ``` -make bootstrap geo && make -j 8 parking && make views +make bootstrap geo && make -j 8 parking && make indexes views ``` Set `-j N` to reflect the number of processors available on your system. -### Making views - -There are several derived tables. These must be run in order: - -1. `blocksummary_intermediate`: An intermediate table summarizing parking tickets by block. -1. `blocksummary_yearly`: Counts by year, ticket type, and geocoded block. -1. `blocksummary_total`: Total counts by geocoded block. - ### Reset the database ``` @@ -69,40 +61,63 @@ make drop_db make download ``` -### Load into DB - -``` -make load -``` +### Remove files -Or: +To clean out one of the subdirectories in the data directory: ``` -make load_parking -make load_cameras +make clean_ ``` -### Remove files +E.g. `make clean_processed` or `make clean_geodata`. -*Not implemented. You must do this manually.* - -## Error handling +### Error handling Bad CSV rows are written to `data/processed/_err.csv`. These should only ever be the final "total" line from each file. -## Duplicate handling - -To load, we first load the data into a `tmp` PostgreSQL schema (we can't use "real" temporary tables because of some limitations with how RDS handles the copy command, so to keep things portable use just use schemas). - -We then copy from the `tmp` schema to the `public` schema, ignoring duplicates. We currently keep the existing record and throw out the old one (`ON CONFLICT DO NOTHING`) but could replace. - -Dupes are written to the `dupes` directory as CSVs for each year where dupes were found. - -## Notes - -* `sql/tables/community_area_stats.sql` was generated with CSVKit's `csvsql` command like so: `csvsql data/geodate/community_area_stats.csv > sql/tables/community_area_stats.sql` - -## Data Dictionary +## Working with data + +### Key tables + +* `parking`: Raw parking ticket data +* `communityareas`: Chicago Community Area geographic data +* `wards2015`: Chicago Aldermanic Ward geographic data +* `geocodes`: Data from original geocoding run. **Use + `geocodes_normalized` for most queries.** +* `geocodes_normalized`: De-duplicated version of `geocodes` table. Join + against this table. +* `blocksummary_intermediate`: Intermediate table. **Do not use this + table.** +* `blocksummary_yearly`: Financial data grouped by block, violation + code, and year. +* `blocksummary_total`: This may not be useful now that the database is + quite fast; sums the years from `block_summary_yearly`, reducing one +grouping level. + +### Useful query patterns + +Join with ward data: + +``` +select + g.geocoded_address, + w.ward, + b.year, + b.violation_code, + b.amount_due, + b.fine_level1_amount, + b.total_payments +from + blocksummary_yearly b +join + geocodes_normalized g on b.geocoded_address = g.geocoded_address +join + wards2015 w on st_within(g.geom, w.wkb_geometry) +where + b.year > 2012 +``` + +## Data dictionary The City of Chicago has told us that an official data dictionary does not exist. But through interviews with finance department officials and other reporting, this is how we can best describe the data contained in these records: • `ticket_number`: a unique ID for each citation From a378d52f92392dd10ec68f1e367d413590e3fc86 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 24 Oct 2018 17:10:01 -0500 Subject: [PATCH 097/140] fix bad data dict list in readme --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index ac56459..c13d001 100644 --- a/README.md +++ b/README.md @@ -121,24 +121,24 @@ where The City of Chicago has told us that an official data dictionary does not exist. But through interviews with finance department officials and other reporting, this is how we can best describe the data contained in these records: • `ticket_number`: a unique ID for each citation -• `issue_date`: date and time the ticket was issued -• `violation_location`: street address where the ticket was issued -• `license_plate_number`: contains a hash, making it possible to determine whether tickets were issued to the same vehicle, while anonymizing the actual license plate numbers. -• `license_plate_state`: what state the license plate is from, expressed as a two-letter abbreviation -• `license_plate_type`: the vast majority of license plates are for passenger vehicles. But also included are trucks, temporary plates and taxi cabs, among many others. -• `zipcode`: the ZIP code associated with the vehicle registration -• `violation_code`: municipal code associated with violation; these have changed slightly over time -• `violation_description`: name of violation -• `unit`: This number relates to subcategories within units, such as police precincts or private contractors. A file with a unit crosswalk obtained from the Department of Finance is included in the data download. -• `unit_description`: the agency that issued the ticket, typically “CPD” for Chicago Police Department or “DOF” for Department of Finance, which can include subcontractors. -• `vehicle_make`: vehicle make -• `fine_level1_amount`: original cost of citation -• `fine_level2_amount`: price of citation plus any late penalties or collections fees. Unpaid tickets can double in price and accrue a 22-percent collection charge. -• `current_amount_due`: total amount due for that citation and any related late penalties as of May 14, 2018, when data was last updated. -• `total_payments`: total amount paid for ticket and associated penalties as of May 14, 2018, when data was last updated. -• `ticket_queue`: This category describes the most recent status of the ticket. These are marked “Paid” if the ticket was paid; “Dismissed” if the ticket was dismissed, (either internally or as a result of an appeal); “Hearing Req” if the ticket was contested and awaiting a hearing at the time the data was pulled; “Notice” if the ticket was not yet paid and the city sent a notice to the address on file for that vehicle; “Court” if the ticket is involved in some sort of court case, not including bankruptcy; “Bankruptcy” if the ticket was unpaid and included as a debt in a consumer bankruptcy case; and “Define” if the city cannot identify the vehicle owner and collect on a debt. Current as of May 14, 2018, when the data was last updated. -• `ticket_queue_date`: when the “ticket_queue” was last updated. -• `notice_level`: This field describes the type of notice the city has sent a motorist. The types of notices include: “VIOL,” which means a notice of violation was sent; “SEIZ” indicates the vehicle is on the city’s boot list; “DETR” indicates a hearing officer found the vehicle owner was found liable for the citation; “FINL” indicates the unpaid ticket was sent to collections; and “DLS” means the city intends to seek a license suspension. If the field is blank, no notice was sent. +* `issue_date`: date and time the ticket was issued +* `violation_location`: street address where the ticket was issued +* `license_plate_number`: contains a hash, making it possible to determine whether tickets were issued to the same vehicle, while anonymizing the actual license plate numbers. +* `license_plate_state`: what state the license plate is from, expressed as a two-letter abbreviation +* `license_plate_type`: the vast majority of license plates are for passenger vehicles. But also included are trucks, temporary plates and taxi cabs, among many others. +* `zipcode`: the ZIP code associated with the vehicle registration +* `violation_code`: municipal code associated with violation; these have changed slightly over time +* `violation_description`: name of violation +* `unit`: This number relates to subcategories within units, such as police precincts or private contractors. A file with a unit crosswalk obtained from the Department of Finance is included in the data download. +* `unit_description`: the agency that issued the ticket, typically “CPD” for Chicago Police Department or “DOF” for Department of Finance, which can include subcontractors. +* `vehicle_make`: vehicle make +* `fine_level1_amount`: original cost of citation +* `fine_level2_amount`: price of citation plus any late penalties or collections fees. Unpaid tickets can double in price and accrue a 22-percent collection charge. +* `current_amount_due`: total amount due for that citation and any related late penalties as of May 14, 2018, when data was last updated. +* `total_payments`: total amount paid for ticket and associated penalties as of May 14, 2018, when data was last updated. +* `ticket_queue`: This category describes the most recent status of the ticket. These are marked “Paid” if the ticket was paid; “Dismissed” if the ticket was dismissed, (either internally or as a result of an appeal); “Hearing Req” if the ticket was contested and awaiting a hearing at the time the data was pulled; “Notice” if the ticket was not yet paid and the city sent a notice to the address on file for that vehicle; “Court” if the ticket is involved in some sort of court case, not including bankruptcy; “Bankruptcy” if the ticket was unpaid and included as a debt in a consumer bankruptcy case; and “Define” if the city cannot identify the vehicle owner and collect on a debt. Current as of May 14, 2018, when the data was last updated. +* `ticket_queue_date`: when the “ticket_queue” was last updated. +* `notice_level`: This field describes the type of notice the city has sent a motorist. The types of notices include: “VIOL,” which means a notice of violation was sent; “SEIZ” indicates the vehicle is on the city’s boot list; “DETR” indicates a hearing officer found the vehicle owner was found liable for the citation; “FINL” indicates the unpaid ticket was sent to collections; and “DLS” means the city intends to seek a license suspension. If the field is blank, no notice was sent. • `hearing_disposition`: outcome of a hearing, either “Liable” or “Not Liable.” If the ticket was not contested this field is blank. • `notice_number`: a unique ID attached to the notice, if one was sent. • `officer`: a unique ID for the specific police officer or parking enforcement aide who issued the ticket. From b73b13126bd12baaeca0bb5753358f814c0385d9 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 25 Oct 2018 14:21:04 -0500 Subject: [PATCH 098/140] add violation lookup --- sql/views/violations.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/views/violations.sql diff --git a/sql/views/violations.sql b/sql/views/violations.sql new file mode 100644 index 0000000..9039b29 --- /dev/null +++ b/sql/views/violations.sql @@ -0,0 +1,7 @@ +create table violations as + select + distinct + violation_code, + trim(violation_description) as violation_description + from parking +; From e0a87e68bf8fc67fda6ab760f0645518b8de0d24 Mon Sep 17 00:00:00 2001 From: David Eads Date: Sun, 28 Oct 2018 22:26:32 -0500 Subject: [PATCH 099/140] wip --- benchmarks/index_tests.md | 205 +++++++++++++++++++++ sql/views/blocks.sql | 0 sql/views/blocksummary_intermediate.sql | 15 -- sql/views/blocksummary_total.sql | 16 -- sql/views/blocksummary_yearly.sql | 25 --- sql/views/community_area_city_stickers.sql | 41 ----- sql/views/geocode_accuracy.sql | 42 ----- sql/views/geocodes_communityareas.sql | 16 -- 8 files changed, 205 insertions(+), 155 deletions(-) create mode 100644 benchmarks/index_tests.md create mode 100644 sql/views/blocks.sql delete mode 100644 sql/views/blocksummary_intermediate.sql delete mode 100644 sql/views/blocksummary_total.sql delete mode 100644 sql/views/blocksummary_yearly.sql delete mode 100644 sql/views/community_area_city_stickers.sql delete mode 100644 sql/views/geocode_accuracy.sql delete mode 100644 sql/views/geocodes_communityareas.sql diff --git a/benchmarks/index_tests.md b/benchmarks/index_tests.md new file mode 100644 index 0000000..8a78d35 --- /dev/null +++ b/benchmarks/index_tests.md @@ -0,0 +1,205 @@ +# Indexing speed + +Run against 2017-2018 parking data. + +## Without presorting + +### Index creation + +``` +iltickets=# create index if not exists parking_cluster on parking (address, violation_code, year); + +CREATE INDEX +Time: 61561.402 ms (01:01.561) + + +iltickets=# cluster parking using parking_cluster; + +CLUSTER +Time: 65946.112 ms (01:05.946) + + +iltickets=# analyze parking; +ANALYZE +Time: 2616.422 ms (00:02.616) +``` + +### End-to-end + +``` +✗ time make YEARS="2017 2018" all +... +1.90s user 0.98s system 1% cpu 4:01.65 total +``` + +(Full output:) + +``` +✗ time make YEARS="2017 2018" all +psql postgresql://localhost/iltickets -c "select 1;" > /dev/null 2>&1 || psql postgresql://localhost -c "create database iltickets" && \ + psql postgresql://localhost/iltickets -c "CREATE EXTENSION IF NOT EXISTS postgis;" +CREATE DATABASE +CREATE EXTENSION +psql postgresql://localhost/iltickets -c "\d public.parking" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -f sql/tables/parking.sql +CREATE TABLE +psql postgresql://localhost/iltickets -c "CREATE SCHEMA IF NOT EXISTS tmp;" +CREATE SCHEMA +psql postgresql://localhost/iltickets -c "\d public.geocodes" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -f sql/tables/geocodes.sql +CREATE TABLE +psql postgresql://localhost/iltickets -c "\d public.raw_geocodes" > /dev/null 2>&1 || \ + pg_restore -d "postgresql://localhost/iltickets" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump && \ + psql postgresql://localhost/iltickets -c "alter table if exists geocodes rename to raw_geocodes" +ALTER TABLE +ogr2ogr -f "PostgreSQL" PG:"dbname=iltickets" "data/geodata/communityareas.json" -nln communityareas -overwrite +ogr2ogr -f "PostgreSQL" PG:"dbname=iltickets" "data/geodata/wards2015.json" -nln wards2015 -overwrite +psql postgresql://localhost/iltickets -c "\d tmp.tmp_table_parking_2017" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -c "CREATE TABLE tmp.tmp_table_parking_2017 AS SELECT * FROM public.parking WITH NO DATA;" +CREATE TABLE AS +psql postgresql://localhost/iltickets -c "\copy tmp.tmp_table_parking_2017 FROM '/Users/DE-Admin/Code/il-ticket-loader/data/processed/A50951_PARK_Year_2017_clean.csv' with (delimiter ',', format csv, header);" +COPY 2190763 +psql postgresql://localhost/iltickets -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_2017 ON CONFLICT DO NOTHING;" +INSERT 0 2190763 +psql postgresql://localhost/iltickets -c "DROP TABLE tmp.tmp_table_parking_2017;" +DROP TABLE +touch data/processed/A50951_PARK_Year_2017_clean.csv +psql postgresql://localhost/iltickets -c "\d tmp.tmp_table_parking_2018" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -c "CREATE TABLE tmp.tmp_table_parking_2018 AS SELECT * FROM public.parking WITH NO DATA;" +CREATE TABLE AS +psql postgresql://localhost/iltickets -c "\copy tmp.tmp_table_parking_2018 FROM '/Users/DE-Admin/Code/il-ticket-loader/data/processed/A50951_PARK_Year_2018_clean.csv' with (delimiter ',', format csv, header);" +COPY 769219 +psql postgresql://localhost/iltickets -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_2018 ON CONFLICT DO NOTHING;" +INSERT 0 769219 +psql postgresql://localhost/iltickets -c "DROP TABLE tmp.tmp_table_parking_2018;" +DROP TABLE +touch data/processed/A50951_PARK_Year_2018_clean.csv +psql postgresql://localhost/iltickets -f sql/indexes/parking.sql +CREATE INDEX +CLUSTER +psql postgresql://localhost/iltickets -f sql/views/geocodes.sql +SELECT 40053 +ALTER TABLE +CREATE INDEX +CREATE INDEX +psql postgresql://localhost/iltickets -f sql/views/blocksummary_intermediate.sql +SELECT 553142 +CREATE INDEX +psql postgresql://localhost/iltickets -f sql/views/blocksummary_yearly.sql +SELECT 206975 +ALTER TABLE +CREATE INDEX +psql postgresql://localhost/iltickets -f sql/views/blocksummary_total.sql +SELECT 26007 +ALTER TABLE +make YEARS="2017 2018" all 1.90s user 0.98s system 1% cpu 4:01.65 total +``` + +## With presorting + +### Indexes + +``` +iltickets=# create index if not exists parking_cluster on parking (address, violation_code, year); +CREATE INDEX +Time: 22441.525 ms (00:22.442) + +iltickets=# cluster parking using parking_cluster; +CLUSTER +Time: 42005.141 ms (00:42.005) + + +iltickets=# analyze parking; +ANALYZE +Time: 2669.688 ms (00:02.670) +``` + +### End-to-end + +``` +✗ time make YEARS="2017 2018" all +... + +1.86s user 0.94s system 1% cpu 4:30.16 total +``` + +(Full output:) + +``` +✗ time make YEARS="2017 2018" all +psql postgresql://localhost/iltickets -c "select 1;" > /dev/null 2>&1 || psql postgresql://localhost -c "create database iltickets" && \ + psql postgresql://localhost/iltickets -c "CREATE EXTENSION IF NOT EXISTS postgis;" +CREATE DATABASE +CREATE EXTENSION +psql postgresql://localhost/iltickets -c "\d public.parking" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -f sql/tables/parking.sql +CREATE TABLE +psql postgresql://localhost/iltickets -c "CREATE SCHEMA IF NOT EXISTS tmp;" +CREATE SCHEMA +psql postgresql://localhost/iltickets -c "\d public.geocodes" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -f sql/tables/geocodes.sql +CREATE TABLE +psql postgresql://localhost/iltickets -c "\d public.raw_geocodes" > /dev/null 2>&1 || \ + pg_restore -d "postgresql://localhost/iltickets" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump && \ + psql postgresql://localhost/iltickets -c "alter table if exists geocodes rename to raw_geocodes" +ALTER TABLE +ogr2ogr -f "PostgreSQL" PG:"dbname=iltickets" "data/geodata/communityareas.json" -nln communityareas -overwrite +ogr2ogr -f "PostgreSQL" PG:"dbname=iltickets" "data/geodata/wards2015.json" -nln wards2015 -overwrite +psql postgresql://localhost/iltickets -c "\d tmp.tmp_table_parking_2017" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -c "CREATE TABLE tmp.tmp_table_parking_2017 AS SELECT * FROM public.parking WITH NO DATA;" +CREATE TABLE AS +psql postgresql://localhost/iltickets -c "\copy tmp.tmp_table_parking_2017 FROM '/Users/DE-Admin/Code/il-ticket-loader/data/processed/A50951_PARK_Year_2017_clean.csv' with (delimiter ',', format csv, header);" +COPY 2190763 +psql postgresql://localhost/iltickets -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_2017 ORDER BY address, violation_code, year ON CONFLICT DO NOTHING;" +INSERT 0 2190763 +psql postgresql://localhost/iltickets -c "DROP TABLE tmp.tmp_table_parking_2017;" +DROP TABLE +touch data/processed/A50951_PARK_Year_2017_clean.csv +psql postgresql://localhost/iltickets -c "\d tmp.tmp_table_parking_2018" > /dev/null 2>&1 || psql postgresql://localhost/iltickets -c "CREATE TABLE tmp.tmp_table_parking_2018 AS SELECT * FROM public.parking WITH NO DATA;" +CREATE TABLE AS +psql postgresql://localhost/iltickets -c "\copy tmp.tmp_table_parking_2018 FROM '/Users/DE-Admin/Code/il-ticket-loader/data/processed/A50951_PARK_Year_2018_clean.csv' with (delimiter ',', format csv, header);" +COPY 769219 +psql postgresql://localhost/iltickets -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_2018 ORDER BY address, violation_code, year ON CONFLICT DO NOTHING;" +INSERT 0 769219 +psql postgresql://localhost/iltickets -c "DROP TABLE tmp.tmp_table_parking_2018;" +DROP TABLE +touch data/processed/A50951_PARK_Year_2018_clean.csv +psql postgresql://localhost/iltickets -f sql/indexes/parking.sql +CREATE INDEX +CLUSTER +psql postgresql://localhost/iltickets -f sql/views/geocodes.sql +SELECT 40053 +ALTER TABLE +CREATE INDEX +CREATE INDEX +psql postgresql://localhost/iltickets -f sql/views/blocksummary_intermediate.sql +SELECT 553142 +CREATE INDEX +psql postgresql://localhost/iltickets -f sql/views/blocksummary_yearly.sql +SELECT 206975 +ALTER TABLE +CREATE INDEX +psql postgresql://localhost/iltickets -f sql/views/blocksummary_total.sql +SELECT 26007 +ALTER TABLE +make YEARS="2017 2018" all 1.86s user 0.94s system 1% cpu 4:30.16 total +``` + + +# Bigger tests + +End to end with 2013-2018 data. + +## Unsorted + +Screwed up running the views, so have to do it in two parts + +``` +3.98s user 3.34s system 0% cpu 20:21.28 total +0.04s user 0.05s system 0% cpu 5:17.98 total +``` + +## Presorted + + +``` +4.24s user 3.58s system 0% cpu 28:01.67 total +``` + + +# C collation + + diff --git a/sql/views/blocks.sql b/sql/views/blocks.sql new file mode 100644 index 0000000..e69de29 diff --git a/sql/views/blocksummary_intermediate.sql b/sql/views/blocksummary_intermediate.sql deleted file mode 100644 index 8bb477d..0000000 --- a/sql/views/blocksummary_intermediate.sql +++ /dev/null @@ -1,15 +0,0 @@ -create table if not exists blocksummary_intermediate as - SELECT - p.address, - p.violation_code, - p.year as year, - count(ticket_number) AS ticket_count, - sum(p.current_amount_due) AS amount_due, - sum(p.fine_level1_amount) AS fine_level1_amount, - sum(p.fine_level2_amount) AS fine_level2_amount, - sum(p.total_payments) AS total_payments - FROM parking p - GROUP BY p.address, p.violation_code, year -; - -create index on blocksummary_intermediate (address); diff --git a/sql/views/blocksummary_total.sql b/sql/views/blocksummary_total.sql deleted file mode 100644 index 1239bb3..0000000 --- a/sql/views/blocksummary_total.sql +++ /dev/null @@ -1,16 +0,0 @@ -create table blocksummary_total -as - SELECT - b.geocoded_address, - sum(b.ticket_count) AS ticket_count, - sum(b.amount_due) AS amount_due, - sum(b.fine_level1_amount) AS fine_level1_amount, - sum(b.fine_level2_amount) AS fine_level2_amount, - sum(b.total_payments) AS total_payments - FROM blocksummary_yearly b - GROUP BY b.geocoded_address - ORDER BY (sum(b.ticket_count)) DESC - ; - -alter table blocksummary_total - add constraint blocksummary_total_pk primary key (geocoded_address); diff --git a/sql/views/blocksummary_yearly.sql b/sql/views/blocksummary_yearly.sql deleted file mode 100644 index c311de6..0000000 --- a/sql/views/blocksummary_yearly.sql +++ /dev/null @@ -1,25 +0,0 @@ -create table blocksummary_yearly -as - SELECT - g.geocoded_address, - b.year, - b.violation_code, - sum(b.ticket_count) AS ticket_count, - sum(b.amount_due) AS amount_due, - sum(b.fine_level1_amount) AS fine_level1_amount, - sum(b.fine_level2_amount) AS fine_level2_amount, - sum(b.total_payments) AS total_payments - FROM blocksummary_intermediate b - JOIN - geocodes r ON b.address = r.address - JOIN - geocodes_normalized g on r.address = g.address - WHERE g.geocoded_address is not null - GROUP BY g.geocoded_address, b.year, b.violation_code - ORDER BY (sum(b.ticket_count)) DESC - ; - -alter table blocksummary_yearly - add column id serial primary key; - -create index on blocksummary_yearly (geocoded_address); diff --git a/sql/views/community_area_city_stickers.sql b/sql/views/community_area_city_stickers.sql deleted file mode 100644 index 99de27d..0000000 --- a/sql/views/community_area_city_stickers.sql +++ /dev/null @@ -1,41 +0,0 @@ -create or replace view community_area_city_stickers -as - select - c.community, - count(p.ticket_number) as tickets, - count(p.ticket_number) / s.tot_hh as per_household, - s.tot_pop as total_population, - s.tot_hh as total_households, - s.white, - s.white / s.tot_pop as white_pct, - s.black, - s.black / s.tot_pop as black_pct, - s.hisp, - s.hisp / s.tot_pop as hisp_pct, - s.asian, - s.asian / s.tot_pop as asian_pct, - s.other, - s.other / s.tot_pop as other_pct, - s.medinc - from parking p - inner join - geocodes g on p.address = g.address - inner join - community_area_geography c on st_within(g.geom, c.wkb_geometry) - inner join - community_area_stats s on s.geog = c.community - where - (p.violation_code = '0964125' or - p.violation_code = '0964125B') - and g.geocode_accuracy != 'GEOMETRIC_CENTER' - group by - c.community, - s.tot_pop, - s.tot_hh, - s.white, - s.black, - s.hisp, - s.asian, - s.other, - s.medinc - order by per_household desc; diff --git a/sql/views/geocode_accuracy.sql b/sql/views/geocode_accuracy.sql deleted file mode 100644 index 154c783..0000000 --- a/sql/views/geocode_accuracy.sql +++ /dev/null @@ -1,42 +0,0 @@ -create or replace view geocode_accuracy -as - select - total, - chicago_total, - chicago_total::decimal / total as chicago_pct, - citysticker_total, - geocode_citysticker_total, - geocode_citysticker_total::decimal / citysticker_total as geocode_citysticker_pct - from ( - select - count(p.ticket_number) as total, - count(p.ticket_number) FILTER ( - where g.geocode_geojson is not null and - g.geocode_accuracy != 'GEOMETRIC_CENTER' and - g.geocoded_city = 'Chicago' - ) as chicago_total - from parking p - join - geocodes g on p.address = g.address - ) chicago_summary, - ( - select - count(*) as citysticker_total - from - parking p - where - (p.violation_code = '0964125' or p.violation_code = '0964125B') - ) citysticker_summary, - ( - select count(*) as geocode_citysticker_total - from - parking p - inner join - geocodes g on p.address = g.address - inner join - community_area_geography c on st_within(g.geom, c.wkb_geometry) - where - (p.violation_code = '0964125' or p.violation_code = '0964125B') - and g.geocode_accuracy != 'GEOMETRIC_CENTER' - ) geocode_summary -; diff --git a/sql/views/geocodes_communityareas.sql b/sql/views/geocodes_communityareas.sql deleted file mode 100644 index f0227f0..0000000 --- a/sql/views/geocodes_communityareas.sql +++ /dev/null @@ -1,16 +0,0 @@ -create or replace view geocodes_communityareas -as - select - g.address, - g.geocoded_address, - c.community, - g.geocoded_lat, - g.geocoded_lng, - g.geocoded_city, - g.geocoded_state, - g.geocode_accuracy - from - geocodes g - inner join - community_area_geography c on st_within(g.geom, c.wkb_geometry) - ; From ba351188ad2ee0db074f128637df663eb0b0eb7b Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 29 Oct 2018 11:12:48 -0500 Subject: [PATCH 100/140] new core DB structure for ward analysis --- Makefile | 2 +- README.md | 39 ++++--------------------------- sql/views/blocks.sql | 27 +++++++++++++++++++++ sql/views/blocksyearly.sql | 23 ++++++++++++++++++ sql/views/geocodes_normalized.sql | 22 ----------------- sql/views/wardsyearly.sql | 26 +++++++++++++++++++++ 6 files changed, 82 insertions(+), 57 deletions(-) create mode 100644 sql/views/blocksyearly.sql delete mode 100644 sql/views/geocodes_normalized.sql create mode 100644 sql/views/wardsyearly.sql diff --git a/Makefile b/Makefile index f4cf9d8..360205b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking GEOTABLES = communityareas wards2015 -VIEWS = geocodes_normalized blocksummary_intermediate blocksummary_yearly blocksummary_total +VIEWS = blocks blocksyearly wardsyearly DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship diff --git a/README.md b/README.md index c13d001..a31628b 100644 --- a/README.md +++ b/README.md @@ -77,45 +77,16 @@ Bad CSV rows are written to `data/processed/_err.csv`. These should on ## Working with data -### Key tables +### Tables * `parking`: Raw parking ticket data * `communityareas`: Chicago Community Area geographic data * `wards2015`: Chicago Aldermanic Ward geographic data -* `geocodes`: Data from original geocoding run. **Use - `geocodes_normalized` for most queries.** -* `geocodes_normalized`: De-duplicated version of `geocodes` table. Join +* `geocodes`: Data from original geocoding run. **Use `blocks` for most queries.** +* `geocodes`: De-duplicated version of `geocodes` table, enhanced with additional fields: cardinal direction, zipcode, and geographies this block is part of (currently just wards). Join through this table (see below). against this table. -* `blocksummary_intermediate`: Intermediate table. **Do not use this - table.** -* `blocksummary_yearly`: Financial data grouped by block, violation - code, and year. -* `blocksummary_total`: This may not be useful now that the database is - quite fast; sums the years from `block_summary_yearly`, reducing one -grouping level. - -### Useful query patterns - -Join with ward data: - -``` -select - g.geocoded_address, - w.ward, - b.year, - b.violation_code, - b.amount_due, - b.fine_level1_amount, - b.total_payments -from - blocksummary_yearly b -join - geocodes_normalized g on b.geocoded_address = g.geocoded_address -join - wards2015 w on st_within(g.geom, w.wkb_geometry) -where - b.year > 2012 -``` +* `wardsyearly`: Counts and sums of block tickets, fees, and debt, aggregated to the ward level. Grouped by year, violation code, ticket queue, hearing disposition, unit description, and notice level. +* `blocksyearly`: Counts and sums of block tickets, fees, and debt. Grouped by year, violation code, ticket queue, hearing disposition, unit description, and notice level. ## Data dictionary diff --git a/sql/views/blocks.sql b/sql/views/blocks.sql index e69de29..45a3a82 100644 --- a/sql/views/blocks.sql +++ b/sql/views/blocks.sql @@ -0,0 +1,27 @@ +create table if not exists blocks as + SELECT DISTINCT ON (geocoded_address) + w.ward as ward, + g.geocoded_address as address, + g.geocoded_lng as lng, + g.geocoded_lat as lat, + g.geocoded_city as city, + g.geocoded_state as state, + g.geocode_geojson->'features'->0->'properties'->>'postal' as zip, + case + when split_part(g.geocoded_address, ' ', 2) not in ('N', 'E', 'S', 'W') then null + else split_part(g.geocoded_address, ' ', 2) + end as cardinal_direction, + g.geom + from + geocodes g + join + wards2015 w on st_within(g.geom, w.wkb_geometry) + + order by geocoded_address, id; + +alter table blocks + add column id serial primary key; + +create index on blocks (address); +create index on blocks (ward); +create index on wards2015 (ward); diff --git a/sql/views/blocksyearly.sql b/sql/views/blocksyearly.sql new file mode 100644 index 0000000..4e8e0a1 --- /dev/null +++ b/sql/views/blocksyearly.sql @@ -0,0 +1,23 @@ +create table if not exists blocksyearly as + select + b.address, + p.violation_code, + p.ticket_queue, + p.hearing_disposition, + p.year, + p.unit_description, + p.notice_level, + count(ticket_number) as ticket_count, + sum(p.total_payments) as total_payments, + sum(p.current_amount_due) as current_amount_due, + sum(p.fine_level1_amount) as fine_level1_amount + from + blocks b + join + geocodes g + on b.address = g.geocoded_address + join + parking p + on p.address = g.address + GROUP BY b.address, p.year, p.notice_level, p.unit_description, p.hearing_disposition, p.ticket_queue, p.violation_code +; diff --git a/sql/views/geocodes_normalized.sql b/sql/views/geocodes_normalized.sql deleted file mode 100644 index bf7fcd8..0000000 --- a/sql/views/geocodes_normalized.sql +++ /dev/null @@ -1,22 +0,0 @@ -create table if not exists geocodes_normalized as - SELECT DISTINCT ON (geocoded_address) - address, - geocoded_address, - geocoded_lng, - geocoded_lat, - geocoded_city, - geocoded_state, - geocode_geojson->'features'->0->'properties'->>'postal' as geocoded_zip, - case - when split_part(geocoded_address, ' ', 2) not in ('N', 'E', 'S', 'W') then null - else split_part(geocoded_address, ' ', 2) - end as cardinal_direction, - geom - from geocodes - order by geocoded_address, id; - -alter table geocodes_normalized - add column id serial primary key; - -create index on geocodes_normalized (address); -create index on geocodes_normalized (geocoded_address); diff --git a/sql/views/wardsyearly.sql b/sql/views/wardsyearly.sql new file mode 100644 index 0000000..093735a --- /dev/null +++ b/sql/views/wardsyearly.sql @@ -0,0 +1,26 @@ +create table if not exists wardsyearly as + select + w.ward, + p.violation_code, + p.ticket_queue, + p.hearing_disposition, + p.year, + p.unit_description, + p.notice_level, + count(ticket_number) as ticket_count, + sum(p.total_payments) as total_payments, + sum(p.current_amount_due) as current_amount_due, + sum(p.fine_level1_amount) as fine_level1_amount + from + wards2015 w + join + blocks b + on b.ward = w.ward + join + geocodes g + on b.address = g.geocoded_address + join + parking p + on p.address = g.address + GROUP BY w.ward, p.year, p.notice_level, p.unit_description, p.hearing_disposition, p.ticket_queue, p.violation_code +; From 1facd580e6afd34c504fe61b939b457debe4500a Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 29 Oct 2018 11:58:24 -0500 Subject: [PATCH 101/140] clean up, skip clustering for now --- Makefile | 2 +- sql/indexes/parking.sql | 1 - sql/views/violations.sql | 2 ++ 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 360205b..f7c52d8 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking GEOTABLES = communityareas wards2015 -VIEWS = blocks blocksyearly wardsyearly +VIEWS = violations blocks blocksyearly wardsyearly DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship diff --git a/sql/indexes/parking.sql b/sql/indexes/parking.sql index e82c848..f899997 100644 --- a/sql/indexes/parking.sql +++ b/sql/indexes/parking.sql @@ -1,2 +1 @@ create index if not exists parking_cluster on parking (address, violation_code, year); -cluster parking using parking_cluster; diff --git a/sql/views/violations.sql b/sql/views/violations.sql index 9039b29..e3917ee 100644 --- a/sql/views/violations.sql +++ b/sql/views/violations.sql @@ -5,3 +5,5 @@ create table violations as trim(violation_description) as violation_description from parking ; + +create index if not exists on violations (violation_code); From 430e29d0e411810655a93f658566afd80dc877e4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 29 Oct 2018 14:45:50 -0500 Subject: [PATCH 102/140] load metadata --- Makefile | 17 +++++++++++++++-- data/metadata/.gitkeep | 0 sql/tables/wardmeta.sql | 18 ++++++++++++++++++ sql/views/violations.sql | 2 +- 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 data/metadata/.gitkeep create mode 100644 sql/tables/wardmeta.sql diff --git a/Makefile b/Makefile index f7c52d8..755c746 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking +METADATA = wardmeta GEOTABLES = communityareas wards2015 VIEWS = violations blocks blocksyearly wardsyearly DATADIRS = analysis cameras geodata parking processed @@ -7,14 +8,15 @@ DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt -all: bootstrap geo parking indexes views +all: bootstrap geo parking meta indexes views clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) -tables : $(patsubst %, table_%, $(DATATABLES)) +tables : $(patsubst %, table_%, $(DATATABLES)) $(patsubst %, table_%, $(METADATA)) indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) +meta : $(patsubst %, load_meta_%, $(METADATA)) parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) @@ -78,6 +80,10 @@ data/geodata/wards2015.json : curl "https://data.cityofchicago.org/api/geospatial/sp34-6z76?method=export&format=GeoJSON" > $@ +data/metadata/wardmeta.csv : + curl "https://data.cityofchicago.org/api/views/htai-wnw4/rows.csv?accessType=DOWNLOAD" > $@ + + load_geodata_% : data/geodata/%.json $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/$*.json" -nln $* -overwrite @@ -118,12 +124,15 @@ data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.tx data/processed/parking_tickets.csv : psql $(ILTICKETS_DB_URL) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" + data/processed/parking_tickets.zip : data/data_dictionary.txt data/unit_key.csv data/processed/parking_tickets.csv zip $@ $^ + upload_zip : data/processed/parking_tickets.zip aws s3 cp $^ s3://data-publica/il_parking_tickets_20180822.zip + dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv $(check_tmp_parking_relation) || psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" @@ -140,5 +149,9 @@ dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv touch $@ +load_meta_% : data/metadata/%.csv + $(check_public_relation) && psql $(ILTICKETS_DB_URL) -c "\copy $* from '$(CURDIR)/$<' with (delimiter ',', format csv, header);" + + clean_% : rm -Rf data/$*/* diff --git a/data/metadata/.gitkeep b/data/metadata/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sql/tables/wardmeta.sql b/sql/tables/wardmeta.sql new file mode 100644 index 0000000..ed4a21a --- /dev/null +++ b/sql/tables/wardmeta.sql @@ -0,0 +1,18 @@ +create table public.wardmeta ( + ward character varying(2) primary key, + alderman character varying, + address character varying, + city character varying, + state character varying, + zipcode character varying(5), + ward_phone character varying(14), + ward_fax character varying(14), + email character varying, + website character varying, + location character varying, + city_hall_address character varying, + city_hall_city character varying, + city_hall_state character varying, + city_hall_zipcode character varying, + city_hall_phone character varying(14) +); diff --git a/sql/views/violations.sql b/sql/views/violations.sql index e3917ee..db96f4d 100644 --- a/sql/views/violations.sql +++ b/sql/views/violations.sql @@ -6,4 +6,4 @@ create table violations as from parking ; -create index if not exists on violations (violation_code); +create index on violations (violation_code); From ca552dacd0aadaf8ee00bd49dcba20201b8a5fe2 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 5 Nov 2018 12:13:02 -0600 Subject: [PATCH 103/140] calculate penalties; refactor data structure --- Makefile | 11 +- processors/clean_csv.py | 31 ++- sql/tables/parking.sql | 3 +- sql/views/blockstotals.sql | 17 ++ sql/views/blocksyearlytotals.sql | 19 ++ sql/views/wards.sql | 13 ++ sql/views/wardstotals.sql | 319 +++++++++++++++++++++++++++++ sql/views/wardstotals5yr.sql | 318 ++++++++++++++++++++++++++++ sql/views/wardstotalshistogram.sql | 15 ++ tests/test_clean_csv.py | 16 +- 10 files changed, 753 insertions(+), 9 deletions(-) create mode 100644 sql/views/blockstotals.sql create mode 100644 sql/views/blocksyearlytotals.sql create mode 100644 sql/views/wards.sql create mode 100644 sql/views/wardstotals.sql create mode 100644 sql/views/wardstotals5yr.sql create mode 100644 sql/views/wardstotalshistogram.sql diff --git a/Makefile b/Makefile index 755c746..4268565 100644 --- a/Makefile +++ b/Makefile @@ -2,14 +2,13 @@ YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 20 DATATABLES = parking METADATA = wardmeta GEOTABLES = communityareas wards2015 -VIEWS = violations blocks blocksyearly wardsyearly +VIEWS = violations blocks blockstotals wardsyearly wardstotals DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt all: bootstrap geo parking meta indexes views -clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt bootstrap : create_db tables schema geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) @@ -26,6 +25,8 @@ download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) zip_n_ship : processors/salt.txt upload_zip +drop_views: $(patsubst %, drop_view_%, $(VIEWS)) +clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt define check_database psql $(ILTICKETS_DB_URL) -c "select 1;" > /dev/null 2>&1 @@ -72,6 +73,10 @@ drop_db : psql $(ILTICKETS_DB_ROOT_URL) -c "drop database $(ILTICKETS_DB_NAME);" && rm -f dupes/* +drop_view_% : + psql $(ILTICKETS_DB_URL) -c "drop table $*;" + + data/geodata/communityareas.json : curl "https://data.cityofchicago.org/api/geospatial/cauq-8yn6?method=export&format=GeoJSON" > $@ @@ -135,7 +140,7 @@ upload_zip : data/processed/parking_tickets.zip dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv $(check_tmp_parking_relation) || psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" - psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" + psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header, force_null(penalty));" psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" touch $@ diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 18e9e3c..13cc9b4 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -7,9 +7,9 @@ twodigit_re = re.compile(r"^(00 )(.*)", re.IGNORECASE) -def clean_commas(row): +def clean_quotes(row): """ - Handle unquoted commas in fields from CANVAS. + Handle unquoted quotes in fields from CANVAS. """ if row[8].startswith('WINDOWS MISSING OR CRACKED BEYOND') or row[8].startswith('SUSPENSION MODIFIED BEYOND'): fixed_cols = row[8].replace('"', '').split('$') @@ -65,6 +65,20 @@ def extract_month(datestring): return int(datestring[:2]) +def calculate_penalty(row): + """ + Calculate penalty as `(current_amount_due + total_paid) - fine_level1_amount` + """ + if float(row[14]) < 0: + penalty = None + elif row[16] != 'Dismissed': + penalty = (float(row[14]) + float(row[15])) - float(row[12]) + else: + penalty = None + + return penalty + + def add_year(row): """ Add year to row. @@ -81,6 +95,14 @@ def add_month(row): return row +def add_penalty(row): + """ + Add penalty to row. + """ + row.append(calculate_penalty(row)) + return row + + def clean(data_filename, salt_filename): """ Clean up parking CSV. @@ -97,18 +119,19 @@ def clean(data_filename, salt_filename): if 'Reason for Dismissal' not in headers: headers = headers[:-1] + ['Reason for Dismissal'] + headers[-1:] addcol = True - headers += ['address', 'license_hash', 'year', 'month'] + headers += ['address', 'license_hash', 'year', 'month', 'penalty'] writer.writerow(headers) for row in reader: try: - row = clean_commas(row) + row = clean_quotes(row) if addcol: row = row[:-1] + [''] + row[-1:] row = clean_location(row) row = hash_plates(row, salt) row = add_year(row) row = add_month(row) + row = add_penalty(row) writer.writerow(row) except IndexError: print(row, file=sys.stderr) diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql index 66b7f86..13da601 100644 --- a/sql/tables/parking.sql +++ b/sql/tables/parking.sql @@ -25,5 +25,6 @@ CREATE TABLE public.parking ( address character varying(80), license_hash character varying, year int, - month int + month int, + penalty double precision null ); diff --git a/sql/views/blockstotals.sql b/sql/views/blockstotals.sql new file mode 100644 index 0000000..3623895 --- /dev/null +++ b/sql/views/blockstotals.sql @@ -0,0 +1,17 @@ +create table if not exists blockstotals as + select + b.address, + count(ticket_number) as ticket_count, + sum(p.total_payments) as total_payments, + sum(p.current_amount_due) as current_amount_due, + sum(p.fine_level1_amount) as fine_level1_amount + from + blocks b + join + geocodes g + on b.address = g.geocoded_address + join + parking p + on p.address = g.address + GROUP BY b.address +; diff --git a/sql/views/blocksyearlytotals.sql b/sql/views/blocksyearlytotals.sql new file mode 100644 index 0000000..de83c75 --- /dev/null +++ b/sql/views/blocksyearlytotals.sql @@ -0,0 +1,19 @@ +create table if not exists blocksyearlytotals as + select + p.year, + b.address, + count(ticket_number) as ticket_count, + sum(p.total_payments) as total_payments, + sum(p.current_amount_due) as current_amount_due, + sum(p.fine_level1_amount) as fine_level1_amount + from + blocks b + join + geocodes g + on b.address = g.geocoded_address + join + parking p + on p.address = g.address + GROUP BY b.address, p.year +; + diff --git a/sql/views/wards.sql b/sql/views/wards.sql new file mode 100644 index 0000000..4bd0431 --- /dev/null +++ b/sql/views/wards.sql @@ -0,0 +1,13 @@ +create table if not exists wards as + select + ogc_fid, + ward, + shape_area, + shape_leng, + wkb_geometry, + st_asgeojson(st_extent(wkb_geometry))::jsonb as extent, + st_asgeojson(st_centroid(wkb_geometry))::jsonb as centroid, + st_asgeojson(wkb_geometry)::jsonb as geojson_geometry + from wards2015 + group by (ogc_fid, ward, shape_area, shape_leng) +; diff --git a/sql/views/wardstotals.sql b/sql/views/wardstotals.sql new file mode 100644 index 0000000..9f1ca9a --- /dev/null +++ b/sql/views/wardstotals.sql @@ -0,0 +1,319 @@ +create table if not exists wardstotals as + with + num_bins as ( + select 15 as num_bins + ), + + year_bounds as ( + select + 1995 as min_year, + 2018 as max_year + ), + wards_toplevel as ( + select + ward, + sum(ticket_count) as ticket_count, + sum(total_payments) as total_payments, + sum(current_amount_due) as current_amount_due, + sum(fine_level1_amount) as fine_level1_amount + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + group by ward + ), + wards_policetickets as ( + select + ward, + sum(ticket_count) as police_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + (unit_description = 'CPD' or + unit_description = 'CPD-Other' or + unit_description = 'CPD-Airport') + group by ward + ), + wards_contestedtickets as ( + select + ward, + sum(ticket_count) as contested_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + (hearing_disposition = 'Liable' or + hearing_disposition = 'Not Liable') + group by ward + ), + wards_bankruptcytickets as ( + select + ward, + sum(ticket_count) as bankruptcy_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + ticket_queue = 'Bankruptcy' + group by ward + ), + wards_paidtickets as ( + select + ward, + sum(ticket_count) as paid_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + ticket_queue = 'Paid' + group by ward + ), + wards_dismissedtickets as ( + select + ward, + sum(ticket_count) as dismissed_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + ticket_queue = 'Dismissed' + group by ward + ), + wards_seizedorsuspendedtickets as ( + select + ward, + sum(ticket_count) as seized_or_suspended_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + (notice_level = 'SEIZ' or notice_level = 'DLS') + group by ward + ), + wards_summary as ( + select + t.ward, + t.ticket_count, + t.total_payments, + t.current_amount_due, + t.fine_level1_amount, + t.current_amount_due / t.total_payments as debt_to_payment_ratio, + t.fine_level1_amount / t.ticket_count as avg_per_ticket, + p.police_ticket_count, + p.police_ticket_count / t.ticket_count as police_ticket_count_pct, + c.contested_ticket_count, + c.contested_ticket_count / t.ticket_count as contested_ticket_count_pct, + pd.paid_ticket_count, + pd.paid_ticket_count/t.ticket_count as paid_ticket_count_pct, + d.dismissed_ticket_count, + d.dismissed_ticket_count/t.ticket_count as dismissed_ticket_count_pct, + s.seized_or_suspended_ticket_count, + s.seized_or_suspended_ticket_count/t.ticket_count as seized_or_suspended_ticket_count_pct, + b.bankruptcy_ticket_count, + b.bankruptcy_ticket_count/t.ticket_count as bankruptcy_ticket_count_pct + + from wards_toplevel t + join wards_policetickets p on + t.ward = p.ward + join wards_contestedtickets c on + t.ward = c.ward + join wards_bankruptcytickets b on + t.ward = b.ward + join wards_paidtickets pd on + t.ward = pd.ward + join wards_dismissedtickets d on + t.ward = d.ward + join wards_seizedorsuspendedtickets s on + t.ward = s.ward + ), + wards_stats as ( + select + min(ticket_count) as min_ticket_count, + max(ticket_count) + 1 as max_ticket_count, + + min(current_amount_due) as min_current_amount_due, + max(current_amount_due) + 1 as max_current_amount_due, + + min(total_payments) as min_total_payments, + max(total_payments) + 1 as max_total_payments, + + min(fine_level1_amount) as min_fine_level1_amount, + max(fine_level1_amount) + 1 as max_fine_level1_amount, + + min(avg_per_ticket) as min_avg_per_ticket, + max(avg_per_ticket) as max_avg_per_ticket, + + min(debt_to_payment_ratio) as min_debt_to_payment_ratio, + max(debt_to_payment_ratio) as max_debt_to_payment_ratio, + + min(police_ticket_count) as min_police_ticket_count, + max(police_ticket_count) as max_police_ticket_count, + + min(police_ticket_count_pct) as min_police_ticket_count_pct, + max(police_ticket_count_pct) as max_police_ticket_count_pct, + + min(contested_ticket_count) as min_contested_ticket_count, + max(contested_ticket_count) as max_contested_ticket_count, + + min(contested_ticket_count_pct) as min_contested_ticket_count_pct, + max(contested_ticket_count_pct) as max_contested_ticket_count_pct, + + min(paid_ticket_count) as min_paid_ticket_count, + max(paid_ticket_count) as max_paid_ticket_count, + + min(paid_ticket_count_pct) as min_paid_ticket_count_pct, + max(paid_ticket_count_pct) as max_paid_ticket_count_pct, + + min(dismissed_ticket_count) as min_dismissed_ticket_count, + max(dismissed_ticket_count) as max_dismissed_ticket_count, + + min(dismissed_ticket_count_pct) as min_dismissed_ticket_count_pct, + max(dismissed_ticket_count_pct) as max_dismissed_ticket_count_pct, + + min(seized_or_suspended_ticket_count) as min_seized_or_suspended_ticket_count, + max(seized_or_suspended_ticket_count) as max_seized_or_suspended_ticket_count, + + min(seized_or_suspended_ticket_count_pct) as min_seized_or_suspended_ticket_count_pct, + max(seized_or_suspended_ticket_count_pct) as max_seized_or_suspended_ticket_count_pct, + + min(bankruptcy_ticket_count) as min_bankruptcy_ticket_count, + max(bankruptcy_ticket_count) as max_bankruptcy_ticket_count, + + min(bankruptcy_ticket_count_pct) as min_bankruptcy_ticket_count_pct, + max(bankruptcy_ticket_count_pct) as max_bankruptcy_ticket_count_pct + from wards_summary + ) + + select + ward, + + ticket_count, + dense_rank() over (order by ticket_count desc) as ticket_count_rank, + + width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) as ticket_count_bucket, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) - 1) as ticket_count_bucket_min, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins)) as ticket_count_bucket_max, + + current_amount_due, + dense_rank() over (order by current_amount_due desc) as current_amount_due_rank, + + width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) as current_amount_due_bucket, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) - 1) as current_amount_due_bucket_min, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins)) as current_amount_due_bucket_max, + + total_payments, + dense_rank() over (order by total_payments desc) as total_payments_rank, + + width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) as total_payments_bucket, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) - 1) as total_payments_bucket_min, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins)) as total_payments_bucket_max, + + fine_level1_amount, + dense_rank() over (order by fine_level1_amount desc) as fine_level1_amount_rank, + + width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) as fine_level1_amount_bucket, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) - 1) as fine_level1_amount_bucket_min, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins)) as fine_level1_amount_bucket_max, + + avg_per_ticket, + dense_rank() over (order by avg_per_ticket desc) as avg_per_ticket_rank, + + width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) as avg_per_ticket_bucket, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) - 1) as avg_per_ticket_bucket_min, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins)) as avg_per_ticket_bucket_max, + + debt_to_payment_ratio, + dense_rank() over (order by debt_to_payment_ratio desc) as debt_to_payment_ratio_rank, + + width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) as debt_to_payment_ratio_bucket, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, + + police_ticket_count, + dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, + + width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) as police_ticket_count_bucket, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) - 1) as police_ticket_count_bucket_min, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins)) as police_ticket_count_bucket_max, + + police_ticket_count_pct, + dense_rank() over (order by police_ticket_count_pct desc) as police_ticket_count_pct_rank, + + width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) as police_ticket_count_pct_bucket, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) - 1) as police_ticket_count_pct_bucket_min, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins)) as police_ticket_count_pct_bucket_max, + + contested_ticket_count, + dense_rank() over (order by contested_ticket_count desc) as contested_ticket_count_rank, + + width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) as contested_ticket_count_bucket, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) - 1) as contested_ticket_count_bucket_min, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins)) as contested_ticket_count_bucket_max, + + contested_ticket_count_pct, + dense_rank() over (order by contested_ticket_count_pct desc) as contested_ticket_count_pct_rank, + + width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) as contested_ticket_count_pct_bucket, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, + + paid_ticket_count, + dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, + + width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) as paid_ticket_count_bucket, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) - 1) as paid_ticket_count_bucket_min, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins)) as paid_ticket_count_bucket_max, + + paid_ticket_count_pct, + dense_rank() over (order by paid_ticket_count_pct desc) as paid_ticket_count_pct_rank, + + width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) as paid_ticket_count_pct_bucket, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) - 1) as paid_ticket_count_pct_bucket_min, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins)) as paid_ticket_count_pct_bucket_max, + + dismissed_ticket_count, + dense_rank() over (order by dismissed_ticket_count desc) as dismissed_ticket_count_rank, + + width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) as dismissed_ticket_count_bucket, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) - 1) as dismissed_ticket_count_bucket_min, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins)) as dismissed_ticket_count_bucket_max, + + dismissed_ticket_count_pct, + dense_rank() over (order by dismissed_ticket_count_pct desc) as dismissed_ticket_count_pct_rank, + + width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) as dismissed_ticket_count_pct_bucket, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) - 1) as dismissed_ticket_count_pct_bucket_min, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins)) as dismissed_ticket_count_pct_bucket_max, + + seized_or_suspended_ticket_count, + dense_rank() over (order by seized_or_suspended_ticket_count desc) as seized_or_suspended_ticket_count_rank, + + width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) as seized_or_suspended_ticket_count_bucket, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) - 1) as seized_or_suspended_ticket_count_bucket_min, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins)) as seized_or_suspended_ticket_count_bucket_max, + + seized_or_suspended_ticket_count_pct, + dense_rank() over (order by seized_or_suspended_ticket_count_pct desc) as seized_or_suspended_ticket_count_pct_rank, + + width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) as seized_or_suspended_ticket_count_pct_bucket, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) - 1) as seized_or_suspended_ticket_count_pct_bucket_min, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins)) as seized_or_suspended_ticket_count_pct_bucket_max, + + bankruptcy_ticket_count, + dense_rank() over (order by bankruptcy_ticket_count desc) as bankruptcy_ticket_count_rank, + + width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) as bankruptcy_ticket_count_bucket, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) - 1) as bankruptcy_ticket_count_bucket_min, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins)) as bankruptcy_ticket_count_bucket_max, + + bankruptcy_ticket_count_pct, + dense_rank() over (order by bankruptcy_ticket_count_pct desc) as bankruptcy_ticket_count_pct_rank, + + width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) as bankruptcy_ticket_count_pct_bucket, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) - 1) as bankruptcy_ticket_count_pct_bucket_min, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins)) as bankruptcy_ticket_count_pct_bucket_max + + from wards_summary, wards_stats, num_bins +; + + diff --git a/sql/views/wardstotals5yr.sql b/sql/views/wardstotals5yr.sql new file mode 100644 index 0000000..258e125 --- /dev/null +++ b/sql/views/wardstotals5yr.sql @@ -0,0 +1,318 @@ +create table if not exists wardstotals5yr as + with + num_bins as ( + select 15 as num_bins + ), + + year_bounds as ( + select + 2012 as min_year, + 2018 as max_year + ), + wards_toplevel as ( + select + ward, + sum(ticket_count) as ticket_count, + sum(total_payments) as total_payments, + sum(current_amount_due) as current_amount_due, + sum(fine_level1_amount) as fine_level1_amount + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + group by ward + ), + wards_policetickets as ( + select + ward, + sum(ticket_count) as police_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + (unit_description = 'CPD' or + unit_description = 'CPD-Other' or + unit_description = 'CPD-Airport') + group by ward + ), + wards_contestedtickets as ( + select + ward, + sum(ticket_count) as contested_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + (hearing_disposition = 'Liable' or + hearing_disposition = 'Not Liable') + group by ward + ), + wards_bankruptcytickets as ( + select + ward, + sum(ticket_count) as bankruptcy_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + ticket_queue = 'Bankruptcy' + group by ward + ), + wards_paidtickets as ( + select + ward, + sum(ticket_count) as paid_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + ticket_queue = 'Paid' + group by ward + ), + wards_dismissedtickets as ( + select + ward, + sum(ticket_count) as dismissed_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + ticket_queue = 'Dismissed' + group by ward + ), + wards_seizedorsuspendedtickets as ( + select + ward, + sum(ticket_count) as seized_or_suspended_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + (notice_level = 'SEIZ' or notice_level = 'DLS') + group by ward + ), + wards_summary as ( + select + t.ward, + t.ticket_count, + t.total_payments, + t.current_amount_due, + t.fine_level1_amount, + t.current_amount_due / t.total_payments as debt_to_payment_ratio, + t.fine_level1_amount / t.ticket_count as avg_per_ticket, + p.police_ticket_count, + p.police_ticket_count / t.ticket_count as police_ticket_count_pct, + c.contested_ticket_count, + c.contested_ticket_count / t.ticket_count as contested_ticket_count_pct, + pd.paid_ticket_count, + pd.paid_ticket_count/t.ticket_count as paid_ticket_count_pct, + d.dismissed_ticket_count, + d.dismissed_ticket_count/t.ticket_count as dismissed_ticket_count_pct, + s.seized_or_suspended_ticket_count, + s.seized_or_suspended_ticket_count/t.ticket_count as seized_or_suspended_ticket_count_pct, + b.bankruptcy_ticket_count, + b.bankruptcy_ticket_count/t.ticket_count as bankruptcy_ticket_count_pct + + from wards_toplevel t + join wards_policetickets p on + t.ward = p.ward + join wards_contestedtickets c on + t.ward = c.ward + join wards_bankruptcytickets b on + t.ward = b.ward + join wards_paidtickets pd on + t.ward = pd.ward + join wards_dismissedtickets d on + t.ward = d.ward + join wards_seizedorsuspendedtickets s on + t.ward = s.ward + ), + wards_stats as ( + select + min(ticket_count) as min_ticket_count, + max(ticket_count) + 1 as max_ticket_count, + + min(current_amount_due) as min_current_amount_due, + max(current_amount_due) + 1 as max_current_amount_due, + + min(total_payments) as min_total_payments, + max(total_payments) + 1 as max_total_payments, + + min(fine_level1_amount) as min_fine_level1_amount, + max(fine_level1_amount) + 1 as max_fine_level1_amount, + + min(avg_per_ticket) as min_avg_per_ticket, + max(avg_per_ticket) as max_avg_per_ticket, + + min(debt_to_payment_ratio) as min_debt_to_payment_ratio, + max(debt_to_payment_ratio) as max_debt_to_payment_ratio, + + min(police_ticket_count) as min_police_ticket_count, + max(police_ticket_count) as max_police_ticket_count, + + min(police_ticket_count_pct) as min_police_ticket_count_pct, + max(police_ticket_count_pct) as max_police_ticket_count_pct, + + min(contested_ticket_count) as min_contested_ticket_count, + max(contested_ticket_count) as max_contested_ticket_count, + + min(contested_ticket_count_pct) as min_contested_ticket_count_pct, + max(contested_ticket_count_pct) as max_contested_ticket_count_pct, + + min(paid_ticket_count) as min_paid_ticket_count, + max(paid_ticket_count) as max_paid_ticket_count, + + min(paid_ticket_count_pct) as min_paid_ticket_count_pct, + max(paid_ticket_count_pct) as max_paid_ticket_count_pct, + + min(dismissed_ticket_count) as min_dismissed_ticket_count, + max(dismissed_ticket_count) as max_dismissed_ticket_count, + + min(dismissed_ticket_count_pct) as min_dismissed_ticket_count_pct, + max(dismissed_ticket_count_pct) as max_dismissed_ticket_count_pct, + + min(seized_or_suspended_ticket_count) as min_seized_or_suspended_ticket_count, + max(seized_or_suspended_ticket_count) as max_seized_or_suspended_ticket_count, + + min(seized_or_suspended_ticket_count_pct) as min_seized_or_suspended_ticket_count_pct, + max(seized_or_suspended_ticket_count_pct) as max_seized_or_suspended_ticket_count_pct, + + min(bankruptcy_ticket_count) as min_bankruptcy_ticket_count, + max(bankruptcy_ticket_count) as max_bankruptcy_ticket_count, + + min(bankruptcy_ticket_count_pct) as min_bankruptcy_ticket_count_pct, + max(bankruptcy_ticket_count_pct) as max_bankruptcy_ticket_count_pct + from wards_summary + ) + + select + ward, + + ticket_count, + dense_rank() over (order by ticket_count desc) as ticket_count_rank, + + width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) as ticket_count_bucket, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) - 1) as ticket_count_bucket_min, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins)) as ticket_count_bucket_max, + + current_amount_due, + dense_rank() over (order by current_amount_due desc) as current_amount_due_rank, + + width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) as current_amount_due_bucket, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) - 1) as current_amount_due_bucket_min, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins)) as current_amount_due_bucket_max, + + total_payments, + dense_rank() over (order by total_payments desc) as total_payments_rank, + + width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) as total_payments_bucket, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) - 1) as total_payments_bucket_min, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins)) as total_payments_bucket_max, + + fine_level1_amount, + dense_rank() over (order by fine_level1_amount desc) as fine_level1_amount_rank, + + width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) as fine_level1_amount_bucket, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) - 1) as fine_level1_amount_bucket_min, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins)) as fine_level1_amount_bucket_max, + + avg_per_ticket, + dense_rank() over (order by avg_per_ticket desc) as avg_per_ticket_rank, + + width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) as avg_per_ticket_bucket, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) - 1) as avg_per_ticket_bucket_min, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins)) as avg_per_ticket_bucket_max, + + debt_to_payment_ratio, + dense_rank() over (order by debt_to_payment_ratio desc) as debt_to_payment_ratio_rank, + + width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) as debt_to_payment_ratio_bucket, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, + + police_ticket_count, + dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, + + width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) as police_ticket_count_bucket, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) - 1) as police_ticket_count_bucket_min, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins)) as police_ticket_count_bucket_max, + + police_ticket_count_pct, + dense_rank() over (order by police_ticket_count_pct desc) as police_ticket_count_pct_rank, + + width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) as police_ticket_count_pct_bucket, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) - 1) as police_ticket_count_pct_bucket_min, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins)) as police_ticket_count_pct_bucket_max, + + contested_ticket_count, + dense_rank() over (order by contested_ticket_count desc) as contested_ticket_count_rank, + + width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) as contested_ticket_count_bucket, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) - 1) as contested_ticket_count_bucket_min, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins)) as contested_ticket_count_bucket_max, + + contested_ticket_count_pct, + dense_rank() over (order by contested_ticket_count_pct desc) as contested_ticket_count_pct_rank, + + width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) as contested_ticket_count_pct_bucket, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, + + paid_ticket_count, + dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, + + width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) as paid_ticket_count_bucket, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) - 1) as paid_ticket_count_bucket_min, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins)) as paid_ticket_count_bucket_max, + + paid_ticket_count_pct, + dense_rank() over (order by paid_ticket_count_pct desc) as paid_ticket_count_pct_rank, + + width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) as paid_ticket_count_pct_bucket, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) - 1) as paid_ticket_count_pct_bucket_min, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins)) as paid_ticket_count_pct_bucket_max, + + dismissed_ticket_count, + dense_rank() over (order by dismissed_ticket_count desc) as dismissed_ticket_count_rank, + + width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) as dismissed_ticket_count_bucket, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) - 1) as dismissed_ticket_count_bucket_min, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins)) as dismissed_ticket_count_bucket_max, + + dismissed_ticket_count_pct, + dense_rank() over (order by dismissed_ticket_count_pct desc) as dismissed_ticket_count_pct_rank, + + width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) as dismissed_ticket_count_pct_bucket, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) - 1) as dismissed_ticket_count_pct_bucket_min, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins)) as dismissed_ticket_count_pct_bucket_max, + + seized_or_suspended_ticket_count, + dense_rank() over (order by seized_or_suspended_ticket_count desc) as seized_or_suspended_ticket_count_rank, + + width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) as seized_or_suspended_ticket_count_bucket, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) - 1) as seized_or_suspended_ticket_count_bucket_min, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins)) as seized_or_suspended_ticket_count_bucket_max, + + seized_or_suspended_ticket_count_pct, + dense_rank() over (order by seized_or_suspended_ticket_count_pct desc) as seized_or_suspended_ticket_count_pct_rank, + + width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) as seized_or_suspended_ticket_count_pct_bucket, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) - 1) as seized_or_suspended_ticket_count_pct_bucket_min, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins)) as seized_or_suspended_ticket_count_pct_bucket_max, + + bankruptcy_ticket_count, + dense_rank() over (order by bankruptcy_ticket_count desc) as bankruptcy_ticket_count_rank, + + width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) as bankruptcy_ticket_count_bucket, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) - 1) as bankruptcy_ticket_count_bucket_min, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins)) as bankruptcy_ticket_count_bucket_max, + + bankruptcy_ticket_count_pct, + dense_rank() over (order by bankruptcy_ticket_count_pct desc) as bankruptcy_ticket_count_pct_rank, + + width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) as bankruptcy_ticket_count_pct_bucket, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) - 1) as bankruptcy_ticket_count_pct_bucket_min, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins)) as bankruptcy_ticket_count_pct_bucket_max + + from wards_summary, wards_stats, num_bins +; + diff --git a/sql/views/wardstotalshistogram.sql b/sql/views/wardstotalshistogram.sql new file mode 100644 index 0000000..263b51f --- /dev/null +++ b/sql/views/wardstotalshistogram.sql @@ -0,0 +1,15 @@ + +with wards_stats as ( + select + min(ticket_count) as min_ticket_count, + max(ticket_count) as max_ticket_count + from wardstotals +) + +select + ward, + ticket_count, + ticket_count_rank, + width_bucket(ticket_count, min_ticket_count, max_ticket_count, 10) as ticket_count_bucket + +; diff --git a/tests/test_clean_csv.py b/tests/test_clean_csv.py index 215c30f..e5586fa 100644 --- a/tests/test_clean_csv.py +++ b/tests/test_clean_csv.py @@ -19,6 +19,15 @@ ] +TEST_PENALTY_ROWS = [ + (['60607661', '01/03/2012 12:39 pm', '4400 N PULASKI', 'P230623', 'IL', 'PAS', '60609', '0964125', 'NO CITY STICKER OR IMPROPER DISPLAY', '501', 'Miscellaneous', 'JEEP', '120', '240', '292.8', '0', 'Notice', '02/09/2012', 'DLS', '', '5122261100', '83'], 172.8), + (['58864340', '01/03/2012 12:39 pm', '5951 W COURTLAND', 'A783051', 'IL', 'PAS', '606342633', '0976160F', 'EXPIRED PLATES OR TEMPORARY REGISTRATION', '23', 'CPD', 'GEO', '50', '100', '0', '122', 'Paid', '05/13/2015', 'SEIZ', '', '5145682080', '4112'], 72), + (['9181812288', '01/03/2012 12:29 pm', '3141 N LINCOLN AV', '3417204', 'IL', 'PAS', '', '0964190', 'EXPIRED METER OR OVERSTAY', '498', 'DOF', 'FORD', '50', '100', '0', '50', 'Paid', '01/10/2012', '', '', '0', '746'], 0), + (['60355378', '01/01/2012 03:07 am', '211 W DIVISION', 'K635156', 'IL', 'PAS', '600761720', '0964060', '3-7 AM SNOW ROUTE', '18', 'CPD', 'NISS', '60', '120', '-60', '120', 'Paid', '02/21/2012', 'DETR', '', '5146624670', '7013'], None), + (['57592040', '01/01/2012 12:02 am', '100 N LAKESHORE DR', '184199', 'IL', 'OTH', '', '0964150B', 'PARKING/STANDING PROHIBITED ANYTIME', '145', 'CPD-Other', 'HOND', '60', '120', '0', '0', 'Dismissed', '04/01/2012', '', '', '0', '1568'], None), +] + + # (input, (month, year)) TEST_DATES = [ ('03/05/2005 09:05 pm', (3, 2005)), @@ -33,7 +42,7 @@ def test_clean_address(input, expected): @pytest.mark.parametrize("row", TEST_BAD_ROWS) def test_clean_row(row): - clean_row = clean_csv.clean_commas(row) + clean_row = clean_csv.clean_quotes(row) assert len(clean_row) == len(row) + 1 @@ -47,3 +56,8 @@ def test_extract_month(input, expected): def test_extract_year(input, expected): month = clean_csv.extract_year(input) assert month == expected[1] + +@pytest.mark.parametrize("input,expected", TEST_PENALTY_ROWS) +def test_penalty(input, expected): + penalty = clean_csv.calculate_penalty(input) + assert penalty == expected From b6fad26fd1af8bb431bcfe5249ab53af141862cb Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 5 Nov 2018 16:47:37 -0600 Subject: [PATCH 104/140] ignore mapbox --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 686db17..a437b7d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ Ticket data/ __pycache__/ il-ticket-loader/ processors/salt.txt +env/mapbox.sh From 8e2ae667822ac7e34fed1f81b8fdedb0b6991f03 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 5 Nov 2018 17:14:14 -0600 Subject: [PATCH 105/140] restore parking --- Makefile | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 4268565..dfe0c4f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ -YEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 +PARKINGYEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 +CAMERAYEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking METADATA = wardmeta GEOTABLES = communityareas wards2015 @@ -8,7 +9,7 @@ DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt -all: bootstrap geo parking meta indexes views +all: bootstrap geo parking cameras meta indexes views bootstrap : create_db tables schema geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) @@ -17,11 +18,11 @@ indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) meta : $(patsubst %, load_meta_%, $(METADATA)) -parking : $(patsubst %, dupes/parking-%.csv, $(YEARS)) -cameras : $(patsubst %, dupes/cameras-%.csv, $(YEARS)) +parking : $(patsubst %, dupes/parking-%.csv, $(PARKINGYEARS)) +cameras : $(patsubst %, dupes/cameras-%.csv, $(CAMERAYEARS)) -download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(YEARS)) -download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(YEARS)) +download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(PARKINGYEARS)) +download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(CAMERAYEARS)) zip_n_ship : processors/salt.txt upload_zip @@ -121,11 +122,6 @@ data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.tx python processors/clean_csv.py $^ > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt -.PRECIOUS: data/processed/A50951_AUCM_Year_%_clean.csv -data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.txt - python processors/clean_csv.py $< > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.txt - - data/processed/parking_tickets.csv : psql $(ILTICKETS_DB_URL) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" @@ -146,9 +142,9 @@ dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv touch $@ -dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv +dupes/cameras-%.csv : data/cameras/A50951_AUCM_Year_%.txt $(check_tmp_cameras_relation) || psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" - psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_cameras_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header);" + sed \$$d $< | psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_cameras_$* FROM STDIN with (delimiter '$$', format csv, header);" psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.cameras SELECT * FROM tmp.tmp_table_cameras_$* ON CONFLICT DO NOTHING;" psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_cameras_$*;" touch $@ From 892e71c5c6237e88f5d01249c93c9951ae4136c7 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 7 Nov 2018 11:25:09 -0600 Subject: [PATCH 106/140] upload data to mapbox --- Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Makefile b/Makefile index dfe0c4f..0e287d3 100644 --- a/Makefile +++ b/Makefile @@ -154,5 +154,13 @@ load_meta_% : data/metadata/%.csv $(check_public_relation) && psql $(ILTICKETS_DB_URL) -c "\copy $* from '$(CURDIR)/$<' with (delimiter ',', format csv, header);" +data/geojson/%.json : + $(check_public_relation) || ogr2ogr -f GeoJSON $@ PG:"$(ILTICKETS_DB_STRING)" -sql "select * from $*;" + + +upload_geojson_% : data/geojson/%.json + mapbox upload propublica.il-tickets-$* $< + + clean_% : rm -Rf data/$*/* From 683e2bbbfc072395b926b41bf461e81b01bac047 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 7 Nov 2018 11:29:55 -0600 Subject: [PATCH 107/140] refactor penalty calculator a bit --- processors/clean_csv.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 13cc9b4..f31b40b 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -69,16 +69,16 @@ def calculate_penalty(row): """ Calculate penalty as `(current_amount_due + total_paid) - fine_level1_amount` """ - if float(row[14]) < 0: + + # If current amount due is negative or ticket was dismissed, + # penalty is null + if float(row[14]) < 0 or row[16] == 'Dismissed': penalty = None - elif row[16] != 'Dismissed': - penalty = (float(row[14]) + float(row[15])) - float(row[12]) else: - penalty = None + penalty = (float(row[14]) + float(row[15])) - float(row[12]) return penalty - def add_year(row): """ Add year to row. From e6ad632b89e3983c611d92b7444cad8af8683ca8 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 7 Nov 2018 11:44:26 -0600 Subject: [PATCH 108/140] move hasura over here --- hasura/docker-run.sh | 6 ++++++ hasura/metadata.json | 1 + 2 files changed, 7 insertions(+) create mode 100644 hasura/docker-run.sh create mode 100644 hasura/metadata.json diff --git a/hasura/docker-run.sh b/hasura/docker-run.sh new file mode 100644 index 0000000..47c866e --- /dev/null +++ b/hasura/docker-run.sh @@ -0,0 +1,6 @@ +#! /bin/bash +docker run -p 8080:8080 \ + hasura/graphql-engine:v1.0.0-alpha28 \ + graphql-engine \ + --database-url ${ILTICKETS_DB_URL} \ + serve --enable-console diff --git a/hasura/metadata.json b/hasura/metadata.json new file mode 100644 index 0000000..30ffb36 --- /dev/null +++ b/hasura/metadata.json @@ -0,0 +1 @@ +{"tables":[{"table":"wards","object_relationships":[{"using":{"manual_configuration":{"remote_table":"wardmeta","column_mapping":{"ward":"ward"}}},"name":"wardMeta","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals","column_mapping":{"ward":"ward"}}},"name":"wardTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals5yr","column_mapping":{"ward":"ward"}}},"name":"wardTotals5yr","comment":null}],"array_relationships":[{"using":{"manual_configuration":{"remote_table":"wardsyearly","column_mapping":{"ward":"ward"}}},"name":"wardTicketsYearly","comment":null},{"using":{"manual_configuration":{"remote_table":"blocks","column_mapping":{"ward":"ward"}}},"name":"wardBlocks","comment":null}],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearly","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardmeta","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blockstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blocks","object_relationships":[{"using":{"manual_configuration":{"remote_table":"blockstotals","column_mapping":{"address":"address"}}},"name":"blockTotals","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} \ No newline at end of file From 4b372979bdd5de8c1e35be4837397b246b928c36 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 28 Nov 2018 02:11:25 -0600 Subject: [PATCH 109/140] make geo layers for app --- Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Makefile b/Makefile index 0e287d3..17fffeb 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,7 @@ tables : $(patsubst %, table_%, $(DATATABLES)) $(patsubst %, table_%, $(METADATA indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) meta : $(patsubst %, load_meta_%, $(METADATA)) +appgeo : bootstrap load_geodata_wards2015 parking : $(patsubst %, dupes/parking-%.csv, $(PARKINGYEARS)) cameras : $(patsubst %, dupes/cameras-%.csv, $(CAMERAYEARS)) @@ -162,5 +163,11 @@ upload_geojson_% : data/geojson/%.json mapbox upload propublica.il-tickets-$* $< +#READSQL:=$(shell cat $@) +data/exports/%.csv : sql/exports/%.sql + psql $(ILTICKETS_DB_URL) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@'" + + #psql $(ILTICKETS_DB_URL) -c "\copy ( + clean_% : rm -Rf data/$*/* From 4426bf30b10379643efb4dcde29a4a380a830c95 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 28 Nov 2018 02:11:55 -0600 Subject: [PATCH 110/140] calculate % successfully contested --- sql/views/wardstotals.sql | 24 ++++++++++++++++++++++++ sql/views/wardstotals5yr.sql | 24 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/sql/views/wardstotals.sql b/sql/views/wardstotals.sql index 9f1ca9a..6e64544 100644 --- a/sql/views/wardstotals.sql +++ b/sql/views/wardstotals.sql @@ -46,6 +46,17 @@ create table if not exists wardstotals as hearing_disposition = 'Not Liable') group by ward ), + wards_notliabletickets as ( + select + ward, + sum(ticket_count) as notliable_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + hearing_disposition = 'Not Liable' + group by ward + ), wards_bankruptcytickets as ( select ward, @@ -103,6 +114,7 @@ create table if not exists wardstotals as p.police_ticket_count / t.ticket_count as police_ticket_count_pct, c.contested_ticket_count, c.contested_ticket_count / t.ticket_count as contested_ticket_count_pct, + n.notliable_ticket_count / c.contested_ticket_count as contested_and_notliable_pct, pd.paid_ticket_count, pd.paid_ticket_count/t.ticket_count as paid_ticket_count_pct, d.dismissed_ticket_count, @@ -117,6 +129,8 @@ create table if not exists wardstotals as t.ward = p.ward join wards_contestedtickets c on t.ward = c.ward + join wards_notliabletickets n on + t.ward = n.ward join wards_bankruptcytickets b on t.ward = b.ward join wards_paidtickets pd on @@ -158,6 +172,9 @@ create table if not exists wardstotals as min(contested_ticket_count_pct) as min_contested_ticket_count_pct, max(contested_ticket_count_pct) as max_contested_ticket_count_pct, + min(contested_and_notliable_pct) as min_contested_and_notliable_pct, + max(contested_and_notliable_pct) as max_contested_and_notliable_pct, + min(paid_ticket_count) as min_paid_ticket_count, max(paid_ticket_count) as max_paid_ticket_count, @@ -257,6 +274,13 @@ create table if not exists wardstotals as min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, + contested_and_notliable_pct, + dense_rank() over (order by contested_and_notliable_pct desc) as contested_and_notliable_pct_rank, + + width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) as contested_and_notliable_pct_bucket, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) - 1) as contested_and_notliable_pct_bucket_min, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins)) as contested_and_notliable_pct_bucket_max, + paid_ticket_count, dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, diff --git a/sql/views/wardstotals5yr.sql b/sql/views/wardstotals5yr.sql index 258e125..1e6b0ff 100644 --- a/sql/views/wardstotals5yr.sql +++ b/sql/views/wardstotals5yr.sql @@ -46,6 +46,17 @@ create table if not exists wardstotals5yr as hearing_disposition = 'Not Liable') group by ward ), + wards_notliabletickets as ( + select + ward, + sum(ticket_count) as notliable_ticket_count + from wardsyearly, year_bounds + where + (year > min_year and year < max_year) + and + hearing_disposition = 'Not Liable' + group by ward + ), wards_bankruptcytickets as ( select ward, @@ -103,6 +114,7 @@ create table if not exists wardstotals5yr as p.police_ticket_count / t.ticket_count as police_ticket_count_pct, c.contested_ticket_count, c.contested_ticket_count / t.ticket_count as contested_ticket_count_pct, + n.notliable_ticket_count / c.contested_ticket_count as contested_and_notliable_pct, pd.paid_ticket_count, pd.paid_ticket_count/t.ticket_count as paid_ticket_count_pct, d.dismissed_ticket_count, @@ -117,6 +129,8 @@ create table if not exists wardstotals5yr as t.ward = p.ward join wards_contestedtickets c on t.ward = c.ward + join wards_notliabletickets n on + t.ward = n.ward join wards_bankruptcytickets b on t.ward = b.ward join wards_paidtickets pd on @@ -158,6 +172,9 @@ create table if not exists wardstotals5yr as min(contested_ticket_count_pct) as min_contested_ticket_count_pct, max(contested_ticket_count_pct) as max_contested_ticket_count_pct, + min(contested_and_notliable_pct) as min_contested_and_notliable_pct, + max(contested_and_notliable_pct) as max_contested_and_notliable_pct, + min(paid_ticket_count) as min_paid_ticket_count, max(paid_ticket_count) as max_paid_ticket_count, @@ -257,6 +274,13 @@ create table if not exists wardstotals5yr as min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, + contested_and_notliable_pct, + dense_rank() over (order by contested_and_notliable_pct desc) as contested_and_notliable_pct_rank, + + width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) as contested_and_notliable_pct_bucket, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) - 1) as contested_and_notliable_pct_bucket_min, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins)) as contested_and_notliable_pct_bucket_max, + paid_ticket_count, dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, From 07aa9e69042a9cfd680de4ef8173755fa6d58327 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Nov 2018 00:57:28 -0600 Subject: [PATCH 111/140] add make command to populate geocode table --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 17fffeb..0047fc1 100644 --- a/Makefile +++ b/Makefile @@ -63,6 +63,10 @@ view_% : sql/views/%.sql $(check_public_relation) || psql $(ILTICKETS_DB_URL) -f $< +populate_addresses : sql/geocodes/populate_addresses.sql + psql $(ILTICKETS_DB_URL) -f $< + + index_% : sql/indexes/%.sql psql $(ILTICKETS_DB_URL) -f $< From 61bb0a435f276a63c1100e4d4ad7c2852b90d89f Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Nov 2018 00:57:58 -0600 Subject: [PATCH 112/140] clean up makefile --- Makefile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Makefile b/Makefile index 0047fc1..8d5e53b 100644 --- a/Makefile +++ b/Makefile @@ -167,11 +167,9 @@ upload_geojson_% : data/geojson/%.json mapbox upload propublica.il-tickets-$* $< -#READSQL:=$(shell cat $@) data/exports/%.csv : sql/exports/%.sql psql $(ILTICKETS_DB_URL) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@'" - #psql $(ILTICKETS_DB_URL) -c "\copy ( clean_% : rm -Rf data/$*/* From bc8e1463c1cdaec33bcdf92067e734d8e81bab19 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Nov 2018 00:58:24 -0600 Subject: [PATCH 113/140] update db schema and indexes for geocodio --- sql/indexes/parking.sql | 1 + sql/tables/geocodes.sql | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/indexes/parking.sql b/sql/indexes/parking.sql index f899997..6218800 100644 --- a/sql/indexes/parking.sql +++ b/sql/indexes/parking.sql @@ -1 +1,2 @@ create index if not exists parking_cluster on parking (address, violation_code, year); +create index if not exists parking_address on parking (address); diff --git a/sql/tables/geocodes.sql b/sql/tables/geocodes.sql index 7d1dc62..9a92eff 100644 --- a/sql/tables/geocodes.sql +++ b/sql/tables/geocodes.sql @@ -1,12 +1,13 @@ CREATE TABLE public.geocodes ( - id serial primary key, address character varying, geocoded_address character varying, geocoded_lng double precision, geocoded_lat double precision, geocoded_city character varying, geocoded_state character varying, + geocoded_zip character varying, geocode_accuracy character varying, + geocode_accuracy_type character varying, geocode_geojson jsonb, geom geometry(Geometry,4326) ) From f6ce55e673f077afe0e809558a374c516f93b549 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 29 Nov 2018 00:59:23 -0600 Subject: [PATCH 114/140] add scrapy geocoder --- geocodeparking/__init__.py | 0 geocodeparking/items.py | 14 ++++ geocodeparking/middlewares.py | 103 +++++++++++++++++++++++++++++ geocodeparking/pipelines.py | 44 ++++++++++++ geocodeparking/settings.py | 92 ++++++++++++++++++++++++++ geocodeparking/spiders/__init__.py | 4 ++ geocodeparking/spiders/geocodio.py | 52 +++++++++++++++ requirements.txt | 82 ++++++++++++++++++++++- scrapy.cfg | 11 +++ 9 files changed, 400 insertions(+), 2 deletions(-) create mode 100644 geocodeparking/__init__.py create mode 100644 geocodeparking/items.py create mode 100644 geocodeparking/middlewares.py create mode 100644 geocodeparking/pipelines.py create mode 100644 geocodeparking/settings.py create mode 100644 geocodeparking/spiders/__init__.py create mode 100644 geocodeparking/spiders/geocodio.py create mode 100644 scrapy.cfg diff --git a/geocodeparking/__init__.py b/geocodeparking/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geocodeparking/items.py b/geocodeparking/items.py new file mode 100644 index 0000000..2ea5825 --- /dev/null +++ b/geocodeparking/items.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- + +# Define here the models for your scraped items +# +# See documentation in: +# https://doc.scrapy.org/en/latest/topics/items.html + +import scrapy + + +class GeocodeparkingItem(scrapy.Item): + # define the fields for your item here like: + # name = scrapy.Field() + pass diff --git a/geocodeparking/middlewares.py b/geocodeparking/middlewares.py new file mode 100644 index 0000000..31ff8f5 --- /dev/null +++ b/geocodeparking/middlewares.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- + +# Define here the models for your spider middleware +# +# See documentation in: +# https://doc.scrapy.org/en/latest/topics/spider-middleware.html + +from scrapy import signals + + +class GeocodeparkingSpiderMiddleware(object): + # Not all methods need to be defined. If a method is not defined, + # scrapy acts as if the spider middleware does not modify the + # passed objects. + + @classmethod + def from_crawler(cls, crawler): + # This method is used by Scrapy to create your spiders. + s = cls() + crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) + return s + + def process_spider_input(self, response, spider): + # Called for each response that goes through the spider + # middleware and into the spider. + + # Should return None or raise an exception. + return None + + def process_spider_output(self, response, result, spider): + # Called with the results returned from the Spider, after + # it has processed the response. + + # Must return an iterable of Request, dict or Item objects. + for i in result: + yield i + + def process_spider_exception(self, response, exception, spider): + # Called when a spider or process_spider_input() method + # (from other spider middleware) raises an exception. + + # Should return either None or an iterable of Response, dict + # or Item objects. + pass + + def process_start_requests(self, start_requests, spider): + # Called with the start requests of the spider, and works + # similarly to the process_spider_output() method, except + # that it doesn’t have a response associated. + + # Must return only requests (not items). + for r in start_requests: + yield r + + def spider_opened(self, spider): + spider.logger.info('Spider opened: %s' % spider.name) + + +class GeocodeparkingDownloaderMiddleware(object): + # Not all methods need to be defined. If a method is not defined, + # scrapy acts as if the downloader middleware does not modify the + # passed objects. + + @classmethod + def from_crawler(cls, crawler): + # This method is used by Scrapy to create your spiders. + s = cls() + crawler.signals.connect(s.spider_opened, signal=signals.spider_opened) + return s + + def process_request(self, request, spider): + # Called for each request that goes through the downloader + # middleware. + + # Must either: + # - return None: continue processing this request + # - or return a Response object + # - or return a Request object + # - or raise IgnoreRequest: process_exception() methods of + # installed downloader middleware will be called + return None + + def process_response(self, request, response, spider): + # Called with the response returned from the downloader. + + # Must either; + # - return a Response object + # - return a Request object + # - or raise IgnoreRequest + return response + + def process_exception(self, request, exception, spider): + # Called when a download handler or a process_request() + # (from other downloader middleware) raises an exception. + + # Must either: + # - return None: continue processing this exception + # - return a Response object: stops process_exception() chain + # - return a Request object: stops process_exception() chain + pass + + def spider_opened(self, spider): + spider.logger.info('Spider opened: %s' % spider.name) diff --git a/geocodeparking/pipelines.py b/geocodeparking/pipelines.py new file mode 100644 index 0000000..c86be60 --- /dev/null +++ b/geocodeparking/pipelines.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +import logging +from twisted.enterprise import adbapi + + +class GeocodeparkingDatabasePipeline(object): + def __init__(self): + self.logger = logging.getLogger(__name__) + + dbargs = { + 'host': 'localhost', + 'database': 'iltickets', + } + dbpool = adbapi.ConnectionPool('psycopg2', **dbargs) + self.dbpool = dbpool + + + def process_item(self, item, spider): + d = self.dbpool.runInteraction(self._insert, item, spider) + d.addErrback(self._handle_error, item, spider) + d.addBoth(lambda _: item) + self.logger.info("added {address} to db".format(**item)) + return d + + def _insert(self, conn, item, spider): + query = """ + update geocodes set + address='{address}', + geocoded_address='{geocoded_address}', + geocoded_lng={geocoded_lng}, + geocoded_lat={geocoded_lat}, + geocoded_city='{geocoded_city}', + geocoded_state='{geocoded_state}', + geocoded_zip='{geocoded_zip}', + geocode_accuracy='{geocode_accuracy}', + geocode_accuracy_type='{geocode_accuracy_type}', + geocode_geojson='{geocode_geojson}' + where + address='{address}' + """.format(**item) + ret = conn.execute(query) + + def _handle_error(self, failure, item, spider): + self.logger.error(failure) diff --git a/geocodeparking/settings.py b/geocodeparking/settings.py new file mode 100644 index 0000000..3f53616 --- /dev/null +++ b/geocodeparking/settings.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- + +# Scrapy settings for geocodeparking project +# +# For simplicity, this file contains only settings considered important or +# commonly used. You can find more settings consulting the documentation: +# +# https://doc.scrapy.org/en/latest/topics/settings.html +# https://doc.scrapy.org/en/latest/topics/downloader-middleware.html +# https://doc.scrapy.org/en/latest/topics/spider-middleware.html + +BOT_NAME = 'geocodeparking' + +SPIDER_MODULES = ['geocodeparking.spiders'] +NEWSPIDER_MODULE = 'geocodeparking.spiders' + +LOG_LEVEL = 'INFO' + + +# Crawl responsibly by identifying yourself (and your website) on the user-agent +#USER_AGENT = 'geocodeparking (+http://www.yourdomain.com)' + +# Obey robots.txt rules +ROBOTSTXT_OBEY = True + +# Configure maximum concurrent requests performed by Scrapy (default: 16) +CONCURRENT_REQUESTS = 32 + +# Configure a delay for requests for the same website (default: 0) +# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay +# See also autothrottle settings and docs +#DOWNLOAD_DELAY = 3 +# The download delay setting will honor only one of: +#CONCURRENT_REQUESTS_PER_DOMAIN = 16 +#CONCURRENT_REQUESTS_PER_IP = 16 + +# Disable cookies (enabled by default) +#COOKIES_ENABLED = False + +# Disable Telnet Console (enabled by default) +#TELNETCONSOLE_ENABLED = False + +# Override the default request headers: +#DEFAULT_REQUEST_HEADERS = { +# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', +# 'Accept-Language': 'en', +#} + +# Enable or disable spider middlewares +# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html +#SPIDER_MIDDLEWARES = { +# 'geocodeparking.middlewares.GeocodeparkingSpiderMiddleware': 543, +#} + +# Enable or disable downloader middlewares +# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html +#DOWNLOADER_MIDDLEWARES = { +# 'geocodeparking.middlewares.GeocodeparkingDownloaderMiddleware': 543, +#} + +# Enable or disable extensions +# See https://doc.scrapy.org/en/latest/topics/extensions.html +#EXTENSIONS = { +# 'scrapy.extensions.telnet.TelnetConsole': None, +#} + +# Configure item pipelines +# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html +ITEM_PIPELINES = { + 'geocodeparking.pipelines.GeocodeparkingDatabasePipeline': 300, +} + +# Enable and configure the AutoThrottle extension (disabled by default) +# See https://doc.scrapy.org/en/latest/topics/autothrottle.html +#AUTOTHROTTLE_ENABLED = True +# The initial download delay +#AUTOTHROTTLE_START_DELAY = 5 +# The maximum download delay to be set in case of high latencies +#AUTOTHROTTLE_MAX_DELAY = 60 +# The average number of requests Scrapy should be sending in parallel to +# each remote server +#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 +# Enable showing throttling stats for every response received: +#AUTOTHROTTLE_DEBUG = False + +# Enable and configure HTTP caching (disabled by default) +# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings +#HTTPCACHE_ENABLED = True +#HTTPCACHE_EXPIRATION_SECS = 0 +#HTTPCACHE_DIR = 'httpcache' +#HTTPCACHE_IGNORE_HTTP_CODES = [] +#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage' diff --git a/geocodeparking/spiders/__init__.py b/geocodeparking/spiders/__init__.py new file mode 100644 index 0000000..ebd689a --- /dev/null +++ b/geocodeparking/spiders/__init__.py @@ -0,0 +1,4 @@ +# This package will contain the spiders of your Scrapy project +# +# Please refer to the documentation for information on how to create and manage +# your spiders. diff --git a/geocodeparking/spiders/geocodio.py b/geocodeparking/spiders/geocodio.py new file mode 100644 index 0000000..f81720c --- /dev/null +++ b/geocodeparking/spiders/geocodio.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +import json +import os +import records +import scrapy + +from urllib.parse import urlencode + +GEOCODIO_ACCESS_TOKEN = os.environ.get('GEOCODIO_ACCESS_TOKEN', '') +URL_TMPL = 'https://api.geocod.io/v1.3/geocode?{params}' + +db = records.Database(os.environ.get('ILTICKETS_DB_URL', 'postgres://localhost/iltickets')) + +class GeocodioSpider(scrapy.Spider): + name = 'geocodio' + + def start_requests(self): + rows = db.query(""" + select + address + from + geocodes tablesample system(1) + where + geocoded_address is null + limit 10 + """) + + for row in rows: + params = { + 'q': row['address'], + 'api_key': GEOCODIO_ACCESS_TOKEN, + } + url = URL_TMPL.format(params=urlencode(params)) + yield scrapy.Request(url=url, callback=self.parse, meta={'address': row['address']}) + + def parse(self, response): + geojson = json.loads(response.body) + item = { + 'address': response.meta['address'], + 'geocoded_address': geojson['results'][0]['formatted_address'], + 'geocoded_lng': geojson['results'][0]['location']['lng'], + 'geocoded_lat': geojson['results'][0]['location']['lat'], + 'geocoded_city': geojson['results'][0]['address_components']['city'], + 'geocoded_state': geojson['results'][0]['address_components']['state'], + 'geocoded_zip': geojson['results'][0]['address_components']['zip'], + 'geocode_accuracy': geojson['results'][0]['accuracy'], + 'geocode_accuracy_type': geojson['results'][0]['accuracy_type'], + 'geocode_geojson': response.text + } + yield item + + diff --git a/requirements.txt b/requirements.txt index 82cce39..f205b8d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,86 @@ +agate==1.6.1 +agate-dbf==0.2.0 +agate-excel==0.2.2 +agate-sql==0.5.3 +appnope==0.1.0 +asn1crypto==0.24.0 atomicwrites==1.2.1 attrs==18.2.0 +Automat==0.7.0 +Babel==2.6.0 +backcall==0.1.0 +certifi==2018.4.16 +cffi==1.11.5 +chardet==3.0.4 +click==6.7 +constantly==15.1.0 +cryptography==2.4.2 +cssselect==1.0.3 +csvkit==1.0.3 +dbfread==2.0.7 +decorator==4.3.0 +docopt==0.6.2 +et-xmlfile==1.0.1 +future==0.16.0 +geocoder==1.38.1 +hyperlink==18.0.0 +idna==2.7 +incremental==17.5.0 +ipdb==0.11 +ipython==6.4.0 +ipython-genutils==0.2.0 +isodate==0.6.0 +jdcal==1.4 +jedi==0.12.0 +leather==0.3.3 +lxml==4.2.5 more-itertools==4.3.0 -pluggy==0.8.0 +numpy==1.14.5 +odfpy==1.3.6 +openpyxl==2.5.4 +pandas==0.23.3 +parsedatetime==2.4 +parsel==1.5.1 +parso==0.2.1 +pexpect==4.6.0 +pickleshare==0.7.4 +pluggy==0.7.1 +prompt-toolkit==1.0.15 +psycopg2-binary==2.7.5 +ptyprocess==0.5.2 py==1.7.0 +pyasn1==0.4.4 +pyasn1-modules==0.2.2 +pycparser==2.19 pycrypto==2.6.1 -pytest==3.9.1 +PyDispatcher==2.0.5 +Pygments==2.2.0 +PyHamcrest==1.9.0 +pyOpenSSL==18.0.0 +-e git+git@github.com:jezcope/pyrefine.git@44872592b1c0430d942d6901d7670e7b0ae77b11#egg=pyrefine +pytest==3.8.2 +python-dateutil==2.7.3 +python-slugify==1.2.5 +pytimeparse==1.1.8 +pytz==2018.4 +PyYAML==3.13 +queuelib==1.5.0 +ratelim==0.1.6 +records==0.5.2 +requests==2.19.1 +Scrapy==1.5.1 +service-identity==17.0.0 +simplegeneric==0.8.1 six==1.11.0 +SQLAlchemy==1.2.8 +tablib==0.12.1 +traitlets==4.3.2 +Twisted==18.9.0 +unicodecsv==0.14.1 +Unidecode==1.0.22 +urllib3==1.23 +w3lib==1.19.0 +wcwidth==0.1.7 +xlrd==1.1.0 +xlwt==1.3.0 +zope.interface==4.6.0 diff --git a/scrapy.cfg b/scrapy.cfg new file mode 100644 index 0000000..750d8a1 --- /dev/null +++ b/scrapy.cfg @@ -0,0 +1,11 @@ +# Automatically created by: scrapy startproject +# +# For more information about the [deploy] section see: +# https://scrapyd.readthedocs.io/en/latest/deploy.html + +[settings] +default = geocodeparking.settings + +[deploy] +#url = http://localhost:6800/ +project = geocodeparking From 6f17159c9f230cf0ab4732bc61975f24dffc29ec Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 30 Nov 2018 15:44:22 -0600 Subject: [PATCH 115/140] functional new geocoder --- Makefile | 12 +++-- geocodeparking/pipelines.py | 1 + geocodeparking/spiders/geocodio.py | 12 +++-- processors/clean_csv.py | 73 +++++++++++++++++++++++++---- sql/geocodes/populate_addresses.sql | 2 + sql/indexes/cameras.sql | 0 sql/tables/blockgroups_race.sql | 25 ++++++++++ sql/tables/geocodes.sql | 2 +- sql/tables/parking.sql | 1 + sql/views/wardscommunityareas.sql | 9 ++++ tests/test_clean_csv.py | 48 +++++++++++++------ 11 files changed, 152 insertions(+), 33 deletions(-) create mode 100644 sql/geocodes/populate_addresses.sql create mode 100644 sql/indexes/cameras.sql create mode 100644 sql/tables/blockgroups_race.sql create mode 100644 sql/views/wardscommunityareas.sql diff --git a/Makefile b/Makefile index 8d5e53b..9a92822 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,17 @@ PARKINGYEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 CAMERAYEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -DATATABLES = parking +DATATABLES = parking cameras METADATA = wardmeta GEOTABLES = communityareas wards2015 -VIEWS = violations blocks blockstotals wardsyearly wardstotals +VIEWS = violations blocks blockstotals wardsyearly wardstotals wardstotals5yr wardscommunityareas DATADIRS = analysis cameras geodata parking processed +# Id,Id2,Geography,Estimate; Total:,Margin of Error; Total:,Estimate; Total: - White alone,Margin of Error; Total: - White alone,Estimate; Total: - Black or African American alone,Margin of Error; Total: - Black or African American alone,Estimate; Total: - American Indian and Alaska Native alone,Margin of Error; Total: - American Indian and Alaska Native alone,Estimate; Total: - Asian alone,Margin of Error; Total: - Asian alone,Estimate; Total: - Native Hawaiian and Other Pacific Islander alone,Margin of Error; Total: - Native Hawaiian and Other Pacific Islander alone,Estimate; Total: - Some other race alone,Margin of Error; Total: - Some other race alone,Estimate; Total: - Two or more races:,Margin of Error; Total: - Two or more races:,Estimate; Total: - Two or more races: - Two races including Some other race,Margin of Error; Total: - Two or more races: - Two races including Some other race,"Estimate; Total: - Two or more races: - Two races excluding Some other race, and three or more races","Margin of Error; Total: - Two or more races: - Two races excluding Some other race, and three or more races" + .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship .INTERMEDIATE: processors/salt.txt -all: bootstrap geo parking cameras meta indexes views +all: bootstrap geo parking meta indexes views bootstrap : create_db tables schema geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) @@ -99,6 +101,10 @@ load_geodata_% : data/geodata/%.json $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/$*.json" -nln $* -overwrite +load_geodata_shp_tl_2016_17_bg : data/geodata/tl_2016_17_bg/tl_2016_17_bg.shp + ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/tl_2016_17_bg/tl_2016_17_bg.shp" -nln tl_2016_17_bg -t_srs EPSG:4326 -overwrite + + data/parking/A50951_PARK_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$(@F) $@ diff --git a/geocodeparking/pipelines.py b/geocodeparking/pipelines.py index c86be60..ed826cb 100644 --- a/geocodeparking/pipelines.py +++ b/geocodeparking/pipelines.py @@ -23,6 +23,7 @@ def process_item(self, item, spider): return d def _insert(self, conn, item, spider): + item['address'] = item['address'].replace("'", "''") query = """ update geocodes set address='{address}', diff --git a/geocodeparking/spiders/geocodio.py b/geocodeparking/spiders/geocodio.py index f81720c..5707648 100644 --- a/geocodeparking/spiders/geocodio.py +++ b/geocodeparking/spiders/geocodio.py @@ -14,20 +14,24 @@ class GeocodioSpider(scrapy.Spider): name = 'geocodio' + def _clean_address(self, address): + cleaned = address.replace("'", "") + return cleaned + def start_requests(self): rows = db.query(""" select address from - geocodes tablesample system(1) + geocodes where geocoded_address is null - limit 10 """) for row in rows: + address = self._clean_address(row['address']) params = { - 'q': row['address'], + 'q': address, 'api_key': GEOCODIO_ACCESS_TOKEN, } url = URL_TMPL.format(params=urlencode(params)) @@ -45,7 +49,7 @@ def parse(self, response): 'geocoded_zip': geojson['results'][0]['address_components']['zip'], 'geocode_accuracy': geojson['results'][0]['accuracy'], 'geocode_accuracy_type': geojson['results'][0]['accuracy_type'], - 'geocode_geojson': response.text + 'geocode_geojson': response.text, } yield item diff --git a/processors/clean_csv.py b/processors/clean_csv.py index f31b40b..0167611 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -3,6 +3,7 @@ import sys from Crypto.Hash import SHA256 + block_re = re.compile(r"0*(\d*)(\d{2})(\s)", re.IGNORECASE) twodigit_re = re.compile(r"^(00 )(.*)", re.IGNORECASE) @@ -17,24 +18,38 @@ def clean_quotes(row): return row -def clean_location(row): +def clean_location(row, corrections): """ Clean up a parking address for geocoding by adding the Chicago, IL stuff to the end. """ - address = "{2}, Chicago, IL".format(*row) - address = clean_address(address) - row.append(address.strip()) + address = row[2].strip().lower() + address = clean_address(address, corrections) + address = normalize_block(address) + address = "{}, Chicago, IL".format(address) + row.append(address) return row -def clean_address(address): +def clean_address(address, corrections): + """ + Use Matt Chapman's manual mapping + """ + parts = block_re.split(address) + street_part = parts[-1] + if street_part in corrections.keys(): + parts[-1] = corrections[street_part] + ret = ''.join(parts) + return ret + + +def normalize_block(address): """ - Simplistic block-level address parsing + Block-level address normalization 6232 S. Loomis -> 6200 S. Loomis 15 North State St -> 1 North State St """ - ret = block_re.sub(r'\g<1>00\g<3>', address).lower() + ret = block_re.sub(r'\g<1>00\g<3>', address) ret = twodigit_re.sub(r'1 \g<2>', ret) return ret @@ -65,6 +80,19 @@ def extract_month(datestring): return int(datestring[:2]) +def extract_hour(datestring): + """ + Return hour part of date string as integer. + """ + hour = int(datestring[11:13]) + cycle = datestring[17:19] + if hour == 12 and cycle == 'am': + hour = 0 + if cycle == 'pm': + hour += 12 + return hour + + def calculate_penalty(row): """ Calculate penalty as `(current_amount_due + total_paid) - fine_level1_amount` @@ -95,6 +123,14 @@ def add_month(row): return row +def add_hour(row): + """ + Add month to row. + """ + row.append(extract_hour(row[1])) + return row + + def add_penalty(row): """ Add penalty to row. @@ -103,15 +139,31 @@ def add_penalty(row): return row +def get_corrections(datafile='data/geodata/corrections.csv'): + """ + Get corrections + """ + with open(datafile, 'r') as f: + corrections_reader = csv.reader(f) + next(corrections_reader) + corrections = { bad: good for good, bad in corrections_reader } + return corrections + + def clean(data_filename, salt_filename): """ Clean up parking CSV. """ - addcol = False # Some source files have "reason for dismissmal" column with open(salt_filename, 'r') as f: salt = f.read() + + corrections = get_corrections() + writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) + with open(data_filename) as f: + addcol = False + reader = csv.reader((line.replace('\0','') for line in f), delimiter="$", quotechar='"') headers = next(reader) @@ -119,7 +171,7 @@ def clean(data_filename, salt_filename): if 'Reason for Dismissal' not in headers: headers = headers[:-1] + ['Reason for Dismissal'] + headers[-1:] addcol = True - headers += ['address', 'license_hash', 'year', 'month', 'penalty'] + headers += ['address', 'license_hash', 'year', 'month', 'hour', 'penalty'] writer.writerow(headers) for row in reader: @@ -127,10 +179,11 @@ def clean(data_filename, salt_filename): row = clean_quotes(row) if addcol: row = row[:-1] + [''] + row[-1:] - row = clean_location(row) + row = clean_location(row, corrections) row = hash_plates(row, salt) row = add_year(row) row = add_month(row) + row = add_hour(row) row = add_penalty(row) writer.writerow(row) except IndexError: diff --git a/sql/geocodes/populate_addresses.sql b/sql/geocodes/populate_addresses.sql new file mode 100644 index 0000000..8d87122 --- /dev/null +++ b/sql/geocodes/populate_addresses.sql @@ -0,0 +1,2 @@ +insert into geocodes (address) select distinct(address) from parking; +alter table geocodes add column id serial primary key; diff --git a/sql/indexes/cameras.sql b/sql/indexes/cameras.sql new file mode 100644 index 0000000..e69de29 diff --git a/sql/tables/blockgroups_race.sql b/sql/tables/blockgroups_race.sql new file mode 100644 index 0000000..4865972 --- /dev/null +++ b/sql/tables/blockgroups_race.sql @@ -0,0 +1,25 @@ +create table if not exists public.blockgroups_race ( + id character varying, + geoid character varying, + geography character varying, + total bigint, + total_moe bigint, + white bigint, + white_moe bigint, + black bigint, + black_moe bigint, + native bigint, + native_moe bigint, + asian bigint, + asian_moe bigint, + pacific_islander bigint, + pacific_islander_moe bigint, + other bigint, + other_moe bigint, + two_or_more bigint, + two_or_more_moe bigint, + two_or_more_including_other bigint, + two_or_more_including_other_moe bigint, + three_or_more bigint, + three_or_more_moe bigint +) diff --git a/sql/tables/geocodes.sql b/sql/tables/geocodes.sql index 9a92eff..a68929a 100644 --- a/sql/tables/geocodes.sql +++ b/sql/tables/geocodes.sql @@ -6,7 +6,7 @@ CREATE TABLE public.geocodes ( geocoded_city character varying, geocoded_state character varying, geocoded_zip character varying, - geocode_accuracy character varying, + geocode_accuracy float, geocode_accuracy_type character varying, geocode_geojson jsonb, geom geometry(Geometry,4326) diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql index 13da601..b662246 100644 --- a/sql/tables/parking.sql +++ b/sql/tables/parking.sql @@ -26,5 +26,6 @@ CREATE TABLE public.parking ( license_hash character varying, year int, month int, + hour int, penalty double precision null ); diff --git a/sql/views/wardscommunityareas.sql b/sql/views/wardscommunityareas.sql new file mode 100644 index 0000000..3cf3dca --- /dev/null +++ b/sql/views/wardscommunityareas.sql @@ -0,0 +1,9 @@ +create table if not exists wardscommunityareas as + select + w.ward, + c.community + from + wards2015 w + join communityareas c on + ST_intersects(c.wkb_geometry, w.wkb_geometry) + order by ward diff --git a/tests/test_clean_csv.py b/tests/test_clean_csv.py index e5586fa..5bc8b42 100644 --- a/tests/test_clean_csv.py +++ b/tests/test_clean_csv.py @@ -1,16 +1,23 @@ import pytest from processors import clean_csv +corrections = clean_csv.get_corrections() -TEST_ADDRESSES = [ - ('04 W BLACKHAWK', '1 w blackhawk'), - ('5627 S CALUMET', '5600 s calumet'), - ('01800 N NEWCASTLE', '1800 n newcastle'), - ('2319 W FOSTER', '2300 w foster'), - ('03634 W SHAKESPEARE', '3600 w shakespeare'), - ('420 W 63RD ST', '400 w 63rd st'), + +TEST_CLEAN_ADDRESSES = [ + ('04 w blackhawk', '04 w blackhawk'), + ('1638 w 47th ds', '1638 w 47th dr'), + ('925 w 50th sts', '925 w 50th st'), ] +TEST_NORMALIZE_ADDRESSES = [ + ('04 w blackhawk', '1 w blackhawk'), + ('5627 s calumet', '5600 s calumet'), + ('01800 n newcastle', '1800 n newcastle'), + ('2319 w foster', '2300 w foster'), + ('03634 w shakespeare', '3600 w shakespeare'), + ('420 w 63rd st', '400 w 63rd st'), +] TEST_BAD_ROWS = [ ['68862242', '01/01/2018 08:45 am', '8731 S CRANDON', 'V739544', 'IL', 'PAS', '60629', '0976210B', 'WINDOWS MISSING OR CRACKED BEYOND 6"$145"', 'CPD-Other', 'OLDS', '25', '50', '0', '0', 'Dismissed', '04/01/2018', '', '', '0', '17169'], @@ -18,7 +25,6 @@ ['68705090', '01/23/2018 12:46 am', '62 E CERMAK', '867T935', 'IL', 'TMP', '60653', '0976100A', 'SUSPENSION MODIFIED BEYOND 3"$1"', 'CPD', 'FORD', '25', '50', '50', '0', 'Notice', '02/01/2018', 'SEIZ', '', '5211010250', '3377'], ] - TEST_PENALTY_ROWS = [ (['60607661', '01/03/2012 12:39 pm', '4400 N PULASKI', 'P230623', 'IL', 'PAS', '60609', '0964125', 'NO CITY STICKER OR IMPROPER DISPLAY', '501', 'Miscellaneous', 'JEEP', '120', '240', '292.8', '0', 'Notice', '02/09/2012', 'DLS', '', '5122261100', '83'], 172.8), (['58864340', '01/03/2012 12:39 pm', '5951 W COURTLAND', 'A783051', 'IL', 'PAS', '606342633', '0976160F', 'EXPIRED PLATES OR TEMPORARY REGISTRATION', '23', 'CPD', 'GEO', '50', '100', '0', '122', 'Paid', '05/13/2015', 'SEIZ', '', '5145682080', '4112'], 72), @@ -27,17 +33,22 @@ (['57592040', '01/01/2012 12:02 am', '100 N LAKESHORE DR', '184199', 'IL', 'OTH', '', '0964150B', 'PARKING/STANDING PROHIBITED ANYTIME', '145', 'CPD-Other', 'HOND', '60', '120', '0', '0', 'Dismissed', '04/01/2012', '', '', '0', '1568'], None), ] - -# (input, (month, year)) +# (input, (month, year, hour)) TEST_DATES = [ - ('03/05/2005 09:05 pm', (3, 2005)), - ('06/25/1999 04:00 pm', (6, 1999)), - ('10/02/2011 03:18 pm', (10, 2011)), + ('03/05/2005 09:05 pm', (3, 2005, 21)), + ('06/25/1999 04:00 pm', (6, 1999, 16)), + ('10/02/2011 03:18 am', (10, 2011, 3)), ] -@pytest.mark.parametrize("input,expected", TEST_ADDRESSES) + +@pytest.mark.parametrize("input,expected", TEST_CLEAN_ADDRESSES) def test_clean_address(input, expected): - assert clean_csv.clean_address(input) == expected + assert clean_csv.clean_address(input, corrections) == expected + + +@pytest.mark.parametrize("input,expected", TEST_NORMALIZE_ADDRESSES) +def test_normalize_block(input, expected): + assert clean_csv.normalize_block(input) == expected @pytest.mark.parametrize("row", TEST_BAD_ROWS) @@ -57,6 +68,13 @@ def test_extract_year(input, expected): month = clean_csv.extract_year(input) assert month == expected[1] + +@pytest.mark.parametrize("input,expected", TEST_DATES) +def test_extract_hour(input, expected): + month = clean_csv.extract_hour(input) + assert month == expected[2] + + @pytest.mark.parametrize("input,expected", TEST_PENALTY_ROWS) def test_penalty(input, expected): penalty = clean_csv.calculate_penalty(input) From 311891085e17a6699196a1eb59e00de7cb69df77 Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 30 Nov 2018 16:22:24 -0600 Subject: [PATCH 116/140] remove old geocoder --- processors/geocode_addresses.py | 57 --------------------------------- 1 file changed, 57 deletions(-) delete mode 100644 processors/geocode_addresses.py diff --git a/processors/geocode_addresses.py b/processors/geocode_addresses.py deleted file mode 100644 index 7f4eb3d..0000000 --- a/processors/geocode_addresses.py +++ /dev/null @@ -1,57 +0,0 @@ -import geocoder -import records -import json -import os -import sys - -db = records.Database(os.environ.get('ILTICKETS_DB_URL', 'postgres://localhost/iltickets')) - - -def process(limit, offset): - rows = db.query(""" - select - id, - address - from - geocodes - where - geocode_geojson is null and - id >= :min and - id < :max - """, min=offset, max=offset+limit) - - for row in rows: - geocode = geocoder.google(row['address']) - geojson = geocode.geojson - - try: - db.query(""" - update geocodes set - geocoded_address=:geocoded_address, - geocoded_lng=:geocoded_lng, - geocoded_lat=:geocoded_lat, - geocoded_city=:geocoded_city, - geocoded_state=:geocoded_state, - geocode_accuracy=:geocode_accuracy, - geocode_geojson=:geocode_geojson - where - id=:id - """, - geocode_geojson=json.dumps(geocode.geojson), - geocoded_address=geojson['features'][0]['properties']['address'], - geocoded_lng=geojson['features'][0]['geometry']['coordinates'][0], - geocoded_lat=geojson['features'][0]['geometry']['coordinates'][1], - geocoded_city=geojson['features'][0]['properties'].get('city'), - geocoded_state=geojson['features'][0]['properties'].get('state'), - geocode_accuracy=geojson['features'][0]['properties'].get('accuracy'), - id=row['id'] - ) - print('geocoded %s -> %s (id# %s)' % (row['address'], geojson['features'][0]['properties']['address'], row['id'])) - except: - print('error w/ %s' % row['address'], file=sys.stderr) - - -if __name__ == '__main__': - limit = int(sys.argv[1]) - offset = int(sys.argv[2]) - process(limit, offset) From 0e24589052f5101df44054ee627041bdfd7c98bc Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 30 Nov 2018 17:23:31 -0600 Subject: [PATCH 117/140] start loading census data --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 9a92822..c656a26 100644 --- a/Makefile +++ b/Makefile @@ -98,11 +98,11 @@ data/metadata/wardmeta.csv : load_geodata_% : data/geodata/%.json - $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/$*.json" -nln $* -overwrite + $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "$<" -nln $* -overwrite -load_geodata_shp_tl_2016_17_bg : data/geodata/tl_2016_17_bg/tl_2016_17_bg.shp - ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "data/geodata/tl_2016_17_bg/tl_2016_17_bg.shp" -nln tl_2016_17_bg -t_srs EPSG:4326 -overwrite +load_geodata_% : data/geodata/%.shp + $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "$<" -nln $* -t_srs EPSG:4326 -overwrite data/parking/A50951_PARK_Year_%.txt : From 6b4b3894f9d59084619c50bfd7de539451526d54 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 6 Dec 2018 16:48:46 -0600 Subject: [PATCH 118/140] wip, functional new geocoding --- Makefile | 99 ++++++++++++------- hasura/docker-run.sh | 2 +- hasura/metadata.json | 2 +- ...kgroups_race.sql => acs_16_5yr_b02001.sql} | 2 +- sql/tables/acs_16_5yr_b03002.sql | 69 +++++++++++++ sql/views/warddemographics.sql | 20 ++++ sql/views/wardstotals.sql | 13 ++- sql/views/wardstotals5yr.sql | 14 ++- sql/views/wardsyearlytotals.sql | 13 +++ 9 files changed, 191 insertions(+), 43 deletions(-) rename sql/tables/{blockgroups_race.sql => acs_16_5yr_b02001.sql} (90%) create mode 100644 sql/tables/acs_16_5yr_b03002.sql create mode 100644 sql/views/warddemographics.sql create mode 100644 sql/views/wardsyearlytotals.sql diff --git a/Makefile b/Makefile index c656a26..18f34f3 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,26 @@ PARKINGYEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 +#PARKINGYEARS = 2018 CAMERAYEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking cameras +CENSUSTABLES = acs_16_5yr_b02001 METADATA = wardmeta -GEOTABLES = communityareas wards2015 -VIEWS = violations blocks blockstotals wardsyearly wardstotals wardstotals5yr wardscommunityareas +CENSUSDATA = acs_16_5yr_b02001 +GEOJSONTABLES = communityareas wards2015 +SHPTABLES = tl_2016_17_bg tl_2016_17_tabblock10 +VIEWS = violations blocks blockstotals wards wardsyearly wardstotals wardstotals5yr wardscommunityareas DATADIRS = analysis cameras geodata parking processed -# Id,Id2,Geography,Estimate; Total:,Margin of Error; Total:,Estimate; Total: - White alone,Margin of Error; Total: - White alone,Estimate; Total: - Black or African American alone,Margin of Error; Total: - Black or African American alone,Estimate; Total: - American Indian and Alaska Native alone,Margin of Error; Total: - American Indian and Alaska Native alone,Estimate; Total: - Asian alone,Margin of Error; Total: - Asian alone,Estimate; Total: - Native Hawaiian and Other Pacific Islander alone,Margin of Error; Total: - Native Hawaiian and Other Pacific Islander alone,Estimate; Total: - Some other race alone,Margin of Error; Total: - Some other race alone,Estimate; Total: - Two or more races:,Margin of Error; Total: - Two or more races:,Estimate; Total: - Two or more races: - Two races including Some other race,Margin of Error; Total: - Two or more races: - Two races including Some other race,"Estimate; Total: - Two or more races: - Two races excluding Some other race, and three or more races","Margin of Error; Total: - Two or more races: - Two races excluding Some other race, and three or more races" - -.PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship +.PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship sync geojson_tables shp_tables .INTERMEDIATE: processors/salt.txt -all: bootstrap geo parking meta indexes views +all: bootstrap geo census parking meta indexes views bootstrap : create_db tables schema -geo: load_geocodes $(patsubst %, load_geodata_%, $(GEOTABLES)) +geo: load_geocodes geojson_tables shp_tables +geojson_tables: $(patsubst %, load_geojson_%, $(GEOJSONTABLES)) +shp_tables: $(patsubst %, load_shp_%, $(SHPTABLES)) tables : $(patsubst %, table_%, $(DATATABLES)) $(patsubst %, table_%, $(METADATA)) +census : $(patsubst %, load_census_%, $(CENSUSDATA)) indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) meta : $(patsubst %, load_meta_%, $(METADATA)) @@ -32,49 +37,55 @@ zip_n_ship : processors/salt.txt upload_zip drop_views: $(patsubst %, drop_view_%, $(VIEWS)) clean: drop_db $(patsubst %, clean_%, $(DATADIRS)) processors/salt.txt + +define psql + psql $(ILTICKETS_DB_URL) +endef + + define check_database - psql $(ILTICKETS_DB_URL) -c "select 1;" > /dev/null 2>&1 + $(psql) -c "select 1;" > /dev/null 2>&1 endef define check_public_relation - psql $(ILTICKETS_DB_URL) -c "\d public.$*" > /dev/null 2>&1 + $(psql) -c "\d public.$*" > /dev/null 2>&1 endef define check_tmp_parking_relation - psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_parking_$*" > /dev/null 2>&1 + $(psql) -c "\d tmp.tmp_table_parking_$*" > /dev/null 2>&1 endef define check_tmp_cameras_relation - psql $(ILTICKETS_DB_URL) -c "\d tmp.tmp_table_cameras_$*" > /dev/null 2>&1 + $(psql) -c "\d tmp.tmp_table_cameras_$*" > /dev/null 2>&1 endef create_db : $(check_database) || psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME) lc_collate \"C\" lc_ctype \"C\" template template0" && \ - psql $(ILTICKETS_DB_URL) -c "CREATE EXTENSION IF NOT EXISTS postgis;" + $(psql) -c "CREATE EXTENSION IF NOT EXISTS postgis;" table_% : sql/tables/%.sql - $(check_public_relation) || psql $(ILTICKETS_DB_URL) -f $< + $(check_public_relation) || $(psql) -f $< view_% : sql/views/%.sql - $(check_public_relation) || psql $(ILTICKETS_DB_URL) -f $< + $(check_public_relation) || $(psql) -f $< populate_addresses : sql/geocodes/populate_addresses.sql - psql $(ILTICKETS_DB_URL) -f $< + $(psql) -f $< index_% : sql/indexes/%.sql - psql $(ILTICKETS_DB_URL) -f $< + $(psql) -f $< schema : - psql $(ILTICKETS_DB_URL) -c "CREATE SCHEMA IF NOT EXISTS tmp;" + $(psql) -c "CREATE SCHEMA IF NOT EXISTS tmp;" drop_db : @@ -82,7 +93,7 @@ drop_db : drop_view_% : - psql $(ILTICKETS_DB_URL) -c "drop table $*;" + $(psql) -c "drop table $*;" data/geodata/communityareas.json : @@ -97,12 +108,16 @@ data/metadata/wardmeta.csv : curl "https://data.cityofchicago.org/api/views/htai-wnw4/rows.csv?accessType=DOWNLOAD" > $@ -load_geodata_% : data/geodata/%.json +load_geojson_% : data/geodata/%.json $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "$<" -nln $* -overwrite -load_geodata_% : data/geodata/%.shp - $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "$<" -nln $* -t_srs EPSG:4326 -overwrite +load_shp_% : data/geodata/%.shp + $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "$<" -nlt PROMOTE_TO_MULTI -nln $* -t_srs EPSG:4326 -overwrite + + +dump : + pg_dump $(ILTICKETS_DB_URL) --verbose -t geocodes -Fc -f data/dumps/parking-geocodes-geocodio.dump data/parking/A50951_PARK_Year_%.txt : @@ -113,14 +128,22 @@ data/cameras/A50951_AUCM_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/cameras/$(@F) $@ -data/dumps/geocodes-city-stickers.dump : - aws s3 cp s3://data.il.propublica.org/il-tickets/dumps/geocodes-city-stickers.dump data/dumps/geocodes-city-stickers.dump +data/dumps/parking-geocodes-geocodio.dump : + aws s3 cp s3://data.il.propublica.org/il-tickets/dumps/parking-geocodes-geocodio.dump data/dumps/parking-geocodes-geocodio.dump + + +sync_% : + aws s3 sync data/$* s3://data.il.propublica.org/il-tickets/$* + + +load_geocodes : data/dumps/parking-geocodes-geocodio.dump + $(psql) -c "\d public.geocodes" > /dev/null 2>&1 || \ + ($(psql) -f sql/tables/geocodes.sql && \ + pg_restore -d "$(ILTICKETS_DB_URL)" -j 16 --no-acl --no-owner --clean -t geocodes data/dumps/parking-geocodes-geocodio.dump) -load_geocodes : data/dumps/geocodes-city-stickers.dump - psql $(ILTICKETS_DB_URL) -c "\d public.geocodes" > /dev/null 2>&1 || \ - (psql $(ILTICKETS_DB_URL) -f sql/tables/geocodes.sql && \ - pg_restore -d "$(ILTICKETS_DB_URL)" --no-acl --no-owner --clean -t geocodes data/dumps/geocodes-city-stickers.dump) +load_census_% : data/census/%.csv + $(check_public_relation) && $(psql) -c "\copy $* from '$(CURDIR)/$<' with (delimiter ',', format csv)" .PRECIOUS: processors/salt.txt @@ -134,7 +157,7 @@ data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.tx data/processed/parking_tickets.csv : - psql $(ILTICKETS_DB_URL) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" + $(psql) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" data/processed/parking_tickets.zip : data/data_dictionary.txt data/unit_key.csv data/processed/parking_tickets.csv @@ -146,23 +169,23 @@ upload_zip : data/processed/parking_tickets.zip dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv - $(check_tmp_parking_relation) || psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" - psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header, force_null(penalty));" - psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" - psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_parking_$*;" + $(check_tmp_parking_relation) || $(psql) -c "CREATE TABLE tmp.tmp_table_parking_$* AS SELECT * FROM public.parking WITH NO DATA;" + $(psql) -c "\copy tmp.tmp_table_parking_$* FROM '$(CURDIR)/$<' with (delimiter ',', format csv, header, force_null(penalty));" + $(psql) -c "INSERT INTO public.parking SELECT * FROM tmp.tmp_table_parking_$* ON CONFLICT DO NOTHING;" + $(psql) -c "DROP TABLE tmp.tmp_table_parking_$*;" touch $@ dupes/cameras-%.csv : data/cameras/A50951_AUCM_Year_%.txt - $(check_tmp_cameras_relation) || psql $(ILTICKETS_DB_URL) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" - sed \$$d $< | psql $(ILTICKETS_DB_URL) -c "\copy tmp.tmp_table_cameras_$* FROM STDIN with (delimiter '$$', format csv, header);" - psql $(ILTICKETS_DB_URL) -c "INSERT INTO public.cameras SELECT * FROM tmp.tmp_table_cameras_$* ON CONFLICT DO NOTHING;" - psql $(ILTICKETS_DB_URL) -c "DROP TABLE tmp.tmp_table_cameras_$*;" + $(check_tmp_cameras_relation) || $(psql) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" + sed \$$d $< | $(psql) -c "\copy tmp.tmp_table_cameras_$* FROM STDIN with (delimiter '$$', format csv, header);" + $(psql) -c "INSERT INTO public.cameras SELECT * FROM tmp.tmp_table_cameras_$* ON CONFLICT DO NOTHING;" + $(psql) -c "DROP TABLE tmp.tmp_table_cameras_$*;" touch $@ load_meta_% : data/metadata/%.csv - $(check_public_relation) && psql $(ILTICKETS_DB_URL) -c "\copy $* from '$(CURDIR)/$<' with (delimiter ',', format csv, header);" + $(check_public_relation) && $(psql) -c "\copy $* from '$(CURDIR)/$<' with (delimiter ',', format csv, header);" data/geojson/%.json : @@ -174,7 +197,7 @@ upload_geojson_% : data/geojson/%.json data/exports/%.csv : sql/exports/%.sql - psql $(ILTICKETS_DB_URL) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@'" + $(psql) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@'" clean_% : diff --git a/hasura/docker-run.sh b/hasura/docker-run.sh index 47c866e..a3bca34 100644 --- a/hasura/docker-run.sh +++ b/hasura/docker-run.sh @@ -1,6 +1,6 @@ #! /bin/bash docker run -p 8080:8080 \ - hasura/graphql-engine:v1.0.0-alpha28 \ + hasura/graphql-engine:v1.0.0-alpha31 \ graphql-engine \ --database-url ${ILTICKETS_DB_URL} \ serve --enable-console diff --git a/hasura/metadata.json b/hasura/metadata.json index 30ffb36..7eac840 100644 --- a/hasura/metadata.json +++ b/hasura/metadata.json @@ -1 +1 @@ -{"tables":[{"table":"wards","object_relationships":[{"using":{"manual_configuration":{"remote_table":"wardmeta","column_mapping":{"ward":"ward"}}},"name":"wardMeta","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals","column_mapping":{"ward":"ward"}}},"name":"wardTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals5yr","column_mapping":{"ward":"ward"}}},"name":"wardTotals5yr","comment":null}],"array_relationships":[{"using":{"manual_configuration":{"remote_table":"wardsyearly","column_mapping":{"ward":"ward"}}},"name":"wardTicketsYearly","comment":null},{"using":{"manual_configuration":{"remote_table":"blocks","column_mapping":{"ward":"ward"}}},"name":"wardBlocks","comment":null}],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearly","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardmeta","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blockstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blocks","object_relationships":[{"using":{"manual_configuration":{"remote_table":"blockstotals","column_mapping":{"address":"address"}}},"name":"blockTotals","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} \ No newline at end of file +{"remote_schemas":[],"tables":[{"table":"warddemographics","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wards","object_relationships":[{"using":{"manual_configuration":{"remote_table":"wardmeta","column_mapping":{"ward":"ward"}}},"name":"wardMeta","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals","column_mapping":{"ward":"ward"}}},"name":"wardTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals5yr","column_mapping":{"ward":"ward"}}},"name":"wardTotals5yr","comment":null},{"using":{"manual_configuration":{"remote_table":"warddemographics","column_mapping":{"ward":"ward"}}},"name":"wardDemographics","comment":null}],"array_relationships":[{"using":{"manual_configuration":{"remote_table":"wardsyearly","column_mapping":{"ward":"ward"}}},"name":"wardTicketsYearly","comment":null},{"using":{"manual_configuration":{"remote_table":"blocks","column_mapping":{"ward":"ward"}}},"name":"wardBlocks","comment":null},{"using":{"manual_configuration":{"remote_table":"wardscommunityareas","column_mapping":{"ward":"ward"}}},"name":"wardCommunityAreas","comment":null}],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardscommunityareas","object_relationships":[{"using":{"manual_configuration":{"remote_table":"communityareas","column_mapping":{"community":"community"}}},"name":"wardCommunityAreaDetails","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearly","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"communityareas","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardmeta","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blockstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blocks","object_relationships":[{"using":{"manual_configuration":{"remote_table":"blockstotals","column_mapping":{"address":"address"}}},"name":"blockTotals","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} \ No newline at end of file diff --git a/sql/tables/blockgroups_race.sql b/sql/tables/acs_16_5yr_b02001.sql similarity index 90% rename from sql/tables/blockgroups_race.sql rename to sql/tables/acs_16_5yr_b02001.sql index 4865972..c727acc 100644 --- a/sql/tables/blockgroups_race.sql +++ b/sql/tables/acs_16_5yr_b02001.sql @@ -1,4 +1,4 @@ -create table if not exists public.blockgroups_race ( +create table if not exists public.acs_16_5yr_b02001 ( id character varying, geoid character varying, geography character varying, diff --git a/sql/tables/acs_16_5yr_b03002.sql b/sql/tables/acs_16_5yr_b03002.sql new file mode 100644 index 0000000..b67e0b7 --- /dev/null +++ b/sql/tables/acs_16_5yr_b03002.sql @@ -0,0 +1,69 @@ +create table if not exists public.acs_16_5yr_b03002 ( + id character varying, + geoid character varying, + geography character varying, + + total bigint, + total_moe bigint, + + not_hispanic bigint, + not_hispanic_moe bigint, + + not_hispanic_white bigint, + not_hispanic_white_moe bigint, + + not_hispanic_black bigint, + not_hispanic_black_moe bigint, + + not_hispanic_native bigint, + not_hispanic_native_moe bigint, + + not_hispanic_asian bigint, + not_hispanic_asian_moe bigint, + + not_hispanic_pacific_islander bigint, + not_hispanic_pacific_islander_moe bigint, + + not_hispanic_other bigint, + not_hispanic_other_moe bigint, + + not_hispanic_two_or_more bigint, + not_hispanic_two_or_more_moe bigint, + + not_hispanic_two_or_more_including_other bigint, + not_hispanic_two_or_more_including_other_moe bigint, + + not_hispanic_three_or_more bigint, + not_hispanic_three_or_more_moe bigint, + + hispanic bigint, + hispanic_moe bigint, + + hispanic_white bigint, + hispanic_white_moe bigint, + + hispanic_black bigint, + hispanic_black_moe bigint, + + hispanic_native bigint, + hispanic_native_moe bigint, + + hispanic_asian bigint, + hispanic_asian_moe bigint, + + hispanic_pacific_islander bigint, + hispanic_pacific_islander_moe bigint, + + hispanic_other bigint, + hispanic_other_moe bigint, + + hispanic_two_or_more bigint, + hispanic_two_or_more_moe bigint, + + hispanic_two_or_more_including_other bigint, + hispanic_two_or_more_including_other_moe bigint, + + hispanic_three_or_more bigint, + hispanic_three_or_more_moe bigint + +) diff --git a/sql/views/warddemographics.sql b/sql/views/warddemographics.sql new file mode 100644 index 0000000..8fcf8a1 --- /dev/null +++ b/sql/views/warddemographics.sql @@ -0,0 +1,20 @@ +create table warddemographics as + select + w.ward, + sum(total) as total, + sum(race.not_hispanic_white) as white, + sum(race.not_hispanic_white) / sum(race.total) as white_pct, + sum(race.not_hispanic_black) as black, + sum(race.not_hispanic_black) / sum(race.total) as black_pct, + sum(race.not_hispanic_asian) as asian, + sum(race.not_hispanic_asian) / sum(race.total) as asian_pct, + sum(race.hispanic) as latino, + sum(race.hispanic) / sum(race.total) as latino_pct + from wards w + join + tl_2016_17_bg bg on + st_within(bg.wkb_geometry, w.wkb_geometry) + join + acs_16_5yr_b03002 race on + bg.geoid = race.geoid + group by w.ward; diff --git a/sql/views/wardstotals.sql b/sql/views/wardstotals.sql index 6e64544..f48c3a1 100644 --- a/sql/views/wardstotals.sql +++ b/sql/views/wardstotals.sql @@ -7,7 +7,7 @@ create table if not exists wardstotals as year_bounds as ( select 1995 as min_year, - 2018 as max_year + 2019 as max_year ), wards_toplevel as ( select @@ -108,6 +108,7 @@ create table if not exists wardstotals as t.total_payments, t.current_amount_due, t.fine_level1_amount, + t.total_payments / (t.current_amount_due + t.total_payments) as paid_pct, t.current_amount_due / t.total_payments as debt_to_payment_ratio, t.fine_level1_amount / t.ticket_count as avg_per_ticket, p.police_ticket_count, @@ -160,6 +161,9 @@ create table if not exists wardstotals as min(debt_to_payment_ratio) as min_debt_to_payment_ratio, max(debt_to_payment_ratio) as max_debt_to_payment_ratio, + min(paid_pct) as min_paid_pct, + max(paid_pct) as max_paid_pct, + min(police_ticket_count) as min_police_ticket_count, max(police_ticket_count) as max_police_ticket_count, @@ -246,6 +250,13 @@ create table if not exists wardstotals as min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, + paid_pct, + dense_rank() over (order by paid_pct desc) as paid_pct_rank, + + width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) as paid_pct_bucket, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) - 1) as paid_pct_bucket_min, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins)) as paid_pct_bucket_max, + police_ticket_count, dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, diff --git a/sql/views/wardstotals5yr.sql b/sql/views/wardstotals5yr.sql index 1e6b0ff..7aa916a 100644 --- a/sql/views/wardstotals5yr.sql +++ b/sql/views/wardstotals5yr.sql @@ -7,7 +7,7 @@ create table if not exists wardstotals5yr as year_bounds as ( select 2012 as min_year, - 2018 as max_year + 2019 as max_year ), wards_toplevel as ( select @@ -108,6 +108,7 @@ create table if not exists wardstotals5yr as t.total_payments, t.current_amount_due, t.fine_level1_amount, + t.total_payments / (t.current_amount_due + t.total_payments) as paid_pct, t.current_amount_due / t.total_payments as debt_to_payment_ratio, t.fine_level1_amount / t.ticket_count as avg_per_ticket, p.police_ticket_count, @@ -160,6 +161,9 @@ create table if not exists wardstotals5yr as min(debt_to_payment_ratio) as min_debt_to_payment_ratio, max(debt_to_payment_ratio) as max_debt_to_payment_ratio, + min(paid_pct) as min_paid_pct, + max(paid_pct) as max_paid_pct, + min(police_ticket_count) as min_police_ticket_count, max(police_ticket_count) as max_police_ticket_count, @@ -246,6 +250,14 @@ create table if not exists wardstotals5yr as min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, + paid_pct, + dense_rank() over (order by paid_pct desc) as paid_pct_rank, + + width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) as paid_pct_bucket, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) - 1) as paid_pct_bucket_min, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins)) as paid_pct_bucket_max, + + police_ticket_count, dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, diff --git a/sql/views/wardsyearlytotals.sql b/sql/views/wardsyearlytotals.sql new file mode 100644 index 0000000..8e231ff --- /dev/null +++ b/sql/views/wardsyearlytotals.sql @@ -0,0 +1,13 @@ +create table if not exists wardsyearlytotals as + select + w.ward, + w.year, + sum(w.ticket_count), + sum(w.total_payments) as total_payments, + sum(w.current_amount_due) as current_amount_due, + sum(w.fine_level1_amount) as fine_level1_amount + from + wardsyearly w + GROUP BY w.ward, w.year +; + From 119885baa2454c2c7edaa24e2b6e7e169b5c13b4 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 10 Dec 2018 12:31:43 -0600 Subject: [PATCH 119/140] tweaks for app, tests --- Makefile | 26 +++++++--- data/test-results/test-data.csv | 11 ++++ geocodeparking/spiders/geocodio.py | 4 +- sql/exports/parking_geo.sql | 16 ++++++ sql/indexes/parking.sql | 1 + sql/views/blocks.sql | 5 +- sql/views/parking_geo.sql | 12 +++++ sql/views/test_data.sql | 81 ++++++++++++++++++++++++++++++ sql/views/wardsyearlytotals.sql | 2 +- 9 files changed, 148 insertions(+), 10 deletions(-) create mode 100644 data/test-results/test-data.csv create mode 100644 sql/exports/parking_geo.sql create mode 100644 sql/views/parking_geo.sql create mode 100644 sql/views/test_data.sql diff --git a/Makefile b/Makefile index 18f34f3..9f454f4 100644 --- a/Makefile +++ b/Makefile @@ -2,12 +2,11 @@ PARKINGYEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 #PARKINGYEARS = 2018 CAMERAYEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking cameras -CENSUSTABLES = acs_16_5yr_b02001 +CENSUSTABLES = acs_16_5yr_b02001 acs_16_5yr_b03002 METADATA = wardmeta -CENSUSDATA = acs_16_5yr_b02001 GEOJSONTABLES = communityareas wards2015 SHPTABLES = tl_2016_17_bg tl_2016_17_tabblock10 -VIEWS = violations blocks blockstotals wards wardsyearly wardstotals wardstotals5yr wardscommunityareas +VIEWS = blocks blockstotals wards warddemographics wardsyearly wardsyearlytotals wardstotals wardstotals5yr wardscommunityareas violations DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship sync geojson_tables shp_tables @@ -19,8 +18,8 @@ bootstrap : create_db tables schema geo: load_geocodes geojson_tables shp_tables geojson_tables: $(patsubst %, load_geojson_%, $(GEOJSONTABLES)) shp_tables: $(patsubst %, load_shp_%, $(SHPTABLES)) -tables : $(patsubst %, table_%, $(DATATABLES)) $(patsubst %, table_%, $(METADATA)) -census : $(patsubst %, load_census_%, $(CENSUSDATA)) +tables : $(patsubst %, table_%, $(DATATABLES)) $(patsubst %, table_%, $(METADATA)) $(patsubst %, table_%, $(CENSUSTABLES)) +census : $(patsubst %, load_census_%, $(CENSUSTABLES)) indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) meta : $(patsubst %, load_meta_%, $(METADATA)) @@ -66,6 +65,7 @@ endef create_db : $(check_database) || psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME) lc_collate \"C\" lc_ctype \"C\" template template0" && \ $(psql) -c "CREATE EXTENSION IF NOT EXISTS postgis;" + $(psql) -c "CREATE EXTENSION IF NOT EXISTS hstore;" table_% : sql/tables/%.sql @@ -116,10 +116,14 @@ load_shp_% : data/geodata/%.shp $(check_public_relation) || ogr2ogr -f "PostgreSQL" PG:"$(ILTICKETS_DB_STRING)" "$<" -nlt PROMOTE_TO_MULTI -nln $* -t_srs EPSG:4326 -overwrite -dump : +dump_geocodes : pg_dump $(ILTICKETS_DB_URL) --verbose -t geocodes -Fc -f data/dumps/parking-geocodes-geocodio.dump +#dump_parking_geo : + #pg_dump $(ILTICKETS_DB_URL) --verbose -j 4 -t parking_geo -Fc -f data/dumps/parking-geo.dump + + data/parking/A50951_PARK_Year_%.txt : aws s3 cp s3://data.il.propublica.org/il-tickets/parking/$(@F) $@ @@ -197,7 +201,15 @@ upload_geojson_% : data/geojson/%.json data/exports/%.csv : sql/exports/%.sql - $(psql) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@'" + $(psql) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@' with (format csv, header);" + + +test_data : + $(psql) -c "\copy (SELECT (x).key as metric, (x).value \ + FROM \ + ( SELECT EACH(hstore($@)) as x \ + FROM $@ \ + ) q) to '$(CURDIR)/data/test-results/test-data.csv' with (format csv, header);" clean_% : diff --git a/data/test-results/test-data.csv b/data/test-results/test-data.csv new file mode 100644 index 0000000..1444b16 --- /dev/null +++ b/data/test-results/test-data.csv @@ -0,0 +1,11 @@ +metric,value +total_tickets,54430546 +total_tickets_5yr,11986700 +accurate_tickets_pct,0.93528214837308448091 +total_accurate_tickets,50907918 +accurate_tickets_5yr_pct,0.94483510891237788549 +very_accurate_tickets_pct,0.85018515155074872848 +total_accurate_tickets_5yr,11325455 +total_very_accurate_tickets,46276042 +very_accurate_tickets_5yr_pct,0.87757831596686327346 +total_very_accurate_tickets_5yr,10519268 diff --git a/geocodeparking/spiders/geocodio.py b/geocodeparking/spiders/geocodio.py index 5707648..4195da6 100644 --- a/geocodeparking/spiders/geocodio.py +++ b/geocodeparking/spiders/geocodio.py @@ -25,7 +25,9 @@ def start_requests(self): from geocodes where - geocoded_address is null + (geocode_accuracy_type is null or + geocode_accuracy_type == 'place' or + geocode_accuracy_type == 'street_center') """) for row in rows: diff --git a/sql/exports/parking_geo.sql b/sql/exports/parking_geo.sql new file mode 100644 index 0000000..68454aa --- /dev/null +++ b/sql/exports/parking_geo.sql @@ -0,0 +1,16 @@ +select + p.*, + b.ward, + g.geocode_accuracy, + g.geocode_accuracy_type, + g.geocoded_address, + g.geocoded_lng, + g.geocoded_lat, + g.geocoded_city, + g.geocoded_state +from parking p +join + geocodes g on + p.address = g.address +full join blocks b on + g.geocoded_address = b.address diff --git a/sql/indexes/parking.sql b/sql/indexes/parking.sql index 6218800..64cd165 100644 --- a/sql/indexes/parking.sql +++ b/sql/indexes/parking.sql @@ -1,2 +1,3 @@ create index if not exists parking_cluster on parking (address, violation_code, year); create index if not exists parking_address on parking (address); +create index if not exists parking_year on parking (year); diff --git a/sql/views/blocks.sql b/sql/views/blocks.sql index 45a3a82..8b36411 100644 --- a/sql/views/blocks.sql +++ b/sql/views/blocks.sql @@ -16,7 +16,10 @@ create table if not exists blocks as geocodes g join wards2015 w on st_within(g.geom, w.wkb_geometry) - + where + g.geocode_accuracy_type is not null and + g.geocode_accuracy_type != 'place' and + g.geocode_accuracy_type != 'street_center' order by geocoded_address, id; alter table blocks diff --git a/sql/views/parking_geo.sql b/sql/views/parking_geo.sql new file mode 100644 index 0000000..c53f5da --- /dev/null +++ b/sql/views/parking_geo.sql @@ -0,0 +1,12 @@ +create table parking_geo as + +select + p.*, + g.geocoded_address, + b.ward +from parking p +join + geocodes g on + p.address = g.address +full join blocks b on + g.geocoded_address = b.address; diff --git a/sql/views/test_data.sql b/sql/views/test_data.sql new file mode 100644 index 0000000..d67263e --- /dev/null +++ b/sql/views/test_data.sql @@ -0,0 +1,81 @@ +create table test_data as + +with + all_tickets as ( + select + g.geocoded_city, + g.geocode_accuracy_type, + g.geocode_accuracy, + p.* + from parking p + join geocodes g + on p.address = g.address + ), + all_tickets_5yr as ( + select * + from all_tickets + where year > 2011 and year < 2017 + ), + total_tickets as ( + select + count(*) as total_tickets + from all_tickets + ), + total_accurate_tickets as ( + select + count(*) as total_accurate_tickets + from all_tickets + where + geocoded_city = 'Chicago' + and geocode_accuracy_type != 'place' + and geocode_accuracy_type != 'street_center' + ), + total_very_accurate_tickets as ( + select + count(*) as total_very_accurate_tickets + from all_tickets + where + geocoded_city = 'Chicago' + and geocode_accuracy_type != 'place' + and geocode_accuracy_type != 'street_center' + and geocode_accuracy >= 0.7 + ), + total_tickets_5yr as ( + select + count(*) as total_tickets_5yr + from all_tickets_5yr + ), + total_accurate_tickets_5yr as ( + select + count(*) as total_accurate_tickets_5yr + from all_tickets_5yr + where + geocoded_city = 'Chicago' + and geocode_accuracy_type != 'place' + and geocode_accuracy_type != 'street_center' + ), + total_very_accurate_tickets_5yr as ( + select + count(*) as total_very_accurate_tickets_5yr + from all_tickets_5yr + where + geocoded_city = 'Chicago' + and geocode_accuracy_type != 'place' + and geocode_accuracy_type != 'street_center' + and geocode_accuracy >= 0.7 + ) +select + total_tickets, + total_accurate_tickets, + total_very_accurate_tickets, + total_accurate_tickets::decimal / total_tickets::decimal as accurate_tickets_pct, + total_very_accurate_tickets::decimal / total_tickets::decimal as very_accurate_tickets_pct, + total_tickets_5yr, + total_accurate_tickets_5yr, + total_very_accurate_tickets_5yr, + total_accurate_tickets_5yr::decimal / total_tickets_5yr::decimal as accurate_tickets_5yr_pct, + total_very_accurate_tickets_5yr::decimal / total_tickets_5yr::decimal as very_accurate_tickets_5yr_pct +from total_accurate_tickets, total_very_accurate_tickets, total_tickets, total_accurate_tickets_5yr, total_very_accurate_tickets_5yr, total_tickets_5yr; + + + diff --git a/sql/views/wardsyearlytotals.sql b/sql/views/wardsyearlytotals.sql index 8e231ff..005d4c2 100644 --- a/sql/views/wardsyearlytotals.sql +++ b/sql/views/wardsyearlytotals.sql @@ -2,7 +2,7 @@ create table if not exists wardsyearlytotals as select w.ward, w.year, - sum(w.ticket_count), + sum(w.ticket_count) as ticket_count, sum(w.total_payments) as total_payments, sum(w.current_amount_due) as current_amount_due, sum(w.fine_level1_amount) as fine_level1_amount From f77b8eb80dfddb1f1d42ac8b4362916cb1179384 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 10 Dec 2018 12:51:11 -0600 Subject: [PATCH 120/140] test % of debt captured in wards vs city wide figures --- data/test-results/test-data.csv | 3 +++ sql/views/test_data.sql | 19 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/data/test-results/test-data.csv b/data/test-results/test-data.csv index 1444b16..df556c5 100644 --- a/data/test-results/test-data.csv +++ b/data/test-results/test-data.csv @@ -1,6 +1,9 @@ metric,value total_tickets,54430546 +wards_amount_due,1685865011.43 total_tickets_5yr,11986700 +citywide_amount_due,1774000201.886 +ward_amount_due_pct,0.950318387584005 accurate_tickets_pct,0.93528214837308448091 total_accurate_tickets,50907918 accurate_tickets_5yr_pct,0.94483510891237788549 diff --git a/sql/views/test_data.sql b/sql/views/test_data.sql index d67263e..8e9dc53 100644 --- a/sql/views/test_data.sql +++ b/sql/views/test_data.sql @@ -63,7 +63,17 @@ with and geocode_accuracy_type != 'place' and geocode_accuracy_type != 'street_center' and geocode_accuracy >= 0.7 - ) + ), + citywide_totals as ( + select + sum(current_amount_due) as citywide_amount_due + from all_tickets + ), + ward_totals as ( + select + sum(current_amount_due) as wards_amount_due + from wardsyearlytotals + ) select total_tickets, total_accurate_tickets, @@ -74,8 +84,11 @@ select total_accurate_tickets_5yr, total_very_accurate_tickets_5yr, total_accurate_tickets_5yr::decimal / total_tickets_5yr::decimal as accurate_tickets_5yr_pct, - total_very_accurate_tickets_5yr::decimal / total_tickets_5yr::decimal as very_accurate_tickets_5yr_pct -from total_accurate_tickets, total_very_accurate_tickets, total_tickets, total_accurate_tickets_5yr, total_very_accurate_tickets_5yr, total_tickets_5yr; + total_very_accurate_tickets_5yr::decimal / total_tickets_5yr::decimal as very_accurate_tickets_5yr_pct, + citywide_amount_due, + wards_amount_due, + wards_amount_due / citywide_amount_due as ward_amount_due_pct +from total_accurate_tickets, total_very_accurate_tickets, total_tickets, total_accurate_tickets_5yr, total_very_accurate_tickets_5yr, total_tickets_5yr, citywide_totals, ward_totals; From a0846cdcfe799ea0c18411a4a9ddebd7a68d79af Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 11 Dec 2018 10:34:24 -0600 Subject: [PATCH 121/140] use lte and gte for totals query --- sql/views/wardstotals5yr.sql | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/sql/views/wardstotals5yr.sql b/sql/views/wardstotals5yr.sql index 7aa916a..707ddc2 100644 --- a/sql/views/wardstotals5yr.sql +++ b/sql/views/wardstotals5yr.sql @@ -6,8 +6,8 @@ create table if not exists wardstotals5yr as year_bounds as ( select - 2012 as min_year, - 2019 as max_year + 2013 as min_year, + 2017 as max_year ), wards_toplevel as ( select @@ -18,7 +18,7 @@ create table if not exists wardstotals5yr as sum(fine_level1_amount) as fine_level1_amount from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) group by ward ), wards_policetickets as ( @@ -27,7 +27,7 @@ create table if not exists wardstotals5yr as sum(ticket_count) as police_ticket_count from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) and (unit_description = 'CPD' or unit_description = 'CPD-Other' or @@ -40,7 +40,7 @@ create table if not exists wardstotals5yr as sum(ticket_count) as contested_ticket_count from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) and (hearing_disposition = 'Liable' or hearing_disposition = 'Not Liable') @@ -52,7 +52,7 @@ create table if not exists wardstotals5yr as sum(ticket_count) as notliable_ticket_count from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) and hearing_disposition = 'Not Liable' group by ward @@ -63,7 +63,7 @@ create table if not exists wardstotals5yr as sum(ticket_count) as bankruptcy_ticket_count from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) and ticket_queue = 'Bankruptcy' group by ward @@ -74,7 +74,7 @@ create table if not exists wardstotals5yr as sum(ticket_count) as paid_ticket_count from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) and ticket_queue = 'Paid' group by ward @@ -85,7 +85,7 @@ create table if not exists wardstotals5yr as sum(ticket_count) as dismissed_ticket_count from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) and ticket_queue = 'Dismissed' group by ward @@ -96,7 +96,7 @@ create table if not exists wardstotals5yr as sum(ticket_count) as seized_or_suspended_ticket_count from wardsyearly, year_bounds where - (year > min_year and year < max_year) + (year >= min_year and year <= max_year) and (notice_level = 'SEIZ' or notice_level = 'DLS') group by ward From fa1e49865bf9692d1517f04cb13fb82dda91fbc3 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 11 Dec 2018 14:17:23 -0600 Subject: [PATCH 122/140] better block query --- sql/views/blocks.sql | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sql/views/blocks.sql b/sql/views/blocks.sql index 8b36411..bfe53f1 100644 --- a/sql/views/blocks.sql +++ b/sql/views/blocks.sql @@ -17,9 +17,12 @@ create table if not exists blocks as join wards2015 w on st_within(g.geom, w.wkb_geometry) where - g.geocode_accuracy_type is not null and - g.geocode_accuracy_type != 'place' and - g.geocode_accuracy_type != 'street_center' + g.geocoded_city = 'Chicago' and ( + g.geocode_accuracy_type = 'range_interpolation' or + g.geocode_accuracy_type = 'rooftop' or + g.geocode_accuracy_type = 'intersection' or + g.geocode_accuracy_type = 'point' + ) order by geocoded_address, id; alter table blocks From f15946c93c2c0e107293f71d0c995c72bfbd0939 Mon Sep 17 00:00:00 2001 From: Jeff Kao Date: Wed, 12 Dec 2018 11:21:07 -0500 Subject: [PATCH 123/140] preliminary bulletproofing -- to be pipelined once we lock down details --- bulletproof/bulletproof_sql_notebook.ipynb | 7109 +++++++++++++++++ bulletproof/df_1996to2018.csv | 51 + bulletproof/df_2013to2017.csv | 51 + bulletproof/preliminary_bulletproof_sql.zip | Bin 0 -> 141433 bytes bulletproof/ticket_count_identical.csv | 51 + bulletproof/wardstotals.csv | 51 + bulletproof/wardstotals5yr.csv | 51 + .../wardstotals5yr_sql_minus_pandas.csv | 51 + bulletproof/wardstotals_sql_minus_pandas.csv | 51 + 9 files changed, 7466 insertions(+) create mode 100644 bulletproof/bulletproof_sql_notebook.ipynb create mode 100644 bulletproof/df_1996to2018.csv create mode 100644 bulletproof/df_2013to2017.csv create mode 100644 bulletproof/preliminary_bulletproof_sql.zip create mode 100644 bulletproof/ticket_count_identical.csv create mode 100644 bulletproof/wardstotals.csv create mode 100644 bulletproof/wardstotals5yr.csv create mode 100644 bulletproof/wardstotals5yr_sql_minus_pandas.csv create mode 100644 bulletproof/wardstotals_sql_minus_pandas.csv diff --git a/bulletproof/bulletproof_sql_notebook.ipynb b/bulletproof/bulletproof_sql_notebook.ipynb new file mode 100644 index 0000000..313316e --- /dev/null +++ b/bulletproof/bulletproof_sql_notebook.ipynb @@ -0,0 +1,7109 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "pd.options.display.max_columns = 50" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def read_in_csv(file_path='./parking-geo.csv'):\n", + " # let's be memory efficient when loading our data\n", + " dtypes_dict = \\\n", + " {\n", + " 'ticket_number': np.int32,\n", + " 'violation_location': str,\n", + " 'license_plate_number': str,\n", + " 'license_plate_state': 'category',\n", + " 'license_plate_type': 'category',\n", + " 'zipcode': str,\n", + " 'violation_code': 'category',\n", + " 'violation_description': 'category',\n", + " 'unit': 'category',\n", + " 'unit_description': 'category',\n", + " 'vehicle_make': 'category',\n", + " 'fine_level1_amount': np.int32,\n", + " 'fine_level2_amount': np.int32,\n", + " 'current_amount_due': np.float64,\n", + " 'total_payments': np.float64,\n", + " 'ticket_queue': 'category',\n", + " 'notice_level': 'category',\n", + " 'hearing_disposition': 'category',\n", + " 'notice_number': np.int32,\n", + " 'dismissal_reason': str,\n", + " 'officer': str,\n", + " 'address': str,\n", + " 'license_hash': str,\n", + " 'year': np.int32,\n", + " 'month': 'category',\n", + " 'hour': 'category',\n", + " 'penalty': np.float64,\n", + " 'ward': 'category',\n", + " 'geocode_accuracy': np.float64,\n", + " 'geocode_accuracy_type': 'category',\n", + " 'geocoded_address': str,\n", + " 'geocoded_lng': str,\n", + " 'geocoded_lat': str,\n", + " 'geocoded_city': 'category',\n", + " 'geocoded_state': 'category'\n", + " }\n", + " #still better than strings\n", + " parse_dates_list = \\\n", + " [\n", + " 'issue_date',\n", + " 'ticket_queue_date',\n", + " ]\n", + " \n", + " # read csv into memory -- this takes quite a while\n", + " df = pd.read_csv(file_path, dtype=dtypes_dict, parse_dates=parse_dates_list)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_summary_stats(df_raw, min_year = 1995, max_year = 2019):\n", + " \n", + " # private helper function\n", + " def rank_series(series):\n", + " out_series = series.rank(ascending=False)\n", + " return out_series\n", + " \n", + " df_filtered = df_raw[\n", + " (df_raw['year'] > min_year) & (df_raw['year'] < max_year) & \n", + " (df_raw['geocode_accuracy_type'].isin(['rooftop', 'range_interpolation', 'intersection', 'point'])) & \n", + " (df_raw['geocoded_city'] == 'Chicago')\n", + " ]\n", + " # not used\n", + " # df_filtered_na = df_filtered[df_filtered['ward'].isnull()]\n", + " df_filtered = df_filtered[df_filtered['ward'].notnull()]\n", + "\n", + " # calculate base dataframes\n", + " df_dict = dict()\n", + " df_dict['filtered'] = df_filtered\n", + " df_dict['police_tickets'] = df_filtered[\n", + " df_filtered['unit_description'].isin(['CPD', 'CPD-Other', 'CPD-Airport'])\n", + " ]\n", + " df_dict['contested_tickets'] = df_filtered[\n", + " df_filtered['hearing_disposition'].isin(['Liable', 'Not Liable'])\n", + " ]\n", + " df_dict['paid_tickets'] = df_filtered[\n", + " df_filtered['ticket_queue'] == 'Paid'\n", + " ]\n", + " df_dict['dismissed_tickets'] = df_filtered[\n", + " df_filtered['ticket_queue'] == 'Dismissed'\n", + " ]\n", + " df_dict['seized_or_suspended_tickets'] = df_filtered[\n", + " df_filtered['notice_level'].isin(['SEIZ', 'DLS'])\n", + " ]\n", + " df_dict['bankruptcy_tickets'] = df_filtered[\n", + " df_filtered['ticket_queue'] == 'Bankruptcy'\n", + " ]\n", + "\n", + " # group dataframes by ward\n", + " gb_dict = dict()\n", + " for key in df_dict:\n", + " gb_dict[key] = df_dict[key].groupby('ward')\n", + "\n", + " # calculate the different stats\n", + " out_dict = dict()\n", + " ticket_count = gb_dict['filtered']['ticket_number'].count()\n", + " out_dict['ticket_count'] = ticket_count\n", + " out_dict['current_amount_due'] = gb_dict['filtered']['current_amount_due'].sum()\n", + " out_dict['fine_level1_amount'] = gb_dict['filtered']['fine_level1_amount'].sum()\n", + " out_dict['total_payments'] = gb_dict['filtered']['total_payments'].sum()\n", + " out_dict['avg_per_ticket'] = out_dict['fine_level1_amount']/ticket_count\n", + " out_dict['paid_pct'] = out_dict['total_payments']/(out_dict['current_amount_due']+out_dict['total_payments'])\n", + " out_dict['police_ticket_count'] = gb_dict['police_tickets']['ticket_number'].count()\n", + " out_dict['police_ticket_count_pct'] = out_dict['police_ticket_count'] / ticket_count\n", + " out_dict['contested_ticket_count'] = gb_dict['contested_tickets']['ticket_number'].count()\n", + " out_dict['contested_ticket_count_pct'] = out_dict['contested_ticket_count'] / ticket_count\n", + " out_dict['paid_ticket_count'] = gb_dict['paid_tickets']['ticket_number'].count()\n", + " out_dict['paid_ticket_count_pct'] = out_dict['paid_ticket_count'] / ticket_count\n", + " out_dict['dismissed_ticket_count'] = gb_dict['dismissed_tickets']['ticket_number'].count()\n", + " out_dict['dismissed_ticket_count_pct'] = out_dict['dismissed_ticket_count'] / ticket_count\n", + " out_dict['seized_or_suspended_ticket_count'] = gb_dict['seized_or_suspended_tickets']['ticket_number'].count()\n", + " out_dict['seized_or_suspended_ticket_count_pct'] = out_dict['seized_or_suspended_ticket_count'] / ticket_count\n", + " out_dict['bankruptcy_ticket_count'] = gb_dict['bankruptcy_tickets']['ticket_number'].count()\n", + " out_dict['bankruptcy_ticket_count_pct'] = out_dict['bankruptcy_ticket_count'] / ticket_count\n", + "\n", + " # calculate ranks; combine and format output dataframe\n", + " df_out = pd.DataFrame()\n", + " for key in out_dict:\n", + " df_out[key] = out_dict[key]\n", + " df_out[key+'_rank'] = rank_series(out_dict[key]).astype(int)\n", + " df_out.index = df_out.index.astype(int)\n", + " df_out = df_out.sort_index()\n", + " \n", + " return df_out" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 9min 52s, sys: 2min 43s, total: 12min 36s\n", + "Wall time: 13min 8s\n" + ] + } + ], + "source": [ + "%%time\n", + "# takes quite a while...\n", + "df = read_in_csv()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 26s, sys: 3min 1s, total: 4min 28s\n", + "Wall time: 5min 16s\n" + ] + } + ], + "source": [ + "%%time\n", + "df_1996to2018 = calculate_summary_stats(df, min_year=1995, max_year=2019)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 18.7 s, sys: 9.22 s, total: 27.9 s\n", + "Wall time: 21.7 s\n" + ] + } + ], + "source": [ + "%%time\n", + "df_2013to2017 = calculate_summary_stats(df, min_year=2012, max_year=2018)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "df_1996to2018.to_csv('df_1996to2018.csv')\n", + "# df_1996to2018.to_csv()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "df_2013to2017.to_csv('df_2013to2017.csv')\n", + "# df_2013to2017.to_csv()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "df_check = pd.read_csv('./wardstotals.csv', index_col='ward').sort_index(ascending=True)\n", + "df_check5yr = pd.read_csv('./wardstotals5yr.csv', index_col='ward').sort_index(ascending=True)\n", + "df_1996to2018_check = df_check[df_1996to2018.columns.tolist()]\n", + "df_2013to2017_check = df_check5yr[df_2013to2017.columns.tolist()]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "wardstotals_sql_minus_pandas = df_1996to2018_check - df_1996to2018\n", + "wardstotals5yr_sql_minus_pandas = df_2013to2017_check - df_2013to2017" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ticket_countticket_count_rankcurrent_amount_duecurrent_amount_due_rankfine_level1_amountfine_level1_amount_ranktotal_paymentstotal_payments_rankavg_per_ticketavg_per_ticket_rankpaid_pctpaid_pct_rankpolice_ticket_countpolice_ticket_count_rankpolice_ticket_count_pctpolice_ticket_count_pct_rankcontested_ticket_countcontested_ticket_count_rankcontested_ticket_count_pctcontested_ticket_count_pct_rankpaid_ticket_countpaid_ticket_count_rankpaid_ticket_count_pctpaid_ticket_count_pct_rankdismissed_ticket_countdismissed_ticket_count_rankdismissed_ticket_count_pctdismissed_ticket_count_pct_rankseized_or_suspended_ticket_countseized_or_suspended_ticket_count_rankseized_or_suspended_ticket_count_pctseized_or_suspended_ticket_count_pct_rankbankruptcy_ticket_countbankruptcy_ticket_count_rankbankruptcy_ticket_count_pctbankruptcy_ticket_count_pct_rank
ward
1172071783.940247e+071610083521589.224356e+07658.600697380.7006947598783140.3479854812003680.06975935118480460.688553611045780.0641924039245570.228076415904250.00343138
2208126133.431393e+072411729861041.093965e+08356.359395460.761229482531250.3965444617926940.08613515148262240.712367517596340.0845461338854680.186688477169210.00344537
31189111124.315614e+071273217160106.189717e+071261.573024300.5891982976473570.64311510104479110.08786310705441130.59325128102294100.0860261140593460.3413761516634130.01398916
4178333064.619477e+07910189598079.088336e+07757.138040450.66300414105446220.5912882017135950.0960895112103580.6286191917905430.100404251020740.2860982616886120.00946920
51082520163.955258e+071568784395135.915885e+071463.540992240.59931125491319230.4538663989974150.08311521652664180.6029122693870130.08671410369375130.3412181617008110.01571115
\n", + "
" + ], + "text/plain": [ + " ticket_count ticket_count_rank current_amount_due \\\n", + "ward \n", + "1 1720717 8 3.940247e+07 \n", + "2 2081261 3 3.431393e+07 \n", + "3 1189111 12 4.315614e+07 \n", + "4 1783330 6 4.619477e+07 \n", + "5 1082520 16 3.955258e+07 \n", + "\n", + " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", + "ward \n", + "1 16 100835215 8 \n", + "2 24 117298610 4 \n", + "3 12 73217160 10 \n", + "4 9 101895980 7 \n", + "5 15 68784395 13 \n", + "\n", + " total_payments total_payments_rank avg_per_ticket \\\n", + "ward \n", + "1 9.224356e+07 6 58.600697 \n", + "2 1.093965e+08 3 56.359395 \n", + "3 6.189717e+07 12 61.573024 \n", + "4 9.088336e+07 7 57.138040 \n", + "5 5.915885e+07 14 63.540992 \n", + "\n", + " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", + "ward \n", + "1 38 0.700694 7 598783 \n", + "2 46 0.761229 4 825312 \n", + "3 30 0.589198 29 764735 \n", + "4 45 0.663004 14 1054462 \n", + "5 24 0.599311 25 491319 \n", + "\n", + " police_ticket_count_rank police_ticket_count_pct \\\n", + "ward \n", + "1 14 0.347985 \n", + "2 5 0.396544 \n", + "3 7 0.643115 \n", + "4 2 0.591288 \n", + "5 23 0.453866 \n", + "\n", + " police_ticket_count_pct_rank contested_ticket_count \\\n", + "ward \n", + "1 48 120036 \n", + "2 46 179269 \n", + "3 10 104479 \n", + "4 20 171359 \n", + "5 39 89974 \n", + "\n", + " contested_ticket_count_rank contested_ticket_count_pct \\\n", + "ward \n", + "1 8 0.069759 \n", + "2 4 0.086135 \n", + "3 11 0.087863 \n", + "4 5 0.096089 \n", + "5 15 0.083115 \n", + "\n", + " contested_ticket_count_pct_rank paid_ticket_count \\\n", + "ward \n", + "1 35 1184804 \n", + "2 15 1482622 \n", + "3 10 705441 \n", + "4 5 1121035 \n", + "5 21 652664 \n", + "\n", + " paid_ticket_count_rank paid_ticket_count_pct \\\n", + "ward \n", + "1 6 0.688553 \n", + "2 4 0.712367 \n", + "3 13 0.593251 \n", + "4 8 0.628619 \n", + "5 18 0.602912 \n", + "\n", + " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", + "ward \n", + "1 6 110457 \n", + "2 5 175963 \n", + "3 28 102294 \n", + "4 19 179054 \n", + "5 26 93870 \n", + "\n", + " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", + "ward \n", + "1 8 0.064192 \n", + "2 4 0.084546 \n", + "3 10 0.086026 \n", + "4 3 0.100404 \n", + "5 13 0.086714 \n", + "\n", + " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", + "ward \n", + "1 40 392455 \n", + "2 13 388546 \n", + "3 11 405934 \n", + "4 2 510207 \n", + "5 10 369375 \n", + "\n", + " seized_or_suspended_ticket_count_rank \\\n", + "ward \n", + "1 7 \n", + "2 8 \n", + "3 6 \n", + "4 4 \n", + "5 13 \n", + "\n", + " seized_or_suspended_ticket_count_pct \\\n", + "ward \n", + "1 0.228076 \n", + "2 0.186688 \n", + "3 0.341376 \n", + "4 0.286098 \n", + "5 0.341218 \n", + "\n", + " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", + "ward \n", + "1 41 5904 \n", + "2 47 7169 \n", + "3 15 16634 \n", + "4 26 16886 \n", + "5 16 17008 \n", + "\n", + " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", + "ward \n", + "1 25 0.003431 \n", + "2 21 0.003445 \n", + "3 13 0.013989 \n", + "4 12 0.009469 \n", + "5 11 0.015711 \n", + "\n", + " bankruptcy_ticket_count_pct_rank \n", + "ward \n", + "1 38 \n", + "2 37 \n", + "3 16 \n", + "4 20 \n", + "5 15 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_1996to2018.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ticket_countticket_count_rankcurrent_amount_duecurrent_amount_due_rankfine_level1_amountfine_level1_amount_ranktotal_paymentstotal_payments_rankavg_per_ticketavg_per_ticket_rankpaid_pctpaid_pct_rankpolice_ticket_countpolice_ticket_count_rankpolice_ticket_count_pctpolice_ticket_count_pct_rankcontested_ticket_countcontested_ticket_count_rankcontested_ticket_count_pctcontested_ticket_count_pct_rankpaid_ticket_countpaid_ticket_count_rankpaid_ticket_count_pctpaid_ticket_count_pct_rankdismissed_ticket_countdismissed_ticket_count_rankdismissed_ticket_count_pctdismissed_ticket_count_pct_rankseized_or_suspended_ticket_countseized_or_suspended_ticket_count_rankseized_or_suspended_ticket_count_pctseized_or_suspended_ticket_count_pct_rankbankruptcy_ticket_countbankruptcy_ticket_count_rankbankruptcy_ticket_count_pctbankruptcy_ticket_count_pct_rank
ward
1002.923608e-05000-1.730025e-0500.000000e+000-1.950662e-130000.000000e+000000.000000e+000000.000000e+00000-1.387779e-17000-2.775558e-170000.000000e+000
2001.396239e-05000-1.676381e-050-3.552714e-140-1.012523e-130000.000000e+00000-1.387779e-170000.000000e+00000-1.387779e-170010.000000e+000004.336809e-190
32101.334800e+030275501.791000e+0301.229440e-030-4.827330e-0701904.620670e-060309.711912e-07080-3.749177e-06000-1.519207e-06070-1.420337e-07000-2.470379e-070
4193507.209669e+04010962008.887544e+040-5.277124e-040-1.300631e-040151202.060519e-040820-5.821705e-05010710-8.143196e-0501150-4.440927e-05065205.511816e-050150-1.860863e-060
530901.934395e+0402274001.616363e+0402.868258e-030-5.181380e-05026201.124420e-040240-1.553925e-0601460-3.721707e-050260-7.339376e-07014103.284334e-050701.981061e-060
6003.892928e-050001.294911e-050-2.842171e-140-1.255662e-130000.000000e+000000.000000e+000000.000000e+000000.000000e+00000-5.551115e-170003.469447e-180
7803.432000e+02043501.720000e+020-2.007704e-040-9.814407e-070602.792238e-06000-1.041613e-06030-1.347219e-060105.219463e-070403.939448e-07000-3.241942e-070
839502.151348e+0402490001.981637e+040-3.733468e-030-1.549615e-05031001.642837e-040260-1.101439e-05021004.370182e-060290-9.171336e-06018101.481744e-0501102.944374e-060
93902.016200e+030214501.295180e+030-1.554128e-030-6.946400e-060200-8.856891e-06030-6.244180e-070160-9.113263e-06030-6.428599e-070160-1.610630e-06000-2.085649e-060
1019901.239592e+0401211008.037420e+030-2.594843e-030-7.186215e-05015209.518341e-050110-8.034173e-060740-8.854411e-050110-1.075787e-0507903.678483e-05000-5.751570e-060
1144902.401794e+0402967001.795969e+0401.804341e-030-1.814144e-04023205.287497e-050200-3.159800e-0502080-1.313374e-040170-2.932489e-05013003.319619e-050307.198188e-070
1280202.340800e+0404727504.188098e+040-3.416550e-0308.415202e-05047308.713349e-0503807.057821e-09049504.439429e-0504202.776381e-0601850-6.284368e-05010-3.288856e-060
1300-2.371147e-06000-1.069158e-0601.421085e-1403.419487e-140000.000000e+00000-1.387779e-17000-1.110223e-160000.000000e+000002.775558e-170008.673617e-190
14008.527189e-060004.045665e-0602.842171e-140-4.807266e-140001.665335e-160000.000000e+00000-1.110223e-160000.000000e+000000.000000e+000000.000000e+000
15002.465397e-050006.839633e-060-2.842171e-140-1.169065e-130001.110223e-160000.000000e+000001.110223e-160000.000000e+000000.000000e+000001.734723e-180
16004.615635e-050001.048297e-050-4.263256e-140-1.605382e-130000.000000e+00000-1.387779e-170005.551115e-17000-1.387779e-17000-5.551115e-17000-3.469447e-180
1734901.988240e+0402389001.713653e+040-2.038958e-030-2.418054e-06028307.803109e-05025-1-8.725616e-0701680-7.195541e-0603501.142160e-050145-1-1.675568e-05060-4.137846e-060
1800-3.006309e-06000-1.689419e-060-2.842171e-1403.130829e-140001.110223e-16000-1.387779e-170001.110223e-160000.000000e+00000-5.551115e-170000.000000e+000
195803.719090e+030445002.402500e+0301.403785e-030-7.172784e-0503701.100951e-050702.670217e-060190-8.174453e-05050-1.529432e-0602302.922248e-050101.674406e-060
20004.819781e-050001.245737e-050-1.421085e-140-1.604272e-130000.000000e+000000.000000e+000000.000000e+00000-1.387779e-17000-5.551115e-170000.000000e+000
21001.519173e-050005.085021e-0602.842171e-140-7.693846e-140000.000000e+00000-1.387779e-170000.000000e+000000.000000e+000000.000000e+000000.000000e+000
22002.104044e-050005.036592e-060-2.842171e-140-1.024736e-130005.551115e-170000.000000e+000000.000000e+000000.000000e+00000-1.110223e-160000.000000e+000
2300-2.320856e-060003.222376e-0601.421085e-1405.329071e-140000.000000e+00000-1.387779e-17000-1.110223e-160000.000000e+000002.775558e-17000-4.336809e-190
24005.628914e-050001.132488e-0500.000000e+000-1.875167e-130000.000000e+000000.000000e+00000-5.551115e-170000.000000e+00000-1.665335e-160000.000000e+000
25418401.786686e+05024379501.801621e+050-2.850664e-030-4.757110e-041272405.345568e-0402130-5.570114e-05020470-4.478696e-0402600-1.874044e-0501378-12.514976e-0403701.003383e-050
26003.063679e-050001.303107e-0507.105427e-150-1.302292e-130000.000000e+000000.000000e+000000.000000e+00000-6.938894e-18001-5.551115e-17000-8.673617e-190
27004.252046e-05000-2.898276e-050-2.842171e-140-2.271516e-13000-1.110223e-160000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+000
28003.261864e-050001.764297e-050-4.263256e-140-5.156986e-14000-2.220446e-160001.387779e-170001.110223e-160000.000000e+000000.000000e+000003.469447e-180
29003.369898e-050001.019239e-050-2.842171e-140-1.268430e-130000.000000e+000010.000000e+000000.000000e+000000.000000e+000005.551115e-170006.938894e-180
30006.780028e-060005.848706e-060-4.973799e-140-2.764455e-14000-1.110223e-160000.000000e+000001.110223e-16000-6.938894e-180000.000000e+000000.000000e+000
31001.204759e-050008.247793e-0603.552714e-140-5.384582e-14000-1.665335e-160000.000000e+000000.000000e+000000.000000e+000005.551115e-170000.000000e+000
32001.393259e-060001.023710e-050-4.263256e-1401.831868e-140000.000000e+00000-1.387779e-170000.000000e+00000-1.387779e-17000-2.775558e-170010.000000e+000
33002.129748e-050008.389354e-0600.000000e+000-1.181277e-130000.000000e+000001.387779e-170001.110223e-160006.938894e-18000-5.551115e-170004.336809e-190
346503.658190e+030472504.025210e+030-5.805493e-0409.934775e-0605902.247954e-05020-7.906166e-060290-4.057160e-06050-1.614228e-060260-9.078800e-060303.105567e-060
35002.461672e-050001.065433e-050-2.842171e-140-1.119105e-130000.000000e+000006.938894e-180000.000000e+000006.938894e-180005.551115e-170008.673617e-190
3600-2.227724e-060001.765788e-060-2.842171e-1404.574119e-14000-1.110223e-16000-1.387779e-17000-1.110223e-16000-1.387779e-170000.000000e+00000-8.673617e-190
37004.132837e-050008.724630e-0602.842171e-140-1.619260e-130000.000000e+000000.000000e+00000-5.551115e-170001.387779e-170000.000000e+000000.000000e+000
3800-1.652166e-06000-9.313226e-0707.105427e-1502.753353e-140000.000000e+00000-1.387779e-17000-2.220446e-160000.000000e+000005.551115e-170004.336809e-190
3900-2.626330e-060001.177192e-060-3.552714e-1405.595524e-140001.110223e-160000.000000e+000002.220446e-16000-1.387779e-17000-5.551115e-17000-4.336809e-190
40007.707626e-060009.134412e-0600.000000e+000-2.997602e-14-100-1.110223e-16000-2.775558e-170000.000000e+00000-1.387779e-170000.000000e+00000-4.336809e-190
41001.080334e-07000-4.228204e-070-4.263256e-140-1.187939e-140000.000000e+000000.000000e+000000.000000e+000001.387779e-170002.775558e-170000.000000e+000
4200-1.454502e-040001.835823e-050-1.421085e-1403.043121e-130001.110223e-160001.387779e-170000.000000e+000001.387779e-17000-2.775558e-17000-8.673617e-190
43009.957701e-06000-2.288818e-050-2.131628e-140-9.281464e-140000.000000e+00000-1.387779e-170000.000000e+000000.000000e+000002.775558e-170000.000000e+000
44001.899153e-05000-4.111230e-0502.131628e-140-1.428857e-13000-5.551115e-170000.000000e+000001.110223e-160001.387779e-170000.000000e+000000.000000e+000
4500-3.332272e-060006.817281e-070-2.842171e-1406.161738e-140001.110223e-160001.387779e-17000-1.110223e-160000.000000e+00000-8.326673e-17000-4.336809e-190
46001.317635e-050001.014024e-0501.421085e-140-6.517009e-140000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+000
47001.613051e-060008.359551e-0604.973799e-1407.993606e-150000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+000002.168404e-190
48001.262128e-050004.671514e-0603.552714e-140-8.926193e-140000.000000e+00000-1.387779e-170000.000000e+000001.387779e-17000-5.551115e-17000-8.673617e-190
49002.615899e-050001.065433e-050-2.131628e-140-1.190159e-130000.000000e+000000.000000e+00000-1.110223e-160000.000000e+000005.551115e-170000.000000e+000
50001.981854e-060005.200505e-060-2.842171e-1407.327472e-15000-1.110223e-160000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+000
\n", + "
" + ], + "text/plain": [ + " ticket_count ticket_count_rank current_amount_due \\\n", + "ward \n", + "1 0 0 2.923608e-05 \n", + "2 0 0 1.396239e-05 \n", + "3 21 0 1.334800e+03 \n", + "4 1935 0 7.209669e+04 \n", + "5 309 0 1.934395e+04 \n", + "6 0 0 3.892928e-05 \n", + "7 8 0 3.432000e+02 \n", + "8 395 0 2.151348e+04 \n", + "9 39 0 2.016200e+03 \n", + "10 199 0 1.239592e+04 \n", + "11 449 0 2.401794e+04 \n", + "12 802 0 2.340800e+04 \n", + "13 0 0 -2.371147e-06 \n", + "14 0 0 8.527189e-06 \n", + "15 0 0 2.465397e-05 \n", + "16 0 0 4.615635e-05 \n", + "17 349 0 1.988240e+04 \n", + "18 0 0 -3.006309e-06 \n", + "19 58 0 3.719090e+03 \n", + "20 0 0 4.819781e-05 \n", + "21 0 0 1.519173e-05 \n", + "22 0 0 2.104044e-05 \n", + "23 0 0 -2.320856e-06 \n", + "24 0 0 5.628914e-05 \n", + "25 4184 0 1.786686e+05 \n", + "26 0 0 3.063679e-05 \n", + "27 0 0 4.252046e-05 \n", + "28 0 0 3.261864e-05 \n", + "29 0 0 3.369898e-05 \n", + "30 0 0 6.780028e-06 \n", + "31 0 0 1.204759e-05 \n", + "32 0 0 1.393259e-06 \n", + "33 0 0 2.129748e-05 \n", + "34 65 0 3.658190e+03 \n", + "35 0 0 2.461672e-05 \n", + "36 0 0 -2.227724e-06 \n", + "37 0 0 4.132837e-05 \n", + "38 0 0 -1.652166e-06 \n", + "39 0 0 -2.626330e-06 \n", + "40 0 0 7.707626e-06 \n", + "41 0 0 1.080334e-07 \n", + "42 0 0 -1.454502e-04 \n", + "43 0 0 9.957701e-06 \n", + "44 0 0 1.899153e-05 \n", + "45 0 0 -3.332272e-06 \n", + "46 0 0 1.317635e-05 \n", + "47 0 0 1.613051e-06 \n", + "48 0 0 1.262128e-05 \n", + "49 0 0 2.615899e-05 \n", + "50 0 0 1.981854e-06 \n", + "\n", + " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", + "ward \n", + "1 0 0 0 \n", + "2 0 0 0 \n", + "3 0 2755 0 \n", + "4 0 109620 0 \n", + "5 0 22740 0 \n", + "6 0 0 0 \n", + "7 0 435 0 \n", + "8 0 24900 0 \n", + "9 0 2145 0 \n", + "10 0 12110 0 \n", + "11 0 29670 0 \n", + "12 0 47275 0 \n", + "13 0 0 0 \n", + "14 0 0 0 \n", + "15 0 0 0 \n", + "16 0 0 0 \n", + "17 0 23890 0 \n", + "18 0 0 0 \n", + "19 0 4450 0 \n", + "20 0 0 0 \n", + "21 0 0 0 \n", + "22 0 0 0 \n", + "23 0 0 0 \n", + "24 0 0 0 \n", + "25 0 243795 0 \n", + "26 0 0 0 \n", + "27 0 0 0 \n", + "28 0 0 0 \n", + "29 0 0 0 \n", + "30 0 0 0 \n", + "31 0 0 0 \n", + "32 0 0 0 \n", + "33 0 0 0 \n", + "34 0 4725 0 \n", + "35 0 0 0 \n", + "36 0 0 0 \n", + "37 0 0 0 \n", + "38 0 0 0 \n", + "39 0 0 0 \n", + "40 0 0 0 \n", + "41 0 0 0 \n", + "42 0 0 0 \n", + "43 0 0 0 \n", + "44 0 0 0 \n", + "45 0 0 0 \n", + "46 0 0 0 \n", + "47 0 0 0 \n", + "48 0 0 0 \n", + "49 0 0 0 \n", + "50 0 0 0 \n", + "\n", + " total_payments total_payments_rank avg_per_ticket \\\n", + "ward \n", + "1 -1.730025e-05 0 0.000000e+00 \n", + "2 -1.676381e-05 0 -3.552714e-14 \n", + "3 1.791000e+03 0 1.229440e-03 \n", + "4 8.887544e+04 0 -5.277124e-04 \n", + "5 1.616363e+04 0 2.868258e-03 \n", + "6 1.294911e-05 0 -2.842171e-14 \n", + "7 1.720000e+02 0 -2.007704e-04 \n", + "8 1.981637e+04 0 -3.733468e-03 \n", + "9 1.295180e+03 0 -1.554128e-03 \n", + "10 8.037420e+03 0 -2.594843e-03 \n", + "11 1.795969e+04 0 1.804341e-03 \n", + "12 4.188098e+04 0 -3.416550e-03 \n", + "13 -1.069158e-06 0 1.421085e-14 \n", + "14 4.045665e-06 0 2.842171e-14 \n", + "15 6.839633e-06 0 -2.842171e-14 \n", + "16 1.048297e-05 0 -4.263256e-14 \n", + "17 1.713653e+04 0 -2.038958e-03 \n", + "18 -1.689419e-06 0 -2.842171e-14 \n", + "19 2.402500e+03 0 1.403785e-03 \n", + "20 1.245737e-05 0 -1.421085e-14 \n", + "21 5.085021e-06 0 2.842171e-14 \n", + "22 5.036592e-06 0 -2.842171e-14 \n", + "23 3.222376e-06 0 1.421085e-14 \n", + "24 1.132488e-05 0 0.000000e+00 \n", + "25 1.801621e+05 0 -2.850664e-03 \n", + "26 1.303107e-05 0 7.105427e-15 \n", + "27 -2.898276e-05 0 -2.842171e-14 \n", + "28 1.764297e-05 0 -4.263256e-14 \n", + "29 1.019239e-05 0 -2.842171e-14 \n", + "30 5.848706e-06 0 -4.973799e-14 \n", + "31 8.247793e-06 0 3.552714e-14 \n", + "32 1.023710e-05 0 -4.263256e-14 \n", + "33 8.389354e-06 0 0.000000e+00 \n", + "34 4.025210e+03 0 -5.805493e-04 \n", + "35 1.065433e-05 0 -2.842171e-14 \n", + "36 1.765788e-06 0 -2.842171e-14 \n", + "37 8.724630e-06 0 2.842171e-14 \n", + "38 -9.313226e-07 0 7.105427e-15 \n", + "39 1.177192e-06 0 -3.552714e-14 \n", + "40 9.134412e-06 0 0.000000e+00 \n", + "41 -4.228204e-07 0 -4.263256e-14 \n", + "42 1.835823e-05 0 -1.421085e-14 \n", + "43 -2.288818e-05 0 -2.131628e-14 \n", + "44 -4.111230e-05 0 2.131628e-14 \n", + "45 6.817281e-07 0 -2.842171e-14 \n", + "46 1.014024e-05 0 1.421085e-14 \n", + "47 8.359551e-06 0 4.973799e-14 \n", + "48 4.671514e-06 0 3.552714e-14 \n", + "49 1.065433e-05 0 -2.131628e-14 \n", + "50 5.200505e-06 0 -2.842171e-14 \n", + "\n", + " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", + "ward \n", + "1 0 -1.950662e-13 0 0 \n", + "2 0 -1.012523e-13 0 0 \n", + "3 0 -4.827330e-07 0 19 \n", + "4 0 -1.300631e-04 0 1512 \n", + "5 0 -5.181380e-05 0 262 \n", + "6 0 -1.255662e-13 0 0 \n", + "7 0 -9.814407e-07 0 6 \n", + "8 0 -1.549615e-05 0 310 \n", + "9 0 -6.946400e-06 0 20 \n", + "10 0 -7.186215e-05 0 152 \n", + "11 0 -1.814144e-04 0 232 \n", + "12 0 8.415202e-05 0 473 \n", + "13 0 3.419487e-14 0 0 \n", + "14 0 -4.807266e-14 0 0 \n", + "15 0 -1.169065e-13 0 0 \n", + "16 0 -1.605382e-13 0 0 \n", + "17 0 -2.418054e-06 0 283 \n", + "18 0 3.130829e-14 0 0 \n", + "19 0 -7.172784e-05 0 37 \n", + "20 0 -1.604272e-13 0 0 \n", + "21 0 -7.693846e-14 0 0 \n", + "22 0 -1.024736e-13 0 0 \n", + "23 0 5.329071e-14 0 0 \n", + "24 0 -1.875167e-13 0 0 \n", + "25 0 -4.757110e-04 1 2724 \n", + "26 0 -1.302292e-13 0 0 \n", + "27 0 -2.271516e-13 0 0 \n", + "28 0 -5.156986e-14 0 0 \n", + "29 0 -1.268430e-13 0 0 \n", + "30 0 -2.764455e-14 0 0 \n", + "31 0 -5.384582e-14 0 0 \n", + "32 0 1.831868e-14 0 0 \n", + "33 0 -1.181277e-13 0 0 \n", + "34 0 9.934775e-06 0 59 \n", + "35 0 -1.119105e-13 0 0 \n", + "36 0 4.574119e-14 0 0 \n", + "37 0 -1.619260e-13 0 0 \n", + "38 0 2.753353e-14 0 0 \n", + "39 0 5.595524e-14 0 0 \n", + "40 0 -2.997602e-14 -1 0 \n", + "41 0 -1.187939e-14 0 0 \n", + "42 0 3.043121e-13 0 0 \n", + "43 0 -9.281464e-14 0 0 \n", + "44 0 -1.428857e-13 0 0 \n", + "45 0 6.161738e-14 0 0 \n", + "46 0 -6.517009e-14 0 0 \n", + "47 0 7.993606e-15 0 0 \n", + "48 0 -8.926193e-14 0 0 \n", + "49 0 -1.190159e-13 0 0 \n", + "50 0 7.327472e-15 0 0 \n", + "\n", + " police_ticket_count_rank police_ticket_count_pct \\\n", + "ward \n", + "1 0 0.000000e+00 \n", + "2 0 0.000000e+00 \n", + "3 0 4.620670e-06 \n", + "4 0 2.060519e-04 \n", + "5 0 1.124420e-04 \n", + "6 0 0.000000e+00 \n", + "7 0 2.792238e-06 \n", + "8 0 1.642837e-04 \n", + "9 0 -8.856891e-06 \n", + "10 0 9.518341e-05 \n", + "11 0 5.287497e-05 \n", + "12 0 8.713349e-05 \n", + "13 0 0.000000e+00 \n", + "14 0 1.665335e-16 \n", + "15 0 1.110223e-16 \n", + "16 0 0.000000e+00 \n", + "17 0 7.803109e-05 \n", + "18 0 1.110223e-16 \n", + "19 0 1.100951e-05 \n", + "20 0 0.000000e+00 \n", + "21 0 0.000000e+00 \n", + "22 0 5.551115e-17 \n", + "23 0 0.000000e+00 \n", + "24 0 0.000000e+00 \n", + "25 0 5.345568e-04 \n", + "26 0 0.000000e+00 \n", + "27 0 -1.110223e-16 \n", + "28 0 -2.220446e-16 \n", + "29 0 0.000000e+00 \n", + "30 0 -1.110223e-16 \n", + "31 0 -1.665335e-16 \n", + "32 0 0.000000e+00 \n", + "33 0 0.000000e+00 \n", + "34 0 2.247954e-05 \n", + "35 0 0.000000e+00 \n", + "36 0 -1.110223e-16 \n", + "37 0 0.000000e+00 \n", + "38 0 0.000000e+00 \n", + "39 0 1.110223e-16 \n", + "40 0 -1.110223e-16 \n", + "41 0 0.000000e+00 \n", + "42 0 1.110223e-16 \n", + "43 0 0.000000e+00 \n", + "44 0 -5.551115e-17 \n", + "45 0 1.110223e-16 \n", + "46 0 0.000000e+00 \n", + "47 0 0.000000e+00 \n", + "48 0 0.000000e+00 \n", + "49 0 0.000000e+00 \n", + "50 0 -1.110223e-16 \n", + "\n", + " police_ticket_count_pct_rank contested_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 3 \n", + "4 0 82 \n", + "5 0 24 \n", + "6 0 0 \n", + "7 0 0 \n", + "8 0 26 \n", + "9 0 3 \n", + "10 0 11 \n", + "11 0 20 \n", + "12 0 38 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 25 \n", + "18 0 0 \n", + "19 0 7 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 213 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 2 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " contested_ticket_count_rank contested_ticket_count_pct \\\n", + "ward \n", + "1 0 0.000000e+00 \n", + "2 0 -1.387779e-17 \n", + "3 0 9.711912e-07 \n", + "4 0 -5.821705e-05 \n", + "5 0 -1.553925e-06 \n", + "6 0 0.000000e+00 \n", + "7 0 -1.041613e-06 \n", + "8 0 -1.101439e-05 \n", + "9 0 -6.244180e-07 \n", + "10 0 -8.034173e-06 \n", + "11 0 -3.159800e-05 \n", + "12 0 7.057821e-09 \n", + "13 0 -1.387779e-17 \n", + "14 0 0.000000e+00 \n", + "15 0 0.000000e+00 \n", + "16 0 -1.387779e-17 \n", + "17 -1 -8.725616e-07 \n", + "18 0 -1.387779e-17 \n", + "19 0 2.670217e-06 \n", + "20 0 0.000000e+00 \n", + "21 0 -1.387779e-17 \n", + "22 0 0.000000e+00 \n", + "23 0 -1.387779e-17 \n", + "24 0 0.000000e+00 \n", + "25 0 -5.570114e-05 \n", + "26 0 0.000000e+00 \n", + "27 0 0.000000e+00 \n", + "28 0 1.387779e-17 \n", + "29 1 0.000000e+00 \n", + "30 0 0.000000e+00 \n", + "31 0 0.000000e+00 \n", + "32 0 -1.387779e-17 \n", + "33 0 1.387779e-17 \n", + "34 0 -7.906166e-06 \n", + "35 0 6.938894e-18 \n", + "36 0 -1.387779e-17 \n", + "37 0 0.000000e+00 \n", + "38 0 -1.387779e-17 \n", + "39 0 0.000000e+00 \n", + "40 0 -2.775558e-17 \n", + "41 0 0.000000e+00 \n", + "42 0 1.387779e-17 \n", + "43 0 -1.387779e-17 \n", + "44 0 0.000000e+00 \n", + "45 0 1.387779e-17 \n", + "46 0 0.000000e+00 \n", + "47 0 0.000000e+00 \n", + "48 0 -1.387779e-17 \n", + "49 0 0.000000e+00 \n", + "50 0 0.000000e+00 \n", + "\n", + " contested_ticket_count_pct_rank paid_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 8 \n", + "4 0 1071 \n", + "5 0 146 \n", + "6 0 0 \n", + "7 0 3 \n", + "8 0 210 \n", + "9 0 16 \n", + "10 0 74 \n", + "11 0 208 \n", + "12 0 495 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 168 \n", + "18 0 0 \n", + "19 0 19 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 2047 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 29 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " paid_ticket_count_rank paid_ticket_count_pct \\\n", + "ward \n", + "1 0 0.000000e+00 \n", + "2 0 0.000000e+00 \n", + "3 0 -3.749177e-06 \n", + "4 0 -8.143196e-05 \n", + "5 0 -3.721707e-05 \n", + "6 0 0.000000e+00 \n", + "7 0 -1.347219e-06 \n", + "8 0 4.370182e-06 \n", + "9 0 -9.113263e-06 \n", + "10 0 -8.854411e-05 \n", + "11 0 -1.313374e-04 \n", + "12 0 4.439429e-05 \n", + "13 0 -1.110223e-16 \n", + "14 0 -1.110223e-16 \n", + "15 0 1.110223e-16 \n", + "16 0 5.551115e-17 \n", + "17 0 -7.195541e-06 \n", + "18 0 1.110223e-16 \n", + "19 0 -8.174453e-05 \n", + "20 0 0.000000e+00 \n", + "21 0 0.000000e+00 \n", + "22 0 0.000000e+00 \n", + "23 0 -1.110223e-16 \n", + "24 0 -5.551115e-17 \n", + "25 0 -4.478696e-04 \n", + "26 0 0.000000e+00 \n", + "27 0 0.000000e+00 \n", + "28 0 1.110223e-16 \n", + "29 0 0.000000e+00 \n", + "30 0 1.110223e-16 \n", + "31 0 0.000000e+00 \n", + "32 0 0.000000e+00 \n", + "33 0 1.110223e-16 \n", + "34 0 -4.057160e-06 \n", + "35 0 0.000000e+00 \n", + "36 0 -1.110223e-16 \n", + "37 0 -5.551115e-17 \n", + "38 0 -2.220446e-16 \n", + "39 0 2.220446e-16 \n", + "40 0 0.000000e+00 \n", + "41 0 0.000000e+00 \n", + "42 0 0.000000e+00 \n", + "43 0 0.000000e+00 \n", + "44 0 1.110223e-16 \n", + "45 0 -1.110223e-16 \n", + "46 0 0.000000e+00 \n", + "47 0 0.000000e+00 \n", + "48 0 0.000000e+00 \n", + "49 0 -1.110223e-16 \n", + "50 0 0.000000e+00 \n", + "\n", + " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 115 \n", + "5 0 26 \n", + "6 0 0 \n", + "7 0 1 \n", + "8 0 29 \n", + "9 0 3 \n", + "10 0 11 \n", + "11 0 17 \n", + "12 0 42 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 35 \n", + "18 0 0 \n", + "19 0 5 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 260 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 5 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", + "ward \n", + "1 0 -1.387779e-17 \n", + "2 0 -1.387779e-17 \n", + "3 0 -1.519207e-06 \n", + "4 0 -4.440927e-05 \n", + "5 0 -7.339376e-07 \n", + "6 0 0.000000e+00 \n", + "7 0 5.219463e-07 \n", + "8 0 -9.171336e-06 \n", + "9 0 -6.428599e-07 \n", + "10 0 -1.075787e-05 \n", + "11 0 -2.932489e-05 \n", + "12 0 2.776381e-06 \n", + "13 0 0.000000e+00 \n", + "14 0 0.000000e+00 \n", + "15 0 0.000000e+00 \n", + "16 0 -1.387779e-17 \n", + "17 0 1.142160e-05 \n", + "18 0 0.000000e+00 \n", + "19 0 -1.529432e-06 \n", + "20 0 -1.387779e-17 \n", + "21 0 0.000000e+00 \n", + "22 0 0.000000e+00 \n", + "23 0 0.000000e+00 \n", + "24 0 0.000000e+00 \n", + "25 0 -1.874044e-05 \n", + "26 0 -6.938894e-18 \n", + "27 0 0.000000e+00 \n", + "28 0 0.000000e+00 \n", + "29 0 0.000000e+00 \n", + "30 0 -6.938894e-18 \n", + "31 0 0.000000e+00 \n", + "32 0 -1.387779e-17 \n", + "33 0 6.938894e-18 \n", + "34 0 -1.614228e-06 \n", + "35 0 6.938894e-18 \n", + "36 0 -1.387779e-17 \n", + "37 0 1.387779e-17 \n", + "38 0 0.000000e+00 \n", + "39 0 -1.387779e-17 \n", + "40 0 -1.387779e-17 \n", + "41 0 1.387779e-17 \n", + "42 0 1.387779e-17 \n", + "43 0 0.000000e+00 \n", + "44 0 1.387779e-17 \n", + "45 0 0.000000e+00 \n", + "46 0 0.000000e+00 \n", + "47 0 0.000000e+00 \n", + "48 0 1.387779e-17 \n", + "49 0 0.000000e+00 \n", + "50 0 0.000000e+00 \n", + "\n", + " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 7 \n", + "4 0 652 \n", + "5 0 141 \n", + "6 0 0 \n", + "7 0 4 \n", + "8 0 181 \n", + "9 0 16 \n", + "10 0 79 \n", + "11 0 130 \n", + "12 0 185 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 145 \n", + "18 0 0 \n", + "19 0 23 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 1378 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 26 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " seized_or_suspended_ticket_count_rank \\\n", + "ward \n", + "1 0 \n", + "2 1 \n", + "3 0 \n", + "4 0 \n", + "5 0 \n", + "6 0 \n", + "7 0 \n", + "8 0 \n", + "9 0 \n", + "10 0 \n", + "11 0 \n", + "12 0 \n", + "13 0 \n", + "14 0 \n", + "15 0 \n", + "16 0 \n", + "17 -1 \n", + "18 0 \n", + "19 0 \n", + "20 0 \n", + "21 0 \n", + "22 0 \n", + "23 0 \n", + "24 0 \n", + "25 -1 \n", + "26 1 \n", + "27 0 \n", + "28 0 \n", + "29 0 \n", + "30 0 \n", + "31 0 \n", + "32 0 \n", + "33 0 \n", + "34 0 \n", + "35 0 \n", + "36 0 \n", + "37 0 \n", + "38 0 \n", + "39 0 \n", + "40 0 \n", + "41 0 \n", + "42 0 \n", + "43 0 \n", + "44 0 \n", + "45 0 \n", + "46 0 \n", + "47 0 \n", + "48 0 \n", + "49 0 \n", + "50 0 \n", + "\n", + " seized_or_suspended_ticket_count_pct \\\n", + "ward \n", + "1 -2.775558e-17 \n", + "2 0.000000e+00 \n", + "3 -1.420337e-07 \n", + "4 5.511816e-05 \n", + "5 3.284334e-05 \n", + "6 -5.551115e-17 \n", + "7 3.939448e-07 \n", + "8 1.481744e-05 \n", + "9 -1.610630e-06 \n", + "10 3.678483e-05 \n", + "11 3.319619e-05 \n", + "12 -6.284368e-05 \n", + "13 2.775558e-17 \n", + "14 0.000000e+00 \n", + "15 0.000000e+00 \n", + "16 -5.551115e-17 \n", + "17 -1.675568e-05 \n", + "18 -5.551115e-17 \n", + "19 2.922248e-05 \n", + "20 -5.551115e-17 \n", + "21 0.000000e+00 \n", + "22 -1.110223e-16 \n", + "23 2.775558e-17 \n", + "24 -1.665335e-16 \n", + "25 2.514976e-04 \n", + "26 -5.551115e-17 \n", + "27 0.000000e+00 \n", + "28 0.000000e+00 \n", + "29 5.551115e-17 \n", + "30 0.000000e+00 \n", + "31 5.551115e-17 \n", + "32 -2.775558e-17 \n", + "33 -5.551115e-17 \n", + "34 -9.078800e-06 \n", + "35 5.551115e-17 \n", + "36 0.000000e+00 \n", + "37 0.000000e+00 \n", + "38 5.551115e-17 \n", + "39 -5.551115e-17 \n", + "40 0.000000e+00 \n", + "41 2.775558e-17 \n", + "42 -2.775558e-17 \n", + "43 2.775558e-17 \n", + "44 0.000000e+00 \n", + "45 -8.326673e-17 \n", + "46 0.000000e+00 \n", + "47 0.000000e+00 \n", + "48 -5.551115e-17 \n", + "49 5.551115e-17 \n", + "50 0.000000e+00 \n", + "\n", + " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 15 \n", + "5 0 7 \n", + "6 0 0 \n", + "7 0 0 \n", + "8 0 11 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 3 \n", + "12 0 1 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 6 \n", + "18 0 0 \n", + "19 0 1 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 37 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 3 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", + "ward \n", + "1 0 0.000000e+00 \n", + "2 0 4.336809e-19 \n", + "3 0 -2.470379e-07 \n", + "4 0 -1.860863e-06 \n", + "5 0 1.981061e-06 \n", + "6 0 3.469447e-18 \n", + "7 0 -3.241942e-07 \n", + "8 0 2.944374e-06 \n", + "9 0 -2.085649e-06 \n", + "10 0 -5.751570e-06 \n", + "11 0 7.198188e-07 \n", + "12 0 -3.288856e-06 \n", + "13 0 8.673617e-19 \n", + "14 0 0.000000e+00 \n", + "15 0 1.734723e-18 \n", + "16 0 -3.469447e-18 \n", + "17 0 -4.137846e-06 \n", + "18 0 0.000000e+00 \n", + "19 0 1.674406e-06 \n", + "20 0 0.000000e+00 \n", + "21 0 0.000000e+00 \n", + "22 0 0.000000e+00 \n", + "23 0 -4.336809e-19 \n", + "24 0 0.000000e+00 \n", + "25 0 1.003383e-05 \n", + "26 0 -8.673617e-19 \n", + "27 0 0.000000e+00 \n", + "28 0 3.469447e-18 \n", + "29 0 6.938894e-18 \n", + "30 0 0.000000e+00 \n", + "31 0 0.000000e+00 \n", + "32 1 0.000000e+00 \n", + "33 0 4.336809e-19 \n", + "34 0 3.105567e-06 \n", + "35 0 8.673617e-19 \n", + "36 0 -8.673617e-19 \n", + "37 0 0.000000e+00 \n", + "38 0 4.336809e-19 \n", + "39 0 -4.336809e-19 \n", + "40 0 -4.336809e-19 \n", + "41 0 0.000000e+00 \n", + "42 0 -8.673617e-19 \n", + "43 0 0.000000e+00 \n", + "44 0 0.000000e+00 \n", + "45 0 -4.336809e-19 \n", + "46 0 0.000000e+00 \n", + "47 0 2.168404e-19 \n", + "48 0 -8.673617e-19 \n", + "49 0 0.000000e+00 \n", + "50 0 0.000000e+00 \n", + "\n", + " bankruptcy_ticket_count_pct_rank \n", + "ward \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "5 0 \n", + "6 0 \n", + "7 0 \n", + "8 0 \n", + "9 0 \n", + "10 0 \n", + "11 0 \n", + "12 0 \n", + "13 0 \n", + "14 0 \n", + "15 0 \n", + "16 0 \n", + "17 0 \n", + "18 0 \n", + "19 0 \n", + "20 0 \n", + "21 0 \n", + "22 0 \n", + "23 0 \n", + "24 0 \n", + "25 0 \n", + "26 0 \n", + "27 0 \n", + "28 0 \n", + "29 0 \n", + "30 0 \n", + "31 0 \n", + "32 0 \n", + "33 0 \n", + "34 0 \n", + "35 0 \n", + "36 0 \n", + "37 0 \n", + "38 0 \n", + "39 0 \n", + "40 0 \n", + "41 0 \n", + "42 0 \n", + "43 0 \n", + "44 0 \n", + "45 0 \n", + "46 0 \n", + "47 0 \n", + "48 0 \n", + "49 0 \n", + "50 0 " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wardstotals_sql_minus_pandas" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ticket_countticket_count_rankcurrent_amount_duecurrent_amount_due_rankfine_level1_amountfine_level1_amount_ranktotal_paymentstotal_payments_rankavg_per_ticketavg_per_ticket_rankpaid_pctpaid_pct_rankpolice_ticket_countpolice_ticket_count_rankpolice_ticket_count_pctpolice_ticket_count_pct_rankcontested_ticket_countcontested_ticket_count_rankcontested_ticket_count_pctcontested_ticket_count_pct_rankpaid_ticket_countpaid_ticket_count_rankpaid_ticket_count_pctpaid_ticket_count_pct_rankdismissed_ticket_countdismissed_ticket_count_rankdismissed_ticket_count_pctdismissed_ticket_count_pct_rankseized_or_suspended_ticket_countseized_or_suspended_ticket_count_rankseized_or_suspended_ticket_count_pctseized_or_suspended_ticket_count_pct_rankbankruptcy_ticket_countbankruptcy_ticket_count_rankbankruptcy_ticket_count_pctbankruptcy_ticket_count_pct_rank
ward
100-1.899898e-060003.993511e-0604.263256e-1406.339373e-140000.000000e+00000-1.387779e-170001.110223e-160000.000000e+000000.000000e+00000-4.336809e-190
2003.501773e-07000-2.421439e-0700.000000e+000-8.326673e-150005.551115e-170000.000000e+000001.110223e-160000.000000e+000000.000000e+000000.000000e+000
300-4.464760e-06000-4.358590e-0704.263256e-1406.961098e-140001.110223e-16000-4.163336e-17000-1.110223e-160001.387779e-17000-5.551115e-170000.000000e+000
419101.157456e+0401763001.091980e+0408.052898e-030-1.014012e-04016903.577633e-0402507.464996e-0601000-8.651039e-0502401.940404e-0505504.309093e-050301.350616e-060
57405.782750e+030670005.087310e+0301.476387e-030-2.161579e-0506501.516915e-04080-1.613823e-060380-2.606575e-050702.165708e-0613003.373137e-050209.448280e-070
6002.644956e-06000-1.838431e-060-5.684342e-140-6.306067e-14000-1.110223e-16000-1.387779e-170005.551115e-170000.000000e+00000-5.551115e-170000.000000e+000
700-5.258247e-06000-1.097098e-0600.000000e+0004.674039e-14000-1.110223e-16000-1.387779e-17000-1.110223e-160000.000000e+00000-5.551115e-17000-1.387779e-170
86909.443920e+030715003.961200e+0302.956866e-030-4.897767e-0504502.201327e-05040-2.718727e-050290-1.163874e-05060-4.036440e-0603202.176421e-050501.523846e-050
9301.788000e+02018008.518000e+010-1.021634e-030-8.265678e-07010-9.803720e-06000-3.072081e-06010-2.817362e-06000-2.497483e-06010-2.420732e-06000-1.046434e-060
103402.813020e+030300002.056520e+030-1.228466e-030-2.048431e-0502901.221621e-040408.825259e-060160-3.546159e-050401.489772e-0501003.568318e-06000-8.025930e-060
1111707.054940e+030923004.682460e+0301.006321e-030-1.916813e-0405801.402044e-04070-3.193899e-050520-1.814281e-04060-1.969436e-050190-9.706305e-07000-3.785910e-060
1212804.067690e+030956508.529150e+030-7.662542e-0307.198300e-050460-1.043885e-0501201.913957e-0508501.151153e-0501303.664811e-050220-5.351144e-05000-5.334059e-060
13002.691522e-07000-1.713634e-070-4.263256e-140-2.342571e-140000.000000e+000002.775558e-170000.000000e+00000-1.387779e-170000.000000e+000000.000000e+000
1400-1.292676e-06000-7.580966e-0704.263256e-1402.009504e-140000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+00000-8.673617e-190
1500-2.611428e-06000-9.741634e-0700.000000e+0003.341771e-140000.000000e+00000-6.938894e-18000-1.110223e-16000-1.387779e-170000.000000e+000003.469447e-180
1600-2.831221e-07000-1.421198e-0602.842171e-140-2.597922e-14000-1.110223e-160000.000000e+000000.000000e+000001.387779e-170000.000000e+000000.000000e+000
177307.599800e+030661503.967430e+030-4.185085e-030-5.723181e-0606104.847331e-05070-4.570665e-0603205.971855e-0601002.081021e-05-13305.711644e-06020-6.011613e-060
1800-2.067536e-070007.264316e-0802.842171e-1401.365574e-140005.551115e-17000-4.163336e-17000-1.110223e-160001.387779e-170000.000000e+00000-3.469447e-180
19303.126900e+02018001.037000e+020-1.904244e-030-1.906733e-050302.323024e-05000-6.848256e-06000-3.528506e-05000-5.107940e-060304.163711e-05000-9.472085e-070
20003.315508e-06000-2.020970e-060-1.421085e-140-7.138734e-140000.000000e+00000-1.387779e-170000.000000e+000001.387779e-170000.000000e+000000.000000e+000
2100-5.196780e-06000-1.369044e-060-4.121148e-1304.546363e-140001.110223e-16000-1.387779e-170005.551115e-170000.000000e+000000.000000e+000000.000000e+000
2200-2.030283e-06000-7.245690e-070-2.842171e-1403.386180e-14000-5.551115e-17000-6.938894e-180001.110223e-16000-6.938894e-180000.000000e+00000-8.673617e-190
2300-2.533197e-07000-6.966293e-0700.000000e+000-5.884182e-15000-2.220446e-160000.000000e+00000-1.110223e-160000.000000e+00000-5.551115e-17000-8.673617e-190
24005.520880e-06000-1.644716e-0601.421085e-140-8.443246e-140002.220446e-16000-1.387779e-170000.000000e+000000.000000e+000005.551115e-170000.000000e+000
2558003.425613e+0404989003.919083e+0401.628251e-020-3.496490e-04032304.943151e-0405501.406854e-0603490-1.931641e-0405006.491482e-06015001.417798e-040708.529681e-060
2600-2.490357e-06000-1.678243e-0602.842171e-1403.286260e-140005.551115e-170000.000000e+000000.000000e+00000-6.938894e-18000-2.775558e-17000-1.734723e-180
2700-2.607703e-080004.008412e-060-1.421085e-1403.630429e-140000.000000e+00000-2.775558e-170001.110223e-160000.000000e+000002.775558e-17000-3.469447e-180
28001.326948e-05000-7.003546e-0701.421085e-140-1.186828e-130000.000000e+000000.000000e+000000.000000e+00000-1.387779e-170000.000000e+000006.938894e-180
2900-2.872199e-06000-1.434237e-0601.421085e-1406.938894e-150001.110223e-160000.000000e+00000-5.551115e-170001.387779e-170000.000000e+000000.000000e+000
3000-6.789342e-07000-8.977950e-0700.000000e+0006.994405e-150000.000000e+00000-1.387779e-170000.000000e+000006.938894e-18000-2.775558e-17000-8.673617e-190
3100-1.354143e-06000-1.236796e-060-1.421085e-1401.809664e-140000.000000e+000000.000000e+00000-1.110223e-16000-6.938894e-18000-2.775558e-170001.734723e-180
32003.464520e-07000-1.098961e-060-4.263256e-140-2.442491e-140000.000000e+00000-1.387779e-170000.000000e+000002.775558e-170000.000000e+000000.000000e+000
3300-1.583248e-07000-9.555370e-0702.842171e-140-8.437695e-150000.000000e+000000.000000e+00000-1.110223e-160006.938894e-180000.000000e+000008.673617e-190
342301.785390e+030237502.224810e+030-2.623622e-0404.007616e-0502202.952115e-05010-1.323558e-0501202.568483e-05010-9.623747e-06080-2.334788e-050301.698528e-050
3500-9.536743e-07000-1.125038e-0601.421085e-1401.199041e-140000.000000e+00000-1.387779e-17000-2.220446e-16000-6.938894e-180000.000000e+000000.000000e+000
36001.396984e-08000-4.721805e-0704.263256e-140-1.521006e-140005.551115e-17000-2.775558e-170000.000000e+000000.000000e+00000-5.551115e-170000.000000e+000
3700-2.495944e-07000-1.491979e-0603.836931e-130-2.758904e-14000-1.110223e-160000.000000e+000005.551115e-17000-1.387779e-170000.000000e+000006.938894e-180
38001.732260e-07000-2.607703e-0802.842171e-140-1.632028e-14000-5.551115e-17000-1.387779e-170001.110223e-160000.000000e+00000-2.775558e-170000.000000e+000
39002.207235e-07000-2.691522e-0702.842171e-140-2.220446e-140000.000000e+000001.387779e-170000.000000e+00000-1.387779e-170000.000000e+000000.000000e+000
40006.426126e-08000-1.031905e-060-4.263256e-140-1.576517e-140005.551115e-170001.387779e-17000-2.220446e-16000-1.387779e-170000.000000e+000000.000000e+000
41002.770685e-080005.029142e-0802.842171e-140-1.332268e-15000-1.110223e-160000.000000e+000000.000000e+000001.387779e-170000.000000e+000008.673617e-190
4200-1.369789e-05000-5.573034e-0604.263256e-1408.326673e-140000.000000e+000000.000000e+000000.000000e+00000-1.387779e-170000.000000e+000000.000000e+000
4300-2.151355e-070001.832843e-060-4.263256e-1401.609823e-140000.000000e+000000.000000e+00000-2.220446e-160000.000000e+000001.387779e-170000.000000e+000
4400-1.096167e-060003.710389e-0600.000000e+0003.808065e-14000-2.775558e-170001.387779e-170000.000000e+000000.000000e+000001.387779e-17000-4.336809e-190
45002.114102e-07000-2.067536e-0700.000000e+000-2.065015e-140005.551115e-17000-1.387779e-170001.110223e-160000.000000e+000000.000000e+000000.000000e+000
4600-3.939494e-07000-1.095235e-0602.842171e-1407.771561e-160000.000000e+000000.000000e+000000.000000e+00000-2.775558e-17000-2.775558e-170008.673617e-190
47003.096648e-07000-5.923212e-070-1.421085e-140-1.632028e-14000-2.775558e-17000-1.387779e-170001.110223e-16000-1.387779e-17000-1.387779e-170000.000000e+000
48003.427267e-07000-6.128103e-070-1.421085e-140-2.864375e-140005.551115e-17000-1.387779e-17000-1.110223e-160000.000000e+000000.000000e+000000.000000e+000
4900-1.073815e-06000-1.320615e-0604.263256e-1401.321165e-140000.000000e+00000-1.387779e-170000.000000e+000000.000000e+00000-2.775558e-170000.000000e+000
5000-1.415610e-07000-8.046627e-0701.421085e-140-8.770762e-150005.551115e-170000.000000e+000000.000000e+00000-2.775558e-170002.775558e-17000-8.673617e-190
\n", + "
" + ], + "text/plain": [ + " ticket_count ticket_count_rank current_amount_due \\\n", + "ward \n", + "1 0 0 -1.899898e-06 \n", + "2 0 0 3.501773e-07 \n", + "3 0 0 -4.464760e-06 \n", + "4 191 0 1.157456e+04 \n", + "5 74 0 5.782750e+03 \n", + "6 0 0 2.644956e-06 \n", + "7 0 0 -5.258247e-06 \n", + "8 69 0 9.443920e+03 \n", + "9 3 0 1.788000e+02 \n", + "10 34 0 2.813020e+03 \n", + "11 117 0 7.054940e+03 \n", + "12 128 0 4.067690e+03 \n", + "13 0 0 2.691522e-07 \n", + "14 0 0 -1.292676e-06 \n", + "15 0 0 -2.611428e-06 \n", + "16 0 0 -2.831221e-07 \n", + "17 73 0 7.599800e+03 \n", + "18 0 0 -2.067536e-07 \n", + "19 3 0 3.126900e+02 \n", + "20 0 0 3.315508e-06 \n", + "21 0 0 -5.196780e-06 \n", + "22 0 0 -2.030283e-06 \n", + "23 0 0 -2.533197e-07 \n", + "24 0 0 5.520880e-06 \n", + "25 580 0 3.425613e+04 \n", + "26 0 0 -2.490357e-06 \n", + "27 0 0 -2.607703e-08 \n", + "28 0 0 1.326948e-05 \n", + "29 0 0 -2.872199e-06 \n", + "30 0 0 -6.789342e-07 \n", + "31 0 0 -1.354143e-06 \n", + "32 0 0 3.464520e-07 \n", + "33 0 0 -1.583248e-07 \n", + "34 23 0 1.785390e+03 \n", + "35 0 0 -9.536743e-07 \n", + "36 0 0 1.396984e-08 \n", + "37 0 0 -2.495944e-07 \n", + "38 0 0 1.732260e-07 \n", + "39 0 0 2.207235e-07 \n", + "40 0 0 6.426126e-08 \n", + "41 0 0 2.770685e-08 \n", + "42 0 0 -1.369789e-05 \n", + "43 0 0 -2.151355e-07 \n", + "44 0 0 -1.096167e-06 \n", + "45 0 0 2.114102e-07 \n", + "46 0 0 -3.939494e-07 \n", + "47 0 0 3.096648e-07 \n", + "48 0 0 3.427267e-07 \n", + "49 0 0 -1.073815e-06 \n", + "50 0 0 -1.415610e-07 \n", + "\n", + " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", + "ward \n", + "1 0 0 0 \n", + "2 0 0 0 \n", + "3 0 0 0 \n", + "4 0 17630 0 \n", + "5 0 6700 0 \n", + "6 0 0 0 \n", + "7 0 0 0 \n", + "8 0 7150 0 \n", + "9 0 180 0 \n", + "10 0 3000 0 \n", + "11 0 9230 0 \n", + "12 0 9565 0 \n", + "13 0 0 0 \n", + "14 0 0 0 \n", + "15 0 0 0 \n", + "16 0 0 0 \n", + "17 0 6615 0 \n", + "18 0 0 0 \n", + "19 0 180 0 \n", + "20 0 0 0 \n", + "21 0 0 0 \n", + "22 0 0 0 \n", + "23 0 0 0 \n", + "24 0 0 0 \n", + "25 0 49890 0 \n", + "26 0 0 0 \n", + "27 0 0 0 \n", + "28 0 0 0 \n", + "29 0 0 0 \n", + "30 0 0 0 \n", + "31 0 0 0 \n", + "32 0 0 0 \n", + "33 0 0 0 \n", + "34 0 2375 0 \n", + "35 0 0 0 \n", + "36 0 0 0 \n", + "37 0 0 0 \n", + "38 0 0 0 \n", + "39 0 0 0 \n", + "40 0 0 0 \n", + "41 0 0 0 \n", + "42 0 0 0 \n", + "43 0 0 0 \n", + "44 0 0 0 \n", + "45 0 0 0 \n", + "46 0 0 0 \n", + "47 0 0 0 \n", + "48 0 0 0 \n", + "49 0 0 0 \n", + "50 0 0 0 \n", + "\n", + " total_payments total_payments_rank avg_per_ticket \\\n", + "ward \n", + "1 3.993511e-06 0 4.263256e-14 \n", + "2 -2.421439e-07 0 0.000000e+00 \n", + "3 -4.358590e-07 0 4.263256e-14 \n", + "4 1.091980e+04 0 8.052898e-03 \n", + "5 5.087310e+03 0 1.476387e-03 \n", + "6 -1.838431e-06 0 -5.684342e-14 \n", + "7 -1.097098e-06 0 0.000000e+00 \n", + "8 3.961200e+03 0 2.956866e-03 \n", + "9 8.518000e+01 0 -1.021634e-03 \n", + "10 2.056520e+03 0 -1.228466e-03 \n", + "11 4.682460e+03 0 1.006321e-03 \n", + "12 8.529150e+03 0 -7.662542e-03 \n", + "13 -1.713634e-07 0 -4.263256e-14 \n", + "14 -7.580966e-07 0 4.263256e-14 \n", + "15 -9.741634e-07 0 0.000000e+00 \n", + "16 -1.421198e-06 0 2.842171e-14 \n", + "17 3.967430e+03 0 -4.185085e-03 \n", + "18 7.264316e-08 0 2.842171e-14 \n", + "19 1.037000e+02 0 -1.904244e-03 \n", + "20 -2.020970e-06 0 -1.421085e-14 \n", + "21 -1.369044e-06 0 -4.121148e-13 \n", + "22 -7.245690e-07 0 -2.842171e-14 \n", + "23 -6.966293e-07 0 0.000000e+00 \n", + "24 -1.644716e-06 0 1.421085e-14 \n", + "25 3.919083e+04 0 1.628251e-02 \n", + "26 -1.678243e-06 0 2.842171e-14 \n", + "27 4.008412e-06 0 -1.421085e-14 \n", + "28 -7.003546e-07 0 1.421085e-14 \n", + "29 -1.434237e-06 0 1.421085e-14 \n", + "30 -8.977950e-07 0 0.000000e+00 \n", + "31 -1.236796e-06 0 -1.421085e-14 \n", + "32 -1.098961e-06 0 -4.263256e-14 \n", + "33 -9.555370e-07 0 2.842171e-14 \n", + "34 2.224810e+03 0 -2.623622e-04 \n", + "35 -1.125038e-06 0 1.421085e-14 \n", + "36 -4.721805e-07 0 4.263256e-14 \n", + "37 -1.491979e-06 0 3.836931e-13 \n", + "38 -2.607703e-08 0 2.842171e-14 \n", + "39 -2.691522e-07 0 2.842171e-14 \n", + "40 -1.031905e-06 0 -4.263256e-14 \n", + "41 5.029142e-08 0 2.842171e-14 \n", + "42 -5.573034e-06 0 4.263256e-14 \n", + "43 1.832843e-06 0 -4.263256e-14 \n", + "44 3.710389e-06 0 0.000000e+00 \n", + "45 -2.067536e-07 0 0.000000e+00 \n", + "46 -1.095235e-06 0 2.842171e-14 \n", + "47 -5.923212e-07 0 -1.421085e-14 \n", + "48 -6.128103e-07 0 -1.421085e-14 \n", + "49 -1.320615e-06 0 4.263256e-14 \n", + "50 -8.046627e-07 0 1.421085e-14 \n", + "\n", + " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", + "ward \n", + "1 0 6.339373e-14 0 0 \n", + "2 0 -8.326673e-15 0 0 \n", + "3 0 6.961098e-14 0 0 \n", + "4 0 -1.014012e-04 0 169 \n", + "5 0 -2.161579e-05 0 65 \n", + "6 0 -6.306067e-14 0 0 \n", + "7 0 4.674039e-14 0 0 \n", + "8 0 -4.897767e-05 0 45 \n", + "9 0 -8.265678e-07 0 1 \n", + "10 0 -2.048431e-05 0 29 \n", + "11 0 -1.916813e-04 0 58 \n", + "12 0 7.198300e-05 0 46 \n", + "13 0 -2.342571e-14 0 0 \n", + "14 0 2.009504e-14 0 0 \n", + "15 0 3.341771e-14 0 0 \n", + "16 0 -2.597922e-14 0 0 \n", + "17 0 -5.723181e-06 0 61 \n", + "18 0 1.365574e-14 0 0 \n", + "19 0 -1.906733e-05 0 3 \n", + "20 0 -7.138734e-14 0 0 \n", + "21 0 4.546363e-14 0 0 \n", + "22 0 3.386180e-14 0 0 \n", + "23 0 -5.884182e-15 0 0 \n", + "24 0 -8.443246e-14 0 0 \n", + "25 0 -3.496490e-04 0 323 \n", + "26 0 3.286260e-14 0 0 \n", + "27 0 3.630429e-14 0 0 \n", + "28 0 -1.186828e-13 0 0 \n", + "29 0 6.938894e-15 0 0 \n", + "30 0 6.994405e-15 0 0 \n", + "31 0 1.809664e-14 0 0 \n", + "32 0 -2.442491e-14 0 0 \n", + "33 0 -8.437695e-15 0 0 \n", + "34 0 4.007616e-05 0 22 \n", + "35 0 1.199041e-14 0 0 \n", + "36 0 -1.521006e-14 0 0 \n", + "37 0 -2.758904e-14 0 0 \n", + "38 0 -1.632028e-14 0 0 \n", + "39 0 -2.220446e-14 0 0 \n", + "40 0 -1.576517e-14 0 0 \n", + "41 0 -1.332268e-15 0 0 \n", + "42 0 8.326673e-14 0 0 \n", + "43 0 1.609823e-14 0 0 \n", + "44 0 3.808065e-14 0 0 \n", + "45 0 -2.065015e-14 0 0 \n", + "46 0 7.771561e-16 0 0 \n", + "47 0 -1.632028e-14 0 0 \n", + "48 0 -2.864375e-14 0 0 \n", + "49 0 1.321165e-14 0 0 \n", + "50 0 -8.770762e-15 0 0 \n", + "\n", + " police_ticket_count_rank police_ticket_count_pct \\\n", + "ward \n", + "1 0 0.000000e+00 \n", + "2 0 5.551115e-17 \n", + "3 0 1.110223e-16 \n", + "4 0 3.577633e-04 \n", + "5 0 1.516915e-04 \n", + "6 0 -1.110223e-16 \n", + "7 0 -1.110223e-16 \n", + "8 0 2.201327e-05 \n", + "9 0 -9.803720e-06 \n", + "10 0 1.221621e-04 \n", + "11 0 1.402044e-04 \n", + "12 0 -1.043885e-05 \n", + "13 0 0.000000e+00 \n", + "14 0 0.000000e+00 \n", + "15 0 0.000000e+00 \n", + "16 0 -1.110223e-16 \n", + "17 0 4.847331e-05 \n", + "18 0 5.551115e-17 \n", + "19 0 2.323024e-05 \n", + "20 0 0.000000e+00 \n", + "21 0 1.110223e-16 \n", + "22 0 -5.551115e-17 \n", + "23 0 -2.220446e-16 \n", + "24 0 2.220446e-16 \n", + "25 0 4.943151e-04 \n", + "26 0 5.551115e-17 \n", + "27 0 0.000000e+00 \n", + "28 0 0.000000e+00 \n", + "29 0 1.110223e-16 \n", + "30 0 0.000000e+00 \n", + "31 0 0.000000e+00 \n", + "32 0 0.000000e+00 \n", + "33 0 0.000000e+00 \n", + "34 0 2.952115e-05 \n", + "35 0 0.000000e+00 \n", + "36 0 5.551115e-17 \n", + "37 0 -1.110223e-16 \n", + "38 0 -5.551115e-17 \n", + "39 0 0.000000e+00 \n", + "40 0 5.551115e-17 \n", + "41 0 -1.110223e-16 \n", + "42 0 0.000000e+00 \n", + "43 0 0.000000e+00 \n", + "44 0 -2.775558e-17 \n", + "45 0 5.551115e-17 \n", + "46 0 0.000000e+00 \n", + "47 0 -2.775558e-17 \n", + "48 0 5.551115e-17 \n", + "49 0 0.000000e+00 \n", + "50 0 5.551115e-17 \n", + "\n", + " police_ticket_count_pct_rank contested_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 25 \n", + "5 0 8 \n", + "6 0 0 \n", + "7 0 0 \n", + "8 0 4 \n", + "9 0 0 \n", + "10 0 4 \n", + "11 0 7 \n", + "12 0 12 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 7 \n", + "18 0 0 \n", + "19 0 0 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 55 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 1 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " contested_ticket_count_rank contested_ticket_count_pct \\\n", + "ward \n", + "1 0 -1.387779e-17 \n", + "2 0 0.000000e+00 \n", + "3 0 -4.163336e-17 \n", + "4 0 7.464996e-06 \n", + "5 0 -1.613823e-06 \n", + "6 0 -1.387779e-17 \n", + "7 0 -1.387779e-17 \n", + "8 0 -2.718727e-05 \n", + "9 0 -3.072081e-06 \n", + "10 0 8.825259e-06 \n", + "11 0 -3.193899e-05 \n", + "12 0 1.913957e-05 \n", + "13 0 2.775558e-17 \n", + "14 0 0.000000e+00 \n", + "15 0 -6.938894e-18 \n", + "16 0 0.000000e+00 \n", + "17 0 -4.570665e-06 \n", + "18 0 -4.163336e-17 \n", + "19 0 -6.848256e-06 \n", + "20 0 -1.387779e-17 \n", + "21 0 -1.387779e-17 \n", + "22 0 -6.938894e-18 \n", + "23 0 0.000000e+00 \n", + "24 0 -1.387779e-17 \n", + "25 0 1.406854e-06 \n", + "26 0 0.000000e+00 \n", + "27 0 -2.775558e-17 \n", + "28 0 0.000000e+00 \n", + "29 0 0.000000e+00 \n", + "30 0 -1.387779e-17 \n", + "31 0 0.000000e+00 \n", + "32 0 -1.387779e-17 \n", + "33 0 0.000000e+00 \n", + "34 0 -1.323558e-05 \n", + "35 0 -1.387779e-17 \n", + "36 0 -2.775558e-17 \n", + "37 0 0.000000e+00 \n", + "38 0 -1.387779e-17 \n", + "39 0 1.387779e-17 \n", + "40 0 1.387779e-17 \n", + "41 0 0.000000e+00 \n", + "42 0 0.000000e+00 \n", + "43 0 0.000000e+00 \n", + "44 0 1.387779e-17 \n", + "45 0 -1.387779e-17 \n", + "46 0 0.000000e+00 \n", + "47 0 -1.387779e-17 \n", + "48 0 -1.387779e-17 \n", + "49 0 -1.387779e-17 \n", + "50 0 0.000000e+00 \n", + "\n", + " contested_ticket_count_pct_rank paid_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 100 \n", + "5 0 38 \n", + "6 0 0 \n", + "7 0 0 \n", + "8 0 29 \n", + "9 0 1 \n", + "10 0 16 \n", + "11 0 52 \n", + "12 0 85 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 32 \n", + "18 0 0 \n", + "19 0 0 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 349 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 12 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " paid_ticket_count_rank paid_ticket_count_pct \\\n", + "ward \n", + "1 0 1.110223e-16 \n", + "2 0 1.110223e-16 \n", + "3 0 -1.110223e-16 \n", + "4 0 -8.651039e-05 \n", + "5 0 -2.606575e-05 \n", + "6 0 5.551115e-17 \n", + "7 0 -1.110223e-16 \n", + "8 0 -1.163874e-05 \n", + "9 0 -2.817362e-06 \n", + "10 0 -3.546159e-05 \n", + "11 0 -1.814281e-04 \n", + "12 0 1.151153e-05 \n", + "13 0 0.000000e+00 \n", + "14 0 0.000000e+00 \n", + "15 0 -1.110223e-16 \n", + "16 0 0.000000e+00 \n", + "17 0 5.971855e-06 \n", + "18 0 -1.110223e-16 \n", + "19 0 -3.528506e-05 \n", + "20 0 0.000000e+00 \n", + "21 0 5.551115e-17 \n", + "22 0 1.110223e-16 \n", + "23 0 -1.110223e-16 \n", + "24 0 0.000000e+00 \n", + "25 0 -1.931641e-04 \n", + "26 0 0.000000e+00 \n", + "27 0 1.110223e-16 \n", + "28 0 0.000000e+00 \n", + "29 0 -5.551115e-17 \n", + "30 0 0.000000e+00 \n", + "31 0 -1.110223e-16 \n", + "32 0 0.000000e+00 \n", + "33 0 -1.110223e-16 \n", + "34 0 2.568483e-05 \n", + "35 0 -2.220446e-16 \n", + "36 0 0.000000e+00 \n", + "37 0 5.551115e-17 \n", + "38 0 1.110223e-16 \n", + "39 0 0.000000e+00 \n", + "40 0 -2.220446e-16 \n", + "41 0 0.000000e+00 \n", + "42 0 0.000000e+00 \n", + "43 0 -2.220446e-16 \n", + "44 0 0.000000e+00 \n", + "45 0 1.110223e-16 \n", + "46 0 0.000000e+00 \n", + "47 0 1.110223e-16 \n", + "48 0 -1.110223e-16 \n", + "49 0 0.000000e+00 \n", + "50 0 0.000000e+00 \n", + "\n", + " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 24 \n", + "5 0 7 \n", + "6 0 0 \n", + "7 0 0 \n", + "8 0 6 \n", + "9 0 0 \n", + "10 0 4 \n", + "11 0 6 \n", + "12 0 13 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 10 \n", + "18 0 0 \n", + "19 0 0 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 50 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 1 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", + "ward \n", + "1 0 0.000000e+00 \n", + "2 0 0.000000e+00 \n", + "3 0 1.387779e-17 \n", + "4 0 1.940404e-05 \n", + "5 0 2.165708e-06 \n", + "6 0 0.000000e+00 \n", + "7 0 0.000000e+00 \n", + "8 0 -4.036440e-06 \n", + "9 0 -2.497483e-06 \n", + "10 0 1.489772e-05 \n", + "11 0 -1.969436e-05 \n", + "12 0 3.664811e-05 \n", + "13 0 -1.387779e-17 \n", + "14 0 0.000000e+00 \n", + "15 0 -1.387779e-17 \n", + "16 0 1.387779e-17 \n", + "17 0 2.081021e-05 \n", + "18 0 1.387779e-17 \n", + "19 0 -5.107940e-06 \n", + "20 0 1.387779e-17 \n", + "21 0 0.000000e+00 \n", + "22 0 -6.938894e-18 \n", + "23 0 0.000000e+00 \n", + "24 0 0.000000e+00 \n", + "25 0 6.491482e-06 \n", + "26 0 -6.938894e-18 \n", + "27 0 0.000000e+00 \n", + "28 0 -1.387779e-17 \n", + "29 0 1.387779e-17 \n", + "30 0 6.938894e-18 \n", + "31 0 -6.938894e-18 \n", + "32 0 2.775558e-17 \n", + "33 0 6.938894e-18 \n", + "34 0 -9.623747e-06 \n", + "35 0 -6.938894e-18 \n", + "36 0 0.000000e+00 \n", + "37 0 -1.387779e-17 \n", + "38 0 0.000000e+00 \n", + "39 0 -1.387779e-17 \n", + "40 0 -1.387779e-17 \n", + "41 0 1.387779e-17 \n", + "42 0 -1.387779e-17 \n", + "43 0 0.000000e+00 \n", + "44 0 0.000000e+00 \n", + "45 0 0.000000e+00 \n", + "46 0 -2.775558e-17 \n", + "47 0 -1.387779e-17 \n", + "48 0 0.000000e+00 \n", + "49 0 0.000000e+00 \n", + "50 0 -2.775558e-17 \n", + "\n", + " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 55 \n", + "5 1 30 \n", + "6 0 0 \n", + "7 0 0 \n", + "8 0 32 \n", + "9 0 1 \n", + "10 0 10 \n", + "11 0 19 \n", + "12 0 22 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 -1 33 \n", + "18 0 0 \n", + "19 0 3 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 150 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 8 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " seized_or_suspended_ticket_count_rank \\\n", + "ward \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "5 0 \n", + "6 0 \n", + "7 0 \n", + "8 0 \n", + "9 0 \n", + "10 0 \n", + "11 0 \n", + "12 0 \n", + "13 0 \n", + "14 0 \n", + "15 0 \n", + "16 0 \n", + "17 0 \n", + "18 0 \n", + "19 0 \n", + "20 0 \n", + "21 0 \n", + "22 0 \n", + "23 0 \n", + "24 0 \n", + "25 0 \n", + "26 0 \n", + "27 0 \n", + "28 0 \n", + "29 0 \n", + "30 0 \n", + "31 0 \n", + "32 0 \n", + "33 0 \n", + "34 0 \n", + "35 0 \n", + "36 0 \n", + "37 0 \n", + "38 0 \n", + "39 0 \n", + "40 0 \n", + "41 0 \n", + "42 0 \n", + "43 0 \n", + "44 0 \n", + "45 0 \n", + "46 0 \n", + "47 0 \n", + "48 0 \n", + "49 0 \n", + "50 0 \n", + "\n", + " seized_or_suspended_ticket_count_pct \\\n", + "ward \n", + "1 0.000000e+00 \n", + "2 0.000000e+00 \n", + "3 -5.551115e-17 \n", + "4 4.309093e-05 \n", + "5 3.373137e-05 \n", + "6 -5.551115e-17 \n", + "7 -5.551115e-17 \n", + "8 2.176421e-05 \n", + "9 -2.420732e-06 \n", + "10 3.568318e-06 \n", + "11 -9.706305e-07 \n", + "12 -5.351144e-05 \n", + "13 0.000000e+00 \n", + "14 0.000000e+00 \n", + "15 0.000000e+00 \n", + "16 0.000000e+00 \n", + "17 5.711644e-06 \n", + "18 0.000000e+00 \n", + "19 4.163711e-05 \n", + "20 0.000000e+00 \n", + "21 0.000000e+00 \n", + "22 0.000000e+00 \n", + "23 -5.551115e-17 \n", + "24 5.551115e-17 \n", + "25 1.417798e-04 \n", + "26 -2.775558e-17 \n", + "27 2.775558e-17 \n", + "28 0.000000e+00 \n", + "29 0.000000e+00 \n", + "30 -2.775558e-17 \n", + "31 -2.775558e-17 \n", + "32 0.000000e+00 \n", + "33 0.000000e+00 \n", + "34 -2.334788e-05 \n", + "35 0.000000e+00 \n", + "36 -5.551115e-17 \n", + "37 0.000000e+00 \n", + "38 -2.775558e-17 \n", + "39 0.000000e+00 \n", + "40 0.000000e+00 \n", + "41 0.000000e+00 \n", + "42 0.000000e+00 \n", + "43 1.387779e-17 \n", + "44 1.387779e-17 \n", + "45 0.000000e+00 \n", + "46 -2.775558e-17 \n", + "47 -1.387779e-17 \n", + "48 0.000000e+00 \n", + "49 -2.775558e-17 \n", + "50 2.775558e-17 \n", + "\n", + " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", + "ward \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 3 \n", + "5 0 2 \n", + "6 0 0 \n", + "7 0 0 \n", + "8 0 5 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", + "13 0 0 \n", + "14 0 0 \n", + "15 0 0 \n", + "16 0 0 \n", + "17 0 2 \n", + "18 0 0 \n", + "19 0 0 \n", + "20 0 0 \n", + "21 0 0 \n", + "22 0 0 \n", + "23 0 0 \n", + "24 0 0 \n", + "25 0 7 \n", + "26 0 0 \n", + "27 0 0 \n", + "28 0 0 \n", + "29 0 0 \n", + "30 0 0 \n", + "31 0 0 \n", + "32 0 0 \n", + "33 0 0 \n", + "34 0 3 \n", + "35 0 0 \n", + "36 0 0 \n", + "37 0 0 \n", + "38 0 0 \n", + "39 0 0 \n", + "40 0 0 \n", + "41 0 0 \n", + "42 0 0 \n", + "43 0 0 \n", + "44 0 0 \n", + "45 0 0 \n", + "46 0 0 \n", + "47 0 0 \n", + "48 0 0 \n", + "49 0 0 \n", + "50 0 0 \n", + "\n", + " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", + "ward \n", + "1 0 -4.336809e-19 \n", + "2 0 0.000000e+00 \n", + "3 0 0.000000e+00 \n", + "4 0 1.350616e-06 \n", + "5 0 9.448280e-07 \n", + "6 0 0.000000e+00 \n", + "7 0 -1.387779e-17 \n", + "8 0 1.523846e-05 \n", + "9 0 -1.046434e-06 \n", + "10 0 -8.025930e-06 \n", + "11 0 -3.785910e-06 \n", + "12 0 -5.334059e-06 \n", + "13 0 0.000000e+00 \n", + "14 0 -8.673617e-19 \n", + "15 0 3.469447e-18 \n", + "16 0 0.000000e+00 \n", + "17 0 -6.011613e-06 \n", + "18 0 -3.469447e-18 \n", + "19 0 -9.472085e-07 \n", + "20 0 0.000000e+00 \n", + "21 0 0.000000e+00 \n", + "22 0 -8.673617e-19 \n", + "23 0 -8.673617e-19 \n", + "24 0 0.000000e+00 \n", + "25 0 8.529681e-06 \n", + "26 0 -1.734723e-18 \n", + "27 0 -3.469447e-18 \n", + "28 0 6.938894e-18 \n", + "29 0 0.000000e+00 \n", + "30 0 -8.673617e-19 \n", + "31 0 1.734723e-18 \n", + "32 0 0.000000e+00 \n", + "33 0 8.673617e-19 \n", + "34 0 1.698528e-05 \n", + "35 0 0.000000e+00 \n", + "36 0 0.000000e+00 \n", + "37 0 6.938894e-18 \n", + "38 0 0.000000e+00 \n", + "39 0 0.000000e+00 \n", + "40 0 0.000000e+00 \n", + "41 0 8.673617e-19 \n", + "42 0 0.000000e+00 \n", + "43 0 0.000000e+00 \n", + "44 0 -4.336809e-19 \n", + "45 0 0.000000e+00 \n", + "46 0 8.673617e-19 \n", + "47 0 0.000000e+00 \n", + "48 0 0.000000e+00 \n", + "49 0 0.000000e+00 \n", + "50 0 -8.673617e-19 \n", + "\n", + " bankruptcy_ticket_count_pct_rank \n", + "ward \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "5 0 \n", + "6 0 \n", + "7 0 \n", + "8 0 \n", + "9 0 \n", + "10 0 \n", + "11 0 \n", + "12 0 \n", + "13 0 \n", + "14 0 \n", + "15 0 \n", + "16 0 \n", + "17 0 \n", + "18 0 \n", + "19 0 \n", + "20 0 \n", + "21 0 \n", + "22 0 \n", + "23 0 \n", + "24 0 \n", + "25 0 \n", + "26 0 \n", + "27 0 \n", + "28 0 \n", + "29 0 \n", + "30 0 \n", + "31 0 \n", + "32 0 \n", + "33 0 \n", + "34 0 \n", + "35 0 \n", + "36 0 \n", + "37 0 \n", + "38 0 \n", + "39 0 \n", + "40 0 \n", + "41 0 \n", + "42 0 \n", + "43 0 \n", + "44 0 \n", + "45 0 \n", + "46 0 \n", + "47 0 \n", + "48 0 \n", + "49 0 \n", + "50 0 " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wardstotals5yr_sql_minus_pandas" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
5yr_ticket_count_identicalall_yr_ticket_count_identical
ward
1TrueTrue
2TrueTrue
3TrueFalse
4FalseFalse
5FalseFalse
6TrueTrue
7TrueFalse
8FalseFalse
9FalseFalse
10FalseFalse
11FalseFalse
12FalseFalse
13TrueTrue
14TrueTrue
15TrueTrue
16TrueTrue
17FalseFalse
18TrueTrue
19FalseFalse
20TrueTrue
21TrueTrue
22TrueTrue
23TrueTrue
24TrueTrue
25FalseFalse
26TrueTrue
27TrueTrue
28TrueTrue
29TrueTrue
30TrueTrue
31TrueTrue
32TrueTrue
33TrueTrue
34FalseFalse
35TrueTrue
36TrueTrue
37TrueTrue
38TrueTrue
39TrueTrue
40TrueTrue
41TrueTrue
42TrueTrue
43TrueTrue
44TrueTrue
45TrueTrue
46TrueTrue
47TrueTrue
48TrueTrue
49TrueTrue
50TrueTrue
\n", + "
" + ], + "text/plain": [ + " 5yr_ticket_count_identical all_yr_ticket_count_identical\n", + "ward \n", + "1 True True\n", + "2 True True\n", + "3 True False\n", + "4 False False\n", + "5 False False\n", + "6 True True\n", + "7 True False\n", + "8 False False\n", + "9 False False\n", + "10 False False\n", + "11 False False\n", + "12 False False\n", + "13 True True\n", + "14 True True\n", + "15 True True\n", + "16 True True\n", + "17 False False\n", + "18 True True\n", + "19 False False\n", + "20 True True\n", + "21 True True\n", + "22 True True\n", + "23 True True\n", + "24 True True\n", + "25 False False\n", + "26 True True\n", + "27 True True\n", + "28 True True\n", + "29 True True\n", + "30 True True\n", + "31 True True\n", + "32 True True\n", + "33 True True\n", + "34 False False\n", + "35 True True\n", + "36 True True\n", + "37 True True\n", + "38 True True\n", + "39 True True\n", + "40 True True\n", + "41 True True\n", + "42 True True\n", + "43 True True\n", + "44 True True\n", + "45 True True\n", + "46 True True\n", + "47 True True\n", + "48 True True\n", + "49 True True\n", + "50 True True" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_compare = pd.DataFrame()\n", + "df_compare['5yr_ticket_count_identical'] = ~wardstotals5yr_sql_minus_pandas['ticket_count'].astype(bool)\n", + "df_compare['all_yr_ticket_count_identical'] = ~wardstotals_sql_minus_pandas['ticket_count'].astype(bool)\n", + "df_compare" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# df_full_compare = pd.DataFrame()\n", + "# columns = df_1996to2018.columns.tolist()\n", + "# for column in columns:\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "wardstotals5yr_sql_minus_pandas.to_csv('./wardstotals5yr_sql_minus_pandas.csv')\n", + "wardstotals_sql_minus_pandas.to_csv('./wardstotals_sql_minus_pandas.csv')\n", + "df_compare.to_csv('./ticket_count_identical.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "%%time\n", + "# check out ward 7\n", + "df_filtered_check = df[\n", + " (df['year'] > 1995) & (df['year'] < 2019) & \n", + " (df['geocode_accuracy_type'].isin(['rooftop', 'range_interpolation', 'intersection', 'point'])) & \n", + " (df['geocoded_city'] == 'Chicago')\n", + "]\n", + "df_filtered_check = df_filtered_check[df_filtered_check['ward'].notnull()]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "679371" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "((df['geocoded_city'] != 'Chicago') & (df['ward'].notnull())).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/bulletproof/df_1996to2018.csv b/bulletproof/df_1996to2018.csv new file mode 100644 index 0000000..a53fa50 --- /dev/null +++ b/bulletproof/df_1996to2018.csv @@ -0,0 +1,51 @@ +ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank +1,1720717,8,39402474.29997046,16,100835215,8,92243562.2200177,6,58.600696686323204,38,0.7006938048302891,7,598783,14,0.3479845901446897,48,120036,8,0.06975929220202974,35,1184804,6,0.6885525045664104,6,110457,8,0.06419242676163484,40,392455,7,0.22807643557888949,41,5904,25,0.0034311278379884663,38 +2,2081261,3,34313927.60998574,24,117298610,4,109396506.74001777,3,56.359394617013436,46,0.7612286973789604,4,825312,5,0.3965442104570258,46,179269,4,0.08613480000826422,15,1482622,4,0.7123671658672315,5,175963,4,0.08454633993526041,13,388546,8,0.18668778207058126,47,7169,21,0.003444546359154378,37 +3,1189111,12,43156139.909971036,12,73217160,10,61897168.84998397,12,61.57302388086562,30,0.5891977090547231,29,764735,7,0.6431148984409362,10,104479,11,0.08786311790909343,10,705441,13,0.5932507562372226,28,102294,10,0.08602561072936,11,405934,6,0.34137603638348313,15,16634,13,0.013988601568734962,16 +4,1783330,6,46194765.82997957,9,101895980,7,90883361.90001214,7,57.138039510354226,45,0.6630041087154965,14,1054462,2,0.5912882080153421,20,171359,5,0.09608933848474484,5,1121035,8,0.6286189319980038,19,179054,3,0.10040429982112116,2,510207,4,0.28609791794003353,26,16886,12,0.009468802745425692,20 +5,1082520,16,39552581.469974294,15,68784395,13,59158850.5799856,14,63.54099231422976,24,0.5993110357272913,25,491319,23,0.4538659793814433,39,89974,15,0.08311532350441563,21,652664,18,0.6029117244946975,26,93870,13,0.08671433322248087,10,369375,13,0.34121771422237,16,17008,11,0.015711488009459408,15 +6,842531,23,49857871.219960466,7,60035045,19,46647796.01998675,21,71.25559178237953,7,0.4833684627453415,42,554230,17,0.657815558121897,8,64166,21,0.0761586220566365,29,429791,27,0.5101189155057796,41,66988,19,0.07950805370959645,25,379870,11,0.45086768320690873,6,21722,5,0.025781840668177194,5 +7,605630,37,36191215.48997564,21,42136265,37,31078552.229994938,39,69.57426976867065,11,0.46199880397042836,45,326201,37,0.5386143354853623,26,47757,33,0.0788550765318759,28,288880,40,0.4769909020358965,47,51773,31,0.0854861879365289,12,284753,25,0.4701765104106468,2,14864,14,0.02454303782837706,8 +8,644121,36,34588724.14998378,23,44527970,34,35389518.18999399,35,69.12982188129249,14,0.5057217358798446,37,332850,36,0.5167507347222028,28,53974,25,0.08379481494936511,18,337851,37,0.5245148038955414,39,56929,26,0.0883824623013378,7,279581,26,0.43405043462330833,11,14843,15,0.023043806986575505,9 +9,426441,43,24561964.109995287,36,30701615,42,23855443.039998736,44,71.9949887557716,6,0.49270385268868494,41,259990,42,0.6096740229011751,16,35715,39,0.08375132785074606,19,217448,43,0.5099134464087647,42,35801,42,0.08395299701482738,15,182461,38,0.4278692714818697,12,9726,18,0.022807375463428703,11 +10,378418,45,17515544.920004107,43,24896580,45,19158495.50000064,45,65.7912150056287,19,0.5223993669797607,35,220513,45,0.5827233376847825,21,26702,46,0.07056218256002622,33,204468,45,0.5403231347346057,35,28663,45,0.07574428277724632,31,123742,43,0.32699818718982715,17,4141,30,0.010942925547939051,18 +11,691235,34,18569295.469999447,40,43755585,36,38527960.08999556,32,63.30059241791865,25,0.6747777929450963,12,300860,40,0.43524995117434734,41,64437,20,0.0932201060420841,6,460070,25,0.6655768298769593,10,57398,25,0.0830368832596729,19,164786,39,0.23839359986111813,36,3852,32,0.005572634487547651,25 +12,829417,25,34209373.24997883,25,51824585,30,40905144.81999117,26,62.4831478014075,26,0.544570422217015,34,414357,31,0.4995762083487558,34,39293,38,0.04737423997820155,47,473805,23,0.5712506495526376,32,41052,36,0.04949500673364544,47,245282,27,0.29572820426878155,23,3858,31,0.004651460001422686,29 +13,315842,47,11406965.550002372,47,22074815,46,18754217.11000107,46,69.89195547140659,10,0.6217997921835778,21,139329,47,0.44113512452428744,40,25600,47,0.08105318482025824,27,197213,47,0.6244039741389682,21,23633,47,0.07482538737723292,33,78192,47,0.24756682138537622,33,1280,48,0.004052659241012911,34 +14,654187,35,27332523.519991275,31,44167570,35,33849359.00999585,36,67.51520589678486,16,0.553257886326156,32,309904,39,0.47372387406047506,38,30127,43,0.04605258129556228,48,371205,33,0.5674294964589636,33,31640,43,0.04836537564947026,49,163766,40,0.25033514881830427,32,1830,45,0.002797365279346731,44 +15,792182,29,38148693.42997505,19,52100545,28,38410743.74999296,33,65.76840296800482,20,0.5017114174925419,38,447352,29,0.5647086149394962,23,34253,41,0.04323880118457627,49,425433,28,0.537039468203014,37,38860,38,0.04905438396732064,48,244233,29,0.30830415232863156,20,6185,24,0.0078075492752927985,22 +16,819022,26,51120763.21995334,5,57324405,22,41399119.65998942,24,69.99128839029964,9,0.4474618684257356,48,553810,18,0.6761845225158787,7,49500,32,0.06043793695407449,43,393370,30,0.48029234867927845,45,54103,30,0.06605805460659177,39,369270,14,0.45086700967739574,7,18066,10,0.02205801553560222,12 +17,716216,33,44384055.58996508,10,52025285,29,39102421.52999009,30,72.63909909859595,5,0.4683683259722037,44,466024,27,0.6506752152981782,9,52588,28,0.07342477688295151,32,355350,35,0.4961492063846661,44,55031,28,0.07683575904475745,30,322208,20,0.44987545656617556,8,18398,9,0.025687781339707574,6 +18,254129,48,12535716.680003105,46,18460130,48,15128928.51000179,48,72.64078479827174,4,0.5468686985173337,33,135763,48,0.5342286791353997,27,21021,49,0.08271783228202999,24,140768,49,0.5539234011073116,34,20948,48,0.08243057659692518,21,91415,46,0.3597188829295358,14,4445,29,0.017491116716313367,14 +19,226082,49,7715440.7200008575,49,16108530,49,14535591.68000123,49,71.25082934510488,8,0.6532547083073712,19,134520,49,0.5950053520404102,18,24932,48,0.11027857149175962,1,146118,48,0.6463053228474624,14,20838,49,0.09217009757521608,4,63894,49,0.2826142726975168,27,2422,40,0.010712927168018683,19 +20,807223,28,50466651.229951195,6,56077265,24,40496725.99998734,29,69.46935976799472,12,0.44519813614240744,49,565520,16,0.7005746863010593,3,56235,24,0.06966476425969031,36,386617,31,0.4789469576560628,46,60862,22,0.07539676148969987,32,362913,15,0.4495820857433448,9,18452,8,0.022858615277314944,10 +21,543507,39,32661825.159984704,26,41186675,38,32133231.12999481,37,75.77947478137357,2,0.4959210311692279,39,369404,32,0.6796674191868733,6,50068,30,0.09212024868124974,7,279188,42,0.5136787566673474,40,50308,32,0.09256182533067651,3,236714,32,0.4355307291350433,10,13619,16,0.025057634952263725,7 +22,876420,21,39580494.77997866,14,56151285,23,40966683.27999467,25,64.06892243444923,23,0.5086048234922885,36,422244,30,0.48178270692133907,37,32951,42,0.037597270714954015,50,473402,24,0.5401542639373816,36,38040,40,0.04340384747039091,50,238335,31,0.27194153488053674,30,3752,34,0.004281052463430775,33 +23,586017,38,18173351.940002423,42,38360925,39,31391524.139996577,38,65.46043032881299,21,0.6333421289973536,20,367245,33,0.626679772088523,13,49687,31,0.08478764267930794,17,366692,34,0.6257361134574594,20,48924,33,0.08348563266935942,16,116541,44,0.19886965736488874,45,1946,44,0.0033207227776668596,39 +24,850825,22,54016226.63994311,4,58368400,21,40711876.839988574,27,68.60212147033761,15,0.4297761207540005,50,582309,15,0.6844051361913437,5,53356,26,0.06271089824582024,40,393607,29,0.46261804718949256,50,57634,24,0.06773895924543825,38,386594,10,0.45437545911321364,5,22217,4,0.02611230276496342,3 +25,1721025,7,42756201.2899784,13,102304320,6,90569396.96001321,8,59.4438314376607,34,0.6793098860894773,10,741134,8,0.4306352319112157,42,127142,7,0.07387574265336064,31,1159828,7,0.6739169971383333,7,120246,7,0.0698688281692596,37,388347,9,0.225648668671286,42,8099,20,0.004705916532299066,28 +26,1026314,20,38879819.799968965,17,62721350,17,50899356.42998677,18,61.11321681278829,31,0.5669394459536562,31,496593,22,0.4838606898083822,36,59289,23,0.05776886995597839,45,588942,20,0.5738419236218155,31,60729,23,0.059171949325450106,44,322327,19,0.3140627527247996,19,6946,22,0.006767909236354566,23 +27,2018335,5,63993308.24995648,3,118210330,3,100223190.44002998,5,58.56824065380623,39,0.6103113343637582,22,1040898,3,0.5157211265721499,30,168212,6,0.08334196255824727,20,1230204,5,0.6095142778577392,24,170001,5,0.08422833672309106,14,620081,2,0.3072240237621604,21,24628,3,0.012202136909878687,17 +28,1354565,9,70656556.79996628,2,90610825,9,68833300.38998266,9,66.89293241741814,18,0.4934645556074346,40,828746,4,0.6118170778072666,15,101476,12,0.07491408681015677,30,718179,12,0.5301916113290983,38,106171,9,0.07838014417912761,29,539373,3,0.39818908653331514,13,29748,1,0.021961293847102208,13 +29,756302,30,44367030.999965906,11,52437515,27,40509148.70998941,28,69.33409537459903,13,0.4772734688156329,43,477311,26,0.6311116458769116,12,52596,27,0.06954364790784634,37,382014,32,0.5051077479631153,43,55847,27,0.07384219531351233,35,358012,16,0.47337174832275997,1,21505,6,0.02843440847703695,1 +30,724676,32,24805137.46999312,34,45268890,33,37949667.34999395,34,62.467764904591846,27,0.6047292706726287,24,362755,34,0.5005754295712843,33,45167,35,0.0623271641395603,41,446214,26,0.6157427595228764,22,43734,35,0.06034972870634601,43,194945,36,0.2690098747578228,31,2498,39,0.003447057719587788,36 +31,816381,27,28928912.72998785,28,50708720,31,42606133.019991554,22,62.11403744085176,29,0.5955980397203258,27,350487,35,0.4293179287612034,43,46398,34,0.05683375776751296,46,498632,22,0.6107834454746007,23,45477,34,0.05570560804330331,46,233921,33,0.28653410601177637,25,3635,35,0.004452577901739506,32 +32,1099169,15,20204816.649998605,39,65082795,16,60947934.38998967,13,59.21090842263565,36,0.7510273355977467,5,453655,28,0.4127254316670139,45,91317,14,0.08307821636163319,22,784444,11,0.7136700543774434,4,87672,14,0.07976207480378358,24,215369,34,0.1959380222695509,46,2422,40,0.002203482812925037,47 +33,1050654,17,32177662.129978403,27,60318910,18,49939312.25999141,19,57.4108222116891,44,0.6081484690708631,23,523115,19,0.4978946446689395,35,63967,22,0.06088303095024623,42,637366,19,0.6066373896639616,25,64088,21,0.06099819731329248,42,285781,24,0.27200296196464296,29,3457,36,0.0032903315458752357,40 +34,424789,44,28861919.01998868,29,32490795,40,24130178.39999829,43,76.48690290944445,1,0.45535428063462796,46,323163,38,0.7607612249846394,1,35022,40,0.08244563771660754,25,200786,46,0.4726723149610748,48,37158,41,0.087474016511727,8,195123,35,0.4593409904682089,4,10983,17,0.025855189282208344,4 +35,1141752,14,37529170.429975085,20,66358735,15,55296182.20998935,15,58.120095257113626,40,0.595701288897474,26,479322,25,0.4198127088894961,44,66862,19,0.058560878369383194,44,684875,14,0.5998456757684681,27,66751,20,0.05846365935859977,45,339313,18,0.29718625410772215,22,4585,28,0.004015758238216355,35 +36,473826,42,18551615.240002327,41,31978895,41,25698493.599998236,41,67.49079830992812,17,0.5807554890524402,30,238759,44,0.5038959449249303,31,29982,44,0.06327639259981513,39,280241,41,0.5914428503290238,29,29978,44,0.06326795068231798,41,131144,41,0.2767767070612419,28,2132,43,0.00449954202597578,31 +37,734715,31,47038882.29995837,8,53682425,26,38883133.95999117,31,73.06564450160947,3,0.45253982218426597,47,508031,21,0.6914667592195614,4,51339,29,0.06987607439619445,34,347111,36,0.47244305615102455,49,54353,29,0.07397834534479356,34,340339,17,0.4632258767004893,3,19850,7,0.0270172788087898,2 +38,338755,46,9475390.260001702,48,21045140,47,18162118.300001033,47,62.12495756520199,28,0.6571546874628714,16,193668,46,0.5717052146831781,22,27821,45,0.08212720107452288,26,216416,44,0.6388569910407227,16,26880,46,0.07934938229694026,26,78006,48,0.2302726159023483,40,1095,49,0.003232424613658839,42 +39,489431,41,12737420.350002725,45,29627010,44,25690237.87999872,42,60.53357878842983,32,0.6685350880929221,13,264550,41,0.5405256307835017,25,43295,36,0.08845986461830166,9,317324,39,0.6483528832460551,13,38707,39,0.07908571381869968,27,113241,45,0.2313727573447534,38,1369,47,0.002797125641816722,45 +40,1035475,19,24739246.769992094,35,60002300,20,52325994.639990866,17,57.9466428450711,43,0.6789830756724601,11,629109,12,0.6075559525821483,17,93797,13,0.09058354861295541,8,682688,15,0.6592993553683092,11,85430,16,0.08250319901494484,20,244927,28,0.23653588932615466,37,3172,38,0.0030633284241531663,43 +41,190452,50,4843758.249999882,50,12343790,50,10815886.390000423,50,64.81312876735345,22,0.690685302166615,9,120622,50,0.6333459349337366,11,19435,50,0.10204670993216139,3,126909,50,0.6663568773234201,9,17291,50,0.0907892802385903,5,40192,50,0.21103480141978032,43,531,50,0.0027881040892193307,46 +42,5077427,1,101966164.24014544,1,294340445,1,258115422.80998263,1,57.97039425677612,42,0.7168248310737687,6,2619523,1,0.5159154429989835,29,510645,1,0.10057160841504958,4,3299829,1,0.6499018105036272,12,543810,1,0.10710346007928818,1,1046913,1,0.2061896704767986,44,27439,2,0.005404115115786008,26 +43,2070786,4,26186850.899989843,32,114324850,5,108623925.9600239,4,55.20843293319542,48,0.8057510570747469,1,649644,11,0.3137185590399008,49,181143,3,0.08747548032486216,11,1551715,3,0.7493362423736687,1,168445,6,0.0813435091796062,22,317188,21,0.1531727566247792,50,3422,37,0.0016525126208116144,50 +44,2557809,2,35163836.03998071,22,139465885,2,130911821.00004211,2,54.52552751202298,49,0.7882661633456219,2,650191,10,0.25419841747370503,50,222787,2,0.08710071784093339,13,1889004,2,0.7385242604119385,2,221904,2,0.08675550050844297,9,417234,5,0.16312164043523186,49,4767,27,0.0018637044439205586,48 +45,506116,40,13315767.51000343,44,29975170,43,26014386.30999912,40,59.225888926649226,35,0.6614361700454044,15,254672,43,0.5031889922468367,32,43204,37,0.08536382963589374,16,324662,38,0.6414774478578034,15,40439,37,0.0799006551857677,23,124336,42,0.24566700124082227,34,1664,46,0.003287783828213295,41 +46,1229482,11,28270492.499986622,30,72470365,11,64714135.51998986,11,58.943819429645984,37,0.6959659558576382,8,667016,9,0.5425179059148487,24,107025,10,0.08704885472093125,14,826936,10,0.672588943961766,8,102210,11,0.08313257127798536,17,298955,23,0.2431552474944733,35,6450,23,0.005246111777154932,27 +47,1285899,10,20694283.699998386,38,71657255,12,67405310.75999165,10,55.72541467098116,47,0.76510353053445,3,491125,24,0.38193124032291803,47,112251,9,0.08729379212519801,12,935361,9,0.7273984970825857,3,100829,12,0.07841129046682516,28,238421,30,0.18541191804333,48,2331,42,0.0018127395697484796,49 +48,1037712,18,25479218.03998718,33,55554350,25,48257687.71999503,20,53.535422159520174,50,0.6544577267328863,17,614124,13,0.5918058189555484,19,86069,16,0.0829411243196571,23,658627,17,0.6346915136376953,18,86192,15,0.08305965431641919,18,299783,22,0.2888884391815841,24,5903,26,0.005688476186070894,24 +49,1155988,13,38293233.87997334,18,67178040,14,55264687.87998925,16,58.11309459959792,41,0.5907002511425961,28,817081,6,0.7068248113302215,2,78215,18,0.06766073696266743,38,673486,16,0.5826063938379983,30,81890,17,0.0708398357076371,36,371212,12,0.3211209804946072,18,9235,19,0.007988837254365963,21 +50,834795,24,22067327.219997916,37,49743695,32,41646277.3499947,23,59.58791679394342,33,0.6536481122213726,18,512058,20,0.6133937074371553,14,85532,17,0.10245868746219132,2,532864,21,0.6383171916458532,17,75470,18,0.09040542887774843,6,192806,37,0.23096209248977295,39,3843,33,0.0046035254164196,30 diff --git a/bulletproof/df_2013to2017.csv b/bulletproof/df_2013to2017.csv new file mode 100644 index 0000000..687411d --- /dev/null +++ b/bulletproof/df_2013to2017.csv @@ -0,0 +1,51 @@ +ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank +1,423120,5,8875342.4300019,24,30520260,6,28610635.009996008,5,72.13145207033466,48,0.7632356674116806,6,74299,28,0.17559793911892607,47,36764,9,0.08688788050671205,39,330507,5,0.7811188315371526,4,27514,9,0.06502647003214218,41,56955,18,0.13460720363017584,44,1586,25,0.0037483456229911137,37 +2,455095,3,8484861.23999967,26,33039930,4,30311415.33000024,3,72.60007251233259,47,0.7812970215146683,5,99033,14,0.21760951010228632,44,47362,4,0.1040705786703875,30,346824,3,0.7620914314593656,6,40360,3,0.08868478010085806,17,55104,19,0.12108241136466012,46,1826,22,0.0040123490699744005,35 +3,302444,10,14677878.020004565,15,23925780,10,19120819.400000434,10,79.10813241459576,34,0.5657265178711613,30,121799,10,0.40271587467431985,24,37159,8,0.12286241419899221,6,189630,10,0.626992104323445,31,29240,8,0.09667905463490761,5,75971,11,0.251190302998241,18,5330,15,0.017623097168401422,17 +4,318959,8,12229403.350001939,17,25149195,9,21527035.139998876,8,78.84773591590141,35,0.6377164210132985,22,91546,18,0.287014945494562,38,37770,7,0.11841647359064958,9,213101,8,0.6681140836283034,23,29737,7,0.09323141845817173,8,68881,13,0.2159556557425876,23,4290,17,0.013450004546038832,20 +5,252692,12,14884609.94000457,14,21604550,11,16863534.67000217,12,85.49756224969528,22,0.5311659902382746,33,91029,19,0.36023696832507557,31,28711,11,0.1136205340889304,11,152259,15,0.6025477656593798,33,22034,11,0.08719706203599639,21,73328,12,0.2901872635461352,15,6014,11,0.02379972456587466,15 +6,203418,21,21274015.739997353,5,19595595,14,11971217.600001838,23,96.33166681414625,11,0.3600882411494041,45,145500,5,0.7152759342831018,6,21574,18,0.10605747770600439,23,86155,32,0.4235367568258463,47,17553,17,0.08629029879361709,24,90170,6,0.4432744398234178,3,8718,3,0.04285756422735451,4 +7,142450,39,15294881.310005259,12,13945980,35,8225866.560001107,39,97.9008775008775,7,0.3497281041174172,48,84193,22,0.5910354510354511,13,15958,31,0.11202527202527203,14,58594,42,0.4113302913302913,49,12883,30,0.09043875043875044,14,63034,17,0.4424991224991225,4,5610,14,0.039382239382239385,8 +8,152634,36,15048934.120004617,13,14817615,30,9418653.710001228,38,97.07938598215338,9,0.3849441054606394,39,92108,17,0.6034566348257924,11,18032,26,0.11813881572912982,10,68082,40,0.44604740752388067,40,14636,26,0.09588951347668279,7,63435,15,0.41560202838161875,12,5913,12,0.038739730335311924,9 +9,107925,42,10878459.890002616,20,10442210,41,6593760.710000367,44,96.75432012971972,10,0.377385385690428,42,74040,29,0.6860319666435024,8,11928,37,0.11052119527449618,17,46914,46,0.4346907574704656,44,9697,37,0.08984943247625667,15,45374,24,0.42042158906648136,11,4063,18,0.03764651378271948,10 +10,86795,45,6307718.490000606,32,7930680,45,5653688.850000168,46,91.37254450141137,16,0.4726608407602146,36,46953,41,0.5409643412638977,17,8255,45,0.09510916527449738,35,48705,45,0.5611498358200357,36,6909,45,0.07960135952531829,33,24737,40,0.285004896595426,16,1779,23,0.020496572383201798,16 +11,185986,22,5526754.570000289,35,14374525,32,12723034.400000973,21,77.28820986525868,38,0.6971606313319519,14,50721,40,0.27271407525297603,41,20576,19,0.11063198305248782,16,136333,20,0.7330282924521201,12,15364,21,0.08260836837181293,29,30490,34,0.1639370705321906,33,1120,32,0.006021958642048326,28 +12,168495,32,9062659.410001606,23,14291905,33,11509052.74000088,25,84.8209442416689,23,0.5594601293310186,31,62870,33,0.37312679901480755,30,11548,39,0.06853615834297754,47,109336,25,0.6488975934003977,27,8978,39,0.053283480221965045,47,40838,25,0.24236920976883586,20,1184,29,0.007026914745244666,25 +13,83126,46,4005094.079999731,42,7458395,46,6039951.6300001815,45,89.72397324543464,17,0.6012866247076774,26,28907,48,0.34774920000962395,32,7761,46,0.09336429035440175,37,53565,43,0.6443832254649569,28,5866,46,0.07056757211943315,40,15752,46,0.18949546471621395,28,369,45,0.004439044342323701,34 +14,163484,34,8711851.920001322,25,14477660,31,10923127.660000758,33,88.55704533777006,19,0.5563096012142428,32,64192,32,0.39265004526436836,27,9052,43,0.055369332778742876,49,98467,28,0.6023035893420763,34,7081,44,0.043313107093048864,49,30693,33,0.1877431430598713,29,524,42,0.0032052066257248417,41 +15,176710,30,11919359.480002612,18,15718650,26,11301877.840000974,28,88.95167223133949,18,0.48670437687078555,35,95557,15,0.5407560409710825,18,10953,40,0.06198290985230038,48,102375,27,0.5793390300492333,35,9094,38,0.051462848735215894,48,47093,23,0.26649878331729954,17,2054,20,0.01162356403146398,21 +16,180960,26,19329711.040000282,7,17894615,19,10959581.510001421,32,98.88712975243148,5,0.36183022406050896,44,137418,8,0.7593832891246685,3,16116,30,0.08905835543766578,38,79887,34,0.44146220159151195,41,12926,29,0.07143015030946065,39,77247,9,0.42687334217506634,9,5818,13,0.03215075154730327,13 +17,174634,31,19059889.2000015,9,17573835,20,10613442.410001637,34,100.63237971987127,3,0.35767612984932756,47,125668,9,0.7196078655931835,5,18656,23,0.10682913980095514,21,74056,36,0.4240640425117675,46,15225,23,0.08718233562765555,22,76557,10,0.4383854232280083,6,7297,8,0.041784532221675046,5 +18,67538,48,5366924.690000207,36,6557875,47,4658677.129999927,48,97.09904054014036,8,0.46467805261388934,37,33328,45,0.49347034262193135,20,7276,47,0.10773194349847494,20,35226,48,0.5215730403624627,37,5700,47,0.08439693209748586,27,21407,43,0.3169623027036631,14,1857,21,0.027495632088601972,14 +19,54037,49,3041397.5799997845,48,5095785,49,4256466.17999988,49,94.30177470992098,15,0.5832482381118164,28,31425,46,0.581545977755982,14,6666,49,0.12335992005477728,5,34346,49,0.6356015322834354,30,4972,49,0.09201102947980087,11,13508,48,0.2499768677017599,19,922,34,0.01706238318189389,18 +20,215139,16,22035401.829996683,4,20395455,12,12379069.660002021,22,94.80129125820982,12,0.3597053542896784,46,157945,4,0.7341532683520886,4,22614,16,0.10511343828873426,28,93815,30,0.43606691487828797,42,18968,16,0.08816625530470998,18,94286,5,0.43825619715625713,7,7474,6,0.03474033066993897,12 +21,146967,38,15494269.340005197,11,15166580,27,9605733.15000139,37,103.19718031939142,2,0.3826984939075545,40,103734,13,0.7058319214517544,7,18310,24,0.12458579136813026,4,63914,41,0.4348867432825056,43,14664,25,0.09977750107166915,3,63115,16,0.4294501486728313,8,6046,10,0.041138486871202376,6 +22,178028,28,10069360.79000203,21,14870870,29,11160900.090000724,29,83.53107376367763,25,0.5257071570191312,34,73718,30,0.41408093108949157,22,9324,42,0.05237378389916193,50,109144,26,0.6130721010178174,32,7397,43,0.041549643876244186,50,39126,27,0.2197744175073584,22,1273,27,0.00715056058597524,24 +23,147537,37,5661258.230000254,34,12086345,39,9709988.760000717,36,81.9207724164108,28,0.6316981807863139,23,84000,23,0.5693487057483886,15,14185,33,0.09614537370286776,34,98409,29,0.6670123426665854,24,12221,32,0.08283345872560781,28,20770,44,0.1407782454570718,43,437,43,0.0029619688620481643,44 +24,210131,18,23100283.559994478,3,19847895,13,11417340.850001644,26,94.45486387063308,13,0.3307684420685464,50,138921,7,0.6611161608710756,10,18255,25,0.08687437836397295,40,88325,31,0.42033303034773545,48,15085,24,0.07178855095154928,38,97201,4,0.46257334710252174,2,9018,2,0.042916085679885405,3 +25,442655,4,11062895.210001348,19,32567975,5,29388953.7499972,4,73.57417175904486,45,0.7265169455927448,11,79298,25,0.17914176954964928,46,41500,6,0.09375247088590437,36,331699,4,0.7493397792863516,8,35964,5,0.08124611717929313,30,66519,14,0.15027278580384273,37,2457,19,0.005550598095582338,31 +26,226812,14,9987974.60000251,22,18184610,17,14823534.400001679,15,80.17481438371867,32,0.5974459030282752,27,74488,27,0.32841295874997795,34,17125,28,0.0755030598028323,45,150550,17,0.6637655855951184,25,13273,27,0.05851983140221858,44,48617,22,0.21434932895966705,24,1729,24,0.007623053453961872,22 +27,417998,6,19636563.040000126,6,34127255,3,27227027.189995993,6,81.64454136144192,29,0.5809846632827698,29,163333,3,0.3907506734481983,28,49808,3,0.11915846487303768,8,269176,7,0.6439648036593476,29,38938,4,0.09315355575864,9,97251,3,0.23265900793783703,21,7043,9,0.016849362915612037,19 +28,316065,9,28884829.31998673,1,29826215,7,19156229.0200007,9,94.36734532453768,14,0.39874702352374763,38,187944,1,0.594637179061269,12,33385,10,0.10562700710296932,25,159462,13,0.5045228038536377,38,26798,10,0.08478635723664436,26,118635,2,0.37535000711878885,13,11204,1,0.035448404600319554,11 +29,178039,27,18032288.230002873,10,17479075,21,11117463.610001434,30,98.17554019063239,6,0.38139136384496203,41,118452,11,0.66531490291453,9,18725,22,0.10517358556271379,27,81025,33,0.45509691696763066,39,15668,20,0.08800319031223496,19,78182,7,0.4391285055521543,5,8099,4,0.0454900330826392,1 +30,165844,33,6473144.330000679,31,13645955,36,11751926.580000898,24,82.2818733267408,26,0.6448219948242649,21,51499,38,0.31052676008779334,35,13436,35,0.08101589445503003,42,115570,24,0.6968596994766166,20,10077,36,0.06076192084127252,43,31472,32,0.18976869829478304,27,665,38,0.0040097923349653895,36 +31,183242,25,7876282.990001364,28,15044270,28,12785113.270001236,20,82.10055554949193,27,0.6187923172816409,24,56659,35,0.30920313028672464,36,13718,34,0.07486274980626713,46,125857,21,0.6868348959299724,22,10352,35,0.05649359862913524,46,38705,28,0.2112234094803593,25,1242,28,0.00677792209209679,27 +32,226608,15,3888103.9699996435,43,17218205,22,16109878.360001098,13,75.98233513379934,41,0.8055751872444273,4,50958,39,0.22487290828214362,43,21886,17,0.0965808797571136,33,177439,12,0.7830217821083104,3,19925,14,0.0879271693850173,20,24806,39,0.10946656781755278,47,398,44,0.0017563369342653392,49 +33,183762,23,5262403.940000159,38,14178250,34,12846569.080000956,19,77.15550549079788,39,0.7094035131540644,12,51808,36,0.2819298875719681,40,14832,32,0.08071309628758938,43,137173,19,0.7464709787660125,10,10597,34,0.05766698229231288,45,28949,35,0.15753529021233986,34,570,40,0.0031018382472981355,42 +34,117784,40,14007075.480004488,16,12320760,38,7280552.390000789,41,104.60470012904979,1,0.3420086274741416,49,94853,16,0.805313115533519,1,13106,36,0.11127147999728317,15,45957,47,0.3901803300957685,50,10927,33,0.09277151395775318,10,55054,20,0.46741492902261766,1,5116,16,0.043435441146505466,2 +35,209988,19,7263938.160000984,29,16474535,23,14518241.800001126,16,78.45464978951178,36,0.666519229326931,19,51613,37,0.24579023563251234,42,17099,29,0.08142846257881403,41,151457,16,0.7212650246680763,14,12767,31,0.06079871230736995,42,39158,26,0.18647732251366744,31,727,36,0.0034621025963388384,39 +36,110165,41,4954107.829999986,40,9439130,42,7718598.140000472,40,85.68175010211955,21,0.6090726130845592,25,43913,42,0.3986111741478691,26,8720,44,0.07915399627830981,44,72668,38,0.6596287387101166,26,8148,41,0.07396178459583352,37,22366,42,0.20302273861934372,26,624,39,0.005664230926337766,29 +37,183310,24,19276442.75000025,8,18425175,16,11051917.320001492,31,100.51374720418963,4,0.3644086688001676,43,144035,6,0.7857454585129017,2,19395,21,0.10580437510228574,24,78223,35,0.42672521957340026,45,16729,19,0.09126070590802465,13,77607,8,0.42336479188260323,10,7416,7,0.04045605804375102,7 +38,69827,47,2476610.2099998267,49,5887125,48,5065106.010000026,47,84.31015223337677,24,0.6716118536213134,18,27999,49,0.4009766995574778,25,7271,48,0.10412877540206511,29,49354,44,0.7068039583542183,17,5661,48,0.08107179171380698,32,11690,49,0.16741375112778725,32,199,49,0.002849900468300228,45 +39,103665,43,3414796.9099997794,46,8459935,43,7036085.460000279,43,81.60840206434187,30,0.6732527657375441,17,34306,44,0.3309313654560363,33,10740,41,0.10360295181594559,31,71558,39,0.6902811942314185,21,7826,42,0.07549317513143299,35,15148,47,0.1461245357642406,41,314,48,0.00302898760430232,43 +40,211875,17,4676262.199999936,41,15788505,25,14070858.550001033,17,74.51801769911505,43,0.7505610454874947,7,90689,20,0.4280306784660767,21,25292,14,0.11937227138643068,7,159012,14,0.7504991150442478,7,19372,15,0.09143126843657817,12,26650,37,0.12578171091445428,45,528,41,0.0024920353982300883,46 +41,46107,50,1434324.9199999722,50,3950795,50,3337325.0699999495,50,85.68753117747848,20,0.6994069298867422,13,18986,50,0.41178129134404756,23,6028,50,0.13073936712429782,1,33403,50,0.7244670006723491,13,4553,50,0.09874856312490511,4,6777,50,0.14698418895178605,38,167,50,0.003622009673151582,38 +42,1097695,1,27697067.770013697,2,85304785,1,74254034.13000529,1,77.71264786666606,37,0.7283298831122438,10,184335,2,0.16792916065027172,48,137945,1,0.12566787677815786,3,780779,1,0.711289565863013,16,113221,1,0.10314431604407417,2,156202,1,0.1423000013664998,42,7547,5,0.0068753160030791795,26 +43,380718,7,5326002.8600002155,37,28088930,8,26066514.359998066,7,73.77883367742004,44,0.830341644071558,2,75425,26,0.19811251372406874,45,42972,5,0.1128709438482026,13,302105,6,0.7935138343866064,2,32625,6,0.0856933478322538,25,33807,31,0.08879800797440625,50,689,37,0.0018097384415761797,48 +44,520445,2,7965664.390001116,27,37281360,2,33878370.82999618,2,71.63362122798759,50,0.8096344114968549,3,80629,24,0.15492319073100905,50,57017,2,0.10955432370375352,19,397839,2,0.7644208321724678,5,56000,2,0.10760022672904918,1,52434,21,0.10074839800555294,48,1132,31,0.0021750617260229226,47 +45,102532,44,3190051.6599997785,47,8306840,44,7120980.720000217,42,81.0170483361292,31,0.6906176275629367,15,28943,47,0.2822826044551945,39,11586,38,0.11299886864588617,12,73302,37,0.7149182694183279,15,8877,40,0.08657784886669527,23,15796,45,0.15405922053602777,36,334,47,0.003257519603635938,40 +46,242468,13,5787010.110000394,33,18080795,18,16103422.920001095,14,74.56981952257617,42,0.7356374767886443,8,71665,31,0.2955647755580118,37,26585,13,0.10964333437814475,18,179242,11,0.739239817212993,11,21572,12,0.08896844119636406,16,35492,30,0.1463780787567844,40,1155,30,0.0047635151855090156,32 +47,260425,11,3589766.3899996905,45,18679115,15,17881785.86000059,11,71.72550638379572,49,0.8328129075996523,1,43198,43,0.16587501199961602,49,27457,12,0.10543150619180186,26,212050,9,0.8142459441297879,1,20125,13,0.07727752711913219,34,25577,38,0.09821253719880964,49,362,46,0.0013900355188633964,50 +48,161715,35,3843111.9599996475,44,11868930,40,10572939.570000613,35,73.39411928392542,46,0.7334143852079046,9,61529,34,0.3804780014222552,29,17207,27,0.10640324026837338,22,121081,23,0.7487307918251245,9,13127,28,0.08117366972760721,31,23758,41,0.14691277865380453,39,740,35,0.004575951519648765,33 +49,204934,20,7079900.960001084,30,16262345,24,13968025.51000132,18,79.35406033161895,33,0.6636295280634228,20,112258,12,0.5477763572662419,16,20050,20,0.09783637658953614,32,142865,18,0.6971268798735203,19,15304,22,0.07467770111352924,36,38241,29,0.18660154000800258,30,1536,26,0.007495095982121073,23 +50,177127,29,5262148.440000151,39,13604835,37,11382994.940000804,27,76.80836349060279,40,0.6838628349502478,16,87411,21,0.49349336916449776,19,22847,15,0.12898654637632884,2,123986,22,0.6999836275666612,18,17003,18,0.09599327036533109,6,27476,36,0.1551203373850401,35,994,33,0.005611792668537265,30 diff --git a/bulletproof/preliminary_bulletproof_sql.zip b/bulletproof/preliminary_bulletproof_sql.zip new file mode 100644 index 0000000000000000000000000000000000000000..617134818657175f568879b7475319e3cbbdd9f7 GIT binary patch literal 141433 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≦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 E2a5%RB=GNUE@oM_}tIDBw$K7IWDXpc{#i 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 BUjqOD literal 0 HcmV?d00001 diff --git a/bulletproof/ticket_count_identical.csv b/bulletproof/ticket_count_identical.csv new file mode 100644 index 0000000..d060007 --- /dev/null +++ b/bulletproof/ticket_count_identical.csv @@ -0,0 +1,51 @@ +ward,5yr_ticket_count_identical,all_yr_ticket_count_identical +1,True,True +2,True,True +3,True,False +4,False,False +5,False,False +6,True,True +7,True,False +8,False,False +9,False,False +10,False,False +11,False,False +12,False,False +13,True,True +14,True,True +15,True,True +16,True,True +17,False,False +18,True,True +19,False,False +20,True,True +21,True,True +22,True,True +23,True,True +24,True,True +25,False,False +26,True,True +27,True,True +28,True,True +29,True,True +30,True,True +31,True,True +32,True,True +33,True,True +34,False,False +35,True,True +36,True,True +37,True,True +38,True,True +39,True,True +40,True,True +41,True,True +42,True,True +43,True,True +44,True,True +45,True,True +46,True,True +47,True,True +48,True,True +49,True,True +50,True,True diff --git a/bulletproof/wardstotals.csv b/bulletproof/wardstotals.csv new file mode 100644 index 0000000..8559650 --- /dev/null +++ b/bulletproof/wardstotals.csv @@ -0,0 +1,51 @@ +"ward","ticket_count","ticket_count_rank","ticket_count_bucket","ticket_count_bucket_min","ticket_count_bucket_max","current_amount_due","current_amount_due_rank","current_amount_due_bucket","current_amount_due_bucket_min","current_amount_due_bucket_max","total_payments","total_payments_rank","total_payments_bucket","total_payments_bucket_min","total_payments_bucket_max","fine_level1_amount","fine_level1_amount_rank","fine_level1_amount_bucket","fine_level1_amount_bucket_min","fine_level1_amount_bucket_max","avg_per_ticket","avg_per_ticket_rank","avg_per_ticket_bucket","avg_per_ticket_bucket_min","avg_per_ticket_bucket_max","debt_to_payment_ratio","debt_to_payment_ratio_rank","debt_to_payment_ratio_bucket","debt_to_payment_ratio_bucket_min","debt_to_payment_ratio_bucket_max","paid_pct","paid_pct_rank","paid_pct_bucket","paid_pct_bucket_min","paid_pct_bucket_max","police_ticket_count","police_ticket_count_rank","police_ticket_count_bucket","police_ticket_count_bucket_min","police_ticket_count_bucket_max","police_ticket_count_pct","police_ticket_count_pct_rank","police_ticket_count_pct_bucket","police_ticket_count_pct_bucket_min","police_ticket_count_pct_bucket_max","contested_ticket_count","contested_ticket_count_rank","contested_ticket_count_bucket","contested_ticket_count_bucket_min","contested_ticket_count_bucket_max","contested_ticket_count_pct","contested_ticket_count_pct_rank","contested_ticket_count_pct_bucket","contested_ticket_count_pct_bucket_min","contested_ticket_count_pct_bucket_max","contested_and_notliable_pct","contested_and_notliable_pct_rank","contested_and_notliable_pct_bucket","contested_and_notliable_pct_bucket_min","contested_and_notliable_pct_bucket_max","paid_ticket_count","paid_ticket_count_rank","paid_ticket_count_bucket","paid_ticket_count_bucket_min","paid_ticket_count_bucket_max","paid_ticket_count_pct","paid_ticket_count_pct_rank","paid_ticket_count_pct_bucket","paid_ticket_count_pct_bucket_min","paid_ticket_count_pct_bucket_max","dismissed_ticket_count","dismissed_ticket_count_rank","dismissed_ticket_count_bucket","dismissed_ticket_count_bucket_min","dismissed_ticket_count_bucket_max","dismissed_ticket_count_pct","dismissed_ticket_count_pct_rank","dismissed_ticket_count_pct_bucket","dismissed_ticket_count_pct_bucket_min","dismissed_ticket_count_pct_bucket_max","seized_or_suspended_ticket_count","seized_or_suspended_ticket_count_rank","seized_or_suspended_ticket_count_bucket","seized_or_suspended_ticket_count_bucket_min","seized_or_suspended_ticket_count_bucket_max","seized_or_suspended_ticket_count_pct","seized_or_suspended_ticket_count_pct_rank","seized_or_suspended_ticket_count_pct_bucket","seized_or_suspended_ticket_count_pct_bucket_min","seized_or_suspended_ticket_count_pct_bucket_max","bankruptcy_ticket_count","bankruptcy_ticket_count_rank","bankruptcy_ticket_count_bucket","bankruptcy_ticket_count_bucket_min","bankruptcy_ticket_count_bucket_max","bankruptcy_ticket_count_pct","bankruptcy_ticket_count_pct_rank","bankruptcy_ticket_count_pct_bucket","bankruptcy_ticket_count_pct_bucket_min","bankruptcy_ticket_count_pct_bucket_max" +"29",756302,30,2,516250.400000000000,842048.800000000000,44367030.9999996,11,7,43692721.0459999,50167548.1786665,40509148.7099996,28,2,27302522.2180001,43789158.0460001,52437515,27,3,49943344.1333333,68743121.2,69.334095374599,13,11,68.8360222932747,70.3660823066502,1.09523483985354,8,12,1.03726891133853,1.10964989317061,0.477273468815506,43,2,0.454841116508536,0.479906112263259,477311,26,3,453808.800000000000,620402.200000000000,0.63111164587691160409,12,12,0.62569429464074621940,0.65946664711047723623,52596,28,2,52182.333333333333,84929.666666666666,0.06954364790784633652,37,7,0.06667085911244282706,0.07151645717869096199,0.58730701954521256369,26,5,0.58328418772233781160,0.59029234709938394065,382014,32,2,338437.000000000000,549965.000000000000,0.50510774796311526348,43,3,0.50084713988071604347,0.51996168622632778953,55847,27,2,52392.266666666667,87493.533333333334,0.07384219531351232709,35,8,0.07313033335454297352,0.07737697419513612567,358012,16,5,308650.933333333332,375765.666666666665,0.47337174832275995568,1,16,0.47337174832275995572,0.49471834776929200676,21505,6,11,20009.0000000000000000,21956.8000000000000000,0.02843440847703695085,1,16,0.02843440847703695078,0.03021986820078530653 +"37",734715,31,2,516250.400000000000,842048.800000000000,47038882.2999997,8,7,43692721.0459999,50167548.1786665,38883133.9599999,31,2,27302522.2180001,43789158.0460001,53682425,26,3,49943344.1333333,68743121.2,73.0656445016095,3,13,71.8961423200256,73.4262023334011,1.20975028269043,4,14,1.1820308750027,1.25441185683478,0.452539822184104,47,1,0.429776120753813,0.454841116508536,508031,21,3,453808.800000000000,620402.200000000000,0.69146675921956132650,4,13,0.65946664711047723623,0.69323899958020825306,51339,29,1,19435.000000000000,52182.333333333333,0.06987607439619444274,34,7,0.06667085911244282706,0.07151645717869096199,0.59886246323457800113,14,7,0.59730050647643006970,0.60430866585347619875,347111,36,2,338437.000000000000,549965.000000000000,0.47244305615102454693,49,1,0.46261804718949255135,0.48173259353510429741,54353,29,2,52392.266666666667,87493.533333333334,0.07397834534479355941,34,8,0.07313033335454297352,0.07737697419513612567,340339,17,5,308650.933333333332,375765.666666666665,0.46322587670048930538,3,15,0.45202514887622790468,0.47337174832275995572,19850,7,10,18061.2000000000000000,20009.0000000000000000,0.02701727880878980285,2,15,0.02664894875328859503,0.02843440847703695078 +"24",850825,22,3,842048.800000000000,1167847.200000000000,54016226.6399994,4,8,50167548.1786665,56642375.3113332,40711876.8399999,27,2,27302522.2180001,43789158.0460001,58368400,21,3,49943344.1333333,68743121.2,68.6021214703376,15,10,67.3059622798992,68.8360222932747,1.32679283866687,1,16,1.32679283866687,1.39917382049895,0.429776120753813,50,1,0.429776120753813,0.454841116508536,582309,15,3,453808.800000000000,620402.200000000000,0.68440513619134369582,5,13,0.65946664711047723623,0.69323899958020825306,53356,26,2,52182.333333333333,84929.666666666666,0.06271089824582023330,40,6,0.06182526104619469213,0.06667085911244282706,0.59573431291701027063,19,6,0.59029234709938394065,0.59730050647643006970,393607,29,2,338437.000000000000,549965.000000000000,0.46261804718949255135,50,1,0.46261804718949255135,0.48173259353510429741,57634,24,2,52392.266666666667,87493.533333333334,0.06773895924543825111,38,6,0.06463705167335666922,0.06888369251394982137,386594,10,6,375765.666666666665,442880.399999999998,0.45437545911321364558,5,15,0.45202514887622790468,0.47337174832275995572,22217,4,12,21956.8000000000000000,23904.6000000000000000,0.02611230276496341786,3,14,0.02486348902954023928,0.02664894875328859503 +"34",424854,44,1,190452.000000000000,516250.400000000000,28865577.21,29,4,24268239.6479999,30743066.7806666,24134203.6099999,43,1,10815886.39,27302522.2180001,32495520,40,2,31143567.0666667,49943344.1333333,76.486322360152,1,16,76.486322360152,78.0163823735274,1.19604432267405,5,14,1.1820308750027,1.25441185683478,0.455364215409976,46,2,0.454841116508536,0.479906112263259,323222,38,2,287215.400000000000,453808.800000000000,0.76078370451967028673,1,16,0.76078370451967028672,0.79455605698940130355,35024,40,1,19435.000000000000,52182.333333333333,0.08243773155013251611,25,10,0.08120765331118723185,0.08605325137743536678,0.62708428506167199635,4,11,0.62533314398461458590,0.63234130336166071495,200815,46,1,126909.000000000000,338437.000000000000,0.47266825780150357535,48,1,0.46261804718949255135,0.48173259353510429741,37163,41,1,17291.000000000000,52392.266666666667,0.08747240228407876588,8,11,0.08587025587632242997,0.09011689671691558212,195149,35,3,174421.466666666666,241536.199999999999,0.45933191166847905398,4,15,0.45202514887622790468,0.47337174832275995572,10986,17,6,10270.0000000000000000,12217.8000000000000000,0.02585829484952477792,4,14,0.02486348902954023928,0.02664894875328859503 +"6",842531,23,3,842048.800000000000,1167847.200000000000,49857871.2199994,7,7,43692721.0459999,50167548.1786665,46647796.0199997,21,3,43789158.0460001,60275793.8740002,60035045,19,3,49943344.1333333,68743121.2,71.2555917823795,7,12,70.3660823066502,71.8961423200256,1.06881515256634,9,12,1.03726891133853,1.10964989317061,0.483368462745216,42,3,0.479906112263259,0.504971108017981,554230,17,3,453808.800000000000,620402.200000000000,0.65781555812189699845,8,12,0.62569429464074621940,0.65946664711047723623,64166,21,2,52182.333333333333,84929.666666666666,0.07615862205663649171,29,8,0.07151645717869096199,0.07636205524493909692,0.61523236605055636942,8,9,0.61131682523052232780,0.61832498460756845685,429791,27,2,338437.000000000000,549965.000000000000,0.51011891550577960930,41,3,0.50084713988071604347,0.51996168622632778953,66988,19,2,52392.266666666667,87493.533333333334,0.07950805370959644215,25,9,0.07737697419513612567,0.08162361503572927782,379870,11,6,375765.666666666665,442880.399999999998,0.45086768320690870722,6,14,0.43067854942969585364,0.45202514887622790468,21722,5,11,20009.0000000000000000,21956.8000000000000000,0.02578184066817719467,5,14,0.02486348902954023928,0.02664894875328859503 +"17",716565,33,2,516250.400000000000,842048.800000000000,44403937.9899995,10,7,43692721.0459999,50167548.1786665,39119558.0599999,30,2,27302522.2180001,43789158.0460001,52049175,29,3,49943344.1333333,68743121.2,72.6370601410898,5,13,71.8961423200256,73.4262023334011,1.13508281258941,7,13,1.10964989317061,1.1820308750027,0.468365907918676,44,2,0.454841116508536,0.479906112263259,466307,27,3,453808.800000000000,620402.200000000000,0.65075324639076706230,9,12,0.62569429464074621940,0.65946664711047723623,52613,27,2,52182.333333333333,84929.666666666666,0.07342390432131069756,32,8,0.07151645717869096199,0.07636205524493909692,0.59901545245471651493,13,7,0.59730050647643006970,0.60430866585347619875,355518,35,2,338437.000000000000,549965.000000000000,0.49614201084339871470,44,2,0.48173259353510429741,0.50084713988071604347,55066,28,2,52392.266666666667,87493.533333333334,0.07684718064655683713,30,8,0.07313033335454297352,0.07737697419513612567,322353,19,5,308650.933333333332,375765.666666666665,0.44985870088547445103,8,14,0.43067854942969585364,0.45202514887622790468,18404,9,10,18061.2000000000000000,20009.0000000000000000,0.02568364349361188448,6,14,0.02486348902954023928,0.02664894875328859503 +"21",543507,39,2,516250.400000000000,842048.800000000000,32661825.1599999,26,5,30743066.7806666,37217893.9133332,32133231.1299999,37,2,27302522.2180001,43789158.0460001,41186675,38,2,31143567.0666667,49943344.1333333,75.7794747813736,2,15,74.9562623467765,76.486322360152,1.01645007400163,12,11,0.964887929506441,1.03726891133853,0.495921031169151,39,3,0.479906112263259,0.504971108017981,369404,32,2,287215.400000000000,453808.800000000000,0.67966741918687339813,6,13,0.65946664711047723623,0.69323899958020825306,50068,30,1,19435.000000000000,52182.333333333333,0.09212024868124973551,7,12,0.09089884944368350171,0.09574444750993163664,0.62544938883118958217,5,11,0.62533314398461458590,0.63234130336166071495,279188,42,1,126909.000000000000,338437.000000000000,0.51367875666734743067,40,3,0.50084713988071604347,0.51996168622632778953,50308,32,1,17291.000000000000,52392.266666666667,0.09256182533067651383,3,12,0.09011689671691558212,0.09436353755750873427,236714,32,3,174421.466666666666,241536.199999999999,0.43553072913504333891,10,14,0.43067854942969585364,0.45202514887622790468,13619,16,7,12217.8000000000000000,14165.6000000000000000,0.02505763495226372429,7,14,0.02486348902954023928,0.02664894875328859503 +"7",605638,37,2,516250.400000000000,842048.800000000000,36191558.6899997,21,5,30743066.7806666,37217893.9133332,31078724.2299998,39,2,27302522.2180001,43789158.0460001,42136700,37,2,31143567.0666667,49943344.1333333,69.5740689983125,11,11,68.8360222932747,70.3660823066502,1.16451236614998,6,13,1.10964989317061,1.1820308750027,0.461997822529747,45,2,0.454841116508536,0.479906112263259,326207,37,2,287215.400000000000,453808.800000000000,0.53861712772316136042,26,9,0.52437723723155316891,0.55814958970128418574,47757,33,1,19435.000000000000,52182.333333333333,0.07885403491854870401,28,9,0.07636205524493909692,0.08120765331118723185,0.56783298783424419457,38,2,0.56225970959119942445,0.56926786896824555350,288883,40,1,126909.000000000000,338437.000000000000,0.47698955481657359677,47,1,0.46261804718949255135,0.48173259353510429741,51774,31,1,17291.000000000000,52392.266666666667,0.08548670988280127733,12,10,0.08162361503572927782,0.08587025587632242997,284757,25,4,241536.199999999999,308650.933333333332,0.47017690435540702532,2,15,0.45202514887622790468,0.47337174832275995572,14864,14,8,14165.6000000000000000,16113.4000000000000000,0.02454271363421713961,8,13,0.02307802930579188353,0.02486348902954023928 +"8",644516,36,2,516250.400000000000,842048.800000000000,34610237.6299998,23,5,30743066.7806666,37217893.9133332,35409334.5599999,35,2,27302522.2180001,43789158.0460001,44552870,34,2,31143567.0666667,49943344.1333333,69.1260884136313,14,11,68.8360222932747,70.3660823066502,0.977432591153442,14,11,0.964887929506441,1.03726891133853,0.505706239734168,37,4,0.504971108017981,0.530036103772704,333160,36,2,287215.400000000000,453808.800000000000,0.51691501840140508537,28,8,0.49060488476182215208,0.52437723723155316891,54000,25,2,52182.333333333333,84929.666666666666,0.08378380055731742889,18,10,0.08120765331118723185,0.08605325137743536678,0.60412962962962962963,11,7,0.59730050647643006970,0.60430866585347619875,338061,37,1,126909.000000000000,338437.000000000000,0.52451917407791272831,39,4,0.51996168622632778953,0.53907623257193953559,56958,26,2,52392.266666666667,87493.533333333334,0.08837329096562381694,7,11,0.08587025587632242997,0.09011689671691558212,279762,26,4,241536.199999999999,308650.933333333332,0.43406525206511552855,11,14,0.43067854942969585364,0.45202514887622790468,14854,15,8,14165.6000000000000000,16113.4000000000000000,0.02304675136071098313,9,12,0.02129256958204352778,0.02307802930579188353 +"20",807223,28,2,516250.400000000000,842048.800000000000,50466651.2299994,6,8,50167548.1786665,56642375.3113332,40496725.9999998,29,2,27302522.2180001,43789158.0460001,56077265,24,3,49943344.1333333,68743121.2,69.4693597679947,12,11,68.8360222932747,70.3660823066502,1.24619089528372,2,14,1.1820308750027,1.25441185683478,0.445198136142247,49,1,0.429776120753813,0.454841116508536,565520,16,3,453808.800000000000,620402.200000000000,0.70057468630105931075,3,14,0.69323899958020825306,0.72701135204993926989,56235,24,2,52182.333333333333,84929.666666666666,0.06966476425969032101,36,7,0.06667085911244282706,0.07151645717869096199,0.61379923535164932871,9,9,0.61131682523052232780,0.61832498460756845685,386617,31,2,338437.000000000000,549965.000000000000,0.47894695765606282279,46,1,0.46261804718949255135,0.48173259353510429741,60862,22,2,52392.266666666667,87493.533333333334,0.07539676148969987228,32,8,0.07313033335454297352,0.07737697419513612567,362913,15,5,308650.933333333332,375765.666666666665,0.44958208574334477585,9,14,0.43067854942969585364,0.45202514887622790468,18452,8,10,18061.2000000000000000,20009.0000000000000000,0.02285861527731494271,10,12,0.02129256958204352778,0.02307802930579188353 +"9",426480,43,1,190452.000000000000,516250.400000000000,24563980.3099999,36,4,24268239.6479999,30743066.7806666,23856738.2199999,44,1,10815886.39,27302522.2180001,30703760,42,1,12343790,31143567.0666667,71.9934346276496,6,13,71.8961423200256,73.4262023334011,1.02964538083446,10,11,0.964887929506441,1.03726891133853,0.492696906288557,41,3,0.479906112263259,0.504971108017981,260010,42,1,120622.000000000000,287215.400000000000,0.60966516601012943163,16,11,0.59192194217101520257,0.62569429464074621940,35718,39,1,19435.000000000000,52182.333333333333,0.08375070343275182893,19,10,0.08120765331118723185,0.08605325137743536678,0.58718293297497060306,27,5,0.58328418772233781160,0.59029234709938394065,217464,43,1,126909.000000000000,338437.000000000000,0.50990433314575126618,42,3,0.50084713988071604347,0.51996168622632778953,35804,42,1,17291.000000000000,52392.266666666667,0.08395235415494278747,15,10,0.08162361503572927782,0.08587025587632242997,182477,38,3,174421.466666666666,241536.199999999999,0.42786766085162258488,12,13,0.40933194998316380260,0.43067854942969585364,9726,18,5,8322.2000000000000000,10270.0000000000000000,0.02280528981429375352,11,12,0.02129256958204352778,0.02307802930579188353 +"16",819022,26,2,516250.400000000000,842048.800000000000,51120763.2199995,5,8,50167548.1786665,56642375.3113332,41399119.6599999,24,2,27302522.2180001,43789158.0460001,57324405,22,3,49943344.1333333,68743121.2,69.9912883902996,9,11,68.8360222932747,70.3660823066502,1.23482730163928,3,14,1.1820308750027,1.25441185683478,0.447461868425575,48,1,0.429776120753813,0.454841116508536,553810,18,3,453808.800000000000,620402.200000000000,0.67618452251587869435,7,13,0.65946664711047723623,0.69323899958020825306,49500,32,1,19435.000000000000,52182.333333333333,0.06043793695407449373,43,5,0.05697966297994655720,0.06182526104619469213,0.58866666666666666667,25,5,0.58328418772233781160,0.59029234709938394065,393370,30,2,338437.000000000000,549965.000000000000,0.48029234867927845650,45,1,0.46261804718949255135,0.48173259353510429741,54103,30,2,52392.266666666667,87493.533333333334,0.06605805460659176432,39,6,0.06463705167335666922,0.06888369251394982137,369270,14,5,308650.933333333332,375765.666666666665,0.45086700967739572319,7,14,0.43067854942969585364,0.45202514887622790468,18066,10,10,18061.2000000000000000,20009.0000000000000000,0.02205801553560221826,12,12,0.02129256958204352778,0.02307802930579188353 +"28",1354565,9,4,1167847.200000000000,1493645.600000000000,70656556.7999989,2,11,69592029.5766665,76066856.7093331,68833300.3900003,9,4,60275793.8740002,76762429.7020002,90610825,9,5,87542898.2666667,106342675.333333,66.8929324174181,18,9,65.7759022665238,67.3059622798992,1.02648799926298,11,11,0.964887929506441,1.03726891133853,0.493464555607383,40,3,0.479906112263259,0.504971108017981,828746,4,5,786995.600000000000,953589.000000000000,0.61181707780726653944,15,11,0.59192194217101520257,0.62569429464074621940,101476,12,3,84929.666666666666,117676.999999999999,0.07491408681015676619,30,8,0.07151645717869096199,0.07636205524493909692,0.59052386771256257637,23,6,0.59029234709938394065,0.59730050647643006970,718179,12,3,549965.000000000000,761493.000000000000,0.53019161132909827140,38,4,0.51996168622632778953,0.53907623257193953559,106171,9,3,87493.533333333334,122594.800000000001,0.07838014417912761661,29,9,0.07737697419513612567,0.08162361503572927782,539373,3,8,509995.133333333331,577109.866666666664,0.39818908653331512331,13,12,0.38798535053663175156,0.40933194998316380260,29748,1,16,29748.0000000000000000,31695.8000000000000000,0.02196129384710220624,13,12,0.02129256958204352778,0.02307802930579188353 +"18",254129,48,1,190452.000000000000,516250.400000000000,12535716.6800001,46,2,11318585.3826666,17793412.5153333,15128928.5100001,48,1,10815886.39,27302522.2180001,18460130,48,1,12343790,31143567.0666667,72.6407847982717,4,13,71.8961423200256,73.4262023334011,0.82859249891452,18,9,0.820125965842269,0.892506947674355,0.546868698517365,33,5,0.530036103772704,0.555101099527427,135763,48,1,120622.000000000000,287215.400000000000,0.53422867913539973793,27,9,0.52437723723155316891,0.55814958970128418574,21021,49,1,19435.000000000000,52182.333333333333,0.08271783228202999264,24,10,0.08120765331118723185,0.08605325137743536678,0.59364445078730793017,21,6,0.59029234709938394065,0.59730050647643006970,140768,49,1,126909.000000000000,338437.000000000000,0.55392340110731164094,34,5,0.53907623257193953559,0.55819077891755128165,20948,48,1,17291.000000000000,52392.266666666667,0.08243057659692518367,21,10,0.08162361503572927782,0.08587025587632242997,91415,46,1,40192.000000000000,107306.733333333333,0.35971888292953578694,14,10,0.34529215164356764948,0.36663875109009970052,4445,29,3,4426.6000000000000000,6374.4000000000000000,0.01749111671631336841,14,9,0.01593619041079846053,0.01772165013454681628 +"5",1082829,16,3,842048.800000000000,1167847.200000000000,39571925.4199997,15,6,37217893.9133332,43692721.0459999,59175014.2099998,14,3,43789158.0460001,60275793.8740002,68807135,13,4,68743121.2,87542898.2666667,63.5438605726297,24,7,62.7157822397729,64.2458422531483,0.66872692720558,26,6,0.602983020346013,0.675364002178098,0.599259221923495,25,7,0.58016609528215,0.605231091036872,491581,23,3,453808.800000000000,620402.200000000000,0.45397842133891870277,39,6,0.42306017982236011842,0.45683253229209113525,89998,15,3,84929.666666666666,117676.999999999999,0.08311376957949962552,21,10,0.08120765331118723185,0.08605325137743536678,0.56386808595746572146,43,2,0.56225970959119942445,0.56926786896824555350,652810,18,3,549965.000000000000,761493.000000000000,0.60287450742453332890,26,8,0.59641987160877477377,0.61553441795438651983,93896,13,3,87493.533333333334,122594.800000000001,0.08671359928483629456,10,11,0.08587025587632242997,0.09011689671691558212,369516,13,5,308650.933333333332,375765.666666666665,0.34125055756726131273,16,9,0.32394555219703559844,0.34529215164356764948,17015,11,9,16113.4000000000000000,18061.2000000000000000,0.01571346907037029854,15,8,0.01415073068705010478,0.01593619041079846053 +"3",1189132,12,4,1167847.200000000000,1493645.600000000000,43157474.7099993,12,6,37217893.9133332,43692721.0459999,61898959.8499999,12,4,60275793.8740002,76762429.7020002,73219915,10,4,68743121.2,87542898.2666667,61.5742533209097,30,6,61.1857222263974,62.7157822397729,0.697224554573826,22,7,0.675364002178098,0.747744984010184,0.589197226321711,29,7,0.58016609528215,0.605231091036872,764754,7,4,620402.200000000000,786995.600000000000,0.64311951911141908552,10,12,0.62569429464074621940,0.65946664711047723623,104482,11,3,84929.666666666666,117676.999999999999,0.08786408910028491370,10,11,0.08605325137743536678,0.09089884944368350171,0.60405620106812656726,12,7,0.59730050647643006970,0.60430866585347619875,705449,13,3,549965.000000000000,761493.000000000000,0.59324700706061227854,28,7,0.57730532526316302771,0.59641987160877477377,102294,10,3,87493.533333333334,122594.800000000001,0.08602409152221956856,11,11,0.08587025587632242997,0.09011689671691558212,405941,6,6,375765.666666666665,442880.399999999998,0.34137589434982827811,15,9,0.32394555219703559844,0.34529215164356764948,16634,13,9,16113.4000000000000000,18061.2000000000000000,0.01398835453086789356,16,7,0.01236527096330174903,0.01415073068705010478 +"27",2018335,5,6,1819444.000000000000,2145242.400000000000,63993308.249999,3,10,63117202.4439998,69592029.5766665,100223190.440001,5,6,93249065.5300003,109735701.358,118210330,3,6,106342675.333333,125142452.4,58.5682406538062,39,4,58.1256021996465,59.655662213022,0.638507993699412,29,6,0.602983020346013,0.675364002178098,0.610311334363531,22,8,0.605231091036872,0.630296086791595,1040898,3,6,953589.000000000000,1120182.400000000000,0.51572112657214981656,30,8,0.49060488476182215208,0.52437723723155316891,168212,6,5,150424.333333333332,183171.666666666665,0.08334196255824726817,20,10,0.08120765331118723185,0.08605325137743536678,0.57555941312153710794,33,3,0.56926786896824555350,0.57627602834529168255,1230204,5,6,1184549.000000000000,1396077.000000000000,0.60951427785773917610,24,8,0.59641987160877477377,0.61553441795438651983,170001,5,5,157696.066666666668,192797.333333333335,0.08422833672309106268,14,10,0.08162361503572927782,0.08587025587632242997,620081,2,9,577109.866666666664,644224.599999999997,0.30722402376216039458,21,8,0.30259895275050354740,0.32394555219703559844,24628,3,13,23904.6000000000000000,25852.4000000000000000,0.01220213690987868714,17,6,0.01057981123955339328,0.01236527096330174903 +"10",378617,45,1,190452.000000000000,516250.400000000000,17527940.8400001,43,2,11318585.3826666,17793412.5153333,19166532.92,45,1,10815886.39,27302522.2180001,24908690,45,1,12343790,31143567.0666667,65.7886201623276,19,9,65.7759022665238,67.3059622798992,0.914507642731253,16,10,0.892506947674355,0.964887929506441,0.522327504826981,35,4,0.504971108017981,0.530036103772704,220665,45,1,120622.000000000000,287215.400000000000,0.58281852109123467779,21,10,0.55814958970128418574,0.59192194217101520257,26713,46,1,19435.000000000000,52182.333333333333,0.07055414838742053315,33,7,0.06667085911244282706,0.07151645717869096199,0.60502377119754426684,10,8,0.60430866585347619875,0.61131682523052232780,204542,45,1,126909.000000000000,338437.000000000000,0.54023459062852433990,35,5,0.53907623257193953559,0.55819077891755128165,28674,45,1,17291.000000000000,52392.266666666667,0.07573352490775638706,31,8,0.07313033335454297352,0.07737697419513612567,123821,43,2,107306.733333333333,174421.466666666666,0.32703497201657611782,17,9,0.32394555219703559844,0.34529215164356764948,4141,30,2,2478.8000000000000000,4426.6000000000000000,0.01093717397792492149,18,6,0.01057981123955339328,0.01236527096330174903 +"19",226140,49,1,190452.000000000000,516250.400000000000,7719159.81000002,49,1,4843758.24999999,11318585.3826666,14537994.1800001,49,1,10815886.39,27302522.2180001,16112980,49,1,12343790,31143567.0666667,71.2522331299195,8,12,70.3660823066502,71.8961423200256,0.530964568731172,32,5,0.530602038513927,0.602983020346013,0.65318298047144,19,9,0.630296086791595,0.655361082546318,134557,49,1,120622.000000000000,287215.400000000000,0.59501636154594498983,18,11,0.59192194217101520257,0.62569429464074621940,24939,48,1,19435.000000000000,52182.333333333333,0.11028124170867604139,1,16,0.11028124170867604143,0.11512683977492417636,0.56385580817193953246,44,2,0.56225970959119942445,0.56926786896824555350,146137,48,1,126909.000000000000,338437.000000000000,0.64622357831431856372,14,10,0.63464896429999826589,0.65376351064561001195,20843,49,1,17291.000000000000,52392.266666666667,0.09216856814362784116,4,12,0.09011689671691558212,0.09436353755750873427,63917,49,1,40192.000000000000,107306.733333333333,0.28264349517997700539,27,7,0.28125235330397149636,0.30259895275050354740,2423,40,1,531.0000000000000000,2478.8000000000000000,0.01071460157424604227,19,6,0.01057981123955339328,0.01236527096330174903 +"4",1785265,6,5,1493645.600000000000,1819444.000000000000,46266862.5199996,9,7,43692721.0459999,50167548.1786665,90972237.3400006,7,5,76762429.7020002,93249065.5300003,102005600,7,5,87542898.2666667,106342675.333333,57.1375117979684,45,3,56.5955421862711,58.1256021996465,0.50858222104708,37,4,0.458221056681841,0.530602038513927,0.662874045609472,14,10,0.655361082546318,0.680426078301041,1055974,2,6,953589.000000000000,1120182.400000000000,0.59149425995580488051,20,10,0.55814958970128418574,0.59192194217101520257,171441,5,5,150424.333333333332,183171.666666666665,0.09603112143015182620,5,13,0.09574444750993163664,0.10059004557617977157,0.63141838883347623964,3,11,0.62533314398461458590,0.63234130336166071495,1122106,8,5,973021.000000000000,1184549.000000000000,0.62853750003500880822,19,9,0.61553441795438651983,0.63464896429999826589,179169,3,5,157696.066666666668,192797.333333333335,0.10035989054846199304,2,14,0.09861017839810188642,0.10285681923869503857,510859,4,8,509995.133333333331,577109.866666666664,0.28615303610388373715,26,7,0.28125235330397149636,0.30259895275050354740,16901,12,9,16113.4000000000000000,18061.2000000000000000,0.00946694188257765654,20,5,0.00879435151580503753,0.01057981123955339328 +"49",1155988,13,3,842048.800000000000,1167847.200000000000,38293233.8799995,18,6,37217893.9133332,43692721.0459999,55264687.8799999,16,3,43789158.0460001,60275793.8740002,67178040,14,3,49943344.1333333,68743121.2,58.1130945995979,41,3,56.5955421862711,58.1256021996465,0.692906001082434,23,7,0.675364002178098,0.747744984010184,0.590700251142477,28,7,0.58016609528215,0.605231091036872,817081,6,5,786995.600000000000,953589.000000000000,0.70682481133022142098,2,14,0.69323899958020825306,0.72701135204993926989,78215,18,2,52182.333333333333,84929.666666666666,0.06766073696266743253,38,7,0.06667085911244282706,0.07151645717869096199,0.55525155021415329540,50,1,0.55525155021415329540,0.56225970959119942445,673486,16,3,549965.000000000000,761493.000000000000,0.58260639383799831832,30,7,0.57730532526316302771,0.59641987160877477377,81890,17,2,52392.266666666667,87493.533333333334,0.07083983570763710350,36,7,0.06888369251394982137,0.07313033335454297352,371212,12,5,308650.933333333332,375765.666666666665,0.32112098049460721046,18,8,0.30259895275050354740,0.32394555219703559844,9235,19,5,8322.2000000000000000,10270.0000000000000000,0.00798883725436596228,21,4,0.00700889179205668178,0.00879435151580503753 +"15",792182,29,2,516250.400000000000,842048.800000000000,38148693.4299997,19,6,37217893.9133332,43692721.0459999,38410743.7499998,33,2,27302522.2180001,43789158.0460001,52100545,28,3,49943344.1333333,68743121.2,65.7684029680048,20,8,64.2458422531483,65.7759022665238,0.993177681700055,13,11,0.964887929506441,1.03726891133853,0.501711417492425,38,3,0.479906112263259,0.504971108017981,447352,29,2,287215.400000000000,453808.800000000000,0.56470861493949622688,23,10,0.55814958970128418574,0.59192194217101520257,34253,41,1,19435.000000000000,52182.333333333333,0.04323880118457627161,49,2,0.04244286878120215241,0.04728846684745028734,0.61813563775435728257,7,9,0.61131682523052232780,0.61832498460756845685,425433,28,2,338437.000000000000,549965.000000000000,0.53703946820301395386,37,4,0.51996168622632778953,0.53907623257193953559,38860,38,1,17291.000000000000,52392.266666666667,0.04905438396732064096,48,2,0.04765048831098406062,0.05189712915157721277,244233,29,4,241536.199999999999,308650.933333333332,0.30830415232863155184,20,8,0.30259895275050354740,0.32394555219703559844,6185,24,3,4426.6000000000000000,6374.4000000000000000,0.00780754927529279888,22,4,0.00700889179205668178,0.00879435151580503753 +"26",1026314,20,3,842048.800000000000,1167847.200000000000,38879819.7999996,17,6,37217893.9133332,43692721.0459999,50899356.4299998,18,3,43789158.0460001,60275793.8740002,62721350,17,3,49943344.1333333,68743121.2,61.1132168127883,31,5,59.655662213022,61.1857222263974,0.763856805409115,20,8,0.747744984010184,0.820125965842269,0.566939445953526,31,6,0.555101099527427,0.58016609528215,496593,22,3,453808.800000000000,620402.200000000000,0.48386068980838223000,36,7,0.45683253229209113525,0.49060488476182215208,59289,23,2,52182.333333333333,84929.666666666666,0.05776886995597838478,45,5,0.05697966297994655720,0.06182526104619469213,0.58989019885644891970,24,5,0.58328418772233781160,0.59029234709938394065,588942,20,3,549965.000000000000,761493.000000000000,0.57384192362181554573,31,6,0.55819077891755128165,0.57730532526316302771,60729,23,2,52392.266666666667,87493.533333333334,0.05917194932545010591,44,4,0.05614376999217036492,0.06039041083276351707,322327,20,5,308650.933333333332,375765.666666666665,0.31406275272479962273,19,8,0.30259895275050354740,0.32394555219703559844,6946,22,4,6374.4000000000000000,8322.2000000000000000,0.00676790923635456595,23,3,0.00522343206830832603,0.00700889179205668178 +"48",1037712,18,3,842048.800000000000,1167847.200000000000,25479218.0399998,33,4,24268239.6479999,30743066.7806666,48257687.7199997,20,3,43789158.0460001,60275793.8740002,55554350,25,3,49943344.1333333,68743121.2,53.5354221595202,50,1,53.5354221595202,55.0654821728956,0.527982571146695,34,4,0.458221056681841,0.530602038513927,0.654457726732797,17,9,0.630296086791595,0.655361082546318,614124,13,3,453808.800000000000,620402.200000000000,0.59180581895554836024,19,10,0.55814958970128418574,0.59192194217101520257,86069,16,3,84929.666666666666,117676.999999999999,0.08294112431965709176,23,10,0.08120765331118723185,0.08605325137743536678,0.56046892609418025073,47,1,0.55525155021415329540,0.56225970959119942445,658627,17,3,549965.000000000000,761493.000000000000,0.63469151363769523721,18,10,0.63464896429999826589,0.65376351064561001195,86192,15,2,52392.266666666667,87493.533333333334,0.08305965431641919916,18,10,0.08162361503572927782,0.08587025587632242997,299783,22,4,241536.199999999999,308650.933333333332,0.28888843918158410041,24,7,0.28125235330397149636,0.30259895275050354740,5903,26,3,4426.6000000000000000,6374.4000000000000000,0.00568847618607089443,24,3,0.00522343206830832603,0.00700889179205668178 +"11",691684,34,2,516250.400000000000,842048.800000000000,18593313.4100001,40,3,17793412.5153333,24268239.6479999,38545919.7799997,32,2,27302522.2180001,43789158.0460001,43785255,36,2,31143567.0666667,49943344.1333333,63.3023967592137,25,7,62.7157822397729,64.2458422531483,0.48236787489107,39,4,0.458221056681841,0.530602038513927,0.674596378495779,12,10,0.655361082546318,0.680426078301041,301092,40,2,287215.400000000000,453808.800000000000,0.43530282614604356903,41,6,0.42306017982236011842,0.45683253229209113525,64457,20,2,52182.333333333333,84929.666666666666,0.09318850804702725522,6,12,0.09089884944368350171,0.09574444750993163664,0.56164574832834292629,45,1,0.55525155021415329540,0.56225970959119942445,460278,25,2,338437.000000000000,549965.000000000000,0.66544549245030967899,10,11,0.65376351064561001195,0.67287805699122175801,57415,25,2,52392.266666666667,87493.533333333334,0.08300755836480242423,19,10,0.08162361503572927782,0.08587025587632242997,164916,39,2,107306.733333333333,174421.466666666666,0.23842679605137606190,36,4,0.21721255496437534324,0.23855915441090739428,3855,32,2,2478.8000000000000000,4426.6000000000000000,0.00557335430630172160,25,3,0.00522343206830832603,0.00700889179205668178 +"42",5077427,1,15,4751629.600000000000,5077428.000000000000,101966164.24,1,15,95491338.1073331,101966165.24,258115422.810001,1,15,241628787.982001,258115423.810001,294340445,1,15,275540668.933333,294340446,57.9703942567761,42,3,56.5955421862711,58.1256021996465,0.395040959311669,45,3,0.385840074849756,0.458221056681841,0.716824831074073,6,12,0.705491074055763,0.730556069810486,2619523,1,16,2619523.000000000000,2786116.400000000000,0.51591544299898354029,29,8,0.49060488476182215208,0.52437723723155316891,510645,1,16,510644.999999999995,543392.333333333328,0.10057160841504959106,4,13,0.09574444750993163664,0.10059004557617977157,0.63985939351212682000,2,13,0.63934946273870684400,0.64635762211575297305,3299829,1,16,3299829.000000000000,3511357.000000000000,0.64990181050362713240,12,10,0.63464896429999826589,0.65376351064561001195,543810,1,16,543810.000000000005,578911.266666666672,0.10710346007928819065,1,16,0.10710346007928819072,0.11135010091988134287,1046913,1,16,1046912.999999999995,1114027.733333333328,0.20618967047679858322,44,3,0.19586595551784329220,0.21721255496437534324,27439,2,14,25852.4000000000000000,27800.2000000000000000,0.00540411511578600736,26,3,0.00522343206830832603,0.00700889179205668178 +"46",1229482,11,4,1167847.200000000000,1493645.600000000000,28270492.4999998,30,4,24268239.6479999,30743066.7806666,64714135.52,11,4,60275793.8740002,76762429.7020002,72470365,11,4,68743121.2,87542898.2666667,58.943819429646,37,4,58.1256021996465,59.655662213022,0.43685189136557,43,3,0.385840074849756,0.458221056681841,0.695965955857573,8,11,0.680426078301041,0.705491074055763,667016,9,4,620402.200000000000,786995.600000000000,0.54251790591484869238,24,9,0.52437723723155316891,0.55814958970128418574,107025,10,3,84929.666666666666,117676.999999999999,0.08704885472093125398,14,11,0.08605325137743536678,0.09089884944368350171,0.56452230787199252511,42,2,0.56225970959119942445,0.56926786896824555350,826936,10,4,761493.000000000000,973021.000000000000,0.67258894396176601203,8,11,0.65376351064561001195,0.67287805699122175801,102210,11,3,87493.533333333334,122594.800000000001,0.08313257127798536294,17,10,0.08162361503572927782,0.08587025587632242997,298955,23,4,241536.199999999999,308650.933333333332,0.24315524749447328224,35,5,0.23855915441090739428,0.25990575385743944532,6450,23,4,6374.4000000000000000,8322.2000000000000000,0.00524611177715493191,27,3,0.00522343206830832603,0.00700889179205668178 +"25",1725209,7,5,1493645.600000000000,1819444.000000000000,42934869.8799995,13,6,37217893.9133332,43692721.0459999,90749559.0200006,8,5,76762429.7020002,93249065.5300003,102548115,6,5,87542898.2666667,106342675.333333,59.4409807739236,34,4,58.1256021996465,59.655662213022,0.473113812823453,40,4,0.458221056681841,0.530602038513927,0.67883417512958,11,10,0.655361082546318,0.680426078301041,743858,8,4,620402.200000000000,786995.600000000000,0.43116978870386138723,42,6,0.42306017982236011842,0.45683253229209113525,127355,7,4,117676.999999999999,150424.333333333332,0.07382004151381079046,31,8,0.07151645717869096199,0.07636205524493909692,0.56669938361273605277,40,2,0.56225970959119942445,0.56926786896824555350,1161875,7,5,973021.000000000000,1184549.000000000000,0.67346912750860910185,7,12,0.67287805699122175801,0.69199260333683350407,120506,7,3,87493.533333333334,122594.800000000001,0.06985008772850130042,37,7,0.06888369251394982137,0.07313033335454297352,389725,8,6,375765.666666666665,442880.399999999998,0.22590016629869192660,42,4,0.21721255496437534324,0.23855915441090739428,8136,20,4,6374.4000000000000000,8322.2000000000000000,0.00471595035731902627,28,2,0.00343797234455997028,0.00522343206830832603 +"12",830219,25,2,516250.400000000000,842048.800000000000,34232781.2499997,25,5,30743066.7806666,37217893.9133332,40947025.7999998,26,2,27302522.2180001,43789158.0460001,51871860,30,3,49943344.1333333,68743121.2,62.4797312516336,26,6,61.1857222263974,62.7157822397729,0.83602607469478,17,9,0.820125965842269,0.892506947674355,0.544654574236501,34,5,0.530036103772704,0.555101099527427,414830,31,2,287215.400000000000,453808.800000000000,0.49966334184112866605,34,8,0.49060488476182215208,0.52437723723155316891,39331,38,1,19435.000000000000,52182.333333333333,0.04737424703602302525,47,3,0.04728846684745028734,0.05213406491369842227,0.59487427220258828914,20,6,0.59029234709938394065,0.59730050647643006970,474300,23,2,338437.000000000000,549965.000000000000,0.57129504383783074105,32,6,0.55819077891755128165,0.57730532526316302771,41094,36,1,17291.000000000000,52392.266666666667,0.04949778311505759324,47,2,0.04765048831098406062,0.05189712915157721277,245467,27,4,241536.199999999999,308650.933333333332,0.29566536058558043119,23,7,0.28125235330397149636,0.30259895275050354740,3859,31,2,2478.8000000000000000,4426.6000000000000000,0.00464817114520385585,29,2,0.00343797234455997028,0.00522343206830832603 +"50",834795,24,2,516250.400000000000,842048.800000000000,22067327.2199999,37,3,17793412.5153333,24268239.6479999,41646277.3499999,23,2,27302522.2180001,43789158.0460001,49743695,32,2,31143567.0666667,49943344.1333333,59.5879167939434,33,4,58.1256021996465,59.655662213022,0.529875144290657,33,4,0.458221056681841,0.530602038513927,0.65364811222138,18,9,0.630296086791595,0.655361082546318,512058,20,3,453808.800000000000,620402.200000000000,0.61339370743715522973,14,11,0.59192194217101520257,0.62569429464074621940,85532,17,3,84929.666666666666,117676.999999999999,0.10245868746219131643,2,14,0.10059004557617977157,0.10543564364242790650,0.59615114810831033999,18,6,0.59029234709938394065,0.59730050647643006970,532864,21,2,338437.000000000000,549965.000000000000,0.63831719164585317353,17,10,0.63464896429999826589,0.65376351064561001195,75470,18,2,52392.266666666667,87493.533333333334,0.09040542887774842926,6,12,0.09011689671691558212,0.09436353755750873427,192806,37,3,174421.466666666666,241536.199999999999,0.23096209248977293827,39,4,0.21721255496437534324,0.23855915441090739428,3843,33,2,2478.8000000000000000,4426.6000000000000000,0.00460352541641960002,30,2,0.00343797234455997028,0.00522343206830832603 +"36",473826,42,1,190452.000000000000,516250.400000000000,18551615.2400001,41,3,17793412.5153333,24268239.6479999,25698493.6,41,1,10815886.39,27302522.2180001,31978895,41,2,31143567.0666667,49943344.1333333,67.4907983099281,17,10,67.3059622798992,68.8360222932747,0.721895046797611,21,7,0.675364002178098,0.747744984010184,0.580755489052486,30,7,0.58016609528215,0.605231091036872,238759,44,1,120622.000000000000,287215.400000000000,0.50389594492493024866,31,8,0.49060488476182215208,0.52437723723155316891,29982,44,1,19435.000000000000,52182.333333333333,0.06327639259981512201,39,6,0.06182526104619469213,0.06667085911244282706,0.56093656193716229738,46,1,0.55525155021415329540,0.56225970959119942445,280241,41,1,126909.000000000000,338437.000000000000,0.59144285032902373445,29,7,0.57730532526316302771,0.59641987160877477377,29978,44,1,17291.000000000000,52392.266666666667,0.06326795068231798171,41,5,0.06039041083276351707,0.06463705167335666922,131144,41,2,107306.733333333333,174421.466666666666,0.27677670706124189048,28,6,0.25990575385743944532,0.28125235330397149636,2132,43,1,531.0000000000000000,2478.8000000000000000,0.00449954202597578014,31,2,0.00343797234455997028,0.00522343206830832603 +"31",816381,27,2,516250.400000000000,842048.800000000000,28928912.7299999,28,4,24268239.6479999,30743066.7806666,42606133.0199998,22,2,27302522.2180001,43789158.0460001,50708720,31,3,49943344.1333333,68743121.2,62.1140374408518,29,6,61.1857222263974,62.7157822397729,0.678984706648227,24,7,0.675364002178098,0.747744984010184,0.595598039720272,27,7,0.58016609528215,0.605231091036872,350487,35,2,287215.400000000000,453808.800000000000,0.42931792876120340870,43,6,0.42306017982236011842,0.45683253229209113525,46398,34,1,19435.000000000000,52182.333333333333,0.05683375776751296270,46,4,0.05213406491369842227,0.05697966297994655720,0.59278417173154015259,22,6,0.59029234709938394065,0.59730050647643006970,498632,22,2,338437.000000000000,549965.000000000000,0.61078344547460070727,23,8,0.59641987160877477377,0.61553441795438651983,45477,34,1,17291.000000000000,52392.266666666667,0.05570560804330331059,46,3,0.05189712915157721277,0.05614376999217036492,233921,33,3,174421.466666666666,241536.199999999999,0.28653410601177636422,25,7,0.28125235330397149636,0.30259895275050354740,3635,35,2,2478.8000000000000000,4426.6000000000000000,0.00445257790173950643,32,2,0.00343797234455997028,0.00522343206830832603 +"22",876420,21,3,842048.800000000000,1167847.200000000000,39580494.7799997,14,6,37217893.9133332,43692721.0459999,40966683.2799997,25,2,27302522.2180001,43789158.0460001,56151285,23,3,49943344.1333333,68743121.2,64.0689224344492,23,7,62.7157822397729,64.2458422531483,0.966163028368061,15,11,0.964887929506441,1.03726891133853,0.508604823492186,36,4,0.504971108017981,0.530036103772704,422244,30,2,287215.400000000000,453808.800000000000,0.48178270692133908400,37,7,0.45683253229209113525,0.49060488476182215208,32951,42,1,19435.000000000000,52182.333333333333,0.03759727071495401748,50,1,0.03759727071495401748,0.04244286878120215241,0.62447270189068617037,6,10,0.61832498460756845685,0.62533314398461458590,473402,24,2,338437.000000000000,549965.000000000000,0.54015426393738162068,36,5,0.53907623257193953559,0.55819077891755128165,38040,40,1,17291.000000000000,52392.266666666667,0.04340384747039090847,50,1,0.04340384747039090847,0.04765048831098406062,238335,31,3,174421.466666666666,241536.199999999999,0.27194153488053672897,30,6,0.25990575385743944532,0.28125235330397149636,3752,34,2,2478.8000000000000000,4426.6000000000000000,0.00428105246343077520,33,2,0.00343797234455997028,0.00522343206830832603 +"13",315842,47,1,190452.000000000000,516250.400000000000,11406965.55,47,2,11318585.3826666,17793412.5153333,18754217.11,46,1,10815886.39,27302522.2180001,22074815,46,1,12343790,31143567.0666667,69.8919554714066,10,11,68.8360222932747,70.3660823066502,0.608234696393576,30,6,0.602983020346013,0.675364002178098,0.621799792183612,21,8,0.605231091036872,0.630296086791595,139329,47,1,120622.000000000000,287215.400000000000,0.44113512452428746019,40,6,0.42306017982236011842,0.45683253229209113525,25600,47,1,19435.000000000000,52182.333333333333,0.08105318482025823038,27,9,0.07636205524493909692,0.08120765331118723185,0.59835937500000000000,15,7,0.59730050647643006970,0.60430866585347619875,197213,47,1,126909.000000000000,338437.000000000000,0.62440397413896821829,21,9,0.61553441795438651983,0.63464896429999826589,23633,47,1,17291.000000000000,52392.266666666667,0.07482538737723292026,33,8,0.07313033335454297352,0.07737697419513612567,78192,47,1,40192.000000000000,107306.733333333333,0.24756682138537623242,33,5,0.23855915441090739428,0.25990575385743944532,1280,48,1,531.0000000000000000,2478.8000000000000000,0.00405265924101291152,34,2,0.00343797234455997028,0.00522343206830832603 +"35",1141752,14,3,842048.800000000000,1167847.200000000000,37529170.4299997,20,6,37217893.9133332,43692721.0459999,55296182.21,15,3,43789158.0460001,60275793.8740002,66358735,15,3,49943344.1333333,68743121.2,58.1200952571136,40,3,56.5955421862711,58.1256021996465,0.678693698734463,25,7,0.675364002178098,0.747744984010184,0.595701288897362,26,7,0.58016609528215,0.605231091036872,479322,25,3,453808.800000000000,620402.200000000000,0.41981270888949614277,44,5,0.38928782735262910159,0.42306017982236011842,66862,19,2,52182.333333333333,84929.666666666666,0.05856087836938319355,44,5,0.05697966297994655720,0.06182526104619469213,0.58212437557955191290,29,4,0.57627602834529168255,0.58328418772233781160,684875,14,3,549965.000000000000,761493.000000000000,0.59984567576846810866,27,8,0.59641987160877477377,0.61553441795438651983,66751,20,2,52392.266666666667,87493.533333333334,0.05846365935859976597,45,4,0.05614376999217036492,0.06039041083276351707,339313,18,5,308650.933333333332,375765.666666666665,0.29718625410772216734,22,7,0.28125235330397149636,0.30259895275050354740,4585,28,3,4426.6000000000000000,6374.4000000000000000,0.00401575823821635522,35,2,0.00343797234455997028,0.00522343206830832603 +"30",724676,32,2,516250.400000000000,842048.800000000000,24805137.4699999,34,4,24268239.6479999,30743066.7806666,37949667.3499998,34,2,27302522.2180001,43789158.0460001,45268890,33,2,31143567.0666667,49943344.1333333,62.4677649045918,27,6,61.1857222263974,62.7157822397729,0.653632540207233,27,6,0.602983020346013,0.675364002178098,0.604729270672601,24,7,0.58016609528215,0.605231091036872,362755,34,2,287215.400000000000,453808.800000000000,0.50057542957128427049,33,8,0.49060488476182215208,0.52437723723155316891,45167,35,1,19435.000000000000,52182.333333333333,0.06232716413956030005,41,6,0.06182526104619469213,0.06667085911244282706,0.59749374543361303607,17,7,0.59730050647643006970,0.60430866585347619875,446214,26,2,338437.000000000000,549965.000000000000,0.61574275952287643029,22,9,0.61553441795438651983,0.63464896429999826589,43734,35,1,17291.000000000000,52392.266666666667,0.06034972870634600842,43,4,0.05614376999217036492,0.06039041083276351707,194945,36,3,174421.466666666666,241536.199999999999,0.26900987475782280633,31,6,0.25990575385743944532,0.28125235330397149636,2498,39,2,2478.8000000000000000,4426.6000000000000000,0.00344705771958778820,36,2,0.00343797234455997028,0.00522343206830832603 +"2",2081261,3,6,1819444.000000000000,2145242.400000000000,34313927.6099997,24,5,30743066.7806666,37217893.9133332,109396506.740001,3,6,93249065.5300003,109735701.358,117298610,4,6,106342675.333333,125142452.4,56.3593946170134,46,2,55.0654821728956,56.5955421862711,0.313665661112492,47,2,0.31345909301767,0.385840074849756,0.761228697378859,4,14,0.755621065565209,0.780686061319932,825312,5,5,786995.600000000000,953589.000000000000,0.39654421045702581272,46,5,0.38928782735262910159,0.42306017982236011842,179269,4,5,150424.333333333332,183171.666666666665,0.08613480000826422059,15,11,0.08605325137743536678,0.09089884944368350171,0.57652466405234591591,32,4,0.57627602834529168255,0.58328418772233781160,1482622,4,7,1396077.000000000000,1607605.000000000000,0.71236716586723145247,5,14,0.71110714968244525013,0.73022169602805699619,175963,4,5,157696.066666666668,192797.333333333335,0.08454633993526040223,13,10,0.08162361503572927782,0.08587025587632242997,388546,9,6,375765.666666666665,442880.399999999998,0.18668778207058124858,47,2,0.17451935607131124116,0.19586595551784329220,7169,21,4,6374.4000000000000000,8322.2000000000000000,0.00344454635915437804,37,2,0.00343797234455997028,0.00522343206830832603 +"1",1720717,8,5,1493645.600000000000,1819444.000000000000,39402474.2999997,16,6,37217893.9133332,43692721.0459999,92243562.2200004,6,5,76762429.7020002,93249065.5300003,100835215,8,5,87542898.2666667,106342675.333333,58.6006966863232,38,4,58.1256021996465,59.655662213022,0.427156902354064,44,3,0.385840074849756,0.458221056681841,0.700693804830094,7,11,0.680426078301041,0.705491074055763,598783,14,3,453808.800000000000,620402.200000000000,0.34798459014468968459,48,3,0.32174312241316706793,0.35551547488289808476,120036,8,4,117676.999999999999,150424.333333333332,0.06975929220202973528,35,7,0.06667085911244282706,0.07151645717869096199,0.57179512812822819821,34,3,0.56926786896824555350,0.57627602834529168255,1184804,6,6,1184549.000000000000,1396077.000000000000,0.68855250456641039753,6,12,0.67287805699122175801,0.69199260333683350407,110457,8,3,87493.533333333334,122594.800000000001,0.06419242676163483013,40,5,0.06039041083276351707,0.06463705167335666922,392455,7,6,375765.666666666665,442880.399999999998,0.22807643557888949781,41,4,0.21721255496437534324,0.23855915441090739428,5904,25,3,4426.6000000000000000,6374.4000000000000000,0.00343112783798846644,38,1,0.00165251262081161453,0.00343797234455997028 +"23",586017,38,2,516250.400000000000,842048.800000000000,18173351.9400001,42,3,17793412.5153333,24268239.6479999,31391524.1399998,38,2,27302522.2180001,43789158.0460001,38360925,39,2,31143567.0666667,49943344.1333333,65.460430328813,21,8,64.2458422531483,65.7759022665238,0.578925440477203,31,5,0.530602038513927,0.602983020346013,0.633342128997407,20,9,0.630296086791595,0.655361082546318,367245,33,2,287215.400000000000,453808.800000000000,0.62667977208852302920,13,12,0.62569429464074621940,0.65946664711047723623,49687,31,1,19435.000000000000,52182.333333333333,0.08478764267930793817,17,10,0.08120765331118723185,0.08605325137743536678,0.66037394086984523115,1,16,0.66037394086984523115,0.66738210024689136020,366692,34,2,338437.000000000000,549965.000000000000,0.62573611345745942524,20,9,0.61553441795438651983,0.63464896429999826589,48924,33,1,17291.000000000000,52392.266666666667,0.08348563266935942131,16,10,0.08162361503572927782,0.08587025587632242997,116541,44,2,107306.733333333333,174421.466666666666,0.19886965736488873190,45,3,0.19586595551784329220,0.21721255496437534324,1946,44,1,531.0000000000000000,2478.8000000000000000,0.00332072277766685949,39,1,0.00165251262081161453,0.00343797234455997028 +"33",1050654,17,3,842048.800000000000,1167847.200000000000,32177662.1299997,27,5,30743066.7806666,37217893.9133332,49939312.2599998,19,3,43789158.0460001,60275793.8740002,60318910,18,3,49943344.1333333,68743121.2,57.4108222116891,44,3,56.5955421862711,58.1256021996465,0.644335307672494,28,6,0.602983020346013,0.675364002178098,0.608148469070745,23,8,0.605231091036872,0.630296086791595,523115,19,3,453808.800000000000,620402.200000000000,0.49789464466893953671,35,8,0.49060488476182215208,0.52437723723155316891,63967,22,2,52182.333333333333,84929.666666666666,0.06088303095024622759,42,5,0.05697966297994655720,0.06182526104619469213,0.56951240483374239842,37,3,0.56926786896824555350,0.57627602834529168255,637366,19,3,549965.000000000000,761493.000000000000,0.60663738966396168482,25,8,0.59641987160877477377,0.61553441795438651983,64088,21,2,52392.266666666667,87493.533333333334,0.06099819731329248259,42,5,0.06039041083276351707,0.06463705167335666922,285781,24,4,241536.199999999999,308650.933333333332,0.27200296196464297476,29,6,0.25990575385743944532,0.28125235330397149636,3457,36,2,2478.8000000000000000,4426.6000000000000000,0.00329033154587523581,40,1,0.00165251262081161453,0.00343797234455997028 +"45",506116,40,1,190452.000000000000,516250.400000000000,13315767.5100001,44,2,11318585.3826666,17793412.5153333,26014386.3099998,40,1,10815886.39,27302522.2180001,29975170,43,1,12343790,31143567.0666667,59.2258889266492,35,4,58.1256021996465,59.655662213022,0.511861681122249,36,4,0.458221056681841,0.530602038513927,0.661436170045466,15,10,0.655361082546318,0.680426078301041,254672,43,1,120622.000000000000,287215.400000000000,0.50318899224683669356,32,8,0.49060488476182215208,0.52437723723155316891,43204,37,1,19435.000000000000,52182.333333333333,0.08536382963589374768,16,10,0.08120765331118723185,0.08605325137743536678,0.57103508934357929821,36,3,0.56926786896824555350,0.57627602834529168255,324662,38,1,126909.000000000000,338437.000000000000,0.64147744785780334943,15,10,0.63464896429999826589,0.65376351064561001195,40439,37,1,17291.000000000000,52392.266666666667,0.07990065518576768962,23,9,0.07737697419513612567,0.08162361503572927782,124336,42,2,107306.733333333333,174421.466666666666,0.24566700124082226209,34,5,0.23855915441090739428,0.25990575385743944532,1664,46,1,531.0000000000000000,2478.8000000000000000,0.00328778382821329498,41,1,0.00165251262081161453,0.00343797234455997028 +"38",338755,46,1,190452.000000000000,516250.400000000000,9475390.26000005,48,1,4843758.24999999,11318585.3826666,18162118.3000001,47,1,10815886.39,27302522.2180001,21045140,47,1,12343790,31143567.0666667,62.124957565202,28,6,61.1857222263974,62.7157822397729,0.52171173557437,35,4,0.458221056681841,0.530602038513927,0.657154687462899,16,10,0.655361082546318,0.680426078301041,193668,46,1,120622.000000000000,287215.400000000000,0.57170521468317810807,22,10,0.55814958970128418574,0.59192194217101520257,27821,45,1,19435.000000000000,52182.333333333333,0.08212720107452288527,26,10,0.08120765331118723185,0.08605325137743536678,0.58319255238848351964,28,4,0.57627602834529168255,0.58328418772233781160,216416,44,1,126909.000000000000,338437.000000000000,0.63885699104072264616,16,10,0.63464896429999826589,0.65376351064561001195,26880,46,1,17291.000000000000,52392.266666666667,0.07934938229694026656,26,9,0.07737697419513612567,0.08162361503572927782,78006,48,1,40192.000000000000,107306.733333333333,0.23027261590234830482,40,4,0.21721255496437534324,0.23855915441090739428,1095,49,1,531.0000000000000000,2478.8000000000000000,0.00323242461365883898,42,1,0.00165251262081161453,0.00343797234455997028 +"40",1035475,19,3,842048.800000000000,1167847.200000000000,24739246.7699998,35,4,24268239.6479999,30743066.7806666,52325994.64,17,3,43789158.0460001,60275793.8740002,60002300,20,3,49943344.1333333,68743121.2,57.9466428450711,43,3,56.5955421862711,58.1256021996465,0.472790759931167,41,4,0.458221056681841,0.530602038513927,0.67898307567243,10,10,0.655361082546318,0.680426078301041,629109,12,4,620402.200000000000,786995.600000000000,0.60755595258214828943,17,11,0.59192194217101520257,0.62569429464074621940,93797,13,3,84929.666666666666,117676.999999999999,0.09058354861295540694,8,11,0.08605325137743536678,0.09089884944368350171,0.58122328006226211926,31,4,0.57627602834529168255,0.58328418772233781160,682688,15,3,549965.000000000000,761493.000000000000,0.65929935536830923006,11,11,0.65376351064561001195,0.67287805699122175801,85430,16,2,52392.266666666667,87493.533333333334,0.08250319901494483208,20,10,0.08162361503572927782,0.08587025587632242997,244927,28,4,241536.199999999999,308650.933333333332,0.23653588932615466332,37,4,0.21721255496437534324,0.23855915441090739428,3172,38,2,2478.8000000000000000,4426.6000000000000000,0.00306332842415316642,43,1,0.00165251262081161453,0.00343797234455997028 +"14",654187,35,2,516250.400000000000,842048.800000000000,27332523.5199998,31,4,24268239.6479999,30743066.7806666,33849359.0099999,36,2,27302522.2180001,43789158.0460001,44167570,35,2,31143567.0666667,49943344.1333333,67.5152058967849,16,10,67.3059622798992,68.8360222932747,0.807475364952264,19,8,0.747744984010184,0.820125965842269,0.553257886326108,32,5,0.530036103772704,0.555101099527427,309904,39,2,287215.400000000000,453808.800000000000,0.47372387406047506294,38,7,0.45683253229209113525,0.49060488476182215208,30127,43,1,19435.000000000000,52182.333333333333,0.04605258129556227806,48,2,0.04244286878120215241,0.04728846684745028734,0.59760347860722939556,16,7,0.59730050647643006970,0.60430866585347619875,371205,33,2,338437.000000000000,549965.000000000000,0.56742949645896356852,33,6,0.55819077891755128165,0.57730532526316302771,31640,43,1,17291.000000000000,52392.266666666667,0.04836537564947025850,49,2,0.04765048831098406062,0.05189712915157721277,163766,40,2,107306.733333333333,174421.466666666666,0.25033514881830424634,32,5,0.23855915441090739428,0.25990575385743944532,1830,45,1,531.0000000000000000,2478.8000000000000000,0.00279736527934673113,44,1,0.00165251262081161453,0.00343797234455997028 +"39",489431,41,1,190452.000000000000,516250.400000000000,12737420.3500001,45,2,11318585.3826666,17793412.5153333,25690237.8799999,42,1,10815886.39,27302522.2180001,29627010,44,1,12343790,31143567.0666667,60.5335787884298,32,5,59.655662213022,61.1857222263974,0.4958078009825,38,4,0.458221056681841,0.530602038513927,0.668535088092978,13,10,0.655361082546318,0.680426078301041,264550,41,1,120622.000000000000,287215.400000000000,0.54052563078350165805,25,9,0.52437723723155316891,0.55814958970128418574,43295,36,1,19435.000000000000,52182.333333333333,0.08845986461830166050,9,11,0.08605325137743536678,0.09089884944368350171,0.56734033953112368634,39,2,0.56225970959119942445,0.56926786896824555350,317324,39,1,126909.000000000000,338437.000000000000,0.64835288324605511298,13,10,0.63464896429999826589,0.65376351064561001195,38707,39,1,17291.000000000000,52392.266666666667,0.07908571381869967370,27,9,0.07737697419513612567,0.08162361503572927782,113241,45,2,107306.733333333333,174421.466666666666,0.23137275734475339731,38,4,0.21721255496437534324,0.23855915441090739428,1369,47,1,531.0000000000000000,2478.8000000000000000,0.00279712564181672187,45,1,0.00165251262081161453,0.00343797234455997028 +"41",190452,50,1,190452.000000000000,516250.400000000000,4843758.24999999,50,1,4843758.24999999,11318585.3826666,10815886.39,50,1,10815886.39,27302522.2180001,12343790,50,1,12343790,31143567.0666667,64.8131287673534,22,8,64.2458422531483,65.7759022665238,0.447837382470876,42,3,0.385840074849756,0.458221056681841,0.690685302166603,9,11,0.680426078301041,0.705491074055763,120622,50,1,120622.000000000000,287215.400000000000,0.63334593493373658455,11,12,0.62569429464074621940,0.65946664711047723623,19435,50,1,19435.000000000000,52182.333333333333,0.10204670993216138450,3,14,0.10059004557617977157,0.10543564364242790650,0.55857988165680473373,48,1,0.55525155021415329540,0.56225970959119942445,126909,50,1,126909.000000000000,338437.000000000000,0.66635687732342007435,9,11,0.65376351064561001195,0.67287805699122175801,17291,50,1,17291.000000000000,52392.266666666667,0.09078928023859030097,5,12,0.09011689671691558212,0.09436353755750873427,40192,50,1,40192.000000000000,107306.733333333333,0.21103480141978031210,43,3,0.19586595551784329220,0.21721255496437534324,531,50,1,531.0000000000000000,2478.8000000000000000,0.00278810408921933086,46,1,0.00165251262081161453,0.00343797234455997028 +"32",1099169,15,3,842048.800000000000,1167847.200000000000,20204816.65,39,3,17793412.5153333,24268239.6479999,60947934.3899999,13,4,60275793.8740002,76762429.7020002,65082795,16,3,49943344.1333333,68743121.2,59.2109084226356,36,4,58.1256021996465,59.655662213022,0.331509457247744,46,2,0.31345909301767,0.385840074849756,0.751027335597765,5,13,0.730556069810486,0.755621065565209,453655,28,2,287215.400000000000,453808.800000000000,0.41272543166701389868,45,5,0.38928782735262910159,0.42306017982236011842,91317,14,3,84929.666666666666,117676.999999999999,0.08307821636163319744,22,10,0.08120765331118723185,0.08605325137743536678,0.56471412770896985227,41,2,0.56225970959119942445,0.56926786896824555350,784444,11,4,761493.000000000000,973021.000000000000,0.71367005437744332309,4,14,0.71110714968244525013,0.73022169602805699619,87672,14,3,87493.533333333334,122594.800000000001,0.07976207480378358560,24,9,0.07737697419513612567,0.08162361503572927782,215369,34,3,174421.466666666666,241536.199999999999,0.19593802226955090618,46,3,0.19586595551784329220,0.21721255496437534324,2422,41,1,531.0000000000000000,2478.8000000000000000,0.00220348281292503701,47,1,0.00165251262081161453,0.00343797234455997028 +"44",2557809,2,8,2471040.800000000000,2796839.200000000000,35163836.0399997,22,5,30743066.7806666,37217893.9133332,130911821.000001,2,8,126222337.186,142708973.014,139465885,2,7,125142452.4,143942229.466667,54.525527512023,49,1,53.5354221595202,55.0654821728956,0.268607034654262,49,1,0.241078111185585,0.31345909301767,0.788266163345479,2,15,0.780686061319932,0.805751057074654,650191,10,4,620402.200000000000,786995.600000000000,0.25419841747370503427,50,1,0.25419841747370503427,0.28797076994343605110,222787,2,7,215918.999999999998,248666.333333333331,0.08710071784093339260,13,11,0.08605325137743536678,0.09089884944368350171,0.57159080197677602374,35,3,0.56926786896824555350,0.57627602834529168255,1889004,2,9,1819133.000000000000,2030661.000000000000,0.73852426041193849893,2,15,0.73022169602805699619,0.74933624237366874225,221904,2,6,192797.333333333335,227898.600000000002,0.08675550050844296818,9,11,0.08587025587632242997,0.09011689671691558212,417234,5,6,375765.666666666665,442880.399999999998,0.16312164043523187228,49,1,0.15317275662477919012,0.17451935607131124116,4767,27,3,4426.6000000000000000,6374.4000000000000000,0.00186370444392055857,48,1,0.00165251262081161453,0.00343797234455997028 +"47",1285899,10,4,1167847.200000000000,1493645.600000000000,20694283.7,38,3,17793412.5153333,24268239.6479999,67405310.76,10,4,60275793.8740002,76762429.7020002,71657255,12,4,68743121.2,87542898.2666667,55.7254146709812,47,2,55.0654821728956,56.5955421862711,0.307012659190654,48,1,0.241078111185585,0.31345909301767,0.765103530534458,3,14,0.755621065565209,0.780686061319932,491125,24,3,453808.800000000000,620402.200000000000,0.38193124032291805188,47,4,0.35551547488289808476,0.38928782735262910159,112251,9,3,84929.666666666666,117676.999999999999,0.08729379212519801322,12,11,0.08605325137743536678,0.09089884944368350171,0.58146475309796794683,30,4,0.57627602834529168255,0.58328418772233781160,935361,9,4,761493.000000000000,973021.000000000000,0.72739849708258580184,3,14,0.71110714968244525013,0.73022169602805699619,100829,12,3,87493.533333333334,122594.800000000001,0.07841129046682515501,28,9,0.07737697419513612567,0.08162361503572927782,238421,30,3,174421.466666666666,241536.199999999999,0.18541191804332999715,48,2,0.17451935607131124116,0.19586595551784329220,2331,42,1,531.0000000000000000,2478.8000000000000000,0.00181273956974847947,49,1,0.00165251262081161453,0.00343797234455997028 +"43",2070786,4,6,1819444.000000000000,2145242.400000000000,26186850.8999998,32,4,24268239.6479999,30743066.7806666,108623925.960001,4,6,93249065.5300003,109735701.358,114324850,5,6,106342675.333333,125142452.4,55.2084329331954,48,2,55.0654821728956,56.5955421862711,0.241078111185585,50,1,0.241078111185585,0.31345909301767,0.805751057074654,1,16,0.805751057074654,0.830816052829377,649644,11,4,620402.200000000000,786995.600000000000,0.31371855903990079129,49,2,0.28797076994343605110,0.32174312241316706793,181143,3,5,150424.333333333332,183171.666666666665,0.08747548032486215379,11,11,0.08605325137743536678,0.09089884944368350171,0.55558315805744632694,49,1,0.55525155021415329540,0.56225970959119942445,1551715,3,7,1396077.000000000000,1607605.000000000000,0.74933624237366874221,1,16,0.74933624237366874225,0.76845078871928048831,168445,6,5,157696.066666666668,192797.333333333335,0.08134350917960619784,22,9,0.07737697419513612567,0.08162361503572927782,317188,21,5,308650.933333333332,375765.666666666665,0.15317275662477919012,50,1,0.15317275662477919012,0.17451935607131124116,3422,37,2,2478.8000000000000000,4426.6000000000000000,0.00165251262081161453,50,1,0.00165251262081161453,0.00343797234455997028 \ No newline at end of file diff --git a/bulletproof/wardstotals5yr.csv b/bulletproof/wardstotals5yr.csv new file mode 100644 index 0000000..27e560c --- /dev/null +++ b/bulletproof/wardstotals5yr.csv @@ -0,0 +1,51 @@ +"ward","ticket_count","ticket_count_rank","ticket_count_bucket","ticket_count_bucket_min","ticket_count_bucket_max","current_amount_due","current_amount_due_rank","current_amount_due_bucket","current_amount_due_bucket_min","current_amount_due_bucket_max","total_payments","total_payments_rank","total_payments_bucket","total_payments_bucket_min","total_payments_bucket_max","fine_level1_amount","fine_level1_amount_rank","fine_level1_amount_bucket","fine_level1_amount_bucket_min","fine_level1_amount_bucket_max","avg_per_ticket","avg_per_ticket_rank","avg_per_ticket_bucket","avg_per_ticket_bucket_min","avg_per_ticket_bucket_max","debt_to_payment_ratio","debt_to_payment_ratio_rank","debt_to_payment_ratio_bucket","debt_to_payment_ratio_bucket_min","debt_to_payment_ratio_bucket_max","paid_pct","paid_pct_rank","paid_pct_bucket","paid_pct_bucket_min","paid_pct_bucket_max","police_ticket_count","police_ticket_count_rank","police_ticket_count_bucket","police_ticket_count_bucket_min","police_ticket_count_bucket_max","police_ticket_count_pct","police_ticket_count_pct_rank","police_ticket_count_pct_bucket","police_ticket_count_pct_bucket_min","police_ticket_count_pct_bucket_max","contested_ticket_count","contested_ticket_count_rank","contested_ticket_count_bucket","contested_ticket_count_bucket_min","contested_ticket_count_bucket_max","contested_ticket_count_pct","contested_ticket_count_pct_rank","contested_ticket_count_pct_bucket","contested_ticket_count_pct_bucket_min","contested_ticket_count_pct_bucket_max","contested_and_notliable_pct","contested_and_notliable_pct_rank","contested_and_notliable_pct_bucket","contested_and_notliable_pct_bucket_min","contested_and_notliable_pct_bucket_max","paid_ticket_count","paid_ticket_count_rank","paid_ticket_count_bucket","paid_ticket_count_bucket_min","paid_ticket_count_bucket_max","paid_ticket_count_pct","paid_ticket_count_pct_rank","paid_ticket_count_pct_bucket","paid_ticket_count_pct_bucket_min","paid_ticket_count_pct_bucket_max","dismissed_ticket_count","dismissed_ticket_count_rank","dismissed_ticket_count_bucket","dismissed_ticket_count_bucket_min","dismissed_ticket_count_bucket_max","dismissed_ticket_count_pct","dismissed_ticket_count_pct_rank","dismissed_ticket_count_pct_bucket","dismissed_ticket_count_pct_bucket_min","dismissed_ticket_count_pct_bucket_max","seized_or_suspended_ticket_count","seized_or_suspended_ticket_count_rank","seized_or_suspended_ticket_count_bucket","seized_or_suspended_ticket_count_bucket_min","seized_or_suspended_ticket_count_bucket_max","seized_or_suspended_ticket_count_pct","seized_or_suspended_ticket_count_pct_rank","seized_or_suspended_ticket_count_pct_bucket","seized_or_suspended_ticket_count_pct_bucket_min","seized_or_suspended_ticket_count_pct_bucket_max","bankruptcy_ticket_count","bankruptcy_ticket_count_rank","bankruptcy_ticket_count_bucket","bankruptcy_ticket_count_bucket_min","bankruptcy_ticket_count_bucket_max","bankruptcy_ticket_count_pct","bankruptcy_ticket_count_pct_rank","bankruptcy_ticket_count_pct_bucket","bankruptcy_ticket_count_pct_bucket_min","bankruptcy_ticket_count_pct_bucket_max" +"29",178039,27,2,116212.933333333333,186318.866666666666,18032288.23,10,10,17904628.16,19734661.8533333,11117463.61,30,2,8065105.74066665,12792886.4113333,17479075,21,3,14797993.8,20221593.2,98.1755401906324,6,13,98.0102744590823,100.208328895007,1.62197861513846,10,12,1.5372595183848,1.65876039447746,0.381391363844969,41,2,0.364238073103873,0.397707704139285,118452,11,9,109096.933333333336,120360.800000000003,0.66531490291452996254,9,12,0.63189745109758159706,0.67525874749454273858,18725,22,2,14822.4666666666666667,23616.9333333333333334,0.10517358556271378743,27,11,0.10461750604925252918,0.10984187826426158914,0.65719626168224299065,11,10,0.65585262970174900251,0.66409761205024730352,81025,33,1,33403.000000000000,83228.066666666667,0.45509691696763068766,39,3,0.44674467215032260886,0.47501400076412762716,15668,20,2,11797.5333333333333333,19042.0666666666666666,0.08800319031223495976,19,11,0.08558336577811418151,0.08998673796830118103,78182,7,8,76508.6666666666666669,86470.3333333333333336,0.43912850555215430327,5,14,0.41691243805596258010,0.44215200960069768215,8099,4,11,7525.0000000000000000,8260.8000000000000000,0.04549003308263919703,1,16,0.04549003308263919707,0.04843003292022425045 +"34",117807,40,2,116212.933333333333,186318.866666666666,14008860.87,16,7,12414527.08,14244560.7733333,7282777.20000003,41,1,3337325.07,8065105.74066665,12323135,38,2,9374394.4,14797993.8,104.604437766856,1,16,104.604437766856,106.802492202781,1.92356026901385,2,15,1.90176214666277,2.02326302275543,0.342048703629876,49,1,0.330768442068462,0.364238073103873,94875,16,7,86569.200000000002,97833.066666666669,0.80534263668542616313,1,16,0.80534263668542616314,0.84870393308238730466,13107,36,1,6028.0000000000000000,14822.4666666666666667,0.11125824441671547531,15,12,0.10984187826426158914,0.11506625047927064910,0.66437781338216220340,7,11,0.66409761205024730352,0.67234259439874560453,45969,47,1,33403.000000000000,83228.066666666667,0.39020601492271257226,50,1,0.39020601492271257226,0.41847534353651759056,10928,33,1,4553.0000000000000000,11797.5333333333333333,0.09276189021025915268,10,12,0.08998673796830118103,0.09439011015848818055,55062,20,5,46623.6666666666666668,56585.3333333333333335,0.46739158114543278413,1,16,0.46739158114543278420,0.49263115269016788625,5119,16,7,4581.8000000000000000,5317.6000000000000000,0.04345242642627348120,2,15,0.04255003324505414369,0.04549003308263919707 +"24",210131,18,3,186318.866666666666,256424.799999999999,23100283.56,3,12,21564695.5466666,23394729.24,11417340.85,26,2,8065105.74066665,12792886.4113333,19847895,13,3,14797993.8,20221593.2,94.4548638706331,13,11,93.6141655872332,95.8122200231577,2.02326302275543,1,16,2.02326302275543,2.14476389884808,0.330768442068462,50,1,0.330768442068462,0.364238073103873,138921,7,11,131624.666666666670,142888.533333333337,0.66111616087107566232,10,12,0.63189745109758159706,0.67525874749454273858,18255,25,2,14822.4666666666666667,23616.9333333333333334,0.08687437836397295021,40,7,0.08372001718921628934,0.08894438940422534930,0.67110380717611613257,4,11,0.66409761205024730352,0.67234259439874560453,88325,31,2,83228.066666666667,133053.133333333334,0.42033303034773546026,48,2,0.41847534353651759056,0.44674467215032260886,15085,24,2,11797.5333333333333333,19042.0666666666666666,0.07178855095154927164,38,7,0.06796987701736618343,0.07237324920755318295,97201,4,10,96432.0000000000000003,106393.6666666666666670,0.46257334710252176024,2,15,0.44215200960069768215,0.46739158114543278420,9018,2,13,8996.6000000000000000,9732.4000000000000000,0.04291608567988540482,3,15,0.04255003324505414369,0.04549003308263919707 +"6",203418,21,3,186318.866666666666,256424.799999999999,21274015.74,5,11,19734661.8533333,21564695.5466666,11971217.6,23,2,8065105.74066665,12792886.4113333,19595595,14,3,14797993.8,20221593.2,96.3316668141462,11,12,95.8122200231577,98.0102744590823,1.7770970715627,6,13,1.65876039447746,1.78026127057011,0.360088241149341,45,1,0.330768442068462,0.364238073103873,145500,5,12,142888.533333333337,154152.400000000004,0.71527593428310179040,6,13,0.67525874749454273858,0.71862004389150388010,21574,18,2,14822.4666666666666667,23616.9333333333333334,0.10605747770600438506,23,11,0.10461750604925252918,0.10984187826426158914,0.65690182627236488366,12,10,0.65585262970174900251,0.66409761205024730352,86155,32,2,83228.066666666667,133053.133333333334,0.42353675682584628696,47,2,0.41847534353651759056,0.44674467215032260886,17553,17,2,11797.5333333333333333,19042.0666666666666666,0.08629029879361708403,24,11,0.08558336577811418151,0.08998673796830118103,90170,6,9,86470.3333333333333336,96432.0000000000000003,0.44327443982341778997,3,15,0.44215200960069768215,0.46739158114543278420,8718,3,12,8260.8000000000000000,8996.6000000000000000,0.04285756422735451140,4,15,0.04255003324505414369,0.04549003308263919707 +"17",174707,31,2,116212.933333333333,186318.866666666666,19067489,9,10,17904628.16,19734661.8533333,10617409.84,34,2,8065105.74066665,12792886.4113333,17580450,20,3,14797993.8,20221593.2,100.628194634445,3,14,100.208328895007,102.406383330931,1.79587011214027,4,14,1.78026127057011,1.90176214666277,0.357670406667958,47,1,0.330768442068462,0.364238073103873,125729,9,10,120360.800000000003,131624.666666666670,0.71965633889884206128,5,14,0.71862004389150388010,0.76198134028846502162,18663,23,2,14822.4666666666666667,23616.9333333333333334,0.10682456913575300360,21,11,0.10461750604925252918,0.10984187826426158914,0.66307667577559877833,8,10,0.65585262970174900251,0.66409761205024730352,74088,36,1,33403.000000000000,83228.066666666667,0.42407001436691145747,46,2,0.41847534353651759056,0.44674467215032260886,15235,23,2,11797.5333333333333333,19042.0666666666666666,0.08720314583846096607,21,11,0.08558336577811418151,0.08998673796830118103,76590,10,8,76508.6666666666666669,86470.3333333333333336,0.43839113487152775790,6,14,0.41691243805596258010,0.44215200960069768215,7299,8,10,6789.2000000000000000,7525.0000000000000000,0.04177852060879071817,5,14,0.03961003340746909031,0.04255003324505414369 +"21",146967,38,2,116212.933333333333,186318.866666666666,15494269.34,11,8,14244560.7733333,16074594.4666666,9605733.15000002,37,2,8065105.74066665,12792886.4113333,15166580,27,3,14797993.8,20221593.2,103.197180319391,2,15,102.406383330931,104.604437766856,1.61302308715499,11,12,1.5372595183848,1.65876039447746,0.3826984939076,40,2,0.364238073103873,0.397707704139285,103734,13,8,97833.066666666669,109096.933333333336,0.70583192145175447549,7,13,0.67525874749454273858,0.71862004389150388010,18310,24,2,14822.4666666666666667,23616.9333333333333334,0.12458579136813026053,4,14,0.12029062269427970906,0.12551499490928876902,0.65319497542326597488,15,9,0.64760764735325070150,0.65585262970174900251,63914,41,1,33403.000000000000,83228.066666666667,0.43488674328250559649,43,2,0.41847534353651759056,0.44674467215032260886,14664,25,2,11797.5333333333333333,19042.0666666666666666,0.09977750107166915022,3,14,0.09879348234867518007,0.10319685453886217959,63115,16,6,56585.3333333333333335,66547.0000000000000002,0.42945014867283131587,8,14,0.41691243805596258010,0.44215200960069768215,6046,10,8,5317.6000000000000000,6053.4000000000000000,0.04113848687120237877,6,14,0.03961003340746909031,0.04255003324505414369 +"37",183310,24,2,116212.933333333333,186318.866666666666,19276442.75,8,10,17904628.16,19734661.8533333,11051917.32,31,2,8065105.74066665,12792886.4113333,18425175,16,3,14797993.8,20221593.2,100.51374720419,4,14,100.208328895007,102.406383330931,1.74417182031542,8,13,1.65876039447746,1.78026127057011,0.36440866880014,43,2,0.364238073103873,0.397707704139285,144035,6,12,142888.533333333337,154152.400000000004,0.78574545851290164203,2,15,0.76198134028846502162,0.80534263668542616314,19395,21,2,14822.4666666666666667,23616.9333333333333334,0.10580437510228574546,24,11,0.10461750604925252918,0.10984187826426158914,0.69028100025779840165,3,14,0.68883255909574220655,0.69707754144424050756,78223,35,1,33403.000000000000,83228.066666666667,0.42672521957340025094,45,2,0.41847534353651759056,0.44674467215032260886,16729,19,2,11797.5333333333333333,19042.0666666666666666,0.09126070590802465768,13,12,0.08998673796830118103,0.09439011015848818055,77607,8,8,76508.6666666666666669,86470.3333333333333336,0.42336479188260324041,10,14,0.41691243805596258010,0.44215200960069768215,7416,7,10,6789.2000000000000000,7525.0000000000000000,0.04045605804375102286,7,14,0.03961003340746909031,0.04255003324505414369 +"7",142450,39,2,116212.933333333333,186318.866666666666,15294881.31,12,8,14244560.7733333,16074594.4666666,8225866.56000001,39,2,8065105.74066665,12792886.4113333,13945980,35,2,9374394.4,14797993.8,97.9008775008775,7,12,95.8122200231577,98.0102744590823,1.85936414096171,3,14,1.78026127057011,1.90176214666277,0.349728104117464,48,1,0.330768442068462,0.364238073103873,84193,22,6,75305.333333333335,86569.200000000002,0.59103545103545103545,13,11,0.58853615470062045554,0.63189745109758159706,15958,31,2,14822.4666666666666667,23616.9333333333333334,0.11202527202527202527,14,12,0.10984187826426158914,0.11506625047927064910,0.64776287755357814262,16,9,0.64760764735325070150,0.65585262970174900251,58594,42,1,33403.000000000000,83228.066666666667,0.41133029133029133029,49,1,0.39020601492271257226,0.41847534353651759056,12883,30,2,11797.5333333333333333,19042.0666666666666666,0.09043875043875043875,14,12,0.08998673796830118103,0.09439011015848818055,63034,17,6,56585.3333333333333335,66547.0000000000000002,0.44249912249912249912,4,15,0.44215200960069768215,0.46739158114543278420,5610,14,8,5317.6000000000000000,6053.4000000000000000,0.03938223938223938224,8,13,0.03667003356988403693,0.03961003340746909031 +"8",152703,36,2,116212.933333333333,186318.866666666666,15058378.0400001,13,8,14244560.7733333,16074594.4666666,9422614.91000001,38,2,8065105.74066665,12792886.4113333,14824765,30,3,14797993.8,20221593.2,97.082342848536,9,12,95.8122200231577,98.0102744590823,1.59811031054861,12,12,1.5372595183848,1.65876039447746,0.384895127793417,39,2,0.364238073103873,0.397707704139285,92153,17,7,86569.200000000002,97833.066666666669,0.60347864809466742631,11,11,0.58853615470062045554,0.63189745109758159706,18036,26,2,14822.4666666666666667,23616.9333333333333334,0.11811162845523663582,10,13,0.11506625047927064910,0.12029062269427970906,0.64354624085163007319,20,8,0.63936266500475240049,0.64760764735325070150,68111,40,1,33403.000000000000,83228.066666666667,0.44603576877991918954,40,2,0.41847534353651759056,0.44674467215032260886,14642,26,2,11797.5333333333333333,19042.0666666666666666,0.09588547703712435250,7,13,0.09439011015848818055,0.09879348234867518007,63467,15,6,56585.3333333333333335,66547.0000000000000002,0.41562379259084628331,12,13,0.39167286651122747805,0.41691243805596258010,5918,12,8,5317.6000000000000000,6053.4000000000000000,0.03875496879563597310,9,13,0.03667003356988403693,0.03961003340746909031 +"9",107928,42,1,46107.000000000000,116212.933333333333,10878638.69,20,6,10584493.3866667,12414527.08,6593845.89000001,44,1,3337325.07,8065105.74066665,10442390,41,2,9374394.4,14797993.8,96.7532984952932,10,12,95.8122200231577,98.0102744590823,1.6498169462071,9,12,1.5372595183848,1.65876039447746,0.377384559122615,42,2,0.364238073103873,0.397707704139285,74041,29,5,64041.466666666668,75305.333333333335,0.68602216292343043510,8,13,0.67525874749454273858,0.71862004389150388010,11928,37,1,6028.0000000000000000,14822.4666666666666667,0.11051812319323993774,17,12,0.10984187826426158914,0.11506625047927064910,0.65568410462776659960,13,9,0.64760764735325070150,0.65585262970174900251,46915,46,1,33403.000000000000,83228.066666666667,0.43468794010822029501,44,2,0.41847534353651759056,0.44674467215032260886,9697,37,1,4553.0000000000000000,11797.5333333333333333,0.08984693499369950337,15,11,0.08558336577811418151,0.08998673796830118103,45375,24,4,36662.0000000000000001,46623.6666666666666668,0.42041916833444518568,11,14,0.41691243805596258010,0.44215200960069768215,4063,18,6,3846.0000000000000000,4581.8000000000000000,0.03764546734860277222,10,13,0.03667003356988403693,0.03961003340746909031 +"28",316065,9,4,256424.799999999999,326530.733333333332,28884829.32,1,15,27054796.6266666,28884830.32,19156229.02,9,4,17520667.0819999,22248447.7526666,29826215,7,5,25645192.6,31068792,94.3673453245377,14,11,93.6141655872332,95.8122200231577,1.50785571052856,13,11,1.41575864229215,1.5372595183848,0.398747023523629,38,3,0.397707704139285,0.431177335174697,187944,1,16,187944.000000000005,199207.866666666672,0.59463717906126904276,12,11,0.58853615470062045554,0.63189745109758159706,33385,10,4,32411.4000000000000001,41205.8666666666666668,0.10562700710296932593,25,11,0.10461750604925252918,0.10984187826426158914,0.65424591882581997903,14,9,0.64760764735325070150,0.65585262970174900251,159462,13,3,133053.133333333334,182878.200000000001,0.50452280385363770111,38,5,0.50328332937793264546,0.53155265799173766376,26798,10,4,26286.5999999999999999,33531.1333333333333332,0.08478635723664436113,26,10,0.08117999358792718199,0.08558336577811418151,118635,2,12,116355.3333333333333337,126317.0000000000000004,0.37535000711878885672,13,12,0.36643329496649237600,0.39167286651122747805,11204,1,16,11204.0000000000000000,11939.8000000000000000,0.03544840460031955452,11,12,0.03373003373229898355,0.03667003356988403693 +"20",215139,16,3,186318.866666666666,256424.799999999999,22035401.83,4,12,21564695.5466666,23394729.24,12379069.66,22,2,8065105.74066665,12792886.4113333,20395455,12,4,20221593.2,25645192.6,94.8012912582098,12,11,93.6141655872332,95.8122200231577,1.78005314092399,5,13,1.65876039447746,1.78026127057011,0.359705354289607,46,1,0.330768442068462,0.364238073103873,157945,4,13,154152.400000000004,165416.266666666671,0.73415326835208864966,4,14,0.71862004389150388010,0.76198134028846502162,22614,16,2,14822.4666666666666667,23616.9333333333333334,0.10511343828873426018,28,11,0.10461750604925252918,0.10984187826426158914,0.66834704165561156806,5,11,0.66409761205024730352,0.67234259439874560453,93815,30,2,83228.066666666667,133053.133333333334,0.43606691487828799055,42,2,0.41847534353651759056,0.44674467215032260886,18968,16,2,11797.5333333333333333,19042.0666666666666666,0.08816625530470997820,18,11,0.08558336577811418151,0.08998673796830118103,94286,5,9,86470.3333333333333336,96432.0000000000000003,0.43825619715625711749,7,14,0.41691243805596258010,0.44215200960069768215,7474,6,10,6789.2000000000000000,7525.0000000000000000,0.03474033066993896969,12,12,0.03373003373229898355,0.03667003356988403693 +"16",180960,26,2,116212.933333333333,186318.866666666666,19329711.04,7,10,17904628.16,19734661.8533333,10959581.51,32,2,8065105.74066665,12792886.4113333,17894615,19,3,14797993.8,20221593.2,98.8871297524315,5,13,98.0102744590823,100.208328895007,1.76372711151084,7,13,1.65876039447746,1.78026127057011,0.361830224060483,44,1,0.330768442068462,0.364238073103873,137418,8,11,131624.666666666670,142888.533333333337,0.75938328912466843501,3,14,0.71862004389150388010,0.76198134028846502162,16116,30,2,14822.4666666666666667,23616.9333333333333334,0.08905835543766578249,38,8,0.08894438940422534930,0.09416876161923440926,0.66114420451724993795,9,10,0.65585262970174900251,0.66409761205024730352,79887,34,1,33403.000000000000,83228.066666666667,0.44146220159151193634,41,2,0.41847534353651759056,0.44674467215032260886,12926,29,2,11797.5333333333333333,19042.0666666666666666,0.07143015030946065429,39,7,0.06796987701736618343,0.07237324920755318295,77247,9,8,76508.6666666666666669,86470.3333333333333336,0.42687334217506631300,9,14,0.41691243805596258010,0.44215200960069768215,5818,13,8,5317.6000000000000000,6053.4000000000000000,0.03215075154730327144,13,11,0.03079003389471393017,0.03373003373229898355 +"18",67538,48,1,46107.000000000000,116212.933333333333,5366924.69,36,3,5094392.30666666,6924425.99999999,4658677.13,48,1,3337325.07,8065105.74066665,6557875,47,1,3950795,9374394.4,97.0990405401404,8,12,95.8122200231577,98.0102744590823,1.15202761218183,14,8,1.05125601401418,1.17275689010684,0.464678052613903,37,5,0.464646966210108,0.49811659724552,33328,45,2,30249.866666666667,41513.733333333334,0.49347034262193135716,20,8,0.45845226550973703098,0.50181356190669817250,7276,47,1,6028.0000000000000000,14822.4666666666666667,0.10773194349847493263,20,11,0.10461750604925252918,0.10984187826426158914,0.62740516767454645410,26,6,0.62287270030775579847,0.63111768265625409948,35226,48,1,33403.000000000000,83228.066666666667,0.52157304036246261364,37,5,0.50328332937793264546,0.53155265799173766376,5700,47,1,4553.0000000000000000,11797.5333333333333333,0.08439693209748585981,27,10,0.08117999358792718199,0.08558336577811418151,21407,43,2,16738.6666666666666667,26700.3333333333333334,0.31696230270366312298,14,10,0.31595415187702217190,0.34119372342175727395,1857,21,3,1638.6000000000000000,2374.4000000000000000,0.02749563208860197222,14,9,0.02491003421954382341,0.02785003405712887679 +"5",252766,12,3,186318.866666666666,256424.799999999999,14890392.69,14,8,14244560.7733333,16074594.4666666,16868621.98,12,3,12792886.4113333,17520667.0819999,21611250,11,4,20221593.2,25645192.6,85.4990386365255,22,7,84.8219478435349,87.0200022794595,0.882727273612186,18,6,0.808254261828873,0.929755137921528,0.531144374448567,33,6,0.49811659724552,0.531586228280931,91094,19,7,86569.200000000002,97833.066666666669,0.36038865986722897858,31,5,0.32836837631885360642,0.37172967271581474794,28719,11,3,23616.9333333333333334,32411.4000000000000001,0.11361892026617503936,11,12,0.10984187826426158914,0.11506625047927064910,0.59740938054946202862,48,2,0.58989277091376259443,0.59813775326226089544,152297,15,3,133053.133333333334,182878.200000000001,0.60252169991217173196,33,8,0.58809131521934770036,0.61636064383315271866,22041,11,3,19042.0666666666666666,26286.5999999999999999,0.08719922774423775350,22,11,0.08558336577811418151,0.08998673796830118103,73358,12,7,66547.0000000000000002,76508.6666666666666669,0.29022099491229041881,15,8,0.26547500878755196780,0.29071458033228706985,6016,11,8,5317.6000000000000000,6053.4000000000000000,0.02380066939382670138,15,8,0.02197003438195877003,0.02491003421954382341 +"10",86829,45,1,46107.000000000000,116212.933333333333,6310531.51,32,3,5094392.30666666,6924425.99999999,5655745.37000001,46,1,3337325.07,8065105.74066665,7933680,45,1,3950795,9374394.4,91.3713160349653,16,9,89.2180567153841,91.4161111513086,1.11577362437022,15,8,1.05125601401418,1.17275689010684,0.472640356454798,36,5,0.464646966210108,0.49811659724552,46982,41,3,41513.733333333334,52777.600000000001,0.54108650335717329464,17,9,0.50181356190669817250,0.54517485830365931402,8259,45,1,6028.0000000000000000,14822.4666666666666667,0.09511799053311681581,35,9,0.09416876161923440926,0.09939313383424346922,0.64438794042862332001,19,8,0.63936266500475240049,0.64760764735325070150,48721,45,1,33403.000000000000,83228.066666666667,0.56111437422980801345,36,7,0.55982198660554268206,0.58809131521934770036,6913,45,1,4553.0000000000000000,11797.5333333333333333,0.07961625724124428474,33,9,0.07677662139774018247,0.08117999358792718199,24747,40,2,16738.6666666666666667,26700.3333333333333334,0.28500846491379608195,16,8,0.26547500878755196780,0.29071458033228706985,1779,23,3,1638.6000000000000000,2374.4000000000000000,0.02048854645337387278,16,7,0.01903003454437371665,0.02197003438195877003 +"3",302444,10,4,256424.799999999999,326530.733333333332,14677878.0200001,15,8,14244560.7733333,16074594.4666666,19120819.4,10,4,17520667.0819999,22248447.7526666,23925780,10,4,20221593.2,25645192.6,79.1081324145958,34,4,78.2277845357613,80.4258389716858,0.767638546912906,21,5,0.686753385736217,0.808254261828873,0.565726517871231,30,8,0.565055859316343,0.598525490351755,121799,10,10,120360.800000000003,131624.666666666670,0.40271587467431987409,24,6,0.37172967271581474794,0.41509096911277588946,37159,8,4,32411.4000000000000001,41205.8666666666666668,0.12286241419899221013,6,14,0.12029062269427970906,0.12551499490928876902,0.63997954735057455798,21,8,0.63936266500475240049,0.64760764735325070150,189630,10,4,182878.200000000001,232703.266666666668,0.62699210432344500139,31,9,0.61636064383315271866,0.64462997244695773696,29240,8,4,26286.5999999999999999,33531.1333333333333332,0.09667905463490761926,5,13,0.09439011015848818055,0.09879348234867518007,75971,11,7,66547.0000000000000002,76508.6666666666666669,0.25119030299824099668,18,7,0.24023543724281686575,0.26547500878755196780,5330,15,8,5317.6000000000000000,6053.4000000000000000,0.01762309716840142307,17,6,0.01609003470678866327,0.01903003454437371665 +"19",54040,49,1,46107.000000000000,116212.933333333333,3041710.27,48,1,1434324.92,3264358.61333333,4256569.88,49,1,3337325.07,8065105.74066665,5095965,49,1,3950795,9374394.4,94.2998704663212,15,11,93.6141655872332,95.8122200231577,0.714591879318565,23,5,0.686753385736217,0.808254261828873,0.583229170779365,28,8,0.565055859316343,0.598525490351755,31428,46,2,30249.866666666667,41513.733333333334,0.58156920799407846040,14,10,0.54517485830365931402,0.58853615470062045554,6666,49,1,6028.0000000000000000,14822.4666666666666667,0.12335307179866765359,5,14,0.12029062269427970906,0.12551499490928876902,0.61671167116711671167,32,5,0.61462771795925749746,0.62287270030775579847,34346,49,1,33403.000000000000,83228.066666666667,0.63556624722427831236,30,9,0.61636064383315271866,0.64462997244695773696,4972,49,1,4553.0000000000000000,11797.5333333333333333,0.09200592153960029608,11,12,0.08998673796830118103,0.09439011015848818055,13511,48,1,6777.0000000000000000,16738.6666666666666667,0.25001850481125092524,19,7,0.24023543724281686575,0.26547500878755196780,922,34,2,902.8000000000000000,1638.6000000000000000,0.01706143597335307180,18,6,0.01609003470678866327,0.01903003454437371665 +"27",417998,6,6,396636.666666666665,466742.599999999998,19636563.0400001,6,10,17904628.16,19734661.8533333,27227027.19,6,6,26976228.4233332,31704009.0939999,34127255,3,6,31068792,36492391.4,81.6445413614419,29,5,80.4258389716858,82.6238934076104,0.721215830981807,22,5,0.686753385736217,0.808254261828873,0.580984663282806,29,8,0.565055859316343,0.598525490351755,163333,3,13,154152.400000000004,165416.266666666671,0.39075067344819831674,28,6,0.37172967271581474794,0.41509096911277588946,49808,3,5,41205.8666666666666668,50000.3333333333333335,0.11915846487303767004,8,13,0.11506625047927064910,0.12029062269427970906,0.62700770960488274976,27,6,0.62287270030775579847,0.63111768265625409948,269176,7,5,232703.266666666668,282528.333333333335,0.64396480365934765238,29,9,0.61636064383315271866,0.64462997244695773696,38938,4,5,33531.1333333333333332,40775.6666666666666665,0.09315355575863999349,9,12,0.08998673796830118103,0.09439011015848818055,97251,3,10,96432.0000000000000003,106393.6666666666666670,0.23265900793783702314,21,6,0.21499586569808176370,0.24023543724281686575,7043,9,10,6789.2000000000000000,7525.0000000000000000,0.01684936291561203642,19,6,0.01609003470678866327,0.01903003454437371665 +"4",319150,8,4,256424.799999999999,326530.733333333332,12240977.91,17,6,10584493.3866667,12414527.08,21537954.94,8,4,17520667.0819999,22248447.7526666,25166825,9,4,20221593.2,25645192.6,78.8557888140373,35,4,78.2277845357613,80.4258389716858,0.568344485077654,29,4,0.565252509643562,0.686753385736217,0.63761501985993,22,10,0.631995121387166,0.665464752422578,91715,18,7,86569.200000000002,97833.066666666669,0.28737270875763747454,38,4,0.28500707992189246490,0.32836837631885360642,37795,7,4,32411.4000000000000001,41205.8666666666666668,0.11842393858687137710,9,13,0.11506625047927064910,0.12029062269427970906,0.63182960709088503770,24,7,0.63111768265625409948,0.63936266500475240049,213201,8,4,182878.200000000001,232703.266666666668,0.66802757324142252859,23,10,0.64462997244695773696,0.67289930106076275526,29761,7,4,26286.5999999999999999,33531.1333333333333332,0.09325082249725834247,8,12,0.08998673796830118103,0.09439011015848818055,68936,13,7,66547.0000000000000002,76508.6666666666666669,0.21599874667084443052,23,6,0.21499586569808176370,0.24023543724281686575,4293,17,6,3846.0000000000000000,4581.8000000000000000,0.01345135516214945950,20,5,0.01315003486920360989,0.01609003470678866327 +"15",176710,30,2,116212.933333333333,186318.866666666666,11919359.48,18,6,10584493.3866667,12414527.08,11301877.84,28,2,8065105.74066665,12792886.4113333,15718650,26,3,14797993.8,20221593.2,88.9516722313395,18,8,87.0200022794595,89.2180567153841,1.05463531359493,16,8,1.05125601401418,1.17275689010684,0.486704376870819,35,5,0.464646966210108,0.49811659724552,95557,15,7,86569.200000000002,97833.066666666669,0.54075604097108256465,18,9,0.50181356190669817250,0.54517485830365931402,10953,40,1,6028.0000000000000000,14822.4666666666666667,0.06198290985230037915,48,2,0.05759815611417098954,0.06282252832918004950,0.66794485529078791199,6,11,0.66409761205024730352,0.67234259439874560453,102375,27,2,83228.066666666667,133053.133333333334,0.57933903004923320695,35,7,0.55982198660554268206,0.58809131521934770036,9094,38,1,4553.0000000000000000,11797.5333333333333333,0.05146284873521589044,48,3,0.05035638825661818535,0.05475976044680518487,47093,23,5,46623.6666666666666668,56585.3333333333333335,0.26649878331729953030,17,8,0.26547500878755196780,0.29071458033228706985,2054,20,3,1638.6000000000000000,2374.4000000000000000,0.01162356403146398053,21,4,0.01021003503161855651,0.01315003486920360989 +"26",226812,14,3,186318.866666666666,256424.799999999999,9987974.60000002,22,5,8754459.69333332,10584493.3866667,14823534.4,15,3,12792886.4113333,17520667.0819999,18184610,17,3,14797993.8,20221593.2,80.1748143837187,32,4,78.2277845357613,80.4258389716858,0.673791710565329,24,4,0.565252509643562,0.686753385736217,0.597445903028308,27,8,0.565055859316343,0.598525490351755,74488,27,5,64041.466666666668,75305.333333333335,0.32841295874997795531,34,5,0.32836837631885360642,0.37172967271581474794,17125,28,2,14822.4666666666666667,23616.9333333333333334,0.07550305980283230164,45,5,0.07327127275919816942,0.07849564497420722938,0.63071532846715328467,25,6,0.62287270030775579847,0.63111768265625409948,150550,17,3,133053.133333333334,182878.200000000001,0.66376558559511842407,25,10,0.64462997244695773696,0.67289930106076275526,13273,27,2,11797.5333333333333333,19042.0666666666666666,0.05851983140221857750,44,4,0.05475976044680518487,0.05916313263699218439,48617,22,5,46623.6666666666666668,56585.3333333333333335,0.21434932895966703702,24,5,0.18975629415334666165,0.21499586569808176370,1729,24,3,1638.6000000000000000,2374.4000000000000000,0.00762305345396187151,22,3,0.00727003519403350313,0.01021003503161855651 +"49",204934,20,3,186318.866666666666,256424.799999999999,7079900.96000001,30,4,6924425.99999999,8754459.69333332,13968025.51,18,3,12792886.4113333,17520667.0819999,16262345,24,3,14797993.8,20221593.2,79.354060331619,33,4,78.2277845357613,80.4258389716858,0.506864836045105,31,3,0.443751633550907,0.565252509643562,0.663629528063436,20,10,0.631995121387166,0.665464752422578,112258,12,9,109096.933333333336,120360.800000000003,0.54777635726624181444,16,10,0.54517485830365931402,0.58853615470062045554,20050,20,2,14822.4666666666666667,23616.9333333333333334,0.09783637658953614334,32,9,0.09416876161923440926,0.09939313383424346922,0.60488778054862842893,42,3,0.59813775326226089544,0.60638273561075919645,142865,18,3,133053.133333333334,182878.200000000001,0.69712687987352025530,19,11,0.67289930106076275526,0.70116862967456777356,15304,22,2,11797.5333333333333333,19042.0666666666666666,0.07467770111352923380,36,8,0.07237324920755318295,0.07677662139774018247,38241,29,4,36662.0000000000000001,46623.6666666666666668,0.18660154000800257644,30,4,0.16451672260861155960,0.18975629415334666165,1536,26,2,902.8000000000000000,1638.6000000000000000,0.00749509598212107313,23,3,0.00727003519403350313,0.01021003503161855651 +"22",178028,28,2,116212.933333333333,186318.866666666666,10069360.79,21,5,8754459.69333332,10584493.3866667,11160900.09,29,2,8065105.74066665,12792886.4113333,14870870,29,3,14797993.8,20221593.2,83.5310737636776,25,6,82.6238934076104,84.8219478435349,0.902199706905538,17,6,0.808254261828873,0.929755137921528,0.525707157019165,34,6,0.49811659724552,0.531586228280931,73718,30,5,64041.466666666668,75305.333333333335,0.41408093108949154066,22,6,0.37172967271581474794,0.41509096911277588946,9324,42,1,6028.0000000000000000,14822.4666666666666667,0.05237378389916192958,50,1,0.05237378389916192958,0.05759815611417098954,0.64768339768339768340,17,9,0.64760764735325070150,0.65585262970174900251,109144,26,2,83228.066666666667,133053.133333333334,0.61307210101781742198,32,8,0.58809131521934770036,0.61636064383315271866,7397,43,1,4553.0000000000000000,11797.5333333333333333,0.04154964387624418631,50,1,0.04154964387624418631,0.04595301606643118583,39126,27,4,36662.0000000000000001,46623.6666666666666668,0.21977441750735839306,22,6,0.21499586569808176370,0.24023543724281686575,1273,27,2,902.8000000000000000,1638.6000000000000000,0.00715056058597523985,24,2,0.00433003535644844975,0.00727003519403350313 +"12",168623,32,2,116212.933333333333,186318.866666666666,9066727.10000002,23,5,8754459.69333332,10584493.3866667,11517581.89,25,2,8065105.74066665,12792886.4113333,14301470,33,2,9374394.4,14797993.8,84.8132816994123,23,6,82.6238934076104,84.8219478435349,0.787207522081705,20,5,0.686753385736217,0.808254261828873,0.559532112328634,31,7,0.531586228280931,0.565055859316343,62916,33,4,52777.600000000001,64041.466666666668,0.37311636016439038565,30,6,0.37172967271581474794,0.41509096911277588946,11560,39,1,6028.0000000000000000,14822.4666666666666667,0.06855529791309607823,47,4,0.06804690054418910946,0.07327127275919816942,0.63754325259515570934,22,7,0.63111768265625409948,0.63936266500475240049,109421,25,2,83228.066666666667,133053.133333333334,0.64890910492637421941,27,10,0.64462997244695773696,0.67289930106076275526,8991,39,1,4553.0000000000000000,11797.5333333333333333,0.05332012833361996881,47,3,0.05035638825661818535,0.05475976044680518487,40860,25,4,36662.0000000000000001,46623.6666666666666668,0.24231569833296762601,20,7,0.24023543724281686575,0.26547500878755196780,1184,29,2,902.8000000000000000,1638.6000000000000000,0.00702158068590880248,25,2,0.00433003535644844975,0.00727003519403350313 +"42",1097695,1,15,1027590.066666666662,1097695.999999999995,27697067.77,2,15,27054796.6266666,28884830.32,74254034.1299997,1,15,69526254.4593331,74254035.1299997,85304785,1,15,79881186.6,85304786,77.7126478666661,37,3,76.0297300998367,78.2277845357613,0.373004215791286,41,2,0.322250757458251,0.443751633550907,0.728329883112327,10,12,0.69893438345799,0.732404014493401,184335,2,15,176680.133333333338,187944.000000000005,0.16792916065027170571,48,1,0.15492319073100904034,0.19828448712797018186,137945,1,16,137945.0000000000000005,146739.4666666666666672,0.12566787677815786717,3,15,0.12551499490928876902,0.13073936712429782898,0.69084780166008191671,2,14,0.68883255909574220655,0.69707754144424050756,780779,1,16,780779.000000000005,830604.066666666672,0.71128956586301294986,16,12,0.70116862967456777356,0.72943795828837279186,113221,1,16,113220.9999999999999995,120465.5333333333333328,0.10314431604407417361,2,14,0.09879348234867518007,0.10319685453886217959,156202,1,16,156202.0000000000000005,166163.6666666666666672,0.14230000136649980186,42,3,0.13927715106387645755,0.16451672260861155960,7547,5,11,7525.0000000000000000,8260.8000000000000000,0.00687531600307917955,26,2,0.00433003535644844975,0.00727003519403350313 +"31",183242,25,2,116212.933333333333,186318.866666666666,7876282.99000001,28,4,6924425.99999999,8754459.69333332,12785113.27,20,2,8065105.74066665,12792886.4113333,15044270,28,3,14797993.8,20221593.2,82.1005555494919,27,5,80.4258389716858,82.6238934076104,0.616051091896193,27,4,0.565252509643562,0.686753385736217,0.618792317281659,24,9,0.598525490351755,0.631995121387166,56659,35,4,52777.600000000001,64041.466666666668,0.30920313028672465919,36,4,0.28500707992189246490,0.32836837631885360642,13718,34,1,6028.0000000000000000,14822.4666666666666667,0.07486274980626712217,46,5,0.07327127275919816942,0.07849564497420722938,0.62377897652719055256,28,6,0.62287270030775579847,0.63111768265625409948,125857,21,2,83228.066666666667,133053.133333333334,0.68683489592997238624,22,11,0.67289930106076275526,0.70116862967456777356,10352,35,1,4553.0000000000000000,11797.5333333333333333,0.05649359862913524192,46,4,0.05475976044680518487,0.05916313263699218439,38705,28,4,36662.0000000000000001,46623.6666666666666668,0.21122340948035930627,25,5,0.18975629415334666165,0.21499586569808176370,1242,28,2,902.8000000000000000,1638.6000000000000000,0.00677792209209679004,27,2,0.00433003535644844975,0.00727003519403350313 +"11",186103,22,2,116212.933333333333,186318.866666666666,5533809.51,35,3,5094392.30666666,6924425.99999999,12727716.86,21,2,8065105.74066665,12792886.4113333,14383755,32,2,9374394.4,14797993.8,77.2892161867353,38,3,76.0297300998367,78.2277845357613,0.434784146353173,37,2,0.322250757458251,0.443751633550907,0.696968950027588,14,11,0.665464752422578,0.69893438345799,50779,40,3,41513.733333333334,52777.600000000001,0.27285427961935057468,41,3,0.24164578352493132338,0.28500707992189246490,20583,19,2,14822.4666666666666667,23616.9333333333333334,0.11060004406162179008,16,12,0.10984187826426158914,0.11506625047927064910,0.60549968420541223340,41,3,0.59813775326226089544,0.60638273561075919645,136385,20,3,133053.133333333334,182878.200000000001,0.73284686437080541421,12,13,0.72943795828837279186,0.75770728690217781016,15370,21,2,11797.5333333333333333,19042.0666666666666666,0.08258867401385254402,29,10,0.08117999358792718199,0.08558336577811418151,30509,34,3,26700.3333333333333334,36662.0000000000000001,0.16393609990166735625,33,3,0.13927715106387645755,0.16451672260861155960,1120,32,2,902.8000000000000000,1638.6000000000000000,0.00601817273230415415,28,2,0.00433003535644844975,0.00727003519403350313 +"36",110165,41,1,46107.000000000000,116212.933333333333,4954107.83,40,2,3264358.61333333,5094392.30666666,7718598.14,40,1,3337325.07,8065105.74066665,9439130,42,2,9374394.4,14797993.8,85.6817501021196,21,7,84.8219478435349,87.0200022794595,0.641840362737164,26,4,0.565252509643562,0.686753385736217,0.609072613084544,25,9,0.598525490351755,0.631995121387166,43913,42,3,41513.733333333334,52777.600000000001,0.39861117414786910543,26,6,0.37172967271581474794,0.41509096911277588946,8720,44,1,6028.0000000000000000,14822.4666666666666667,0.07915399627830980802,44,6,0.07849564497420722938,0.08372001718921628934,0.65917431192660550459,10,10,0.65585262970174900251,0.66409761205024730352,72668,38,1,33403.000000000000,83228.066666666667,0.65962873871011664322,26,10,0.64462997244695773696,0.67289930106076275526,8148,41,1,4553.0000000000000000,11797.5333333333333333,0.07396178459583352244,37,8,0.07237324920755318295,0.07677662139774018247,22366,42,2,16738.6666666666666667,26700.3333333333333334,0.20302273861934371171,26,5,0.18975629415334666165,0.21499586569808176370,624,39,1,167.0000000000000000,902.8000000000000000,0.00566423092633776608,29,2,0.00433003535644844975,0.00727003519403350313 +"50",177127,29,2,116212.933333333333,186318.866666666666,5262148.44000001,39,3,5094392.30666666,6924425.99999999,11382994.94,27,2,8065105.74066665,12792886.4113333,13604835,37,2,9374394.4,14797993.8,76.8083634906028,40,3,76.0297300998367,78.2277845357613,0.462281540819169,35,3,0.443751633550907,0.565252509643562,0.683862834950239,16,11,0.665464752422578,0.69893438345799,87411,21,7,86569.200000000002,97833.066666666669,0.49349336916449778972,19,8,0.45845226550973703098,0.50181356190669817250,22847,15,2,14822.4666666666666667,23616.9333333333333334,0.12898654637632884879,2,15,0.12551499490928876902,0.13073936712429782898,0.62213857399220904276,29,5,0.61462771795925749746,0.62287270030775579847,123986,22,2,83228.066666666667,133053.133333333334,0.69998362756666120919,18,11,0.67289930106076275526,0.70116862967456777356,17003,18,2,11797.5333333333333333,19042.0666666666666666,0.09599327036533109012,6,13,0.09439011015848818055,0.09879348234867518007,27476,36,3,26700.3333333333333334,36662.0000000000000001,0.15512033738504011246,35,3,0.13927715106387645755,0.16451672260861155960,994,33,2,902.8000000000000000,1638.6000000000000000,0.00561179266853726422,30,2,0.00433003535644844975,0.00727003519403350313 +"25",443235,4,6,396636.666666666665,466742.599999999998,11097151.34,19,6,10584493.3866667,12414527.08,29428144.58,4,6,26976228.4233332,31704009.0939999,32617865,5,6,31068792,36492391.4,73.5904542736923,45,1,71.6336212279876,73.8316756639122,0.3770931364644,40,2,0.322250757458251,0.443751633550907,0.726167296547158,11,12,0.69893438345799,0.732404014493401,79621,25,6,75305.333333333335,86569.200000000002,0.17963608469547756833,46,1,0.15492319073100904034,0.19828448712797018186,41555,6,5,41205.8666666666666668,50000.3333333333333335,0.09375387773979942920,36,8,0.08894438940422534930,0.09416876161923440926,0.60363373841896282036,43,3,0.59813775326226089544,0.60638273561075919645,332048,4,6,282528.333333333335,332353.400000000002,0.74914661522668561824,8,13,0.72943795828837279186,0.75770728690217781016,36014,5,5,33531.1333333333333332,40775.6666666666666665,0.08125260866131961601,30,10,0.08117999358792718199,0.08558336577811418151,66669,14,7,66547.0000000000000002,76508.6666666666666669,0.15041456563673897594,37,3,0.13927715106387645755,0.16451672260861155960,2464,19,4,2374.4000000000000000,3110.2000000000000000,0.00555912777646169639,31,2,0.00433003535644844975,0.00727003519403350313 +"46",242468,13,3,186318.866666666666,256424.799999999999,5787010.11,33,3,5094392.30666666,6924425.99999999,16103422.92,14,3,12792886.4113333,17520667.0819999,18080795,18,3,14797993.8,20221593.2,74.5698195225762,42,2,73.8316756639122,76.0297300998367,0.359365219354246,43,2,0.322250757458251,0.443751633550907,0.735637476788645,8,13,0.732404014493401,0.765873645528813,71665,31,5,64041.466666666668,75305.333333333335,0.29556477555801177887,37,4,0.28500707992189246490,0.32836837631885360642,26585,13,3,23616.9333333333333334,32411.4000000000000001,0.10964333437814474487,18,11,0.10461750604925252918,0.10984187826426158914,0.59969907842768478465,46,3,0.59813775326226089544,0.60638273561075919645,179242,11,3,133053.133333333334,182878.200000000001,0.73923981721299305475,11,13,0.72943795828837279186,0.75770728690217781016,21572,12,3,19042.0666666666666666,26286.5999999999999999,0.08896844119636405629,16,11,0.08558336577811418151,0.08998673796830118103,35492,30,3,26700.3333333333333334,36662.0000000000000001,0.14637807875678440042,40,3,0.13927715106387645755,0.16451672260861155960,1155,30,2,902.8000000000000000,1638.6000000000000000,0.00476351518550901562,32,2,0.00433003535644844975,0.00727003519403350313 +"48",161715,35,2,116212.933333333333,186318.866666666666,3843111.95999999,44,2,3264358.61333333,5094392.30666666,10572939.57,35,2,8065105.74066665,12792886.4113333,11868930,40,2,9374394.4,14797993.8,73.3941192839254,46,1,71.6336212279876,73.8316756639122,0.363485663996847,42,2,0.322250757458251,0.443751633550907,0.733414385207876,9,13,0.732404014493401,0.765873645528813,61529,34,4,52777.600000000001,64041.466666666668,0.38047800142225520205,29,6,0.37172967271581474794,0.41509096911277588946,17207,27,2,14822.4666666666666667,23616.9333333333333334,0.10640324026837337291,22,11,0.10461750604925252918,0.10984187826426158914,0.61242517580054628930,36,4,0.60638273561075919645,0.61462771795925749746,121081,23,2,83228.066666666667,133053.133333333334,0.74873079182512444733,9,13,0.72943795828837279186,0.75770728690217781016,13127,28,2,11797.5333333333333333,19042.0666666666666666,0.08117366972760721022,31,9,0.07677662139774018247,0.08117999358792718199,23758,41,2,16738.6666666666666667,26700.3333333333333334,0.14691277865380453267,39,3,0.13927715106387645755,0.16451672260861155960,740,35,1,167.0000000000000000,902.8000000000000000,0.00457595151964876480,33,2,0.00433003535644844975,0.00727003519403350313 +"13",83126,46,1,46107.000000000000,116212.933333333333,4005094.08,42,2,3264358.61333333,5094392.30666666,6039951.63000001,45,1,3337325.07,8065105.74066665,7458395,46,1,3950795,9374394.4,89.7239732454346,17,9,89.2180567153841,91.4161111513086,0.663100356649709,25,4,0.565252509643562,0.686753385736217,0.601286624707654,26,9,0.598525490351755,0.631995121387166,28907,48,1,18986.000000000000,30249.866666666667,0.34774920000962394437,32,5,0.32836837631885360642,0.37172967271581474794,7761,46,1,6028.0000000000000000,14822.4666666666666667,0.09336429035440175156,37,8,0.08894438940422534930,0.09416876161923440926,0.61242107975776317485,37,4,0.60638273561075919645,0.61462771795925749746,53565,43,1,33403.000000000000,83228.066666666667,0.64438322546495681255,28,9,0.61636064383315271866,0.64462997244695773696,5866,46,1,4553.0000000000000000,11797.5333333333333333,0.07056757211943314968,40,7,0.06796987701736618343,0.07237324920755318295,15752,46,1,6777.0000000000000000,16738.6666666666666667,0.18949546471621394028,28,4,0.16451672260861155960,0.18975629415334666165,369,45,1,167.0000000000000000,902.8000000000000000,0.00443904434232370137,34,2,0.00433003535644844975,0.00727003519403350313 +"2",455095,3,6,396636.666666666665,466742.599999999998,8484861.24000002,26,4,6924425.99999999,8754459.69333332,30311415.33,3,6,26976228.4233332,31704009.0939999,33039930,4,6,31068792,36492391.4,72.6000725123326,47,1,71.6336212279876,73.8316756639122,0.279922964586953,46,1,0.200749881365596,0.322250757458251,0.78129702151466,5,14,0.765873645528813,0.799343276564225,99033,14,8,97833.066666666669,109096.933333333336,0.21760951010228633582,44,2,0.19828448712797018186,0.24164578352493132338,47362,4,5,41205.8666666666666668,50000.3333333333333335,0.10407057867038750151,30,10,0.09939313383424346922,0.10461750604925252918,0.62153202989738609011,30,5,0.61462771795925749746,0.62287270030775579847,346824,3,7,332353.400000000002,382178.466666666669,0.76209143145936562696,6,14,0.75770728690217781016,0.78597661551598282846,40360,3,5,33531.1333333333333332,40775.6666666666666665,0.08868478010085806260,17,11,0.08558336577811418151,0.08998673796830118103,55104,19,5,46623.6666666666666668,56585.3333333333333335,0.12108241136466012591,46,2,0.11403757951914135550,0.13927715106387645755,1826,22,3,1638.6000000000000000,2374.4000000000000000,0.00401234906997440095,35,1,0.00139003551886339637,0.00433003535644844975 +"30",165844,33,2,116212.933333333333,186318.866666666666,6473144.33,31,3,5094392.30666666,6924425.99999999,11751926.58,24,2,8065105.74066665,12792886.4113333,13645955,36,2,9374394.4,14797993.8,82.2818733267408,26,5,80.4258389716858,82.6238934076104,0.550815586358096,30,3,0.443751633550907,0.565252509643562,0.644821994824272,21,10,0.631995121387166,0.665464752422578,51499,38,3,41513.733333333334,52777.600000000001,0.31052676008779334797,35,4,0.28500707992189246490,0.32836837631885360642,13436,35,1,6028.0000000000000000,14822.4666666666666667,0.08101589445503002822,42,6,0.07849564497420722938,0.08372001718921628934,0.61915748734742482882,31,5,0.61462771795925749746,0.62287270030775579847,115570,24,2,83228.066666666667,133053.133333333334,0.69685969947661657944,20,11,0.67289930106076275526,0.70116862967456777356,10077,36,1,4553.0000000000000000,11797.5333333333333333,0.06076192084127252116,43,5,0.05916313263699218439,0.06356650482717918391,31472,32,3,26700.3333333333333334,36662.0000000000000001,0.18976869829478304913,27,5,0.18975629415334666165,0.21499586569808176370,665,38,1,167.0000000000000000,902.8000000000000000,0.00400979233496538916,36,1,0.00139003551886339637,0.00433003535644844975 +"1",423120,5,6,396636.666666666665,466742.599999999998,8875342.43,24,5,8754459.69333332,10584493.3866667,28610635.01,5,6,26976228.4233332,31704009.0939999,30520260,6,5,25645192.6,31068792,72.1314520703347,48,1,71.6336212279876,73.8316756639122,0.310211305233103,45,1,0.200749881365596,0.322250757458251,0.763235667411744,6,13,0.732404014493401,0.765873645528813,74299,28,5,64041.466666666668,75305.333333333335,0.17559793911892607298,47,1,0.15492319073100904034,0.19828448712797018186,36764,9,4,32411.4000000000000001,41205.8666666666666668,0.08688788050671204386,39,7,0.08372001718921628934,0.08894438940422534930,0.60303557828310303558,44,3,0.59813775326226089544,0.60638273561075919645,330507,5,6,282528.333333333335,332353.400000000002,0.78111883153715258083,4,14,0.75770728690217781016,0.78597661551598282846,27514,9,4,26286.5999999999999999,33531.1333333333333332,0.06502647003214218189,41,6,0.06356650482717918391,0.06796987701736618343,56955,18,6,56585.3333333333333335,66547.0000000000000002,0.13460720363017583664,44,2,0.11403757951914135550,0.13927715106387645755,1586,25,2,902.8000000000000000,1638.6000000000000000,0.00374834562299111363,37,1,0.00139003551886339637,0.00433003535644844975 +"41",46107,50,1,46107.000000000000,116212.933333333333,1434324.92,50,1,1434324.92,3264358.61333333,3337325.07,50,1,3337325.07,8065105.74066665,3950795,50,1,3950795,9374394.4,85.6875311774785,20,7,84.8219478435349,87.0200022794595,0.429782802069084,38,2,0.322250757458251,0.443751633550907,0.699406929886741,13,12,0.69893438345799,0.732404014493401,18986,50,1,18986.000000000000,30249.866666666667,0.41178129134404754159,23,6,0.37172967271581474794,0.41509096911277588946,6028,50,1,6028.0000000000000000,14822.4666666666666667,0.13073936712429782896,1,16,0.13073936712429782898,0.13596373933930688894,0.60998672859986728600,38,4,0.60638273561075919645,0.61462771795925749746,33403,50,1,33403.000000000000,83228.066666666667,0.72446700067234910100,13,12,0.70116862967456777356,0.72943795828837279186,4553,50,1,4553.0000000000000000,11797.5333333333333333,0.09874856312490511202,4,13,0.09439011015848818055,0.09879348234867518007,6777,50,1,6777.0000000000000000,16738.6666666666666667,0.14698418895178606285,38,3,0.13927715106387645755,0.16451672260861155960,167,50,1,167.0000000000000000,902.8000000000000000,0.00362200967315158219,38,1,0.00139003551886339637,0.00433003535644844975 +"35",209988,19,3,186318.866666666666,256424.799999999999,7263938.16000003,29,4,6924425.99999999,8754459.69333332,14518241.8,16,3,12792886.4113333,17520667.0819999,16474535,23,3,14797993.8,20221593.2,78.4546497895118,36,4,78.2277845357613,80.4258389716858,0.500331807395577,32,3,0.443751633550907,0.565252509643562,0.666519229326943,19,11,0.665464752422578,0.69893438345799,51613,37,3,41513.733333333334,52777.600000000001,0.24579023563251233404,42,3,0.24164578352493132338,0.28500707992189246490,17099,29,2,14822.4666666666666667,23616.9333333333333334,0.08142846257881402747,41,6,0.07849564497420722938,0.08372001718921628934,0.61518217439616351833,33,5,0.61462771795925749746,0.62287270030775579847,151457,16,3,133053.133333333334,182878.200000000001,0.72126502466807627103,14,12,0.70116862967456777356,0.72943795828837279186,12767,31,2,11797.5333333333333333,19042.0666666666666666,0.06079871230736994495,42,5,0.05916313263699218439,0.06356650482717918391,39158,26,4,36662.0000000000000001,46623.6666666666666668,0.18647732251366744766,31,4,0.16451672260861155960,0.18975629415334666165,727,36,1,167.0000000000000000,902.8000000000000000,0.00346210259633883841,39,1,0.00139003551886339637,0.00433003535644844975 +"45",102532,44,1,46107.000000000000,116212.933333333333,3190051.65999999,47,1,1434324.92,3264358.61333333,7120980.72000001,42,1,3337325.07,8065105.74066665,8306840,44,1,3950795,9374394.4,81.0170483361292,31,5,80.4258389716858,82.6238934076104,0.447979258115445,36,3,0.443751633550907,0.565252509643562,0.690617627562916,15,11,0.665464752422578,0.69893438345799,28943,47,1,18986.000000000000,30249.866666666667,0.28228260445519447587,39,3,0.24164578352493132338,0.28500707992189246490,11586,38,1,6028.0000000000000000,14822.4666666666666667,0.11299886864588616237,12,12,0.10984187826426158914,0.11506625047927064910,0.61410322803383393751,34,4,0.60638273561075919645,0.61462771795925749746,73302,37,1,33403.000000000000,83228.066666666667,0.71491826941832793664,15,12,0.70116862967456777356,0.72943795828837279186,8877,40,1,4553.0000000000000000,11797.5333333333333333,0.08657784886669527562,23,11,0.08558336577811418151,0.08998673796830118103,15796,45,1,6777.0000000000000000,16738.6666666666666667,0.15405922053602777669,36,3,0.13927715106387645755,0.16451672260861155960,334,47,1,167.0000000000000000,902.8000000000000000,0.00325751960363593805,40,1,0.00139003551886339637,0.00433003535644844975 +"14",163484,34,2,116212.933333333333,186318.866666666666,8711851.92000003,25,4,6924425.99999999,8754459.69333332,10923127.66,33,2,8065105.74066665,12792886.4113333,14477660,31,2,9374394.4,14797993.8,88.5570453377701,19,8,87.0200022794595,89.2180567153841,0.797560203558036,19,5,0.686753385736217,0.808254261828873,0.556309601214263,32,7,0.531586228280931,0.565055859316343,64192,32,5,64041.466666666668,75305.333333333335,0.39265004526436837856,27,6,0.37172967271581474794,0.41509096911277588946,9052,43,1,6028.0000000000000000,14822.4666666666666667,0.05536933277874287392,49,1,0.05237378389916192958,0.05759815611417098954,0.64626601855943437914,18,8,0.63936266500475240049,0.64760764735325070150,98467,28,2,83228.066666666667,133053.133333333334,0.60230358934207628881,34,8,0.58809131521934770036,0.61636064383315271866,7081,44,1,4553.0000000000000000,11797.5333333333333333,0.04331310709304886105,49,1,0.04154964387624418631,0.04595301606643118583,30693,33,3,26700.3333333333333334,36662.0000000000000001,0.18774314305987130239,29,4,0.16451672260861155960,0.18975629415334666165,524,42,1,167.0000000000000000,902.8000000000000000,0.00320520662572484157,41,1,0.00139003551886339637,0.00433003535644844975 +"33",183762,23,2,116212.933333333333,186318.866666666666,5262403.94,38,3,5094392.30666666,6924425.99999999,12846569.08,19,3,12792886.4113333,17520667.0819999,14178250,34,2,9374394.4,14797993.8,77.1555054907979,39,3,76.0297300998367,78.2277845357613,0.409634970024229,39,2,0.322250757458251,0.443751633550907,0.709403513154056,12,12,0.69893438345799,0.732404014493401,51808,36,3,41513.733333333334,52777.600000000001,0.28192988757196808916,40,3,0.24164578352493132338,0.28500707992189246490,14832,32,2,14822.4666666666666667,23616.9333333333333334,0.08071309628758938192,43,6,0.07849564497420722938,0.08372001718921628934,0.58164778856526429342,50,1,0.58164778856526429342,0.58989277091376259443,137173,19,3,133053.133333333334,182878.200000000001,0.74647097876601255972,10,13,0.72943795828837279186,0.75770728690217781016,10597,34,1,4553.0000000000000000,11797.5333333333333333,0.05766698229231288297,45,4,0.05475976044680518487,0.05916313263699218439,28949,35,3,26700.3333333333333334,36662.0000000000000001,0.15753529021233987440,34,3,0.13927715106387645755,0.16451672260861155960,570,40,1,167.0000000000000000,902.8000000000000000,0.00310183824729813563,42,1,0.00139003551886339637,0.00433003535644844975 +"39",103665,43,1,46107.000000000000,116212.933333333333,3414796.91,46,2,3264358.61333333,5094392.30666666,7036085.46000001,43,1,3337325.07,8065105.74066665,8459935,43,1,3950795,9374394.4,81.6084020643419,30,5,80.4258389716858,82.6238934076104,0.48532624133306,34,3,0.443751633550907,0.565252509643562,0.673252765737522,17,11,0.665464752422578,0.69893438345799,34306,44,2,30249.866666666667,41513.733333333334,0.33093136545603627068,33,5,0.32836837631885360642,0.37172967271581474794,10740,41,1,6028.0000000000000000,14822.4666666666666667,0.10360295181594559398,31,10,0.09939313383424346922,0.10461750604925252918,0.60763500931098696462,40,4,0.60638273561075919645,0.61462771795925749746,71558,39,1,33403.000000000000,83228.066666666667,0.69028119423141851155,21,11,0.67289930106076275526,0.70116862967456777356,7826,42,1,4553.0000000000000000,11797.5333333333333333,0.07549317513143298124,35,8,0.07237324920755318295,0.07677662139774018247,15148,47,1,6777.0000000000000000,16738.6666666666666667,0.14612453576424058265,41,3,0.13927715106387645755,0.16451672260861155960,314,48,1,167.0000000000000000,902.8000000000000000,0.00302898760430231997,43,1,0.00139003551886339637,0.00433003535644844975 +"23",147537,37,2,116212.933333333333,186318.866666666666,5661258.23,34,3,5094392.30666666,6924425.99999999,9709988.76000002,36,2,8065105.74066665,12792886.4113333,12086345,39,2,9374394.4,14797993.8,81.9207724164108,28,5,80.4258389716858,82.6238934076104,0.583034478198509,28,4,0.565252509643562,0.686753385736217,0.631698180786308,23,9,0.598525490351755,0.631995121387166,84000,23,6,75305.333333333335,86569.200000000002,0.56934870574838853982,15,10,0.54517485830365931402,0.58853615470062045554,14185,33,1,6028.0000000000000000,14822.4666666666666667,0.09614537370286775521,34,9,0.09416876161923440926,0.09939313383424346922,0.70532252379273880860,1,16,0.70532252379273880857,0.71356750614123710958,98409,29,2,83228.066666666667,133053.133333333334,0.66701234266658533114,24,10,0.64462997244695773696,0.67289930106076275526,12221,32,2,11797.5333333333333333,19042.0666666666666666,0.08283345872560781363,28,10,0.08117999358792718199,0.08558336577811418151,20770,44,2,16738.6666666666666667,26700.3333333333333334,0.14077824545707178538,43,3,0.13927715106387645755,0.16451672260861155960,437,43,1,167.0000000000000000,902.8000000000000000,0.00296196886204816419,44,1,0.00139003551886339637,0.00433003535644844975 +"38",69827,47,1,46107.000000000000,116212.933333333333,2476610.21,49,1,1434324.92,3264358.61333333,5065106.01,47,1,3337325.07,8065105.74066665,5887125,48,1,3950795,9374394.4,84.3101522333768,24,6,82.6238934076104,84.8219478435349,0.48895525683183,33,3,0.443751633550907,0.565252509643562,0.671611853621297,18,11,0.665464752422578,0.69893438345799,27999,49,1,18986.000000000000,30249.866666666667,0.40097669955747776648,25,6,0.37172967271581474794,0.41509096911277588946,7271,48,1,6028.0000000000000000,14822.4666666666666667,0.10412877540206510376,29,10,0.09939313383424346922,0.10461750604925252918,0.60789437491404208500,39,4,0.60638273561075919645,0.61462771795925749746,49354,44,1,33403.000000000000,83228.066666666667,0.70680395835421828233,17,12,0.70116862967456777356,0.72943795828837279186,5661,48,1,4553.0000000000000000,11797.5333333333333333,0.08107179171380698011,32,9,0.07677662139774018247,0.08117999358792718199,11690,49,1,6777.0000000000000000,16738.6666666666666667,0.16741375112778724562,32,4,0.16451672260861155960,0.18975629415334666165,199,49,1,167.0000000000000000,902.8000000000000000,0.00284990046830022771,45,1,0.00139003551886339637,0.00433003535644844975 +"40",211875,17,3,186318.866666666666,256424.799999999999,4676262.2,41,2,3264358.61333333,5094392.30666666,14070858.55,17,3,12792886.4113333,17520667.0819999,15788505,25,3,14797993.8,20221593.2,74.518017699115,43,2,73.8316756639122,76.0297300998367,0.332336664701955,44,2,0.322250757458251,0.443751633550907,0.750561045487479,7,13,0.732404014493401,0.765873645528813,90689,20,7,86569.200000000002,97833.066666666669,0.42803067846607669617,21,7,0.41509096911277588946,0.45845226550973703098,25292,14,3,23616.9333333333333334,32411.4000000000000001,0.11937227138643067847,7,13,0.11506625047927064910,0.12029062269427970906,0.63272971690653170963,23,7,0.63111768265625409948,0.63936266500475240049,159012,14,3,133053.133333333334,182878.200000000001,0.75049911504424778761,7,13,0.72943795828837279186,0.75770728690217781016,19372,15,3,19042.0666666666666666,26286.5999999999999999,0.09143126843657817109,12,12,0.08998673796830118103,0.09439011015848818055,26650,37,2,16738.6666666666666667,26700.3333333333333334,0.12578171091445427729,45,2,0.11403757951914135550,0.13927715106387645755,528,41,1,167.0000000000000000,902.8000000000000000,0.00249203539823008850,46,1,0.00139003551886339637,0.00433003535644844975 +"44",520445,2,7,466742.599999999998,536848.533333333331,7965664.39000002,27,4,6924425.99999999,8754459.69333332,33878370.8299999,2,7,31704009.0939999,36431789.7646665,37281360,2,7,36492391.4,41915990.8,71.6336212279876,50,1,71.6336212279876,73.8316756639122,0.235125367449673,48,1,0.200749881365596,0.322250757458251,0.809634411496893,3,15,0.799343276564225,0.832812907599636,80629,24,6,75305.333333333335,86569.200000000002,0.15492319073100904034,50,1,0.15492319073100904034,0.19828448712797018186,57017,2,6,50000.3333333333333335,58794.8000000000000002,0.10955432370375351862,19,11,0.10461750604925252918,0.10984187826426158914,0.61294000035077257660,35,4,0.60638273561075919645,0.61462771795925749746,397839,2,8,382178.466666666669,432003.533333333336,0.76442083217246779199,5,14,0.75770728690217781016,0.78597661551598282846,56000,2,8,55264.7333333333333331,62509.2666666666666664,0.10760022672904917907,1,16,0.10760022672904917911,0.11200359891923617863,52434,21,5,46623.6666666666666668,56585.3333333333333335,0.10074839800555294027,48,1,0.08879800797440625345,0.11403757951914135550,1132,31,2,902.8000000000000000,1638.6000000000000000,0.00217506172602292269,47,1,0.00139003551886339637,0.00433003535644844975 +"43",380718,7,5,326530.733333333332,396636.666666666665,5326002.86,37,3,5094392.30666666,6924425.99999999,26066514.3599999,7,5,22248447.7526666,26976228.4233332,28088930,8,5,25645192.6,31068792,73.77883367742,44,1,71.6336212279876,73.8316756639122,0.204323554213791,49,1,0.200749881365596,0.322250757458251,0.830341644071574,2,15,0.799343276564225,0.832812907599636,75425,26,6,75305.333333333335,86569.200000000002,0.19811251372406873329,45,1,0.15492319073100904034,0.19828448712797018186,42972,5,5,41205.8666666666666668,50000.3333333333333335,0.11287094384820260665,13,12,0.10984187826426158914,0.11506625047927064910,0.60006515870799590431,45,3,0.59813775326226089544,0.60638273561075919645,302105,6,6,282528.333333333335,332353.400000000002,0.79351383438660635956,2,15,0.78597661551598282846,0.81424594412978784676,32625,6,4,26286.5999999999999999,33531.1333333333333332,0.08569334783225379415,25,11,0.08558336577811418151,0.08998673796830118103,33807,31,3,26700.3333333333333334,36662.0000000000000001,0.08879800797440625345,50,1,0.08879800797440625345,0.11403757951914135550,689,37,1,167.0000000000000000,902.8000000000000000,0.00180973844157617974,48,1,0.00139003551886339637,0.00433003535644844975 +"32",226608,15,3,186318.866666666666,256424.799999999999,3888103.96999999,43,2,3264358.61333333,5094392.30666666,16109878.36,13,3,12792886.4113333,17520667.0819999,17218205,22,3,14797993.8,20221593.2,75.9823351337993,41,2,73.8316756639122,76.0297300998367,0.241349058206048,47,1,0.200749881365596,0.322250757458251,0.805575187244403,4,15,0.799343276564225,0.832812907599636,50958,39,3,41513.733333333334,52777.600000000001,0.22487290828214361364,43,2,0.19828448712797018186,0.24164578352493132338,21886,17,2,14822.4666666666666667,23616.9333333333333334,0.09658087975711360587,33,9,0.09416876161923440926,0.09939313383424346922,0.58594535319382253495,49,1,0.58164778856526429342,0.58989277091376259443,177439,12,3,133053.133333333334,182878.200000000001,0.78302178210831038622,3,14,0.75770728690217781016,0.78597661551598282846,19925,14,3,19042.0666666666666666,26286.5999999999999999,0.08792716938501729859,20,11,0.08558336577811418151,0.08998673796830118103,24806,39,2,16738.6666666666666667,26700.3333333333333334,0.10946656781755277837,47,1,0.08879800797440625345,0.11403757951914135550,398,44,1,167.0000000000000000,902.8000000000000000,0.00175633693426533926,49,1,0.00139003551886339637,0.00433003535644844975 +"47",260425,11,4,256424.799999999999,326530.733333333332,3589766.39,45,2,3264358.61333333,5094392.30666666,17881785.86,11,4,17520667.0819999,22248447.7526666,18679115,15,3,14797993.8,20221593.2,71.7255063837957,49,1,71.6336212279876,73.8316756639122,0.200749881365596,50,1,0.200749881365596,0.322250757458251,0.832812907599636,1,16,0.832812907599636,0.866282538635048,43198,43,3,41513.733333333334,52777.600000000001,0.16587501199961601229,49,1,0.15492319073100904034,0.19828448712797018186,27457,12,3,23616.9333333333333334,32411.4000000000000001,0.10543150619180186234,26,11,0.10461750604925252918,0.10984187826426158914,0.59769821903339767637,47,2,0.58989277091376259443,0.59813775326226089544,212050,9,4,182878.200000000001,232703.266666666668,0.81424594412978784679,1,16,0.81424594412978784676,0.84251527274359286506,20125,13,3,19042.0666666666666666,26286.5999999999999999,0.07727752711913218777,34,9,0.07677662139774018247,0.08117999358792718199,25577,38,2,16738.6666666666666667,26700.3333333333333334,0.09821253719880963809,49,1,0.08879800797440625345,0.11403757951914135550,362,46,1,167.0000000000000000,902.8000000000000000,0.00139003551886339637,50,1,0.00139003551886339637,0.00433003535644844975 \ No newline at end of file diff --git a/bulletproof/wardstotals5yr_sql_minus_pandas.csv b/bulletproof/wardstotals5yr_sql_minus_pandas.csv new file mode 100644 index 0000000..a7a8975 --- /dev/null +++ b/bulletproof/wardstotals5yr_sql_minus_pandas.csv @@ -0,0 +1,51 @@ +ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank +1,0,0,-1.8998980522155762e-06,0,0,0,3.993511199951172e-06,0,4.263256414560601e-14,0,6.339373470609644e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 +2,0,0,3.501772880554199e-07,0,0,0,-2.421438694000244e-07,0,0.0,0,-8.326672684688674e-15,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +3,0,0,-4.464760422706604e-06,0,0,0,-4.3585896492004395e-07,0,4.263256414560601e-14,0,6.961098364399732e-14,0,0,0,1.1102230246251565e-16,0,0,0,-4.163336342344337e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +4,191,0,11574.559998061508,0,17630,0,10919.800001125783,0,0.008052898135886721,0,-0.00010140115336843003,0,169,0,0.00035776326307546125,0,25,0,7.464996221770437e-06,0,100,0,-8.651038688090029e-05,0,24,0,1.9404039086609592e-05,0,55,0,4.309092825682814e-05,0,3,0,1.3506161106249803e-06,0 +5,74,0,5782.749995429069,0,6700,0,5087.30999783054,0,0.001476386830219667,0,-2.161578970760747e-05,0,65,0,0.0001516915421533871,0,8,0,-1.6138227553474938e-06,0,38,0,-2.606574720820376e-05,0,7,0,2.1657082413528705e-06,1,30,0,3.373136615519856e-05,0,2,0,9.448279520429814e-07,0 +6,0,0,2.644956111907959e-06,0,0,0,-1.8384307622909546e-06,0,-5.684341886080802e-14,0,-6.306066779870889e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +7,0,0,-5.258247256278992e-06,0,0,0,-1.0970979928970337e-06,0,0.0,0,4.674038933671909e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0 +8,69,0,9443.919995484874,0,7150,0,3961.199998781085,0,0.002956866382618273,0,-4.897766722233854e-05,0,45,0,2.2013268875076264e-05,0,4,0,-2.718727389319775e-05,0,29,0,-1.1638743961372988e-05,0,6,0,-4.036439558430249e-06,0,32,0,2.1764209227614906e-05,0,5,0,1.5238460324043523e-05,0 +9,3,0,178.79999738372862,0,180,0,85.17999964300543,0,-0.0010216344265217003,0,-8.265678130281451e-07,0,1,0,-9.80372007197694e-06,0,0,0,-3.072081256258463e-06,0,1,0,-2.817362245444155e-06,0,0,0,-2.4974825571510983e-06,0,1,0,-2.420732036267914e-06,0,0,0,-1.0464341167124025e-06,0 +10,34,0,2813.0199993941933,0,3000,0,2056.5199998421595,0,-0.001228466446065113,0,-2.0484305416623716e-05,0,29,0,0.0001221620932756462,0,4,0,8.825258619421517e-06,0,16,0,-3.5461590227714446e-05,0,4,0,1.4897715925998867e-05,0,10,0,3.568318370117396e-06,0,0,0,-8.025929827924771e-06,0 +11,117,0,7054.9399997107685,0,9230,0,4682.459999026731,0,0.0010063214766233841,0,-0.00019168130436397757,0,58,0,0.00014020436637451894,0,7,0,-3.193899086605112e-05,0,52,0,-0.00018142808131449417,0,6,0,-1.9694357960384212e-05,0,19,0,-9.70630523233762e-07,0,0,0,-3.785909744172429e-06,0 +12,128,0,4067.6899984143674,0,9565,0,8529.149999121204,0,-0.007662542256596794,0,7.198299761546068e-05,0,46,0,-1.043885041712711e-05,0,12,0,1.9139570118537064e-05,0,85,0,1.1511525976670711e-05,0,13,0,3.6648111654921656e-05,0,22,0,-5.351143586820872e-05,0,0,0,-5.334059335864415e-06,0 +13,0,0,2.691522240638733e-07,0,0,0,-1.7136335372924805e-07,0,-4.263256414560601e-14,0,-2.3425705819590803e-14,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +14,0,0,-1.2926757335662842e-06,0,0,0,-7.580965757369995e-07,0,4.263256414560601e-14,0,2.0095036745715333e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 +15,0,0,-2.6114284992218018e-06,0,0,0,-9.741634130477905e-07,0,0.0,0,3.341771304121721e-14,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 +16,0,0,-2.8312206268310547e-07,0,0,0,-1.4211982488632202e-06,0,2.842170943040401e-14,0,-2.5979218776228663e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +17,73,0,7599.799998499453,0,6615,0,3967.429998362437,0,-0.0041850854262719395,0,-5.72318136959904e-06,0,61,0,4.847330565860286e-05,0,7,0,-4.570665202152657e-06,0,32,0,5.971855143949156e-06,0,10,0,2.0810210805397023e-05,-1,33,0,5.711643519479281e-06,0,2,0,-6.011612884319895e-06,0 +18,0,0,-2.0675361156463623e-07,0,0,0,7.264316082000732e-08,0,2.842170943040401e-14,0,1.3655743202889425e-14,0,0,0,5.551115123125783e-17,0,0,0,-4.163336342344337e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-3.469446951953614e-18,0 +19,3,0,312.6900002155453,0,180,0,103.70000012032688,0,-0.0019042435997818075,0,-1.906733245138348e-05,0,3,0,2.3230238096361155e-05,0,0,0,-6.848256109623363e-06,0,0,0,-3.528505915717517e-05,0,0,0,-5.107940200588246e-06,0,3,0,4.163710949098287e-05,0,0,0,-9.472085408177011e-07,0 +20,0,0,3.3155083656311035e-06,0,0,0,-2.0209699869155884e-06,0,-1.4210854715202004e-14,0,-7.138734048339757e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +21,0,0,-5.19677996635437e-06,0,0,0,-1.3690441846847534e-06,0,-4.121147867408581e-13,0,4.546363285840016e-14,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +22,0,0,-2.030283212661743e-06,0,0,0,-7.245689630508423e-07,0,-2.842170943040401e-14,0,3.3861802251067274e-14,0,0,0,-5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0,0,0,1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 +23,0,0,-2.5331974029541016e-07,0,0,0,-6.966292858123779e-07,0,0.0,0,-5.88418203051333e-15,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 +24,0,0,5.520880222320557e-06,0,0,0,-1.644715666770935e-06,0,1.4210854715202004e-14,0,-8.443246102274315e-14,0,0,0,2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +25,580,0,34256.129998652264,0,49890,0,39190.83000279963,0,0.016282514647429025,0,-0.00034964904558687504,0,323,0,0.0004943151458282613,0,55,0,1.406853895061233e-06,0,349,0,-0.00019316405966618433,0,50,0,6.491482026485529e-06,0,150,0,0.000141779832896205,0,7,0,8.529680879357411e-06,0 +26,0,0,-2.4903565645217896e-06,0,0,0,-1.6782432794570923e-06,0,2.842170943040401e-14,0,3.2862601528904634e-14,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,-1.734723475976807e-18,0 +27,0,0,-2.60770320892334e-08,0,0,0,4.0084123611450195e-06,0,-1.4210854715202004e-14,0,3.630429290524262e-14,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,-3.469446951953614e-18,0 +28,0,0,1.3269484043121338e-05,0,0,0,-7.003545761108398e-07,0,1.4210854715202004e-14,0,-1.1868284133242923e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0 +29,0,0,-2.8721988201141357e-06,0,0,0,-1.434236764907837e-06,0,1.4210854715202004e-14,0,6.938893903907228e-15,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +30,0,0,-6.789341568946838e-07,0,0,0,-8.977949619293213e-07,0,0.0,0,6.994405055138486e-15,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 +31,0,0,-1.3541430234909058e-06,0,0,0,-1.2367963790893555e-06,0,-1.4210854715202004e-14,0,1.8096635301390052e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,1.734723475976807e-18,0 +32,0,0,3.46451997756958e-07,0,0,0,-1.0989606380462646e-06,0,-4.263256414560601e-14,0,-2.4424906541753444e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0 +33,0,0,-1.5832483768463135e-07,0,0,0,-9.55536961555481e-07,0,2.842170943040401e-14,0,-8.43769498715119e-15,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 +34,23,0,1785.3899955116212,0,2375,0,2224.8099992405623,0,-0.00026236219378006354,0,4.0076155734369845e-05,0,22,0,2.9521151907019316e-05,0,1,0,-1.3235580567677596e-05,0,12,0,2.5684826944094574e-05,0,1,0,-9.623747494011403e-06,0,8,0,-2.3347877184776156e-05,0,3,0,1.698527976801839e-05,0 +35,0,0,-9.5367431640625e-07,0,0,0,-1.125037670135498e-06,0,1.4210854715202004e-14,0,1.199040866595169e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.220446049250313e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0 +36,0,0,1.3969838619232178e-08,0,0,0,-4.721805453300476e-07,0,4.263256414560601e-14,0,-1.5210055437364645e-14,0,0,0,5.551115123125783e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +37,0,0,-2.4959444999694824e-07,0,0,0,-1.4919787645339966e-06,0,3.836930773104541e-13,0,-2.758904216193514e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0 +38,0,0,1.73225998878479e-07,0,0,0,-2.60770320892334e-08,0,2.842170943040401e-14,0,-1.63202784619898e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +39,0,0,2.207234501838684e-07,0,0,0,-2.691522240638733e-07,0,2.842170943040401e-14,0,-2.220446049250313e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +40,0,0,6.426125764846802e-08,0,0,0,-1.0319054126739502e-06,0,-4.263256414560601e-14,0,-1.5765166949677223e-14,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,-2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +41,0,0,2.7706846594810486e-08,0,0,0,5.029141902923584e-08,0,2.842170943040401e-14,0,-1.3322676295501878e-15,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 +42,0,0,-1.3697892427444458e-05,0,0,0,-5.5730342864990234e-06,0,4.263256414560601e-14,0,8.326672684688674e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +43,0,0,-2.1513551473617554e-07,0,0,0,1.8328428268432617e-06,0,-4.263256414560601e-14,0,1.609823385706477e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0 +44,0,0,-1.0961666703224182e-06,0,0,0,3.7103891372680664e-06,0,0.0,0,3.808064974464287e-14,0,0,0,-2.7755575615628914e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-4.336808689942018e-19,0 +45,0,0,2.1141022443771362e-07,0,0,0,-2.0675361156463623e-07,0,0.0,0,-2.0650148258027912e-14,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +46,0,0,-3.939494490623474e-07,0,0,0,-1.0952353477478027e-06,0,2.842170943040401e-14,0,7.771561172376096e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 +47,0,0,3.096647560596466e-07,0,0,0,-5.923211574554443e-07,0,-1.4210854715202004e-14,0,-1.63202784619898e-14,0,0,0,-2.7755575615628914e-17,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0 +48,0,0,3.427267074584961e-07,0,0,0,-6.128102540969849e-07,0,-1.4210854715202004e-14,0,-2.864375403532904e-14,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +49,0,0,-1.0738149285316467e-06,0,0,0,-1.3206154108047485e-06,0,4.263256414560601e-14,0,1.3211653993039363e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +50,0,0,-1.4156103134155273e-07,0,0,0,-8.046627044677734e-07,0,1.4210854715202004e-14,0,-8.770761894538737e-15,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 diff --git a/bulletproof/wardstotals_sql_minus_pandas.csv b/bulletproof/wardstotals_sql_minus_pandas.csv new file mode 100644 index 0000000..d803df1 --- /dev/null +++ b/bulletproof/wardstotals_sql_minus_pandas.csv @@ -0,0 +1,51 @@ +ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank +1,0,0,2.92360782623291e-05,0,0,0,-1.730024814605713e-05,0,0.0,0,-1.9506618542664e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +2,0,0,1.3962388038635254e-05,0,0,0,-1.6763806343078613e-05,0,-3.552713678800501e-14,0,-1.0125233984581428e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,1,0.0,0,0,0,4.336808689942018e-19,0 +3,21,0,1334.8000282645226,0,2755,0,1791.000015936792,0,0.0012294400440779896,0,-4.827330120082962e-07,0,19,0,4.620670482902156e-06,0,3,0,9.711911914817017e-07,0,8,0,-3.7491766103903146e-06,0,0,0,-1.5192071404629415e-06,0,7,0,-1.420336548374479e-07,0,0,0,-2.4703786707068465e-07,0 +4,1935,0,72096.69002003223,0,109620,0,88875.43998846412,0,-0.0005277123858249411,0,-0.00013006310602448057,0,1512,0,0.00020605194046285913,0,82,0,-5.8217054593009965e-05,0,1071,0,-8.143196299503774e-05,0,115,0,-4.44092726591544e-05,0,652,0,5.511816385023183e-05,0,15,0,-1.8608628480354383e-06,0 +5,309,0,19343.95002540946,0,22740,0,16163.630014188588,0,0.0028682583999355415,0,-5.1813803796263436e-05,0,262,0,0.00011244195747539543,0,24,0,-1.5539249160062552e-06,0,146,0,-3.7217070164241584e-05,0,26,0,-7.339376445897328e-07,0,141,0,3.284334489128682e-05,0,7,0,1.981060910892507e-06,0 +6,0,0,3.8929283618927e-05,0,0,0,1.2949109077453613e-05,0,-2.842170943040401e-14,0,-1.255662240851052e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,3.469446951953614e-18,0 +7,8,0,343.200024060905,0,435,0,172.00000486150384,0,-0.00020077035814836108,0,-9.814406813357657e-07,0,6,0,2.792237799087438e-06,0,0,0,-1.0416133272017625e-06,0,3,0,-1.3472193229890905e-06,0,1,0,5.219462723554669e-07,0,4,0,3.9394476031295866e-07,0,0,0,-3.241941599271825e-07,0 +8,395,0,21513.48001602292,0,24900,0,19816.37000590563,0,-0.0037334676611919804,0,-1.549614567664115e-05,0,310,0,0.0001642836792021818,0,26,0,-1.1014392047675736e-05,0,210,0,4.370182371316034e-06,0,29,0,-9.17133571398665e-06,0,181,0,1.4817441807146725e-05,0,11,0,2.9443741354773234e-06,0 +9,39,0,2016.2000046111643,0,2145,0,1295.1800011619925,0,-0.0015541281220095016,0,-6.946400127938457e-06,0,20,0,-8.856891045683213e-06,0,3,0,-6.24417994213311e-07,0,16,0,-9.113263013227346e-06,0,3,0,-6.428598845892308e-07,0,16,0,-1.610630247173006e-06,0,0,0,-2.085649134946077e-06,0 +10,199,0,12395.919995993376,0,12110,0,8037.419999361038,0,-0.0025948433010967165,0,-7.186215277965591e-05,0,152,0,9.518340645220391e-05,0,11,0,-8.03417260569761e-06,0,74,0,-8.854410608150065e-05,0,11,0,-1.0757869489924632e-05,0,79,0,3.678482674890349e-05,0,0,0,-5.751570014131402e-06,0 +11,449,0,24017.940000653267,0,29670,0,17959.69000414014,0,0.0018043412950561333,0,-0.00018141444931740747,0,232,0,5.287497169625954e-05,0,20,0,-3.1597995056878436e-05,0,208,0,-0.00013133742664961368,0,17,0,-2.932489487049439e-05,0,130,0,3.319619025796139e-05,0,3,0,7.198187540712053e-07,0 +12,802,0,23408.000020869076,0,47275,0,41880.980008624494,0,-0.0034165497738882777,0,8.41520194859724e-05,0,473,0,8.71334923728817e-05,0,38,0,7.0578214800276484e-09,0,495,0,4.439428519320554e-05,0,42,0,2.7763814121548047e-06,0,185,0,-6.284368320108591e-05,0,1,0,-3.28885621882994e-06,0 +13,0,0,-2.3711472749710083e-06,0,0,0,-1.0691583156585693e-06,0,1.4210854715202004e-14,0,3.419486915845482e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 +14,0,0,8.527189493179321e-06,0,0,0,4.045665264129639e-06,0,2.842170943040401e-14,0,-4.807265696626928e-14,0,0,0,1.6653345369377348e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +15,0,0,2.4653971195220947e-05,0,0,0,6.839632987976074e-06,0,-2.842170943040401e-14,0,-1.1690648449302898e-13,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,1.734723475976807e-18,0 +16,0,0,4.6156346797943115e-05,0,0,0,1.0482966899871826e-05,0,-4.263256414560601e-14,0,-1.6053824936079764e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 +17,349,0,19882.400034420192,0,23890,0,17136.530009806156,0,-0.0020389575061585674,0,-2.4180535276863147e-06,0,283,0,7.803109258897045e-05,0,25,-1,-8.725616408161718e-07,0,168,0,-7.195541267268624e-06,0,35,0,1.1421601799371794e-05,0,145,-1,-1.6755680701030506e-05,0,6,0,-4.1378460956913166e-06,0 +18,0,0,-3.0063092708587646e-06,0,0,0,-1.689419150352478e-06,0,-2.842170943040401e-14,0,3.1308289294429414e-14,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +19,58,0,3719.089999162592,0,4450,0,2402.4999988693744,0,0.001403784814627329,0,-7.172783593123455e-05,0,37,0,1.1009505534786967e-05,0,7,0,2.670216916411672e-06,0,19,0,-8.174453314380159e-05,0,5,0,-1.5294315882374843e-06,0,23,0,2.9222482460233845e-05,0,1,0,1.6744062273591626e-06,0 +20,0,0,4.8197805881500244e-05,0,0,0,1.245737075805664e-05,0,-1.4210854715202004e-14,0,-1.6042722705833512e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +21,0,0,1.5191733837127686e-05,0,0,0,5.085021257400513e-06,0,2.842170943040401e-14,0,-7.693845560652335e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +22,0,0,2.104043960571289e-05,0,0,0,5.036592483520508e-06,0,-2.842170943040401e-14,0,-1.0247358517290195e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0 +23,0,0,-2.3208558559417725e-06,0,0,0,3.2223761081695557e-06,0,1.4210854715202004e-14,0,5.3290705182007514e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,-4.336808689942018e-19,0 +24,0,0,5.628913640975952e-05,0,0,0,1.1324882507324219e-05,0,0.0,0,-1.8751666885918894e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-1.6653345369377348e-16,0,0,0,0.0,0 +25,4184,0,178668.59002109617,0,243795,0,180162.0599873811,0,-0.0028506637370995236,0,-0.00047571095989740186,1,2724,0,0.0005345567926455796,0,213,0,-5.570113954984912e-05,0,2047,0,-0.00044786962972420685,0,260,0,-1.8740440758294175e-05,0,1378,-1,0.00025149762740589443,0,37,0,1.0033825019959905e-05,0 +26,0,0,3.063678741455078e-05,0,0,0,1.3031065464019775e-05,0,7.105427357601002e-15,0,-1.3022916078853086e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,1,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 +27,0,0,4.252046346664429e-05,0,0,0,-2.898275852203369e-05,0,-2.842170943040401e-14,0,-2.2715163083830703e-13,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +28,0,0,3.261864185333252e-05,0,0,0,1.7642974853515625e-05,0,-4.263256414560601e-14,0,-5.156985949383852e-14,0,0,0,-2.220446049250313e-16,0,0,0,1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 +29,0,0,3.3698976039886475e-05,0,0,0,1.0192394256591797e-05,0,-2.842170943040401e-14,0,-1.2684298056342413e-13,0,0,0,0.0,0,0,1,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,6.938893903907228e-18,0 +30,0,0,6.780028343200684e-06,0,0,0,5.848705768585205e-06,0,-4.973799150320701e-14,0,-2.7644553313166398e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0 +31,0,0,1.204758882522583e-05,0,0,0,8.247792720794678e-06,0,3.552713678800501e-14,0,-5.384581669432009e-14,0,0,0,-1.6653345369377348e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +32,0,0,1.3932585716247559e-06,0,0,0,1.023709774017334e-05,0,-4.263256414560601e-14,0,1.8318679906315083e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,1,0.0,0 +33,0,0,2.1297484636306763e-05,0,0,0,8.38935375213623e-06,0,0.0,0,-1.1812772982011666e-13,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,-5.551115123125783e-17,0,0,0,4.336808689942018e-19,0 +34,65,0,3658.1900113224983,0,4725,0,4025.2100016102195,0,-0.0005805492924508826,0,9.93477534805276e-06,0,59,0,2.2479535030872633e-05,0,2,0,-7.906166475030174e-06,0,29,0,-4.057159571191349e-06,0,5,0,-1.6142276482444817e-06,0,26,0,-9.078799729833609e-06,0,3,0,3.1055673164331887e-06,0 +35,0,0,2.4616718292236328e-05,0,0,0,1.0654330253601074e-05,0,-2.842170943040401e-14,0,-1.1191048088221578e-13,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,5.551115123125783e-17,0,0,0,8.673617379884035e-19,0 +36,0,0,-2.2277235984802246e-06,0,0,0,1.7657876014709473e-06,0,-2.842170943040401e-14,0,4.574118861455645e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 +37,0,0,4.1328370571136475e-05,0,0,0,8.724629878997803e-06,0,2.842170943040401e-14,0,-1.6192602814157908e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +38,0,0,-1.6521662473678589e-06,0,0,0,-9.313225746154785e-07,0,7.105427357601002e-15,0,2.7533531010703882e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,4.336808689942018e-19,0 +39,0,0,-2.6263296604156494e-06,0,0,0,1.1771917343139648e-06,0,-3.552713678800501e-14,0,5.595524044110789e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-4.336808689942018e-19,0 +40,0,0,7.7076256275177e-06,0,0,0,9.134411811828613e-06,0,0.0,0,-2.9976021664879227e-14,-1,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 +41,0,0,1.0803341865539551e-07,0,0,0,-4.2282044887542725e-07,0,-4.263256414560601e-14,0,-1.1879386363489175e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 +42,0,0,-0.00014545023441314697,0,0,0,1.8358230590820312e-05,0,-1.4210854715202004e-14,0,3.043121310497554e-13,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 +43,0,0,9.957700967788696e-06,0,0,0,-2.288818359375e-05,0,-2.1316282072803006e-14,0,-9.281464485866309e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 +44,0,0,1.8991529941558838e-05,0,0,0,-4.1112303733825684e-05,0,2.1316282072803006e-14,0,-1.4288570326925765e-13,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +45,0,0,-3.332272171974182e-06,0,0,0,6.817281246185303e-07,0,-2.842170943040401e-14,0,6.161737786669619e-14,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-8.326672684688674e-17,0,0,0,-4.336808689942018e-19,0 +46,0,0,1.317635178565979e-05,0,0,0,1.014024019241333e-05,0,1.4210854715202004e-14,0,-6.517009154549669e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +47,0,0,1.6130506992340088e-06,0,0,0,8.359551429748535e-06,0,4.973799150320701e-14,0,7.993605777301127e-15,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,2.168404344971009e-19,0 +48,0,0,1.2621283531188965e-05,0,0,0,4.67151403427124e-06,0,3.552713678800501e-14,0,-8.926193117986259e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 +49,0,0,2.615898847579956e-05,0,0,0,1.0654330253601074e-05,0,-2.1316282072803006e-14,0,-1.1901590823981678e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +50,0,0,1.9818544387817383e-06,0,0,0,5.200505256652832e-06,0,-2.842170943040401e-14,0,7.327471962526033e-15,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 From 3d24b4f7067c1d9eff1906cd973a161e4485c110 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 13 Dec 2018 12:24:25 -0600 Subject: [PATCH 124/140] lots of small updates and fixes --- Makefile | 25 ++++++--- data/{metadata => corrections}/.gitkeep | 0 data/test-results/test-data.csv | 22 ++++---- processors/clean_csv.py | 30 +---------- sql/exports/geocode_sample.sql | 24 +++++++++ sql/tables/acs_17_5yr_b03002.sql | 69 +++++++++++++++++++++++++ sql/tables/geocodes.sql | 1 + sql/views/blocks.sql | 14 ++--- sql/views/test_data.sql | 23 ++++++--- sql/views/warddemographics.sql | 2 +- tests/test_clean_csv.py | 13 ----- 11 files changed, 149 insertions(+), 74 deletions(-) rename data/{metadata => corrections}/.gitkeep (100%) create mode 100644 sql/exports/geocode_sample.sql create mode 100644 sql/tables/acs_17_5yr_b03002.sql diff --git a/Makefile b/Makefile index 9f454f4..967ea63 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,8 @@ PARKINGYEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 #PARKINGYEARS = 2018 CAMERAYEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking cameras -CENSUSTABLES = acs_16_5yr_b02001 acs_16_5yr_b03002 -METADATA = wardmeta +CENSUSTABLES = acs_17_5yr_b03002 +IMPORTS = wardmeta GEOJSONTABLES = communityareas wards2015 SHPTABLES = tl_2016_17_bg tl_2016_17_tabblock10 VIEWS = blocks blockstotals wards warddemographics wardsyearly wardsyearlytotals wardstotals wardstotals5yr wardscommunityareas violations @@ -12,17 +12,17 @@ DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship sync geojson_tables shp_tables .INTERMEDIATE: processors/salt.txt -all: bootstrap geo census parking meta indexes views +all: bootstrap geo census parking imports indexes views bootstrap : create_db tables schema geo: load_geocodes geojson_tables shp_tables geojson_tables: $(patsubst %, load_geojson_%, $(GEOJSONTABLES)) shp_tables: $(patsubst %, load_shp_%, $(SHPTABLES)) -tables : $(patsubst %, table_%, $(DATATABLES)) $(patsubst %, table_%, $(METADATA)) $(patsubst %, table_%, $(CENSUSTABLES)) +tables : $(patsubst %, table_%, $(DATATABLES)) $(patsubst %, table_%, $(IMPORTS)) $(patsubst %, table_%, $(CENSUSTABLES)) census : $(patsubst %, load_census_%, $(CENSUSTABLES)) indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) -meta : $(patsubst %, load_meta_%, $(METADATA)) +imports : $(patsubst %, import_%, $(IMPORTS)) appgeo : bootstrap load_geodata_wards2015 parking : $(patsubst %, dupes/parking-%.csv, $(PARKINGYEARS)) @@ -66,6 +66,7 @@ create_db : $(check_database) || psql $(ILTICKETS_DB_ROOT_URL) -c "create database $(ILTICKETS_DB_NAME) lc_collate \"C\" lc_ctype \"C\" template template0" && \ $(psql) -c "CREATE EXTENSION IF NOT EXISTS postgis;" $(psql) -c "CREATE EXTENSION IF NOT EXISTS hstore;" + $(psql) -c "CREATE EXTENSION IF NOT EXISTS tablefunc;" table_% : sql/tables/%.sql @@ -76,6 +77,10 @@ view_% : sql/views/%.sql $(check_public_relation) || $(psql) -f $< +transform_% : sql/transforms/%.sql + $(psql) -f $< + + populate_addresses : sql/geocodes/populate_addresses.sql $(psql) -f $< @@ -120,8 +125,8 @@ dump_geocodes : pg_dump $(ILTICKETS_DB_URL) --verbose -t geocodes -Fc -f data/dumps/parking-geocodes-geocodio.dump -#dump_parking_geo : - #pg_dump $(ILTICKETS_DB_URL) --verbose -j 4 -t parking_geo -Fc -f data/dumps/parking-geo.dump +dump_parking_geo : + pg_dump $(ILTICKETS_DB_URL) --verbose -t parking_geo -Fc -f data/dumps/parking-geo.dump data/parking/A50951_PARK_Year_%.txt : @@ -188,7 +193,7 @@ dupes/cameras-%.csv : data/cameras/A50951_AUCM_Year_%.txt touch $@ -load_meta_% : data/metadata/%.csv +import_% : data/imports/%.csv $(check_public_relation) && $(psql) -c "\copy $* from '$(CURDIR)/$<' with (delimiter ',', format csv, header);" @@ -204,6 +209,10 @@ data/exports/%.csv : sql/exports/%.sql $(psql) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@' with (format csv, header);" +import_% : sql/imports/%.csv + $(psql) -c "\copy $* from '$(CURDIR)/$@' with (format csv, header);" + + test_data : $(psql) -c "\copy (SELECT (x).key as metric, (x).value \ FROM \ diff --git a/data/metadata/.gitkeep b/data/corrections/.gitkeep similarity index 100% rename from data/metadata/.gitkeep rename to data/corrections/.gitkeep diff --git a/data/test-results/test-data.csv b/data/test-results/test-data.csv index df556c5..ddf1bc5 100644 --- a/data/test-results/test-data.csv +++ b/data/test-results/test-data.csv @@ -1,14 +1,14 @@ metric,value total_tickets,54430546 -wards_amount_due,1685865011.43 +wards_amount_due,1667989480.26 total_tickets_5yr,11986700 -citywide_amount_due,1774000201.886 -ward_amount_due_pct,0.950318387584005 -accurate_tickets_pct,0.93528214837308448091 -total_accurate_tickets,50907918 -accurate_tickets_5yr_pct,0.94483510891237788549 -very_accurate_tickets_pct,0.85018515155074872848 -total_accurate_tickets_5yr,11325455 -total_very_accurate_tickets,46276042 -very_accurate_tickets_5yr_pct,0.87757831596686327346 -total_very_accurate_tickets_5yr,10519268 +citywide_amount_due,1774000201.8858 +ward_amount_due_pct,0.940241990100614 +accurate_tickets_pct,0.93530176970850154617 +total_accurate_tickets,50908986 +accurate_tickets_5yr_pct,0.94484411889844577740 +very_accurate_tickets_pct,0.85017372414379234777 +total_accurate_tickets_5yr,11325563 +total_very_accurate_tickets,46275420 +very_accurate_tickets_5yr_pct,0.87755796007241359173 +total_very_accurate_tickets_5yr,10519024 diff --git a/processors/clean_csv.py b/processors/clean_csv.py index 0167611..1811e8a 100644 --- a/processors/clean_csv.py +++ b/processors/clean_csv.py @@ -18,30 +18,17 @@ def clean_quotes(row): return row -def clean_location(row, corrections): +def clean_location(row): """ Clean up a parking address for geocoding by adding the Chicago, IL stuff to the end. """ address = row[2].strip().lower() - address = clean_address(address, corrections) address = normalize_block(address) address = "{}, Chicago, IL".format(address) row.append(address) return row -def clean_address(address, corrections): - """ - Use Matt Chapman's manual mapping - """ - parts = block_re.split(address) - street_part = parts[-1] - if street_part in corrections.keys(): - parts[-1] = corrections[street_part] - ret = ''.join(parts) - return ret - - def normalize_block(address): """ Block-level address normalization @@ -139,17 +126,6 @@ def add_penalty(row): return row -def get_corrections(datafile='data/geodata/corrections.csv'): - """ - Get corrections - """ - with open(datafile, 'r') as f: - corrections_reader = csv.reader(f) - next(corrections_reader) - corrections = { bad: good for good, bad in corrections_reader } - return corrections - - def clean(data_filename, salt_filename): """ Clean up parking CSV. @@ -157,8 +133,6 @@ def clean(data_filename, salt_filename): with open(salt_filename, 'r') as f: salt = f.read() - corrections = get_corrections() - writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) with open(data_filename) as f: @@ -179,7 +153,7 @@ def clean(data_filename, salt_filename): row = clean_quotes(row) if addcol: row = row[:-1] + [''] + row[-1:] - row = clean_location(row, corrections) + row = clean_location(row) row = hash_plates(row, salt) row = add_year(row) row = add_month(row) diff --git a/sql/exports/geocode_sample.sql b/sql/exports/geocode_sample.sql new file mode 100644 index 0000000..e13c412 --- /dev/null +++ b/sql/exports/geocode_sample.sql @@ -0,0 +1,24 @@ +select + null as correct_ward, + null as correct_address, + null as ambiguous_address, + null as notes, + g.address, + g.geocoded_address, + b.ward, + g.geocoded_lat, + g.geocoded_lng, + g.geocode_accuracy, + g.geocode_accuracy_type +from blocks b tablesample bernoulli(20) +join geocodes g on + g.geocoded_address = b.address +where + g.geocoded_city = 'Chicago' and ( + g.geocode_accuracy_type = 'range_interpolation' or + g.geocode_accuracy_type = 'rooftop' or + g.geocode_accuracy_type = 'intersection' or + g.geocode_accuracy_type = 'point' + ) +limit 400 + diff --git a/sql/tables/acs_17_5yr_b03002.sql b/sql/tables/acs_17_5yr_b03002.sql new file mode 100644 index 0000000..b67e0b7 --- /dev/null +++ b/sql/tables/acs_17_5yr_b03002.sql @@ -0,0 +1,69 @@ +create table if not exists public.acs_16_5yr_b03002 ( + id character varying, + geoid character varying, + geography character varying, + + total bigint, + total_moe bigint, + + not_hispanic bigint, + not_hispanic_moe bigint, + + not_hispanic_white bigint, + not_hispanic_white_moe bigint, + + not_hispanic_black bigint, + not_hispanic_black_moe bigint, + + not_hispanic_native bigint, + not_hispanic_native_moe bigint, + + not_hispanic_asian bigint, + not_hispanic_asian_moe bigint, + + not_hispanic_pacific_islander bigint, + not_hispanic_pacific_islander_moe bigint, + + not_hispanic_other bigint, + not_hispanic_other_moe bigint, + + not_hispanic_two_or_more bigint, + not_hispanic_two_or_more_moe bigint, + + not_hispanic_two_or_more_including_other bigint, + not_hispanic_two_or_more_including_other_moe bigint, + + not_hispanic_three_or_more bigint, + not_hispanic_three_or_more_moe bigint, + + hispanic bigint, + hispanic_moe bigint, + + hispanic_white bigint, + hispanic_white_moe bigint, + + hispanic_black bigint, + hispanic_black_moe bigint, + + hispanic_native bigint, + hispanic_native_moe bigint, + + hispanic_asian bigint, + hispanic_asian_moe bigint, + + hispanic_pacific_islander bigint, + hispanic_pacific_islander_moe bigint, + + hispanic_other bigint, + hispanic_other_moe bigint, + + hispanic_two_or_more bigint, + hispanic_two_or_more_moe bigint, + + hispanic_two_or_more_including_other bigint, + hispanic_two_or_more_including_other_moe bigint, + + hispanic_three_or_more bigint, + hispanic_three_or_more_moe bigint + +) diff --git a/sql/tables/geocodes.sql b/sql/tables/geocodes.sql index a68929a..34e5459 100644 --- a/sql/tables/geocodes.sql +++ b/sql/tables/geocodes.sql @@ -9,5 +9,6 @@ CREATE TABLE public.geocodes ( geocode_accuracy float, geocode_accuracy_type character varying, geocode_geojson jsonb, + smarty_geocode boolean, geom geometry(Geometry,4326) ) diff --git a/sql/views/blocks.sql b/sql/views/blocks.sql index bfe53f1..a760e93 100644 --- a/sql/views/blocks.sql +++ b/sql/views/blocks.sql @@ -17,13 +17,13 @@ create table if not exists blocks as join wards2015 w on st_within(g.geom, w.wkb_geometry) where - g.geocoded_city = 'Chicago' and ( - g.geocode_accuracy_type = 'range_interpolation' or - g.geocode_accuracy_type = 'rooftop' or - g.geocode_accuracy_type = 'intersection' or - g.geocode_accuracy_type = 'point' - ) - order by geocoded_address, id; + g.geocoded_city = 'Chicago' and ( + g.geocode_accuracy_type = 'range_interpolation' or + g.geocode_accuracy_type = 'rooftop' or + g.geocode_accuracy_type = 'intersection' or + g.geocode_accuracy_type = 'point' + ) +; alter table blocks add column id serial primary key; diff --git a/sql/views/test_data.sql b/sql/views/test_data.sql index 8e9dc53..2e974d1 100644 --- a/sql/views/test_data.sql +++ b/sql/views/test_data.sql @@ -6,6 +6,7 @@ with g.geocoded_city, g.geocode_accuracy_type, g.geocode_accuracy, + g.smarty_geocode, p.* from parking p join geocodes g @@ -26,9 +27,14 @@ with count(*) as total_accurate_tickets from all_tickets where - geocoded_city = 'Chicago' - and geocode_accuracy_type != 'place' - and geocode_accuracy_type != 'street_center' + smarty_geocode = true or ( + geocoded_city = 'Chicago' and ( + geocode_accuracy_type = 'range_interpolation' or + geocode_accuracy_type = 'rooftop' or + geocode_accuracy_type = 'intersection' or + geocode_accuracy_type = 'point' + ) + ) ), total_very_accurate_tickets as ( select @@ -50,9 +56,14 @@ with count(*) as total_accurate_tickets_5yr from all_tickets_5yr where - geocoded_city = 'Chicago' - and geocode_accuracy_type != 'place' - and geocode_accuracy_type != 'street_center' + smarty_geocode = true or ( + geocoded_city = 'Chicago' and ( + geocode_accuracy_type = 'range_interpolation' or + geocode_accuracy_type = 'rooftop' or + geocode_accuracy_type = 'intersection' or + geocode_accuracy_type = 'point' + ) + ) ), total_very_accurate_tickets_5yr as ( select diff --git a/sql/views/warddemographics.sql b/sql/views/warddemographics.sql index 8fcf8a1..ea94827 100644 --- a/sql/views/warddemographics.sql +++ b/sql/views/warddemographics.sql @@ -15,6 +15,6 @@ create table warddemographics as tl_2016_17_bg bg on st_within(bg.wkb_geometry, w.wkb_geometry) join - acs_16_5yr_b03002 race on + acs_17_5yr_b03002 race on bg.geoid = race.geoid group by w.ward; diff --git a/tests/test_clean_csv.py b/tests/test_clean_csv.py index 5bc8b42..3e2cae8 100644 --- a/tests/test_clean_csv.py +++ b/tests/test_clean_csv.py @@ -1,14 +1,6 @@ import pytest from processors import clean_csv -corrections = clean_csv.get_corrections() - - -TEST_CLEAN_ADDRESSES = [ - ('04 w blackhawk', '04 w blackhawk'), - ('1638 w 47th ds', '1638 w 47th dr'), - ('925 w 50th sts', '925 w 50th st'), -] TEST_NORMALIZE_ADDRESSES = [ ('04 w blackhawk', '1 w blackhawk'), @@ -41,11 +33,6 @@ ] -@pytest.mark.parametrize("input,expected", TEST_CLEAN_ADDRESSES) -def test_clean_address(input, expected): - assert clean_csv.clean_address(input, corrections) == expected - - @pytest.mark.parametrize("input,expected", TEST_NORMALIZE_ADDRESSES) def test_normalize_block(input, expected): assert clean_csv.normalize_block(input) == expected From dba762cb9d87afde33dd63b002cbfb5c76ec94e0 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 17 Dec 2018 11:59:12 -0600 Subject: [PATCH 125/140] tons of small data fixes --- Makefile | 10 +- bulletproof/wardstotals.csv | 102 +++---- bulletproof/wardstotals5yr.csv | 102 +++---- sql/exports/parking_geo.sql | 5 +- sql/exports/parking_geo_ward7.sql | 17 ++ sql/tables/acs_17_5yr_b03002.sql | 2 +- sql/tables/wardmeta.sql | 10 +- sql/views/blocks.sql | 1 + sql/views/geoblocks.sql | 16 ++ sql/views/parking_geo.sql | 16 +- sql/views/wards.sql | 6 +- sql/views/wardstop5violations5yr.sql | 18 ++ sql/views/wardstotals.sql | 382 ++++++++++++++++++-------- sql/views/wardstotals5yr.sql | 383 +++++++++++++++++++-------- sql/views/wardsviolations5yr.sql | 15 ++ sql/views/wardsyearly.sql | 7 + 16 files changed, 759 insertions(+), 333 deletions(-) create mode 100644 sql/exports/parking_geo_ward7.sql create mode 100644 sql/views/geoblocks.sql create mode 100644 sql/views/wardstop5violations5yr.sql create mode 100644 sql/views/wardsviolations5yr.sql diff --git a/Makefile b/Makefile index 967ea63..e6f1a82 100644 --- a/Makefile +++ b/Makefile @@ -198,13 +198,21 @@ import_% : data/imports/%.csv data/geojson/%.json : - $(check_public_relation) || ogr2ogr -f GeoJSON $@ PG:"$(ILTICKETS_DB_STRING)" -sql "select * from $*;" + $(check_public_relation) && ogr2ogr -f GeoJSON $@ PG:"$(ILTICKETS_DB_STRING)" -sql "select * from $*;" + + +data/mbtiles/%.mbtiles : data/geojson/%.json + tippecanoe -zg --drop-densest-as-needed -o data/mbtiles/$*.mbtiles -f $< upload_geojson_% : data/geojson/%.json mapbox upload propublica.il-tickets-$* $< +upload_mbtiles_% : data/mbtiles/%.mbtiles + mapbox upload propublica.il-tickets-$* $< + + data/exports/%.csv : sql/exports/%.sql $(psql) -c "\copy ($(shell cat $<)) to '$(CURDIR)/$@' with (format csv, header);" diff --git a/bulletproof/wardstotals.csv b/bulletproof/wardstotals.csv index 8559650..6490207 100644 --- a/bulletproof/wardstotals.csv +++ b/bulletproof/wardstotals.csv @@ -1,51 +1,51 @@ -"ward","ticket_count","ticket_count_rank","ticket_count_bucket","ticket_count_bucket_min","ticket_count_bucket_max","current_amount_due","current_amount_due_rank","current_amount_due_bucket","current_amount_due_bucket_min","current_amount_due_bucket_max","total_payments","total_payments_rank","total_payments_bucket","total_payments_bucket_min","total_payments_bucket_max","fine_level1_amount","fine_level1_amount_rank","fine_level1_amount_bucket","fine_level1_amount_bucket_min","fine_level1_amount_bucket_max","avg_per_ticket","avg_per_ticket_rank","avg_per_ticket_bucket","avg_per_ticket_bucket_min","avg_per_ticket_bucket_max","debt_to_payment_ratio","debt_to_payment_ratio_rank","debt_to_payment_ratio_bucket","debt_to_payment_ratio_bucket_min","debt_to_payment_ratio_bucket_max","paid_pct","paid_pct_rank","paid_pct_bucket","paid_pct_bucket_min","paid_pct_bucket_max","police_ticket_count","police_ticket_count_rank","police_ticket_count_bucket","police_ticket_count_bucket_min","police_ticket_count_bucket_max","police_ticket_count_pct","police_ticket_count_pct_rank","police_ticket_count_pct_bucket","police_ticket_count_pct_bucket_min","police_ticket_count_pct_bucket_max","contested_ticket_count","contested_ticket_count_rank","contested_ticket_count_bucket","contested_ticket_count_bucket_min","contested_ticket_count_bucket_max","contested_ticket_count_pct","contested_ticket_count_pct_rank","contested_ticket_count_pct_bucket","contested_ticket_count_pct_bucket_min","contested_ticket_count_pct_bucket_max","contested_and_notliable_pct","contested_and_notliable_pct_rank","contested_and_notliable_pct_bucket","contested_and_notliable_pct_bucket_min","contested_and_notliable_pct_bucket_max","paid_ticket_count","paid_ticket_count_rank","paid_ticket_count_bucket","paid_ticket_count_bucket_min","paid_ticket_count_bucket_max","paid_ticket_count_pct","paid_ticket_count_pct_rank","paid_ticket_count_pct_bucket","paid_ticket_count_pct_bucket_min","paid_ticket_count_pct_bucket_max","dismissed_ticket_count","dismissed_ticket_count_rank","dismissed_ticket_count_bucket","dismissed_ticket_count_bucket_min","dismissed_ticket_count_bucket_max","dismissed_ticket_count_pct","dismissed_ticket_count_pct_rank","dismissed_ticket_count_pct_bucket","dismissed_ticket_count_pct_bucket_min","dismissed_ticket_count_pct_bucket_max","seized_or_suspended_ticket_count","seized_or_suspended_ticket_count_rank","seized_or_suspended_ticket_count_bucket","seized_or_suspended_ticket_count_bucket_min","seized_or_suspended_ticket_count_bucket_max","seized_or_suspended_ticket_count_pct","seized_or_suspended_ticket_count_pct_rank","seized_or_suspended_ticket_count_pct_bucket","seized_or_suspended_ticket_count_pct_bucket_min","seized_or_suspended_ticket_count_pct_bucket_max","bankruptcy_ticket_count","bankruptcy_ticket_count_rank","bankruptcy_ticket_count_bucket","bankruptcy_ticket_count_bucket_min","bankruptcy_ticket_count_bucket_max","bankruptcy_ticket_count_pct","bankruptcy_ticket_count_pct_rank","bankruptcy_ticket_count_pct_bucket","bankruptcy_ticket_count_pct_bucket_min","bankruptcy_ticket_count_pct_bucket_max" -"29",756302,30,2,516250.400000000000,842048.800000000000,44367030.9999996,11,7,43692721.0459999,50167548.1786665,40509148.7099996,28,2,27302522.2180001,43789158.0460001,52437515,27,3,49943344.1333333,68743121.2,69.334095374599,13,11,68.8360222932747,70.3660823066502,1.09523483985354,8,12,1.03726891133853,1.10964989317061,0.477273468815506,43,2,0.454841116508536,0.479906112263259,477311,26,3,453808.800000000000,620402.200000000000,0.63111164587691160409,12,12,0.62569429464074621940,0.65946664711047723623,52596,28,2,52182.333333333333,84929.666666666666,0.06954364790784633652,37,7,0.06667085911244282706,0.07151645717869096199,0.58730701954521256369,26,5,0.58328418772233781160,0.59029234709938394065,382014,32,2,338437.000000000000,549965.000000000000,0.50510774796311526348,43,3,0.50084713988071604347,0.51996168622632778953,55847,27,2,52392.266666666667,87493.533333333334,0.07384219531351232709,35,8,0.07313033335454297352,0.07737697419513612567,358012,16,5,308650.933333333332,375765.666666666665,0.47337174832275995568,1,16,0.47337174832275995572,0.49471834776929200676,21505,6,11,20009.0000000000000000,21956.8000000000000000,0.02843440847703695085,1,16,0.02843440847703695078,0.03021986820078530653 -"37",734715,31,2,516250.400000000000,842048.800000000000,47038882.2999997,8,7,43692721.0459999,50167548.1786665,38883133.9599999,31,2,27302522.2180001,43789158.0460001,53682425,26,3,49943344.1333333,68743121.2,73.0656445016095,3,13,71.8961423200256,73.4262023334011,1.20975028269043,4,14,1.1820308750027,1.25441185683478,0.452539822184104,47,1,0.429776120753813,0.454841116508536,508031,21,3,453808.800000000000,620402.200000000000,0.69146675921956132650,4,13,0.65946664711047723623,0.69323899958020825306,51339,29,1,19435.000000000000,52182.333333333333,0.06987607439619444274,34,7,0.06667085911244282706,0.07151645717869096199,0.59886246323457800113,14,7,0.59730050647643006970,0.60430866585347619875,347111,36,2,338437.000000000000,549965.000000000000,0.47244305615102454693,49,1,0.46261804718949255135,0.48173259353510429741,54353,29,2,52392.266666666667,87493.533333333334,0.07397834534479355941,34,8,0.07313033335454297352,0.07737697419513612567,340339,17,5,308650.933333333332,375765.666666666665,0.46322587670048930538,3,15,0.45202514887622790468,0.47337174832275995572,19850,7,10,18061.2000000000000000,20009.0000000000000000,0.02701727880878980285,2,15,0.02664894875328859503,0.02843440847703695078 -"24",850825,22,3,842048.800000000000,1167847.200000000000,54016226.6399994,4,8,50167548.1786665,56642375.3113332,40711876.8399999,27,2,27302522.2180001,43789158.0460001,58368400,21,3,49943344.1333333,68743121.2,68.6021214703376,15,10,67.3059622798992,68.8360222932747,1.32679283866687,1,16,1.32679283866687,1.39917382049895,0.429776120753813,50,1,0.429776120753813,0.454841116508536,582309,15,3,453808.800000000000,620402.200000000000,0.68440513619134369582,5,13,0.65946664711047723623,0.69323899958020825306,53356,26,2,52182.333333333333,84929.666666666666,0.06271089824582023330,40,6,0.06182526104619469213,0.06667085911244282706,0.59573431291701027063,19,6,0.59029234709938394065,0.59730050647643006970,393607,29,2,338437.000000000000,549965.000000000000,0.46261804718949255135,50,1,0.46261804718949255135,0.48173259353510429741,57634,24,2,52392.266666666667,87493.533333333334,0.06773895924543825111,38,6,0.06463705167335666922,0.06888369251394982137,386594,10,6,375765.666666666665,442880.399999999998,0.45437545911321364558,5,15,0.45202514887622790468,0.47337174832275995572,22217,4,12,21956.8000000000000000,23904.6000000000000000,0.02611230276496341786,3,14,0.02486348902954023928,0.02664894875328859503 -"34",424854,44,1,190452.000000000000,516250.400000000000,28865577.21,29,4,24268239.6479999,30743066.7806666,24134203.6099999,43,1,10815886.39,27302522.2180001,32495520,40,2,31143567.0666667,49943344.1333333,76.486322360152,1,16,76.486322360152,78.0163823735274,1.19604432267405,5,14,1.1820308750027,1.25441185683478,0.455364215409976,46,2,0.454841116508536,0.479906112263259,323222,38,2,287215.400000000000,453808.800000000000,0.76078370451967028673,1,16,0.76078370451967028672,0.79455605698940130355,35024,40,1,19435.000000000000,52182.333333333333,0.08243773155013251611,25,10,0.08120765331118723185,0.08605325137743536678,0.62708428506167199635,4,11,0.62533314398461458590,0.63234130336166071495,200815,46,1,126909.000000000000,338437.000000000000,0.47266825780150357535,48,1,0.46261804718949255135,0.48173259353510429741,37163,41,1,17291.000000000000,52392.266666666667,0.08747240228407876588,8,11,0.08587025587632242997,0.09011689671691558212,195149,35,3,174421.466666666666,241536.199999999999,0.45933191166847905398,4,15,0.45202514887622790468,0.47337174832275995572,10986,17,6,10270.0000000000000000,12217.8000000000000000,0.02585829484952477792,4,14,0.02486348902954023928,0.02664894875328859503 -"6",842531,23,3,842048.800000000000,1167847.200000000000,49857871.2199994,7,7,43692721.0459999,50167548.1786665,46647796.0199997,21,3,43789158.0460001,60275793.8740002,60035045,19,3,49943344.1333333,68743121.2,71.2555917823795,7,12,70.3660823066502,71.8961423200256,1.06881515256634,9,12,1.03726891133853,1.10964989317061,0.483368462745216,42,3,0.479906112263259,0.504971108017981,554230,17,3,453808.800000000000,620402.200000000000,0.65781555812189699845,8,12,0.62569429464074621940,0.65946664711047723623,64166,21,2,52182.333333333333,84929.666666666666,0.07615862205663649171,29,8,0.07151645717869096199,0.07636205524493909692,0.61523236605055636942,8,9,0.61131682523052232780,0.61832498460756845685,429791,27,2,338437.000000000000,549965.000000000000,0.51011891550577960930,41,3,0.50084713988071604347,0.51996168622632778953,66988,19,2,52392.266666666667,87493.533333333334,0.07950805370959644215,25,9,0.07737697419513612567,0.08162361503572927782,379870,11,6,375765.666666666665,442880.399999999998,0.45086768320690870722,6,14,0.43067854942969585364,0.45202514887622790468,21722,5,11,20009.0000000000000000,21956.8000000000000000,0.02578184066817719467,5,14,0.02486348902954023928,0.02664894875328859503 -"17",716565,33,2,516250.400000000000,842048.800000000000,44403937.9899995,10,7,43692721.0459999,50167548.1786665,39119558.0599999,30,2,27302522.2180001,43789158.0460001,52049175,29,3,49943344.1333333,68743121.2,72.6370601410898,5,13,71.8961423200256,73.4262023334011,1.13508281258941,7,13,1.10964989317061,1.1820308750027,0.468365907918676,44,2,0.454841116508536,0.479906112263259,466307,27,3,453808.800000000000,620402.200000000000,0.65075324639076706230,9,12,0.62569429464074621940,0.65946664711047723623,52613,27,2,52182.333333333333,84929.666666666666,0.07342390432131069756,32,8,0.07151645717869096199,0.07636205524493909692,0.59901545245471651493,13,7,0.59730050647643006970,0.60430866585347619875,355518,35,2,338437.000000000000,549965.000000000000,0.49614201084339871470,44,2,0.48173259353510429741,0.50084713988071604347,55066,28,2,52392.266666666667,87493.533333333334,0.07684718064655683713,30,8,0.07313033335454297352,0.07737697419513612567,322353,19,5,308650.933333333332,375765.666666666665,0.44985870088547445103,8,14,0.43067854942969585364,0.45202514887622790468,18404,9,10,18061.2000000000000000,20009.0000000000000000,0.02568364349361188448,6,14,0.02486348902954023928,0.02664894875328859503 -"21",543507,39,2,516250.400000000000,842048.800000000000,32661825.1599999,26,5,30743066.7806666,37217893.9133332,32133231.1299999,37,2,27302522.2180001,43789158.0460001,41186675,38,2,31143567.0666667,49943344.1333333,75.7794747813736,2,15,74.9562623467765,76.486322360152,1.01645007400163,12,11,0.964887929506441,1.03726891133853,0.495921031169151,39,3,0.479906112263259,0.504971108017981,369404,32,2,287215.400000000000,453808.800000000000,0.67966741918687339813,6,13,0.65946664711047723623,0.69323899958020825306,50068,30,1,19435.000000000000,52182.333333333333,0.09212024868124973551,7,12,0.09089884944368350171,0.09574444750993163664,0.62544938883118958217,5,11,0.62533314398461458590,0.63234130336166071495,279188,42,1,126909.000000000000,338437.000000000000,0.51367875666734743067,40,3,0.50084713988071604347,0.51996168622632778953,50308,32,1,17291.000000000000,52392.266666666667,0.09256182533067651383,3,12,0.09011689671691558212,0.09436353755750873427,236714,32,3,174421.466666666666,241536.199999999999,0.43553072913504333891,10,14,0.43067854942969585364,0.45202514887622790468,13619,16,7,12217.8000000000000000,14165.6000000000000000,0.02505763495226372429,7,14,0.02486348902954023928,0.02664894875328859503 -"7",605638,37,2,516250.400000000000,842048.800000000000,36191558.6899997,21,5,30743066.7806666,37217893.9133332,31078724.2299998,39,2,27302522.2180001,43789158.0460001,42136700,37,2,31143567.0666667,49943344.1333333,69.5740689983125,11,11,68.8360222932747,70.3660823066502,1.16451236614998,6,13,1.10964989317061,1.1820308750027,0.461997822529747,45,2,0.454841116508536,0.479906112263259,326207,37,2,287215.400000000000,453808.800000000000,0.53861712772316136042,26,9,0.52437723723155316891,0.55814958970128418574,47757,33,1,19435.000000000000,52182.333333333333,0.07885403491854870401,28,9,0.07636205524493909692,0.08120765331118723185,0.56783298783424419457,38,2,0.56225970959119942445,0.56926786896824555350,288883,40,1,126909.000000000000,338437.000000000000,0.47698955481657359677,47,1,0.46261804718949255135,0.48173259353510429741,51774,31,1,17291.000000000000,52392.266666666667,0.08548670988280127733,12,10,0.08162361503572927782,0.08587025587632242997,284757,25,4,241536.199999999999,308650.933333333332,0.47017690435540702532,2,15,0.45202514887622790468,0.47337174832275995572,14864,14,8,14165.6000000000000000,16113.4000000000000000,0.02454271363421713961,8,13,0.02307802930579188353,0.02486348902954023928 -"8",644516,36,2,516250.400000000000,842048.800000000000,34610237.6299998,23,5,30743066.7806666,37217893.9133332,35409334.5599999,35,2,27302522.2180001,43789158.0460001,44552870,34,2,31143567.0666667,49943344.1333333,69.1260884136313,14,11,68.8360222932747,70.3660823066502,0.977432591153442,14,11,0.964887929506441,1.03726891133853,0.505706239734168,37,4,0.504971108017981,0.530036103772704,333160,36,2,287215.400000000000,453808.800000000000,0.51691501840140508537,28,8,0.49060488476182215208,0.52437723723155316891,54000,25,2,52182.333333333333,84929.666666666666,0.08378380055731742889,18,10,0.08120765331118723185,0.08605325137743536678,0.60412962962962962963,11,7,0.59730050647643006970,0.60430866585347619875,338061,37,1,126909.000000000000,338437.000000000000,0.52451917407791272831,39,4,0.51996168622632778953,0.53907623257193953559,56958,26,2,52392.266666666667,87493.533333333334,0.08837329096562381694,7,11,0.08587025587632242997,0.09011689671691558212,279762,26,4,241536.199999999999,308650.933333333332,0.43406525206511552855,11,14,0.43067854942969585364,0.45202514887622790468,14854,15,8,14165.6000000000000000,16113.4000000000000000,0.02304675136071098313,9,12,0.02129256958204352778,0.02307802930579188353 -"20",807223,28,2,516250.400000000000,842048.800000000000,50466651.2299994,6,8,50167548.1786665,56642375.3113332,40496725.9999998,29,2,27302522.2180001,43789158.0460001,56077265,24,3,49943344.1333333,68743121.2,69.4693597679947,12,11,68.8360222932747,70.3660823066502,1.24619089528372,2,14,1.1820308750027,1.25441185683478,0.445198136142247,49,1,0.429776120753813,0.454841116508536,565520,16,3,453808.800000000000,620402.200000000000,0.70057468630105931075,3,14,0.69323899958020825306,0.72701135204993926989,56235,24,2,52182.333333333333,84929.666666666666,0.06966476425969032101,36,7,0.06667085911244282706,0.07151645717869096199,0.61379923535164932871,9,9,0.61131682523052232780,0.61832498460756845685,386617,31,2,338437.000000000000,549965.000000000000,0.47894695765606282279,46,1,0.46261804718949255135,0.48173259353510429741,60862,22,2,52392.266666666667,87493.533333333334,0.07539676148969987228,32,8,0.07313033335454297352,0.07737697419513612567,362913,15,5,308650.933333333332,375765.666666666665,0.44958208574334477585,9,14,0.43067854942969585364,0.45202514887622790468,18452,8,10,18061.2000000000000000,20009.0000000000000000,0.02285861527731494271,10,12,0.02129256958204352778,0.02307802930579188353 -"9",426480,43,1,190452.000000000000,516250.400000000000,24563980.3099999,36,4,24268239.6479999,30743066.7806666,23856738.2199999,44,1,10815886.39,27302522.2180001,30703760,42,1,12343790,31143567.0666667,71.9934346276496,6,13,71.8961423200256,73.4262023334011,1.02964538083446,10,11,0.964887929506441,1.03726891133853,0.492696906288557,41,3,0.479906112263259,0.504971108017981,260010,42,1,120622.000000000000,287215.400000000000,0.60966516601012943163,16,11,0.59192194217101520257,0.62569429464074621940,35718,39,1,19435.000000000000,52182.333333333333,0.08375070343275182893,19,10,0.08120765331118723185,0.08605325137743536678,0.58718293297497060306,27,5,0.58328418772233781160,0.59029234709938394065,217464,43,1,126909.000000000000,338437.000000000000,0.50990433314575126618,42,3,0.50084713988071604347,0.51996168622632778953,35804,42,1,17291.000000000000,52392.266666666667,0.08395235415494278747,15,10,0.08162361503572927782,0.08587025587632242997,182477,38,3,174421.466666666666,241536.199999999999,0.42786766085162258488,12,13,0.40933194998316380260,0.43067854942969585364,9726,18,5,8322.2000000000000000,10270.0000000000000000,0.02280528981429375352,11,12,0.02129256958204352778,0.02307802930579188353 -"16",819022,26,2,516250.400000000000,842048.800000000000,51120763.2199995,5,8,50167548.1786665,56642375.3113332,41399119.6599999,24,2,27302522.2180001,43789158.0460001,57324405,22,3,49943344.1333333,68743121.2,69.9912883902996,9,11,68.8360222932747,70.3660823066502,1.23482730163928,3,14,1.1820308750027,1.25441185683478,0.447461868425575,48,1,0.429776120753813,0.454841116508536,553810,18,3,453808.800000000000,620402.200000000000,0.67618452251587869435,7,13,0.65946664711047723623,0.69323899958020825306,49500,32,1,19435.000000000000,52182.333333333333,0.06043793695407449373,43,5,0.05697966297994655720,0.06182526104619469213,0.58866666666666666667,25,5,0.58328418772233781160,0.59029234709938394065,393370,30,2,338437.000000000000,549965.000000000000,0.48029234867927845650,45,1,0.46261804718949255135,0.48173259353510429741,54103,30,2,52392.266666666667,87493.533333333334,0.06605805460659176432,39,6,0.06463705167335666922,0.06888369251394982137,369270,14,5,308650.933333333332,375765.666666666665,0.45086700967739572319,7,14,0.43067854942969585364,0.45202514887622790468,18066,10,10,18061.2000000000000000,20009.0000000000000000,0.02205801553560221826,12,12,0.02129256958204352778,0.02307802930579188353 -"28",1354565,9,4,1167847.200000000000,1493645.600000000000,70656556.7999989,2,11,69592029.5766665,76066856.7093331,68833300.3900003,9,4,60275793.8740002,76762429.7020002,90610825,9,5,87542898.2666667,106342675.333333,66.8929324174181,18,9,65.7759022665238,67.3059622798992,1.02648799926298,11,11,0.964887929506441,1.03726891133853,0.493464555607383,40,3,0.479906112263259,0.504971108017981,828746,4,5,786995.600000000000,953589.000000000000,0.61181707780726653944,15,11,0.59192194217101520257,0.62569429464074621940,101476,12,3,84929.666666666666,117676.999999999999,0.07491408681015676619,30,8,0.07151645717869096199,0.07636205524493909692,0.59052386771256257637,23,6,0.59029234709938394065,0.59730050647643006970,718179,12,3,549965.000000000000,761493.000000000000,0.53019161132909827140,38,4,0.51996168622632778953,0.53907623257193953559,106171,9,3,87493.533333333334,122594.800000000001,0.07838014417912761661,29,9,0.07737697419513612567,0.08162361503572927782,539373,3,8,509995.133333333331,577109.866666666664,0.39818908653331512331,13,12,0.38798535053663175156,0.40933194998316380260,29748,1,16,29748.0000000000000000,31695.8000000000000000,0.02196129384710220624,13,12,0.02129256958204352778,0.02307802930579188353 -"18",254129,48,1,190452.000000000000,516250.400000000000,12535716.6800001,46,2,11318585.3826666,17793412.5153333,15128928.5100001,48,1,10815886.39,27302522.2180001,18460130,48,1,12343790,31143567.0666667,72.6407847982717,4,13,71.8961423200256,73.4262023334011,0.82859249891452,18,9,0.820125965842269,0.892506947674355,0.546868698517365,33,5,0.530036103772704,0.555101099527427,135763,48,1,120622.000000000000,287215.400000000000,0.53422867913539973793,27,9,0.52437723723155316891,0.55814958970128418574,21021,49,1,19435.000000000000,52182.333333333333,0.08271783228202999264,24,10,0.08120765331118723185,0.08605325137743536678,0.59364445078730793017,21,6,0.59029234709938394065,0.59730050647643006970,140768,49,1,126909.000000000000,338437.000000000000,0.55392340110731164094,34,5,0.53907623257193953559,0.55819077891755128165,20948,48,1,17291.000000000000,52392.266666666667,0.08243057659692518367,21,10,0.08162361503572927782,0.08587025587632242997,91415,46,1,40192.000000000000,107306.733333333333,0.35971888292953578694,14,10,0.34529215164356764948,0.36663875109009970052,4445,29,3,4426.6000000000000000,6374.4000000000000000,0.01749111671631336841,14,9,0.01593619041079846053,0.01772165013454681628 -"5",1082829,16,3,842048.800000000000,1167847.200000000000,39571925.4199997,15,6,37217893.9133332,43692721.0459999,59175014.2099998,14,3,43789158.0460001,60275793.8740002,68807135,13,4,68743121.2,87542898.2666667,63.5438605726297,24,7,62.7157822397729,64.2458422531483,0.66872692720558,26,6,0.602983020346013,0.675364002178098,0.599259221923495,25,7,0.58016609528215,0.605231091036872,491581,23,3,453808.800000000000,620402.200000000000,0.45397842133891870277,39,6,0.42306017982236011842,0.45683253229209113525,89998,15,3,84929.666666666666,117676.999999999999,0.08311376957949962552,21,10,0.08120765331118723185,0.08605325137743536678,0.56386808595746572146,43,2,0.56225970959119942445,0.56926786896824555350,652810,18,3,549965.000000000000,761493.000000000000,0.60287450742453332890,26,8,0.59641987160877477377,0.61553441795438651983,93896,13,3,87493.533333333334,122594.800000000001,0.08671359928483629456,10,11,0.08587025587632242997,0.09011689671691558212,369516,13,5,308650.933333333332,375765.666666666665,0.34125055756726131273,16,9,0.32394555219703559844,0.34529215164356764948,17015,11,9,16113.4000000000000000,18061.2000000000000000,0.01571346907037029854,15,8,0.01415073068705010478,0.01593619041079846053 -"3",1189132,12,4,1167847.200000000000,1493645.600000000000,43157474.7099993,12,6,37217893.9133332,43692721.0459999,61898959.8499999,12,4,60275793.8740002,76762429.7020002,73219915,10,4,68743121.2,87542898.2666667,61.5742533209097,30,6,61.1857222263974,62.7157822397729,0.697224554573826,22,7,0.675364002178098,0.747744984010184,0.589197226321711,29,7,0.58016609528215,0.605231091036872,764754,7,4,620402.200000000000,786995.600000000000,0.64311951911141908552,10,12,0.62569429464074621940,0.65946664711047723623,104482,11,3,84929.666666666666,117676.999999999999,0.08786408910028491370,10,11,0.08605325137743536678,0.09089884944368350171,0.60405620106812656726,12,7,0.59730050647643006970,0.60430866585347619875,705449,13,3,549965.000000000000,761493.000000000000,0.59324700706061227854,28,7,0.57730532526316302771,0.59641987160877477377,102294,10,3,87493.533333333334,122594.800000000001,0.08602409152221956856,11,11,0.08587025587632242997,0.09011689671691558212,405941,6,6,375765.666666666665,442880.399999999998,0.34137589434982827811,15,9,0.32394555219703559844,0.34529215164356764948,16634,13,9,16113.4000000000000000,18061.2000000000000000,0.01398835453086789356,16,7,0.01236527096330174903,0.01415073068705010478 -"27",2018335,5,6,1819444.000000000000,2145242.400000000000,63993308.249999,3,10,63117202.4439998,69592029.5766665,100223190.440001,5,6,93249065.5300003,109735701.358,118210330,3,6,106342675.333333,125142452.4,58.5682406538062,39,4,58.1256021996465,59.655662213022,0.638507993699412,29,6,0.602983020346013,0.675364002178098,0.610311334363531,22,8,0.605231091036872,0.630296086791595,1040898,3,6,953589.000000000000,1120182.400000000000,0.51572112657214981656,30,8,0.49060488476182215208,0.52437723723155316891,168212,6,5,150424.333333333332,183171.666666666665,0.08334196255824726817,20,10,0.08120765331118723185,0.08605325137743536678,0.57555941312153710794,33,3,0.56926786896824555350,0.57627602834529168255,1230204,5,6,1184549.000000000000,1396077.000000000000,0.60951427785773917610,24,8,0.59641987160877477377,0.61553441795438651983,170001,5,5,157696.066666666668,192797.333333333335,0.08422833672309106268,14,10,0.08162361503572927782,0.08587025587632242997,620081,2,9,577109.866666666664,644224.599999999997,0.30722402376216039458,21,8,0.30259895275050354740,0.32394555219703559844,24628,3,13,23904.6000000000000000,25852.4000000000000000,0.01220213690987868714,17,6,0.01057981123955339328,0.01236527096330174903 -"10",378617,45,1,190452.000000000000,516250.400000000000,17527940.8400001,43,2,11318585.3826666,17793412.5153333,19166532.92,45,1,10815886.39,27302522.2180001,24908690,45,1,12343790,31143567.0666667,65.7886201623276,19,9,65.7759022665238,67.3059622798992,0.914507642731253,16,10,0.892506947674355,0.964887929506441,0.522327504826981,35,4,0.504971108017981,0.530036103772704,220665,45,1,120622.000000000000,287215.400000000000,0.58281852109123467779,21,10,0.55814958970128418574,0.59192194217101520257,26713,46,1,19435.000000000000,52182.333333333333,0.07055414838742053315,33,7,0.06667085911244282706,0.07151645717869096199,0.60502377119754426684,10,8,0.60430866585347619875,0.61131682523052232780,204542,45,1,126909.000000000000,338437.000000000000,0.54023459062852433990,35,5,0.53907623257193953559,0.55819077891755128165,28674,45,1,17291.000000000000,52392.266666666667,0.07573352490775638706,31,8,0.07313033335454297352,0.07737697419513612567,123821,43,2,107306.733333333333,174421.466666666666,0.32703497201657611782,17,9,0.32394555219703559844,0.34529215164356764948,4141,30,2,2478.8000000000000000,4426.6000000000000000,0.01093717397792492149,18,6,0.01057981123955339328,0.01236527096330174903 -"19",226140,49,1,190452.000000000000,516250.400000000000,7719159.81000002,49,1,4843758.24999999,11318585.3826666,14537994.1800001,49,1,10815886.39,27302522.2180001,16112980,49,1,12343790,31143567.0666667,71.2522331299195,8,12,70.3660823066502,71.8961423200256,0.530964568731172,32,5,0.530602038513927,0.602983020346013,0.65318298047144,19,9,0.630296086791595,0.655361082546318,134557,49,1,120622.000000000000,287215.400000000000,0.59501636154594498983,18,11,0.59192194217101520257,0.62569429464074621940,24939,48,1,19435.000000000000,52182.333333333333,0.11028124170867604139,1,16,0.11028124170867604143,0.11512683977492417636,0.56385580817193953246,44,2,0.56225970959119942445,0.56926786896824555350,146137,48,1,126909.000000000000,338437.000000000000,0.64622357831431856372,14,10,0.63464896429999826589,0.65376351064561001195,20843,49,1,17291.000000000000,52392.266666666667,0.09216856814362784116,4,12,0.09011689671691558212,0.09436353755750873427,63917,49,1,40192.000000000000,107306.733333333333,0.28264349517997700539,27,7,0.28125235330397149636,0.30259895275050354740,2423,40,1,531.0000000000000000,2478.8000000000000000,0.01071460157424604227,19,6,0.01057981123955339328,0.01236527096330174903 -"4",1785265,6,5,1493645.600000000000,1819444.000000000000,46266862.5199996,9,7,43692721.0459999,50167548.1786665,90972237.3400006,7,5,76762429.7020002,93249065.5300003,102005600,7,5,87542898.2666667,106342675.333333,57.1375117979684,45,3,56.5955421862711,58.1256021996465,0.50858222104708,37,4,0.458221056681841,0.530602038513927,0.662874045609472,14,10,0.655361082546318,0.680426078301041,1055974,2,6,953589.000000000000,1120182.400000000000,0.59149425995580488051,20,10,0.55814958970128418574,0.59192194217101520257,171441,5,5,150424.333333333332,183171.666666666665,0.09603112143015182620,5,13,0.09574444750993163664,0.10059004557617977157,0.63141838883347623964,3,11,0.62533314398461458590,0.63234130336166071495,1122106,8,5,973021.000000000000,1184549.000000000000,0.62853750003500880822,19,9,0.61553441795438651983,0.63464896429999826589,179169,3,5,157696.066666666668,192797.333333333335,0.10035989054846199304,2,14,0.09861017839810188642,0.10285681923869503857,510859,4,8,509995.133333333331,577109.866666666664,0.28615303610388373715,26,7,0.28125235330397149636,0.30259895275050354740,16901,12,9,16113.4000000000000000,18061.2000000000000000,0.00946694188257765654,20,5,0.00879435151580503753,0.01057981123955339328 -"49",1155988,13,3,842048.800000000000,1167847.200000000000,38293233.8799995,18,6,37217893.9133332,43692721.0459999,55264687.8799999,16,3,43789158.0460001,60275793.8740002,67178040,14,3,49943344.1333333,68743121.2,58.1130945995979,41,3,56.5955421862711,58.1256021996465,0.692906001082434,23,7,0.675364002178098,0.747744984010184,0.590700251142477,28,7,0.58016609528215,0.605231091036872,817081,6,5,786995.600000000000,953589.000000000000,0.70682481133022142098,2,14,0.69323899958020825306,0.72701135204993926989,78215,18,2,52182.333333333333,84929.666666666666,0.06766073696266743253,38,7,0.06667085911244282706,0.07151645717869096199,0.55525155021415329540,50,1,0.55525155021415329540,0.56225970959119942445,673486,16,3,549965.000000000000,761493.000000000000,0.58260639383799831832,30,7,0.57730532526316302771,0.59641987160877477377,81890,17,2,52392.266666666667,87493.533333333334,0.07083983570763710350,36,7,0.06888369251394982137,0.07313033335454297352,371212,12,5,308650.933333333332,375765.666666666665,0.32112098049460721046,18,8,0.30259895275050354740,0.32394555219703559844,9235,19,5,8322.2000000000000000,10270.0000000000000000,0.00798883725436596228,21,4,0.00700889179205668178,0.00879435151580503753 -"15",792182,29,2,516250.400000000000,842048.800000000000,38148693.4299997,19,6,37217893.9133332,43692721.0459999,38410743.7499998,33,2,27302522.2180001,43789158.0460001,52100545,28,3,49943344.1333333,68743121.2,65.7684029680048,20,8,64.2458422531483,65.7759022665238,0.993177681700055,13,11,0.964887929506441,1.03726891133853,0.501711417492425,38,3,0.479906112263259,0.504971108017981,447352,29,2,287215.400000000000,453808.800000000000,0.56470861493949622688,23,10,0.55814958970128418574,0.59192194217101520257,34253,41,1,19435.000000000000,52182.333333333333,0.04323880118457627161,49,2,0.04244286878120215241,0.04728846684745028734,0.61813563775435728257,7,9,0.61131682523052232780,0.61832498460756845685,425433,28,2,338437.000000000000,549965.000000000000,0.53703946820301395386,37,4,0.51996168622632778953,0.53907623257193953559,38860,38,1,17291.000000000000,52392.266666666667,0.04905438396732064096,48,2,0.04765048831098406062,0.05189712915157721277,244233,29,4,241536.199999999999,308650.933333333332,0.30830415232863155184,20,8,0.30259895275050354740,0.32394555219703559844,6185,24,3,4426.6000000000000000,6374.4000000000000000,0.00780754927529279888,22,4,0.00700889179205668178,0.00879435151580503753 -"26",1026314,20,3,842048.800000000000,1167847.200000000000,38879819.7999996,17,6,37217893.9133332,43692721.0459999,50899356.4299998,18,3,43789158.0460001,60275793.8740002,62721350,17,3,49943344.1333333,68743121.2,61.1132168127883,31,5,59.655662213022,61.1857222263974,0.763856805409115,20,8,0.747744984010184,0.820125965842269,0.566939445953526,31,6,0.555101099527427,0.58016609528215,496593,22,3,453808.800000000000,620402.200000000000,0.48386068980838223000,36,7,0.45683253229209113525,0.49060488476182215208,59289,23,2,52182.333333333333,84929.666666666666,0.05776886995597838478,45,5,0.05697966297994655720,0.06182526104619469213,0.58989019885644891970,24,5,0.58328418772233781160,0.59029234709938394065,588942,20,3,549965.000000000000,761493.000000000000,0.57384192362181554573,31,6,0.55819077891755128165,0.57730532526316302771,60729,23,2,52392.266666666667,87493.533333333334,0.05917194932545010591,44,4,0.05614376999217036492,0.06039041083276351707,322327,20,5,308650.933333333332,375765.666666666665,0.31406275272479962273,19,8,0.30259895275050354740,0.32394555219703559844,6946,22,4,6374.4000000000000000,8322.2000000000000000,0.00676790923635456595,23,3,0.00522343206830832603,0.00700889179205668178 -"48",1037712,18,3,842048.800000000000,1167847.200000000000,25479218.0399998,33,4,24268239.6479999,30743066.7806666,48257687.7199997,20,3,43789158.0460001,60275793.8740002,55554350,25,3,49943344.1333333,68743121.2,53.5354221595202,50,1,53.5354221595202,55.0654821728956,0.527982571146695,34,4,0.458221056681841,0.530602038513927,0.654457726732797,17,9,0.630296086791595,0.655361082546318,614124,13,3,453808.800000000000,620402.200000000000,0.59180581895554836024,19,10,0.55814958970128418574,0.59192194217101520257,86069,16,3,84929.666666666666,117676.999999999999,0.08294112431965709176,23,10,0.08120765331118723185,0.08605325137743536678,0.56046892609418025073,47,1,0.55525155021415329540,0.56225970959119942445,658627,17,3,549965.000000000000,761493.000000000000,0.63469151363769523721,18,10,0.63464896429999826589,0.65376351064561001195,86192,15,2,52392.266666666667,87493.533333333334,0.08305965431641919916,18,10,0.08162361503572927782,0.08587025587632242997,299783,22,4,241536.199999999999,308650.933333333332,0.28888843918158410041,24,7,0.28125235330397149636,0.30259895275050354740,5903,26,3,4426.6000000000000000,6374.4000000000000000,0.00568847618607089443,24,3,0.00522343206830832603,0.00700889179205668178 -"11",691684,34,2,516250.400000000000,842048.800000000000,18593313.4100001,40,3,17793412.5153333,24268239.6479999,38545919.7799997,32,2,27302522.2180001,43789158.0460001,43785255,36,2,31143567.0666667,49943344.1333333,63.3023967592137,25,7,62.7157822397729,64.2458422531483,0.48236787489107,39,4,0.458221056681841,0.530602038513927,0.674596378495779,12,10,0.655361082546318,0.680426078301041,301092,40,2,287215.400000000000,453808.800000000000,0.43530282614604356903,41,6,0.42306017982236011842,0.45683253229209113525,64457,20,2,52182.333333333333,84929.666666666666,0.09318850804702725522,6,12,0.09089884944368350171,0.09574444750993163664,0.56164574832834292629,45,1,0.55525155021415329540,0.56225970959119942445,460278,25,2,338437.000000000000,549965.000000000000,0.66544549245030967899,10,11,0.65376351064561001195,0.67287805699122175801,57415,25,2,52392.266666666667,87493.533333333334,0.08300755836480242423,19,10,0.08162361503572927782,0.08587025587632242997,164916,39,2,107306.733333333333,174421.466666666666,0.23842679605137606190,36,4,0.21721255496437534324,0.23855915441090739428,3855,32,2,2478.8000000000000000,4426.6000000000000000,0.00557335430630172160,25,3,0.00522343206830832603,0.00700889179205668178 -"42",5077427,1,15,4751629.600000000000,5077428.000000000000,101966164.24,1,15,95491338.1073331,101966165.24,258115422.810001,1,15,241628787.982001,258115423.810001,294340445,1,15,275540668.933333,294340446,57.9703942567761,42,3,56.5955421862711,58.1256021996465,0.395040959311669,45,3,0.385840074849756,0.458221056681841,0.716824831074073,6,12,0.705491074055763,0.730556069810486,2619523,1,16,2619523.000000000000,2786116.400000000000,0.51591544299898354029,29,8,0.49060488476182215208,0.52437723723155316891,510645,1,16,510644.999999999995,543392.333333333328,0.10057160841504959106,4,13,0.09574444750993163664,0.10059004557617977157,0.63985939351212682000,2,13,0.63934946273870684400,0.64635762211575297305,3299829,1,16,3299829.000000000000,3511357.000000000000,0.64990181050362713240,12,10,0.63464896429999826589,0.65376351064561001195,543810,1,16,543810.000000000005,578911.266666666672,0.10710346007928819065,1,16,0.10710346007928819072,0.11135010091988134287,1046913,1,16,1046912.999999999995,1114027.733333333328,0.20618967047679858322,44,3,0.19586595551784329220,0.21721255496437534324,27439,2,14,25852.4000000000000000,27800.2000000000000000,0.00540411511578600736,26,3,0.00522343206830832603,0.00700889179205668178 -"46",1229482,11,4,1167847.200000000000,1493645.600000000000,28270492.4999998,30,4,24268239.6479999,30743066.7806666,64714135.52,11,4,60275793.8740002,76762429.7020002,72470365,11,4,68743121.2,87542898.2666667,58.943819429646,37,4,58.1256021996465,59.655662213022,0.43685189136557,43,3,0.385840074849756,0.458221056681841,0.695965955857573,8,11,0.680426078301041,0.705491074055763,667016,9,4,620402.200000000000,786995.600000000000,0.54251790591484869238,24,9,0.52437723723155316891,0.55814958970128418574,107025,10,3,84929.666666666666,117676.999999999999,0.08704885472093125398,14,11,0.08605325137743536678,0.09089884944368350171,0.56452230787199252511,42,2,0.56225970959119942445,0.56926786896824555350,826936,10,4,761493.000000000000,973021.000000000000,0.67258894396176601203,8,11,0.65376351064561001195,0.67287805699122175801,102210,11,3,87493.533333333334,122594.800000000001,0.08313257127798536294,17,10,0.08162361503572927782,0.08587025587632242997,298955,23,4,241536.199999999999,308650.933333333332,0.24315524749447328224,35,5,0.23855915441090739428,0.25990575385743944532,6450,23,4,6374.4000000000000000,8322.2000000000000000,0.00524611177715493191,27,3,0.00522343206830832603,0.00700889179205668178 -"25",1725209,7,5,1493645.600000000000,1819444.000000000000,42934869.8799995,13,6,37217893.9133332,43692721.0459999,90749559.0200006,8,5,76762429.7020002,93249065.5300003,102548115,6,5,87542898.2666667,106342675.333333,59.4409807739236,34,4,58.1256021996465,59.655662213022,0.473113812823453,40,4,0.458221056681841,0.530602038513927,0.67883417512958,11,10,0.655361082546318,0.680426078301041,743858,8,4,620402.200000000000,786995.600000000000,0.43116978870386138723,42,6,0.42306017982236011842,0.45683253229209113525,127355,7,4,117676.999999999999,150424.333333333332,0.07382004151381079046,31,8,0.07151645717869096199,0.07636205524493909692,0.56669938361273605277,40,2,0.56225970959119942445,0.56926786896824555350,1161875,7,5,973021.000000000000,1184549.000000000000,0.67346912750860910185,7,12,0.67287805699122175801,0.69199260333683350407,120506,7,3,87493.533333333334,122594.800000000001,0.06985008772850130042,37,7,0.06888369251394982137,0.07313033335454297352,389725,8,6,375765.666666666665,442880.399999999998,0.22590016629869192660,42,4,0.21721255496437534324,0.23855915441090739428,8136,20,4,6374.4000000000000000,8322.2000000000000000,0.00471595035731902627,28,2,0.00343797234455997028,0.00522343206830832603 -"12",830219,25,2,516250.400000000000,842048.800000000000,34232781.2499997,25,5,30743066.7806666,37217893.9133332,40947025.7999998,26,2,27302522.2180001,43789158.0460001,51871860,30,3,49943344.1333333,68743121.2,62.4797312516336,26,6,61.1857222263974,62.7157822397729,0.83602607469478,17,9,0.820125965842269,0.892506947674355,0.544654574236501,34,5,0.530036103772704,0.555101099527427,414830,31,2,287215.400000000000,453808.800000000000,0.49966334184112866605,34,8,0.49060488476182215208,0.52437723723155316891,39331,38,1,19435.000000000000,52182.333333333333,0.04737424703602302525,47,3,0.04728846684745028734,0.05213406491369842227,0.59487427220258828914,20,6,0.59029234709938394065,0.59730050647643006970,474300,23,2,338437.000000000000,549965.000000000000,0.57129504383783074105,32,6,0.55819077891755128165,0.57730532526316302771,41094,36,1,17291.000000000000,52392.266666666667,0.04949778311505759324,47,2,0.04765048831098406062,0.05189712915157721277,245467,27,4,241536.199999999999,308650.933333333332,0.29566536058558043119,23,7,0.28125235330397149636,0.30259895275050354740,3859,31,2,2478.8000000000000000,4426.6000000000000000,0.00464817114520385585,29,2,0.00343797234455997028,0.00522343206830832603 -"50",834795,24,2,516250.400000000000,842048.800000000000,22067327.2199999,37,3,17793412.5153333,24268239.6479999,41646277.3499999,23,2,27302522.2180001,43789158.0460001,49743695,32,2,31143567.0666667,49943344.1333333,59.5879167939434,33,4,58.1256021996465,59.655662213022,0.529875144290657,33,4,0.458221056681841,0.530602038513927,0.65364811222138,18,9,0.630296086791595,0.655361082546318,512058,20,3,453808.800000000000,620402.200000000000,0.61339370743715522973,14,11,0.59192194217101520257,0.62569429464074621940,85532,17,3,84929.666666666666,117676.999999999999,0.10245868746219131643,2,14,0.10059004557617977157,0.10543564364242790650,0.59615114810831033999,18,6,0.59029234709938394065,0.59730050647643006970,532864,21,2,338437.000000000000,549965.000000000000,0.63831719164585317353,17,10,0.63464896429999826589,0.65376351064561001195,75470,18,2,52392.266666666667,87493.533333333334,0.09040542887774842926,6,12,0.09011689671691558212,0.09436353755750873427,192806,37,3,174421.466666666666,241536.199999999999,0.23096209248977293827,39,4,0.21721255496437534324,0.23855915441090739428,3843,33,2,2478.8000000000000000,4426.6000000000000000,0.00460352541641960002,30,2,0.00343797234455997028,0.00522343206830832603 -"36",473826,42,1,190452.000000000000,516250.400000000000,18551615.2400001,41,3,17793412.5153333,24268239.6479999,25698493.6,41,1,10815886.39,27302522.2180001,31978895,41,2,31143567.0666667,49943344.1333333,67.4907983099281,17,10,67.3059622798992,68.8360222932747,0.721895046797611,21,7,0.675364002178098,0.747744984010184,0.580755489052486,30,7,0.58016609528215,0.605231091036872,238759,44,1,120622.000000000000,287215.400000000000,0.50389594492493024866,31,8,0.49060488476182215208,0.52437723723155316891,29982,44,1,19435.000000000000,52182.333333333333,0.06327639259981512201,39,6,0.06182526104619469213,0.06667085911244282706,0.56093656193716229738,46,1,0.55525155021415329540,0.56225970959119942445,280241,41,1,126909.000000000000,338437.000000000000,0.59144285032902373445,29,7,0.57730532526316302771,0.59641987160877477377,29978,44,1,17291.000000000000,52392.266666666667,0.06326795068231798171,41,5,0.06039041083276351707,0.06463705167335666922,131144,41,2,107306.733333333333,174421.466666666666,0.27677670706124189048,28,6,0.25990575385743944532,0.28125235330397149636,2132,43,1,531.0000000000000000,2478.8000000000000000,0.00449954202597578014,31,2,0.00343797234455997028,0.00522343206830832603 -"31",816381,27,2,516250.400000000000,842048.800000000000,28928912.7299999,28,4,24268239.6479999,30743066.7806666,42606133.0199998,22,2,27302522.2180001,43789158.0460001,50708720,31,3,49943344.1333333,68743121.2,62.1140374408518,29,6,61.1857222263974,62.7157822397729,0.678984706648227,24,7,0.675364002178098,0.747744984010184,0.595598039720272,27,7,0.58016609528215,0.605231091036872,350487,35,2,287215.400000000000,453808.800000000000,0.42931792876120340870,43,6,0.42306017982236011842,0.45683253229209113525,46398,34,1,19435.000000000000,52182.333333333333,0.05683375776751296270,46,4,0.05213406491369842227,0.05697966297994655720,0.59278417173154015259,22,6,0.59029234709938394065,0.59730050647643006970,498632,22,2,338437.000000000000,549965.000000000000,0.61078344547460070727,23,8,0.59641987160877477377,0.61553441795438651983,45477,34,1,17291.000000000000,52392.266666666667,0.05570560804330331059,46,3,0.05189712915157721277,0.05614376999217036492,233921,33,3,174421.466666666666,241536.199999999999,0.28653410601177636422,25,7,0.28125235330397149636,0.30259895275050354740,3635,35,2,2478.8000000000000000,4426.6000000000000000,0.00445257790173950643,32,2,0.00343797234455997028,0.00522343206830832603 -"22",876420,21,3,842048.800000000000,1167847.200000000000,39580494.7799997,14,6,37217893.9133332,43692721.0459999,40966683.2799997,25,2,27302522.2180001,43789158.0460001,56151285,23,3,49943344.1333333,68743121.2,64.0689224344492,23,7,62.7157822397729,64.2458422531483,0.966163028368061,15,11,0.964887929506441,1.03726891133853,0.508604823492186,36,4,0.504971108017981,0.530036103772704,422244,30,2,287215.400000000000,453808.800000000000,0.48178270692133908400,37,7,0.45683253229209113525,0.49060488476182215208,32951,42,1,19435.000000000000,52182.333333333333,0.03759727071495401748,50,1,0.03759727071495401748,0.04244286878120215241,0.62447270189068617037,6,10,0.61832498460756845685,0.62533314398461458590,473402,24,2,338437.000000000000,549965.000000000000,0.54015426393738162068,36,5,0.53907623257193953559,0.55819077891755128165,38040,40,1,17291.000000000000,52392.266666666667,0.04340384747039090847,50,1,0.04340384747039090847,0.04765048831098406062,238335,31,3,174421.466666666666,241536.199999999999,0.27194153488053672897,30,6,0.25990575385743944532,0.28125235330397149636,3752,34,2,2478.8000000000000000,4426.6000000000000000,0.00428105246343077520,33,2,0.00343797234455997028,0.00522343206830832603 -"13",315842,47,1,190452.000000000000,516250.400000000000,11406965.55,47,2,11318585.3826666,17793412.5153333,18754217.11,46,1,10815886.39,27302522.2180001,22074815,46,1,12343790,31143567.0666667,69.8919554714066,10,11,68.8360222932747,70.3660823066502,0.608234696393576,30,6,0.602983020346013,0.675364002178098,0.621799792183612,21,8,0.605231091036872,0.630296086791595,139329,47,1,120622.000000000000,287215.400000000000,0.44113512452428746019,40,6,0.42306017982236011842,0.45683253229209113525,25600,47,1,19435.000000000000,52182.333333333333,0.08105318482025823038,27,9,0.07636205524493909692,0.08120765331118723185,0.59835937500000000000,15,7,0.59730050647643006970,0.60430866585347619875,197213,47,1,126909.000000000000,338437.000000000000,0.62440397413896821829,21,9,0.61553441795438651983,0.63464896429999826589,23633,47,1,17291.000000000000,52392.266666666667,0.07482538737723292026,33,8,0.07313033335454297352,0.07737697419513612567,78192,47,1,40192.000000000000,107306.733333333333,0.24756682138537623242,33,5,0.23855915441090739428,0.25990575385743944532,1280,48,1,531.0000000000000000,2478.8000000000000000,0.00405265924101291152,34,2,0.00343797234455997028,0.00522343206830832603 -"35",1141752,14,3,842048.800000000000,1167847.200000000000,37529170.4299997,20,6,37217893.9133332,43692721.0459999,55296182.21,15,3,43789158.0460001,60275793.8740002,66358735,15,3,49943344.1333333,68743121.2,58.1200952571136,40,3,56.5955421862711,58.1256021996465,0.678693698734463,25,7,0.675364002178098,0.747744984010184,0.595701288897362,26,7,0.58016609528215,0.605231091036872,479322,25,3,453808.800000000000,620402.200000000000,0.41981270888949614277,44,5,0.38928782735262910159,0.42306017982236011842,66862,19,2,52182.333333333333,84929.666666666666,0.05856087836938319355,44,5,0.05697966297994655720,0.06182526104619469213,0.58212437557955191290,29,4,0.57627602834529168255,0.58328418772233781160,684875,14,3,549965.000000000000,761493.000000000000,0.59984567576846810866,27,8,0.59641987160877477377,0.61553441795438651983,66751,20,2,52392.266666666667,87493.533333333334,0.05846365935859976597,45,4,0.05614376999217036492,0.06039041083276351707,339313,18,5,308650.933333333332,375765.666666666665,0.29718625410772216734,22,7,0.28125235330397149636,0.30259895275050354740,4585,28,3,4426.6000000000000000,6374.4000000000000000,0.00401575823821635522,35,2,0.00343797234455997028,0.00522343206830832603 -"30",724676,32,2,516250.400000000000,842048.800000000000,24805137.4699999,34,4,24268239.6479999,30743066.7806666,37949667.3499998,34,2,27302522.2180001,43789158.0460001,45268890,33,2,31143567.0666667,49943344.1333333,62.4677649045918,27,6,61.1857222263974,62.7157822397729,0.653632540207233,27,6,0.602983020346013,0.675364002178098,0.604729270672601,24,7,0.58016609528215,0.605231091036872,362755,34,2,287215.400000000000,453808.800000000000,0.50057542957128427049,33,8,0.49060488476182215208,0.52437723723155316891,45167,35,1,19435.000000000000,52182.333333333333,0.06232716413956030005,41,6,0.06182526104619469213,0.06667085911244282706,0.59749374543361303607,17,7,0.59730050647643006970,0.60430866585347619875,446214,26,2,338437.000000000000,549965.000000000000,0.61574275952287643029,22,9,0.61553441795438651983,0.63464896429999826589,43734,35,1,17291.000000000000,52392.266666666667,0.06034972870634600842,43,4,0.05614376999217036492,0.06039041083276351707,194945,36,3,174421.466666666666,241536.199999999999,0.26900987475782280633,31,6,0.25990575385743944532,0.28125235330397149636,2498,39,2,2478.8000000000000000,4426.6000000000000000,0.00344705771958778820,36,2,0.00343797234455997028,0.00522343206830832603 -"2",2081261,3,6,1819444.000000000000,2145242.400000000000,34313927.6099997,24,5,30743066.7806666,37217893.9133332,109396506.740001,3,6,93249065.5300003,109735701.358,117298610,4,6,106342675.333333,125142452.4,56.3593946170134,46,2,55.0654821728956,56.5955421862711,0.313665661112492,47,2,0.31345909301767,0.385840074849756,0.761228697378859,4,14,0.755621065565209,0.780686061319932,825312,5,5,786995.600000000000,953589.000000000000,0.39654421045702581272,46,5,0.38928782735262910159,0.42306017982236011842,179269,4,5,150424.333333333332,183171.666666666665,0.08613480000826422059,15,11,0.08605325137743536678,0.09089884944368350171,0.57652466405234591591,32,4,0.57627602834529168255,0.58328418772233781160,1482622,4,7,1396077.000000000000,1607605.000000000000,0.71236716586723145247,5,14,0.71110714968244525013,0.73022169602805699619,175963,4,5,157696.066666666668,192797.333333333335,0.08454633993526040223,13,10,0.08162361503572927782,0.08587025587632242997,388546,9,6,375765.666666666665,442880.399999999998,0.18668778207058124858,47,2,0.17451935607131124116,0.19586595551784329220,7169,21,4,6374.4000000000000000,8322.2000000000000000,0.00344454635915437804,37,2,0.00343797234455997028,0.00522343206830832603 -"1",1720717,8,5,1493645.600000000000,1819444.000000000000,39402474.2999997,16,6,37217893.9133332,43692721.0459999,92243562.2200004,6,5,76762429.7020002,93249065.5300003,100835215,8,5,87542898.2666667,106342675.333333,58.6006966863232,38,4,58.1256021996465,59.655662213022,0.427156902354064,44,3,0.385840074849756,0.458221056681841,0.700693804830094,7,11,0.680426078301041,0.705491074055763,598783,14,3,453808.800000000000,620402.200000000000,0.34798459014468968459,48,3,0.32174312241316706793,0.35551547488289808476,120036,8,4,117676.999999999999,150424.333333333332,0.06975929220202973528,35,7,0.06667085911244282706,0.07151645717869096199,0.57179512812822819821,34,3,0.56926786896824555350,0.57627602834529168255,1184804,6,6,1184549.000000000000,1396077.000000000000,0.68855250456641039753,6,12,0.67287805699122175801,0.69199260333683350407,110457,8,3,87493.533333333334,122594.800000000001,0.06419242676163483013,40,5,0.06039041083276351707,0.06463705167335666922,392455,7,6,375765.666666666665,442880.399999999998,0.22807643557888949781,41,4,0.21721255496437534324,0.23855915441090739428,5904,25,3,4426.6000000000000000,6374.4000000000000000,0.00343112783798846644,38,1,0.00165251262081161453,0.00343797234455997028 -"23",586017,38,2,516250.400000000000,842048.800000000000,18173351.9400001,42,3,17793412.5153333,24268239.6479999,31391524.1399998,38,2,27302522.2180001,43789158.0460001,38360925,39,2,31143567.0666667,49943344.1333333,65.460430328813,21,8,64.2458422531483,65.7759022665238,0.578925440477203,31,5,0.530602038513927,0.602983020346013,0.633342128997407,20,9,0.630296086791595,0.655361082546318,367245,33,2,287215.400000000000,453808.800000000000,0.62667977208852302920,13,12,0.62569429464074621940,0.65946664711047723623,49687,31,1,19435.000000000000,52182.333333333333,0.08478764267930793817,17,10,0.08120765331118723185,0.08605325137743536678,0.66037394086984523115,1,16,0.66037394086984523115,0.66738210024689136020,366692,34,2,338437.000000000000,549965.000000000000,0.62573611345745942524,20,9,0.61553441795438651983,0.63464896429999826589,48924,33,1,17291.000000000000,52392.266666666667,0.08348563266935942131,16,10,0.08162361503572927782,0.08587025587632242997,116541,44,2,107306.733333333333,174421.466666666666,0.19886965736488873190,45,3,0.19586595551784329220,0.21721255496437534324,1946,44,1,531.0000000000000000,2478.8000000000000000,0.00332072277766685949,39,1,0.00165251262081161453,0.00343797234455997028 -"33",1050654,17,3,842048.800000000000,1167847.200000000000,32177662.1299997,27,5,30743066.7806666,37217893.9133332,49939312.2599998,19,3,43789158.0460001,60275793.8740002,60318910,18,3,49943344.1333333,68743121.2,57.4108222116891,44,3,56.5955421862711,58.1256021996465,0.644335307672494,28,6,0.602983020346013,0.675364002178098,0.608148469070745,23,8,0.605231091036872,0.630296086791595,523115,19,3,453808.800000000000,620402.200000000000,0.49789464466893953671,35,8,0.49060488476182215208,0.52437723723155316891,63967,22,2,52182.333333333333,84929.666666666666,0.06088303095024622759,42,5,0.05697966297994655720,0.06182526104619469213,0.56951240483374239842,37,3,0.56926786896824555350,0.57627602834529168255,637366,19,3,549965.000000000000,761493.000000000000,0.60663738966396168482,25,8,0.59641987160877477377,0.61553441795438651983,64088,21,2,52392.266666666667,87493.533333333334,0.06099819731329248259,42,5,0.06039041083276351707,0.06463705167335666922,285781,24,4,241536.199999999999,308650.933333333332,0.27200296196464297476,29,6,0.25990575385743944532,0.28125235330397149636,3457,36,2,2478.8000000000000000,4426.6000000000000000,0.00329033154587523581,40,1,0.00165251262081161453,0.00343797234455997028 -"45",506116,40,1,190452.000000000000,516250.400000000000,13315767.5100001,44,2,11318585.3826666,17793412.5153333,26014386.3099998,40,1,10815886.39,27302522.2180001,29975170,43,1,12343790,31143567.0666667,59.2258889266492,35,4,58.1256021996465,59.655662213022,0.511861681122249,36,4,0.458221056681841,0.530602038513927,0.661436170045466,15,10,0.655361082546318,0.680426078301041,254672,43,1,120622.000000000000,287215.400000000000,0.50318899224683669356,32,8,0.49060488476182215208,0.52437723723155316891,43204,37,1,19435.000000000000,52182.333333333333,0.08536382963589374768,16,10,0.08120765331118723185,0.08605325137743536678,0.57103508934357929821,36,3,0.56926786896824555350,0.57627602834529168255,324662,38,1,126909.000000000000,338437.000000000000,0.64147744785780334943,15,10,0.63464896429999826589,0.65376351064561001195,40439,37,1,17291.000000000000,52392.266666666667,0.07990065518576768962,23,9,0.07737697419513612567,0.08162361503572927782,124336,42,2,107306.733333333333,174421.466666666666,0.24566700124082226209,34,5,0.23855915441090739428,0.25990575385743944532,1664,46,1,531.0000000000000000,2478.8000000000000000,0.00328778382821329498,41,1,0.00165251262081161453,0.00343797234455997028 -"38",338755,46,1,190452.000000000000,516250.400000000000,9475390.26000005,48,1,4843758.24999999,11318585.3826666,18162118.3000001,47,1,10815886.39,27302522.2180001,21045140,47,1,12343790,31143567.0666667,62.124957565202,28,6,61.1857222263974,62.7157822397729,0.52171173557437,35,4,0.458221056681841,0.530602038513927,0.657154687462899,16,10,0.655361082546318,0.680426078301041,193668,46,1,120622.000000000000,287215.400000000000,0.57170521468317810807,22,10,0.55814958970128418574,0.59192194217101520257,27821,45,1,19435.000000000000,52182.333333333333,0.08212720107452288527,26,10,0.08120765331118723185,0.08605325137743536678,0.58319255238848351964,28,4,0.57627602834529168255,0.58328418772233781160,216416,44,1,126909.000000000000,338437.000000000000,0.63885699104072264616,16,10,0.63464896429999826589,0.65376351064561001195,26880,46,1,17291.000000000000,52392.266666666667,0.07934938229694026656,26,9,0.07737697419513612567,0.08162361503572927782,78006,48,1,40192.000000000000,107306.733333333333,0.23027261590234830482,40,4,0.21721255496437534324,0.23855915441090739428,1095,49,1,531.0000000000000000,2478.8000000000000000,0.00323242461365883898,42,1,0.00165251262081161453,0.00343797234455997028 -"40",1035475,19,3,842048.800000000000,1167847.200000000000,24739246.7699998,35,4,24268239.6479999,30743066.7806666,52325994.64,17,3,43789158.0460001,60275793.8740002,60002300,20,3,49943344.1333333,68743121.2,57.9466428450711,43,3,56.5955421862711,58.1256021996465,0.472790759931167,41,4,0.458221056681841,0.530602038513927,0.67898307567243,10,10,0.655361082546318,0.680426078301041,629109,12,4,620402.200000000000,786995.600000000000,0.60755595258214828943,17,11,0.59192194217101520257,0.62569429464074621940,93797,13,3,84929.666666666666,117676.999999999999,0.09058354861295540694,8,11,0.08605325137743536678,0.09089884944368350171,0.58122328006226211926,31,4,0.57627602834529168255,0.58328418772233781160,682688,15,3,549965.000000000000,761493.000000000000,0.65929935536830923006,11,11,0.65376351064561001195,0.67287805699122175801,85430,16,2,52392.266666666667,87493.533333333334,0.08250319901494483208,20,10,0.08162361503572927782,0.08587025587632242997,244927,28,4,241536.199999999999,308650.933333333332,0.23653588932615466332,37,4,0.21721255496437534324,0.23855915441090739428,3172,38,2,2478.8000000000000000,4426.6000000000000000,0.00306332842415316642,43,1,0.00165251262081161453,0.00343797234455997028 -"14",654187,35,2,516250.400000000000,842048.800000000000,27332523.5199998,31,4,24268239.6479999,30743066.7806666,33849359.0099999,36,2,27302522.2180001,43789158.0460001,44167570,35,2,31143567.0666667,49943344.1333333,67.5152058967849,16,10,67.3059622798992,68.8360222932747,0.807475364952264,19,8,0.747744984010184,0.820125965842269,0.553257886326108,32,5,0.530036103772704,0.555101099527427,309904,39,2,287215.400000000000,453808.800000000000,0.47372387406047506294,38,7,0.45683253229209113525,0.49060488476182215208,30127,43,1,19435.000000000000,52182.333333333333,0.04605258129556227806,48,2,0.04244286878120215241,0.04728846684745028734,0.59760347860722939556,16,7,0.59730050647643006970,0.60430866585347619875,371205,33,2,338437.000000000000,549965.000000000000,0.56742949645896356852,33,6,0.55819077891755128165,0.57730532526316302771,31640,43,1,17291.000000000000,52392.266666666667,0.04836537564947025850,49,2,0.04765048831098406062,0.05189712915157721277,163766,40,2,107306.733333333333,174421.466666666666,0.25033514881830424634,32,5,0.23855915441090739428,0.25990575385743944532,1830,45,1,531.0000000000000000,2478.8000000000000000,0.00279736527934673113,44,1,0.00165251262081161453,0.00343797234455997028 -"39",489431,41,1,190452.000000000000,516250.400000000000,12737420.3500001,45,2,11318585.3826666,17793412.5153333,25690237.8799999,42,1,10815886.39,27302522.2180001,29627010,44,1,12343790,31143567.0666667,60.5335787884298,32,5,59.655662213022,61.1857222263974,0.4958078009825,38,4,0.458221056681841,0.530602038513927,0.668535088092978,13,10,0.655361082546318,0.680426078301041,264550,41,1,120622.000000000000,287215.400000000000,0.54052563078350165805,25,9,0.52437723723155316891,0.55814958970128418574,43295,36,1,19435.000000000000,52182.333333333333,0.08845986461830166050,9,11,0.08605325137743536678,0.09089884944368350171,0.56734033953112368634,39,2,0.56225970959119942445,0.56926786896824555350,317324,39,1,126909.000000000000,338437.000000000000,0.64835288324605511298,13,10,0.63464896429999826589,0.65376351064561001195,38707,39,1,17291.000000000000,52392.266666666667,0.07908571381869967370,27,9,0.07737697419513612567,0.08162361503572927782,113241,45,2,107306.733333333333,174421.466666666666,0.23137275734475339731,38,4,0.21721255496437534324,0.23855915441090739428,1369,47,1,531.0000000000000000,2478.8000000000000000,0.00279712564181672187,45,1,0.00165251262081161453,0.00343797234455997028 -"41",190452,50,1,190452.000000000000,516250.400000000000,4843758.24999999,50,1,4843758.24999999,11318585.3826666,10815886.39,50,1,10815886.39,27302522.2180001,12343790,50,1,12343790,31143567.0666667,64.8131287673534,22,8,64.2458422531483,65.7759022665238,0.447837382470876,42,3,0.385840074849756,0.458221056681841,0.690685302166603,9,11,0.680426078301041,0.705491074055763,120622,50,1,120622.000000000000,287215.400000000000,0.63334593493373658455,11,12,0.62569429464074621940,0.65946664711047723623,19435,50,1,19435.000000000000,52182.333333333333,0.10204670993216138450,3,14,0.10059004557617977157,0.10543564364242790650,0.55857988165680473373,48,1,0.55525155021415329540,0.56225970959119942445,126909,50,1,126909.000000000000,338437.000000000000,0.66635687732342007435,9,11,0.65376351064561001195,0.67287805699122175801,17291,50,1,17291.000000000000,52392.266666666667,0.09078928023859030097,5,12,0.09011689671691558212,0.09436353755750873427,40192,50,1,40192.000000000000,107306.733333333333,0.21103480141978031210,43,3,0.19586595551784329220,0.21721255496437534324,531,50,1,531.0000000000000000,2478.8000000000000000,0.00278810408921933086,46,1,0.00165251262081161453,0.00343797234455997028 -"32",1099169,15,3,842048.800000000000,1167847.200000000000,20204816.65,39,3,17793412.5153333,24268239.6479999,60947934.3899999,13,4,60275793.8740002,76762429.7020002,65082795,16,3,49943344.1333333,68743121.2,59.2109084226356,36,4,58.1256021996465,59.655662213022,0.331509457247744,46,2,0.31345909301767,0.385840074849756,0.751027335597765,5,13,0.730556069810486,0.755621065565209,453655,28,2,287215.400000000000,453808.800000000000,0.41272543166701389868,45,5,0.38928782735262910159,0.42306017982236011842,91317,14,3,84929.666666666666,117676.999999999999,0.08307821636163319744,22,10,0.08120765331118723185,0.08605325137743536678,0.56471412770896985227,41,2,0.56225970959119942445,0.56926786896824555350,784444,11,4,761493.000000000000,973021.000000000000,0.71367005437744332309,4,14,0.71110714968244525013,0.73022169602805699619,87672,14,3,87493.533333333334,122594.800000000001,0.07976207480378358560,24,9,0.07737697419513612567,0.08162361503572927782,215369,34,3,174421.466666666666,241536.199999999999,0.19593802226955090618,46,3,0.19586595551784329220,0.21721255496437534324,2422,41,1,531.0000000000000000,2478.8000000000000000,0.00220348281292503701,47,1,0.00165251262081161453,0.00343797234455997028 -"44",2557809,2,8,2471040.800000000000,2796839.200000000000,35163836.0399997,22,5,30743066.7806666,37217893.9133332,130911821.000001,2,8,126222337.186,142708973.014,139465885,2,7,125142452.4,143942229.466667,54.525527512023,49,1,53.5354221595202,55.0654821728956,0.268607034654262,49,1,0.241078111185585,0.31345909301767,0.788266163345479,2,15,0.780686061319932,0.805751057074654,650191,10,4,620402.200000000000,786995.600000000000,0.25419841747370503427,50,1,0.25419841747370503427,0.28797076994343605110,222787,2,7,215918.999999999998,248666.333333333331,0.08710071784093339260,13,11,0.08605325137743536678,0.09089884944368350171,0.57159080197677602374,35,3,0.56926786896824555350,0.57627602834529168255,1889004,2,9,1819133.000000000000,2030661.000000000000,0.73852426041193849893,2,15,0.73022169602805699619,0.74933624237366874225,221904,2,6,192797.333333333335,227898.600000000002,0.08675550050844296818,9,11,0.08587025587632242997,0.09011689671691558212,417234,5,6,375765.666666666665,442880.399999999998,0.16312164043523187228,49,1,0.15317275662477919012,0.17451935607131124116,4767,27,3,4426.6000000000000000,6374.4000000000000000,0.00186370444392055857,48,1,0.00165251262081161453,0.00343797234455997028 -"47",1285899,10,4,1167847.200000000000,1493645.600000000000,20694283.7,38,3,17793412.5153333,24268239.6479999,67405310.76,10,4,60275793.8740002,76762429.7020002,71657255,12,4,68743121.2,87542898.2666667,55.7254146709812,47,2,55.0654821728956,56.5955421862711,0.307012659190654,48,1,0.241078111185585,0.31345909301767,0.765103530534458,3,14,0.755621065565209,0.780686061319932,491125,24,3,453808.800000000000,620402.200000000000,0.38193124032291805188,47,4,0.35551547488289808476,0.38928782735262910159,112251,9,3,84929.666666666666,117676.999999999999,0.08729379212519801322,12,11,0.08605325137743536678,0.09089884944368350171,0.58146475309796794683,30,4,0.57627602834529168255,0.58328418772233781160,935361,9,4,761493.000000000000,973021.000000000000,0.72739849708258580184,3,14,0.71110714968244525013,0.73022169602805699619,100829,12,3,87493.533333333334,122594.800000000001,0.07841129046682515501,28,9,0.07737697419513612567,0.08162361503572927782,238421,30,3,174421.466666666666,241536.199999999999,0.18541191804332999715,48,2,0.17451935607131124116,0.19586595551784329220,2331,42,1,531.0000000000000000,2478.8000000000000000,0.00181273956974847947,49,1,0.00165251262081161453,0.00343797234455997028 -"43",2070786,4,6,1819444.000000000000,2145242.400000000000,26186850.8999998,32,4,24268239.6479999,30743066.7806666,108623925.960001,4,6,93249065.5300003,109735701.358,114324850,5,6,106342675.333333,125142452.4,55.2084329331954,48,2,55.0654821728956,56.5955421862711,0.241078111185585,50,1,0.241078111185585,0.31345909301767,0.805751057074654,1,16,0.805751057074654,0.830816052829377,649644,11,4,620402.200000000000,786995.600000000000,0.31371855903990079129,49,2,0.28797076994343605110,0.32174312241316706793,181143,3,5,150424.333333333332,183171.666666666665,0.08747548032486215379,11,11,0.08605325137743536678,0.09089884944368350171,0.55558315805744632694,49,1,0.55525155021415329540,0.56225970959119942445,1551715,3,7,1396077.000000000000,1607605.000000000000,0.74933624237366874221,1,16,0.74933624237366874225,0.76845078871928048831,168445,6,5,157696.066666666668,192797.333333333335,0.08134350917960619784,22,9,0.07737697419513612567,0.08162361503572927782,317188,21,5,308650.933333333332,375765.666666666665,0.15317275662477919012,50,1,0.15317275662477919012,0.17451935607131124116,3422,37,2,2478.8000000000000000,4426.6000000000000000,0.00165251262081161453,50,1,0.00165251262081161453,0.00343797234455997028 \ No newline at end of file +"ward","ticket_count","ticket_count_rank","ticket_count_rank_type","ticket_count_bucket","current_amount_due","current_amount_due_rank","current_amount_due_rank_type","current_amount_due_bucket","fine_level1_amount","fine_level1_amount_rank","fine_level1_amount_rank_type","fine_level1_amount_bucket","total_payments","total_payments_rank","total_payments_rank_type","total_payments_bucket","avg_per_ticket","avg_per_ticket_rank","avg_per_ticket_rank_type","avg_per_ticket_bucket","debt_to_payment_ratio","debt_to_payment_ratio_rank","debt_to_payment_ratio_rank_type","debt_to_payment_ratio_bucket","paid_pct","paid_pct_rank","paid_pct_rank_type","paid_pct_bucket","police_ticket_count","police_ticket_count_rank","police_ticket_count_rank_type","police_ticket_count_pct","police_ticket_count_pct_rank","police_ticket_count_pct_rank_type","contested_and_notliable_pct","contested_and_notliable_pct_rank","contested_and_notliable_pct_rank_type","contested_ticket_count","contested_ticket_count_rank","contested_ticket_count_rank_type","contested_ticket_count_pct","contested_ticket_count_pct_rank","contested_ticket_count_pct_rank_type","paid_ticket_count","paid_ticket_count_rank","paid_ticket_count_rank_type","paid_ticket_count_pct","paid_ticket_count_pct_rank","paid_ticket_count_pct_rank_type","dismissed_ticket_count","dismissed_ticket_count_rank","dismissed_ticket_count_rank_type","dismissed_ticket_count_pct","dismissed_ticket_count_pct_rank","dismissed_ticket_count_pct_rank_type","seized_or_suspended_ticket_count","seized_or_suspended_ticket_count_rank","seized_or_suspended_ticket_count_rank_type","seized_or_suspended_ticket_count_pct","seized_or_suspended_ticket_count_pct_rank","seized_or_suspended_ticket_count_pct_rank_type","bankruptcy_ticket_count","bankruptcy_ticket_count_rank","bankruptcy_ticket_count_rank_type","bankruptcy_ticket_count_pct","bankruptcy_ticket_count_pct_rank","bankruptcy_ticket_count_pct_rank_type" +"29","726017","31","middle30","2","42500242.1099996","12","middle30","6","50345885","30","middle30","3","38950634.6199997","29","middle30","2","69.345325247205","12","middle30","11","1.0911309282796","8","top10","12","0.478210133318966","43","bottom10","2","456008","26","middle30","0.62809548536742252592","12","middle30","0.58702228197473259653","26","middle30","50579","29","middle30","0.06966641276994891304","36","middle30","367671","33","middle30","0.50642202593052228805","43","bottom10","53417","28","middle30","0.07357541214599658135","35","middle30","342677","16","middle30","0.47199583480827583927","1","top10","20522","6","top10","0.02826655574180769872","1","top10" +"37","734376","30","middle30","2","47023834.4199997","8","top10","7","53665820","26","middle30","3","38871568.7699999","30","middle30","2","73.0767617678138","4","top10","13","1.20972309345774","4","top10","14","0.452545390397859","47","bottom10","1","507803","20","middle30","0.69147548394827717681","4","top10","0.59888161483906164757","12","middle30","51324","27","middle30","0.06988790483349129057","34","middle30","346983","35","middle30","0.47248684597535867185","48","bottom10","54317","27","middle30","0.07396347375186552937","34","middle30","340153","17","middle30","0.46318643310783576805","3","top10","19845","7","top10","0.02702294192620673878","2","top10" +"24","850459","22","middle30","3","54001654.6399994","4","top10","8","58350565","21","middle30","3","40699653.6599999","24","middle30","2","68.6106737655784","15","middle30","10","1.32683327212371","1","top10","16","0.429768652520297","50","bottom10","1","581979","15","middle30","0.6843116481805707271","5","top10","0.59572553430821147357","18","middle30","53340","26","middle30","0.06271907287711694508","40","middle30","393461","29","middle30","0.46264546556624128853","50","bottom10","57604","24","middle30","0.06773283603324792847","38","middle30","386452","7","top10","0.45440403358656913502","5","top10","22211","4","top10","0.02611648533321418199","3","top10" +"6","820002","23","middle30","2","48797879.2499994","7","top10","7","58529480","20","middle30","3","45342141.2099998","21","middle30","3","71.3772405433158","7","top10","12","1.07621470772619","9","top10","12","0.481645754785724","42","bottom10","3","533677","18","middle30","0.65082402238043321846","9","top10","0.61598128145132856822","7","top10","62398","22","middle30","0.07609493635381377119","29","middle30","417217","27","middle30","0.50879997853663771552","42","bottom10","65168","20","middle30","0.07947297689517830444","25","middle30","370083","10","top10","0.45131963092772944456","6","top10","21228","5","top10","0.02588774173721527508","4","top10" +"34","419815","43","bottom10","1","28493756.03","29","middle30","4","32033105","40","middle30","2","23775974.7199999","43","bottom10","1","76.3029072329478","1","top10","16","1.19842641008663","5","top10","14","0.454870809144162","46","bottom10","2","318575","37","middle30","0.75884615842692614604","1","top10","0.6270184084649949268","3","top10","34495","39","middle30","0.08216714505198718483","25","middle30","198355","45","bottom10","0.47248192656289079714","49","bottom10","36646","41","bottom10","0.08729083048485642485","9","top10","192838","36","middle30","0.45934042375808391792","4","top10","10865","17","middle30","0.02588044733989971773","5","top10" +"17","696249","33","middle30","2","43107760.5399996","10","top10","7","50598085","28","middle30","3","38112539.8899999","32","middle30","2","72.6723988113448","5","top10","13","1.1310650159873","7","top10","13","0.469248940082998","44","bottom10","2","453854","27","middle30","0.65185587340161350322","8","top10","0.59747444142541587662","15","middle30","51157","28","middle30","0.07347515041314242462","32","middle30","345903","36","middle30","0.49680933114446124878","44","bottom10","53365","29","middle30","0.0766464296537589282","30","middle30","313484","20","middle30","0.45024696624339855425","8","top10","17944","9","top10","0.02577238890109716495","6","top10" +"21","522735","39","middle30","2","31464206.6999999","27","middle30","5","39726600","38","middle30","2","30999790.8599999","37","middle30","2","75.9975896008494","2","top10","15","1.01498125719936","12","middle30","11","0.496282531873229","39","middle30","3","356256","34","middle30","0.68152314270136876237","6","top10","0.62654057986075028577","4","top10","48115","31","middle30","0.09204472629535041656","6","top10","268770","42","bottom10","0.51416109500989985365","40","middle30","48388","33","middle30","0.09256697944465168776","2","top10","227058","33","middle30","0.43436540503314298832","10","top10","13122","16","middle30","0.02510258544004132113","7","top10" +"7","573243","38","middle30","2","33950740.0799998","23","middle30","5","39749280","37","middle30","2","29397087.8599999","39","middle30","2","69.3410647840445","13","middle30","11","1.15490147329171","6","top10","13","0.464058339740449","45","bottom10","2","308710","38","middle30","0.53853252460125984966","26","middle30","0.56531049250535331906","41","bottom10","45299","34","middle30","0.07902233433290942933","28","middle30","274030","41","bottom10","0.47803462057103183118","47","bottom10","49218","31","middle30","0.08585887660206927952","13","middle30","268675","26","middle30","0.46869303244871721068","2","top10","13941","15","middle30","0.02431952941422747421","8","top10" +"20","783460","28","middle30","2","48950975.8199994","6","top10","7","54397595","25","middle30","3","39324381.2299998","28","middle30","2","69.4325109131289","11","middle30","11","1.24479964563704","2","top10","14","0.445474054641619","49","bottom10","1","548229","16","middle30","0.69975365685548719781","3","top10","0.61404854528518985261","8","top10","54753","24","middle30","0.06988614606999719194","35","middle30","375722","31","middle30","0.47956755928828529855","46","bottom10","59143","23","middle30","0.07548949531565108621","32","middle30","352258","15","middle30","0.4496183595844076277","9","top10","18067","8","top10","0.02306052638296786052","9","top10" +"8","643480","36","middle30","2","34565979.5499998","21","middle30","5","44501805","34","middle30","2","35370949.3599999","35","middle30","2","69.1580235593958","14","middle30","11","0.977242063768004","14","middle30","11","0.505754969674433","37","middle30","4","332494","36","middle30","0.51671225212904829987","28","middle30","0.60434855140966468331","10","top10","53949","25","middle30","0.08383943556909305651","19","middle30","337603","37","middle30","0.52465189283272207372","39","middle30","56866","26","middle30","0.08837259899297569466","7","top10","279222","25","middle30","0.43392490831105861876","11","middle30","14835","14","middle30","0.02305432958289301921","10","top10" +"9","351506","45","bottom10","1","20666074.49","37","middle30","3","25841690","44","bottom10","1","19914102.68","44","bottom10","1","73.5170665650088","3","top10","14","1.03776076793836","10","top10","12","0.490734739687682","41","bottom10","3","194787","45","bottom10","0.55414985803940757768","23","middle30","0.58565448651370660624","27","middle30","31773","42","bottom10","0.09039106018104954112","8","top10","179757","47","bottom10","0.51139098621360659562","41","bottom10","30739","43","bottom10","0.08744943187314014555","8","top10","149092","40","middle30","0.4241520770626959426","12","middle30","7875","20","middle30","0.02240360050753045467","11","middle30" +"16","800289","27","middle30","2","49886840.6799994","5","top10","8","55971585","23","middle30","3","40483740.7899999","25","middle30","2","69.9392157083254","9","top10","11","1.23226855291797","3","top10","14","0.447974773775683","48","bottom10","1","540506","17","middle30","0.67538851589863161933","7","top10","0.58775323432755106286","25","middle30","48078","32","middle30","0.0600757976181104576","43","bottom10","384809","30","middle30","0.48083754743598874906","45","bottom10","52500","30","middle30","0.06560130152982235168","39","middle30","360954","13","middle30","0.45102956556943804051","7","top10","17705","10","top10","0.02212325797305723307","12","middle30" +"28","1332828","9","top10","4","69052415.259999","2","top10","11","89104805","9","top10","5","67888439.4900001","9","top10","4","66.8539413937882","18","middle30","9","1.01714541943729","11","middle30","11","0.495750078484161","40","middle30","3","812695","5","top10","0.60975234613918675178","14","middle30","0.5904329608938547486","23","middle30","100240","11","middle30","0.07520850402302472637","30","middle30","709708","12","middle30","0.53248281098536345275","38","middle30","104260","9","top10","0.07822464714126654002","28","middle30","527276","3","top10","0.39560693502837575441","13","middle30","28959","1","top10","0.02172748471670763219","13","middle30" +"18","253791","48","bottom10","1","12524355.0900001","46","bottom10","2","18443320","48","bottom10","1","15116388.3000001","48","bottom10","1","72.6712925202233","6","top10","13","0.828528272854703","18","middle30","9","0.546887906982591","33","middle30","5","135505","48","bottom10","0.53392358279056388918","27","middle30","0.59387648207228227227","20","middle30","21001","49","bottom10","0.08274919126367759298","24","middle30","140609","49","bottom10","0.5540346190369240832","34","middle30","20920","48","bottom10","0.08243003100976787987","20","middle30","91294","46","bottom10","0.35972118790658455186","14","middle30","4437","28","middle30","0.01748288946416539594","14","middle30" +"5","1066278","16","middle30","3","39099465.0999997","15","middle30","6","67806820","12","middle30","4","58263713.6899999","13","middle30","3","63.592065108724","24","middle30","7","0.671077461832142","26","middle30","6","0.598416304953103","25","middle30","7","476558","23","middle30","0.44693597729672749508","39","middle30","0.56265428603782131129","44","bottom10","88310","15","middle30","0.08282080283003119262","22","middle30","642266","17","middle30","0.60234385404181648688","26","middle30","92194","12","middle30","0.08646338009412179563","11","middle30","364347","11","middle30","0.3416998193716835572","15","middle30","16854","11","middle30","0.01580638445133445499","15","middle30" +"3","1068060","15","middle30","3","39425365.9399993","14","middle30","6","66560465","13","middle30","3","56067856.8399998","14","middle30","3","62.3190317023388","28","middle30","6","0.703172337271728","22","middle30","7","0.587139644131302","29","middle30","7","657643","9","top10","0.61573600734041158736","13","middle30","0.60407532410182001703","11","middle30","95109","12","middle30","0.08904836806920959497","9","top10","631895","18","middle30","0.5916287474486452072","29","middle30","92175","13","middle30","0.08630133138587719791","12","middle30","363786","12","middle30","0.34060446042357170945","16","middle30","15058","13","middle30","0.01409845888807744883","16","middle30" +"27","1972334","5","top10","6","62580044.0999991","3","top10","10","115535225","4","top10","6","97965748.2800004","5","top10","6","58.5779208795265","38","middle30","4","0.638795142166793","29","middle30","6","0.610204396064912","22","middle30","8","1007188","2","top10","0.51065793116176063486","29","middle30","0.57522069829245196567","33","middle30","163685","5","top10","0.08299050769291610853","20","middle30","1202518","5","top10","0.60969288163161006199","24","middle30","165555","4","top10","0.08393862297156566788","15","middle30","606518","2","top10","0.30751282490693766877","20","middle30","24138","3","top10","0.01223829229734923193","17","middle30" +"10","376393","44","bottom10","1","17471412.8700001","43","bottom10","3","24801125","45","bottom10","1","19075018.44","45","bottom10","1","65.8915681216176","19","middle30","9","0.915931637233068","16","middle30","10","0.521939290821551","35","middle30","4","220190","44","bottom10","0.58500025239576719014","19","middle30","0.60526117717898539816","9","top10","26572","46","bottom10","0.07059642448185805793","33","middle30","203191","44","bottom10","0.53983735085402757224","36","middle30","28487","45","bottom10","0.07568419178890149392","31","middle30","123138","43","bottom10","0.32715273663431572851","17","middle30","4113","30","middle30","0.01092740832055856512","18","middle30" +"19","225980","49","bottom10","1","7711649.12000002","49","bottom10","1","16103920","49","bottom10","1","14532412.8800001","49","bottom10","1","71.2625896097","8","top10","12","0.530651666979062","32","middle30","5","0.65331650667041","19","middle30","9","134445","49","bottom10","0.59494203026816532436","17","middle30","0.56405215646940822467","43","bottom10","24925","48","bottom10","0.11029737144880077883","1","top10","146071","48","bottom10","0.64638906097884768564","14","middle30","20830","49","bottom10","0.09217629878750331888","3","top10","63855","49","bottom10","0.28256925391627577662","27","middle30","2422","40","middle30","0.01071776263386140366","19","middle30" +"4","1700508","7","top10","5","44506653.9299995","9","top10","7","97472810","8","top10","5","87362649.6800004","8","top10","5","57.3198185483397","45","bottom10","3","0.509447161836579","37","middle30","4","0.662494206675825","14","middle30","10","975703","3","top10","0.57377148475631987618","20","middle30","0.59512636589126499966","19","middle30","149170","6","top10","0.08772084577079319827","11","middle30","1081707","8","top10","0.63610815121128509834","18","middle30","155889","6","top10","0.09167201800873621294","4","top10","486627","4","top10","0.28616566343704351876","26","middle30","16270","12","middle30","0.00956772917269427724","20","middle30" +"49","1121939","13","middle30","3","36804001.3999995","19","middle30","6","65168225","15","middle30","3","53838427.9999999","16","middle30","3","58.0853549078872","41","bottom10","3","0.683600966209482","23","middle30","7","0.593964971552276","28","middle30","7","790720","6","top10","0.70477984988488678975","2","top10","0.5535122771964877228","50","bottom10","76076","18","middle30","0.06780760807851407251","38","middle30","656347","16","middle30","0.58501130631879273294","30","middle30","79763","17","middle30","0.07109388300076920403","36","middle30","360088","14","middle30","0.32095149558041925631","18","middle30","8971","18","middle30","0.00799597839098204091","21","middle30" +"15","765820","29","middle30","2","36671149.6499996","20","middle30","6","50372935","29","middle30","3","37186698.7299998","34","middle30","2","65.7764683607114","20","middle30","9","0.986136196607733","13","middle30","11","0.503490144184459","38","middle30","3","429914","29","middle30","0.56137734715729544802","22","middle30","0.61849057756329983812","6","top10","32741","41","bottom10","0.04275286620876968478","49","bottom10","412853","28","middle30","0.53909926614609177091","37","middle30","37164","40","middle30","0.0485283748139249432","48","bottom10","233778","30","middle30","0.30526494476508840197","21","middle30","5861","25","middle30","0.00765323444151367162","22","middle30" +"26","1016631","19","middle30","3","38508771.0699996","16","middle30","6","62122490","17","middle30","3","50410010.2299998","18","middle30","3","61.1062322514265","31","middle30","5","0.763911193318552","20","middle30","8","0.56692196511245","31","middle30","6","492345","21","middle30","0.48429076036437999628","36","middle30","0.59021646497358104653","24","middle30","58670","23","middle30","0.05771022130940331349","45","bottom10","583384","20","middle30","0.57384045932103191817","31","middle30","60087","22","middle30","0.05910404069913272367","44","bottom10","319251","19","middle30","0.31402839378299500999","19","middle30","6877","22","middle30","0.00676449960703539436","23","middle30" +"48","1035302","18","middle30","3","25413304.5999997","33","middle30","4","55437760","24","middle30","3","48160632.4199997","20","middle30","3","53.5474286729862","50","bottom10","1","0.527677966899918","33","middle30","4","0.654588219288962","18","middle30","9","612028","11","middle30","0.59115890822194876471","18","middle30","0.56036740823525302972","46","bottom10","85899","16","middle30","0.08296999329664194602","21","middle30","657320","15","middle30","0.63490652968892168662","19","middle30","85954","14","middle30","0.0830231178921705937","17","middle30","298960","22","middle30","0.28876598325899109632","24","middle30","5890","24","middle30","0.00568916123024972424","24","middle30" +"11","689588","34","middle30","2","18544158.3400001","40","middle30","3","43645785","36","middle30","2","38421468.8199998","31","middle30","2","63.2925529446568","25","middle30","7","0.482650947752086","39","middle30","4","0.674467582215588","12","middle30","10","299964","40","middle30","0.43499016804236732658","41","bottom10","0.56179004939464294062","45","bottom10","64177","20","middle30","0.09306571460060209864","5","top10","458842","25","middle30","0.66538570856801452461","10","top10","57174","25","middle30","0.0829103754705708336","19","middle30","164427","38","middle30","0.23844237428725557869","36","middle30","3823","31","middle30","0.00554388997488355366","25","middle30" +"42","4951982","1","top10","15","99440337.4199995","1","top10","15","287918340","1","top10","15","252538869.370001","1","top10","15","58.1420409040259","40","middle30","4","0.393762503443804","45","bottom10","3","0.717482352645541","6","top10","12","2516001","1","top10","0.50807959318107375996","30","middle30","0.63956141055506466383","2","top10","497960","1","top10","0.10055771608216669608","4","top10","3224522","1","top10","0.65115785962065290221","12","middle30","528757","1","top10","0.10677684208060530107","1","top10","1017358","1","top10","0.20544460783581200416","44","bottom10","26755","2","top10","0.00540288716719891147","26","middle30" +"46","1212505","11","middle30","4","27847989.0799998","30","middle30","4","71477200","10","top10","4","63840303.73","11","middle30","4","58.9500249483507","37","middle30","4","0.436213292433216","43","bottom10","3","0.69627541067094","8","top10","11","658028","8","top10","0.54270126721126923188","24","middle30","0.56454225919223882294","42","bottom10","105551","9","top10","0.08705201215665090041","13","middle30","815974","10","top10","0.67296547230733069142","8","top10","100616","10","top10","0.08298192584772846298","18","middle30","294739","23","middle30","0.24308270893728273285","35","middle30","6336","23","middle30","0.00522554546166819931","27","middle30" +"25","1708139","6","top10","5","42561865.8399995","11","middle30","6","101645805","6","top10","5","89932712.3200007","7","top10","5","59.5067526705965","34","middle30","4","0.473263451552032","40","middle30","4","0.678765226237395","11","middle30","10","739371","7","top10","0.4328517761142389466","42","bottom10","0.56631175940135107342","39","middle30","126418","7","top10","0.07400919948552196279","31","middle30","1150029","7","top10","0.67326429523592635026","7","top10","119584","7","top10","0.0700083541210639181","37","middle30","386191","8","top10","0.22608874336339138677","42","bottom10","8056","19","middle30","0.00471624381856511677","28","middle30" +"50","808395","25","middle30","2","21244452.07","36","middle30","3","48262395","32","middle30","2","40432940.6699999","26","middle30","2","59.7015011225948","33","middle30","5","0.525424362363106","34","middle30","4","0.655555283285796","17","middle30","10","490273","22","middle30","0.60647703164913192189","15","middle30","0.59663785281054491619","17","middle30","83756","17","middle30","0.10360776600547999431","2","top10","517685","21","middle30","0.64038619734164610123","16","middle30","73674","18","middle30","0.0911361401295158926","5","top10","185057","37","middle30","0.22891903091929069329","40","middle30","3754","33","middle30","0.00464376944439290198","29","middle30" +"12","814004","24","middle30","2","33646405.6599997","24","middle30","5","50854160","27","middle30","3","40126227.0099998","27","middle30","2","62.4740910364077","27","middle30","6","0.838514063423274","17","middle30","9","0.543917514635717","34","middle30","5","407841","31","middle30","0.50103070746581097882","33","middle30","0.59341460873189538397","21","middle30","38388","38","middle30","0.04715947341782104265","47","bottom10","464875","24","middle30","0.57109670222750748154","32","middle30","40085","37","middle30","0.04924422975808472686","47","bottom10","241411","27","middle30","0.29657225271620286878","23","middle30","3755","32","middle30","0.00461299944472017337","30","middle30" +"36","463931","42","bottom10","1","18154087.3100001","41","bottom10","3","31334580","41","bottom10","2","25196470.13","42","bottom10","1","67.5414662956345","17","middle30","10","0.720501213715053","21","middle30","7","0.581225977656078","30","middle30","7","234372","43","bottom10","0.50518719378528272523","31","middle30","0.55872454703062854812","48","bottom10","29417","44","bottom10","0.06340813612369080747","39","middle30","274703","40","middle30","0.59212037997029730714","28","middle30","29399","44","bottom10","0.06336933725058252197","41","bottom10","128442","41","bottom10","0.27685582554302256154","28","middle30","2094","43","bottom10","0.00451360223826387976","31","middle30" +"31","807602","26","middle30","2","28657564.3299998","28","middle30","4","50172855","31","middle30","3","42131375.5199998","22","middle30","2","62.1257191042122","30","middle30","6","0.680195317059992","24","middle30","7","0.59516890080958","27","middle30","7","345059","35","middle30","0.42726367691016119326","43","bottom10","0.59278384208118177659","22","middle30","45897","33","middle30","0.05683121141354280945","46","bottom10","493075","22","middle30","0.61054207394236269846","23","middle30","44956","34","middle30","0.05566603351650936971","46","bottom10","231408","31","middle30","0.28653718044284189489","25","middle30","3602","35","middle30","0.00446011773125871407","32","middle30" +"22","875979","21","middle30","3","39562341.9599997","13","middle30","6","56127245","22","middle30","3","40949721.3099997","23","middle30","2","64.0737335027438","23","middle30","7","0.966119931818408","15","middle30","11","0.508615971903163","36","middle30","4","421928","30","middle30","0.48166451478859653028","37","middle30","0.62453317139820859268","5","top10","32935","40","middle30","0.03759793328378876663","50","bottom10","473188","23","middle30","0.54018189933776951274","35","middle30","38017","39","middle30","0.04339944222407158162","50","bottom10","238197","28","middle30","0.27192090221340922556","29","middle30","3745","34","middle30","0.00427521664332135816","33","middle30" +"13","313574","47","bottom10","1","11322838.24","47","bottom10","2","21911835","46","bottom10","1","18617564.19","46","bottom10","1","69.8777162647413","10","top10","11","0.60818043243712","30","middle30","6","0.621820773235344","21","middle30","8","138630","47","bottom10","0.44209660239688239459","40","middle30","0.59843387242749773738","13","middle30","25413","47","bottom10","0.08104307117299265883","27","middle30","195751","46","bottom10","0.62425775096149553216","21","middle30","23464","47","bottom10","0.0748276323929917659","33","middle30","77684","47","bottom10","0.24773737618552558567","33","middle30","1268","48","bottom10","0.00404370260289437262","34","middle30" +"35","1132939","12","middle30","3","37116142.4499997","18","middle30","6","65792125","14","middle30","3","54854009.81","15","middle30","3","58.0720806680677","42","bottom10","3","0.676634991289795","25","middle30","7","0.596432738905636","26","middle30","7","475127","24","middle30","0.4193756239303263459","44","bottom10","0.58209898843930635838","29","middle30","66432","19","middle30","0.05863687277073169871","44","bottom10","680225","13","middle30","0.60040743588136695797","27","middle30","66290","19","middle30","0.05851153504292817177","45","bottom10","336107","18","middle30","0.29666822309056356962","22","middle30","4462","27","middle30","0.00393842916520659983","35","middle30" +"2","2076974","3","top10","6","34255856.2699997","22","middle30","5","117031080","3","top10","6","109131689.250001","3","top10","7","56.3469162348686","46","bottom10","2","0.31389467628899","47","bottom10","2","0.761096013285049","4","top10","14","818518","4","top10","0.39409159671714715735","46","bottom10","0.57690082552680180681","32","middle30","179764","3","top10","0.08655091493682636374","15","middle30","1479128","4","top10","0.71215527974832617067","5","top10","176272","3","top10","0.08486962282628477776","14","middle30","388287","6","top10","0.18694841630179289678","47","bottom10","7167","21","middle30","0.00345069317189334099","36","middle30" +"30","719914","32","middle30","2","24648877.2499999","34","middle30","4","44984440","33","middle30","2","37699795.4099998","33","middle30","2","62.4858524768236","26","middle30","6","0.653819920822749","27","middle30","6","0.604660753815637","24","middle30","7","360266","33","middle30","0.50042921793436438241","34","middle30","0.597441383614157083","16","middle30","44868","35","middle30","0.06232411093547284815","41","bottom10","443290","26","middle30","0.61575410396241773323","22","middle30","43438","35","middle30","0.06033776256608428229","43","bottom10","193485","35","middle30","0.26876126870709556975","31","middle30","2482","39","middle30","0.00344763402295274158","37","middle30" +"1","1681635","8","top10","5","38422082.9099998","17","middle30","6","98467185","7","top10","5","90108419.3100004","6","top10","5","58.554433631555","39","middle30","4","0.426398367702091","44","bottom10","3","0.701066422005927","7","top10","11","584989","14","middle30","0.34786918683305235678","48","bottom10","0.5720593007566311978","35","middle30","117098","8","top10","0.06963342223490828866","37","middle30","1158544","6","top10","0.6889390384952739447","6","top10","107759","8","top10","0.06407989843218058616","40","middle30","383301","9","top10","0.22793352897626417148","41","bottom10","5791","26","middle30","0.00344367237836986028","38","middle30" +"33","1036429","17","middle30","3","31777242.3899997","26","middle30","5","59457040","18","middle30","3","49157095.1499997","19","middle30","3","57.367209910182","44","bottom10","3","0.646442640539142","28","middle30","6","0.60737008103273","23","middle30","8","516898","19","middle30","0.4987297730958898294","35","middle30","0.56977947615635697795","37","middle30","62805","21","middle30","0.06059749389490259342","42","bottom10","628212","19","middle30","0.60613124488025711361","25","middle30","62975","21","middle30","0.06076151863755259646","42","bottom10","281760","24","middle30","0.27185653817096974322","30","middle30","3429","36","middle30","0.0033084755443932966","39","middle30" +"23","579218","37","middle30","2","17914156.2900001","42","bottom10","3","37898800","39","middle30","2","30985868.4599998","38","middle30","2","65.4309776284577","21","middle30","8","0.578139557815713","31","middle30","5","0.633657521001558","20","middle30","9","364049","32","middle30","0.62851810544561805745","11","middle30","0.66080922040501603019","1","top10","49282","30","middle30","0.08508368179165702723","18","middle30","362433","34","middle30","0.62572813690182280247","20","middle30","48496","32","middle30","0.08372667976478631534","16","middle30","114503","44","bottom10","0.19768550010531440667","45","bottom10","1913","44","bottom10","0.00330272885165861558","40","middle30" +"45","504658","40","middle30","1","13275891.2000001","44","bottom10","2","29902350","42","bottom10","1","25947345.0199998","40","middle30","1","59.252701829754","35","middle30","4","0.511647383952665","36","middle30","4","0.661529937878233","15","middle30","10","253841","42","bottom10","0.50299608844009210198","32","middle30","0.57115357855188088501","36","middle30","43118","37","middle30","0.08544004058193865945","17","middle30","323878","38","middle30","0.64177720357152764843","15","middle30","40304","36","middle30","0.07986398709621169188","23","middle30","123768","42","bottom10","0.24525123945325349048","34","middle30","1658","46","bottom10","0.00328539327623856156","41","bottom10" +"38","336950","46","bottom10","1","9431794.52000005","48","bottom10","1","20935725","47","bottom10","1","18066767.61","47","bottom10","1","62.1330316070634","29","middle30","6","0.522052130386595","35","middle30","4","0.65700772006147","16","middle30","10","192935","46","bottom10","0.57259237275560172132","21","middle30","0.58347794649313087491","28","middle30","27660","45","bottom10","0.08208933076124054014","26","middle30","215238","43","bottom10","0.63878320225552752634","17","middle30","26730","46","bottom10","0.07932927734085175842","26","middle30","77601","48","bottom10","0.23030419943611811842","39","middle30","1090","49","bottom10","0.00323490132067072266","42","bottom10" +"40","1009920","20","middle30","3","23965919.4299998","35","middle30","4","58530910","19","middle30","3","51168207.6299999","17","middle30","3","57.955986612801","43","bottom10","3","0.468375198977042","41","bottom10","4","0.681024850253981","10","top10","11","610205","12","middle30","0.60421122465145754119","16","middle30","0.58081261636184426678","30","middle30","91310","13","middle30","0.0904131020278833967","7","top10","668314","14","middle30","0.66174944550063371356","11","middle30","82983","16","middle30","0.08216789448669201521","21","middle30","237868","29","middle30","0.23553152724968314322","37","middle30","3055","38","middle30","0.00302499207858048162","43","bottom10" +"14","650744","35","middle30","2","27228959.8299998","31","middle30","4","43974630","35","middle30","2","33691456.7799999","36","middle30","2","67.575928475714","16","middle30","10","0.808185885454607","19","middle30","8","0.553040485518768","32","middle30","5","307629","39","middle30","0.47273428567916108331","38","middle30","0.59768461203867902432","14","middle30","29887","43","bottom10","0.04592743075618061788","48","bottom10","369175","32","middle30","0.56731218420761466875","33","middle30","31310","42","bottom10","0.0481141585631215962","49","bottom10","162745","39","middle30","0.25009066545369607711","32","middle30","1824","45","bottom10","0.00280294555155329899","44","bottom10" +"39","489099","41","bottom10","1","12726925.2500001","45","bottom10","2","29612600","43","bottom10","1","25679067.7799999","41","bottom10","1","60.545206594166","32","middle30","5","0.495614769158888","38","middle30","4","0.668621372709756","13","middle30","10","264329","41","bottom10","0.54044068787709645695","25","middle30","0.56731902308278841933","38","middle30","43279","36","middle30","0.08848719788836206985","10","top10","317180","39","middle30","0.64849856573004647321","13","middle30","38675","38","middle30","0.07907397070940648008","27","middle30","113114","45","bottom10","0.23127015185064782386","38","middle30","1369","47","bottom10","0.00279902432840795013","45","bottom10" +"41","190154","50","bottom10","1","4836566.24999999","50","bottom10","1","12331580","50","bottom10","1","10805857.09","50","bottom10","1","64.8504896031638","22","middle30","8","0.447587471286831","42","bottom10","3","0.69080454192592","9","top10","11","120404","50","bottom10","0.63319204434300619498","10","top10","0.55876447876447876448","47","bottom10","19425","50","bottom10","0.10215404356468967258","3","top10","126758","50","bottom10","0.66660706585188846935","9","top10","17257","50","bottom10","0.09075275829064863216","6","top10","40092","50","bottom10","0.21083963524301355743","43","bottom10","531","50","bottom10","0.002792473468872598","46","bottom10" +"32","1068694","14","middle30","3","19598432.65","39","middle30","3","63189680","16","middle30","3","59148208.1799999","12","middle30","3","59.1279449496301","36","middle30","4","0.331344486216016","46","bottom10","2","0.751120397728335","5","top10","13","441090","28","middle30","0.41273741594881228864","45","bottom10","0.56545224427066853501","40","middle30","88492","14","middle30","0.08280387089288421194","23","middle30","762741","11","middle30","0.71371318637514573863","4","top10","85258","15","middle30","0.07977774741881212021","24","middle30","209019","34","middle30","0.19558358145549614763","46","bottom10","2355","41","bottom10","0.00220362423668515029","47","bottom10" +"47","1221504","10","top10","4","19627561.35","38","middle30","3","67869860","11","middle30","4","63965646.9099999","10","top10","4","55.5625360211673","47","bottom10","2","0.306845350561625","48","bottom10","1","0.765201482769361","3","top10","14","467466","25","middle30","0.38269706853190820497","47","bottom10","0.58058328031072829318","31","middle30","105301","10","top10","0.08620602142931992036","16","middle30","889342","9","top10","0.72807129571413601593","3","top10","94985","11","middle30","0.0777606950120507178","29","middle30","228256","32","middle30","0.18686471759404799329","48","bottom10","2232","42","bottom10","0.00182725558000628733","48","bottom10" +"44","2430393","2","top10","8","33033504.3899998","25","middle30","5","132322695","2","top10","7","124229639.130001","2","top10","8","54.4449786516008","49","bottom10","1","0.265906788600035","49","bottom10","1","0.789947576713684","2","top10","15","605543","13","middle30","0.24915435487182525624","50","bottom10","0.57207688453138443211","34","middle30","211538","2","top10","0.08703859828431039754","14","middle30","1797013","2","top10","0.73939194196164982371","2","top10","211418","2","top10","0.08698922355355697618","10","top10","392906","5","top10","0.16166356634503144142","49","bottom10","4406","29","middle30","0.00181287553082978761","49","bottom10" +"43","2036700","4","top10","6","25676080.2099998","32","middle30","4","112285000","5","top10","6","106714109.980001","4","top10","6","55.1308489222762","48","bottom10","2","0.240606234871956","50","bottom10","1","0.806057532109059","1","top10","16","635345","10","top10","0.31194824961948249619","49","bottom10","0.5558431328419512744","49","bottom10","177730","4","top10","0.08726371090489517357","12","middle30","1526750","3","top10","0.74961948249619482496","1","top10","165434","5","top10","0.08122649383807138999","22","middle30","311464","21","middle30","0.15292581136151617813","50","bottom10","3366","37","middle30","0.00165267344233318604","50","bottom10" diff --git a/bulletproof/wardstotals5yr.csv b/bulletproof/wardstotals5yr.csv index 27e560c..17000fe 100644 --- a/bulletproof/wardstotals5yr.csv +++ b/bulletproof/wardstotals5yr.csv @@ -1,51 +1,51 @@ -"ward","ticket_count","ticket_count_rank","ticket_count_bucket","ticket_count_bucket_min","ticket_count_bucket_max","current_amount_due","current_amount_due_rank","current_amount_due_bucket","current_amount_due_bucket_min","current_amount_due_bucket_max","total_payments","total_payments_rank","total_payments_bucket","total_payments_bucket_min","total_payments_bucket_max","fine_level1_amount","fine_level1_amount_rank","fine_level1_amount_bucket","fine_level1_amount_bucket_min","fine_level1_amount_bucket_max","avg_per_ticket","avg_per_ticket_rank","avg_per_ticket_bucket","avg_per_ticket_bucket_min","avg_per_ticket_bucket_max","debt_to_payment_ratio","debt_to_payment_ratio_rank","debt_to_payment_ratio_bucket","debt_to_payment_ratio_bucket_min","debt_to_payment_ratio_bucket_max","paid_pct","paid_pct_rank","paid_pct_bucket","paid_pct_bucket_min","paid_pct_bucket_max","police_ticket_count","police_ticket_count_rank","police_ticket_count_bucket","police_ticket_count_bucket_min","police_ticket_count_bucket_max","police_ticket_count_pct","police_ticket_count_pct_rank","police_ticket_count_pct_bucket","police_ticket_count_pct_bucket_min","police_ticket_count_pct_bucket_max","contested_ticket_count","contested_ticket_count_rank","contested_ticket_count_bucket","contested_ticket_count_bucket_min","contested_ticket_count_bucket_max","contested_ticket_count_pct","contested_ticket_count_pct_rank","contested_ticket_count_pct_bucket","contested_ticket_count_pct_bucket_min","contested_ticket_count_pct_bucket_max","contested_and_notliable_pct","contested_and_notliable_pct_rank","contested_and_notliable_pct_bucket","contested_and_notliable_pct_bucket_min","contested_and_notliable_pct_bucket_max","paid_ticket_count","paid_ticket_count_rank","paid_ticket_count_bucket","paid_ticket_count_bucket_min","paid_ticket_count_bucket_max","paid_ticket_count_pct","paid_ticket_count_pct_rank","paid_ticket_count_pct_bucket","paid_ticket_count_pct_bucket_min","paid_ticket_count_pct_bucket_max","dismissed_ticket_count","dismissed_ticket_count_rank","dismissed_ticket_count_bucket","dismissed_ticket_count_bucket_min","dismissed_ticket_count_bucket_max","dismissed_ticket_count_pct","dismissed_ticket_count_pct_rank","dismissed_ticket_count_pct_bucket","dismissed_ticket_count_pct_bucket_min","dismissed_ticket_count_pct_bucket_max","seized_or_suspended_ticket_count","seized_or_suspended_ticket_count_rank","seized_or_suspended_ticket_count_bucket","seized_or_suspended_ticket_count_bucket_min","seized_or_suspended_ticket_count_bucket_max","seized_or_suspended_ticket_count_pct","seized_or_suspended_ticket_count_pct_rank","seized_or_suspended_ticket_count_pct_bucket","seized_or_suspended_ticket_count_pct_bucket_min","seized_or_suspended_ticket_count_pct_bucket_max","bankruptcy_ticket_count","bankruptcy_ticket_count_rank","bankruptcy_ticket_count_bucket","bankruptcy_ticket_count_bucket_min","bankruptcy_ticket_count_bucket_max","bankruptcy_ticket_count_pct","bankruptcy_ticket_count_pct_rank","bankruptcy_ticket_count_pct_bucket","bankruptcy_ticket_count_pct_bucket_min","bankruptcy_ticket_count_pct_bucket_max" -"29",178039,27,2,116212.933333333333,186318.866666666666,18032288.23,10,10,17904628.16,19734661.8533333,11117463.61,30,2,8065105.74066665,12792886.4113333,17479075,21,3,14797993.8,20221593.2,98.1755401906324,6,13,98.0102744590823,100.208328895007,1.62197861513846,10,12,1.5372595183848,1.65876039447746,0.381391363844969,41,2,0.364238073103873,0.397707704139285,118452,11,9,109096.933333333336,120360.800000000003,0.66531490291452996254,9,12,0.63189745109758159706,0.67525874749454273858,18725,22,2,14822.4666666666666667,23616.9333333333333334,0.10517358556271378743,27,11,0.10461750604925252918,0.10984187826426158914,0.65719626168224299065,11,10,0.65585262970174900251,0.66409761205024730352,81025,33,1,33403.000000000000,83228.066666666667,0.45509691696763068766,39,3,0.44674467215032260886,0.47501400076412762716,15668,20,2,11797.5333333333333333,19042.0666666666666666,0.08800319031223495976,19,11,0.08558336577811418151,0.08998673796830118103,78182,7,8,76508.6666666666666669,86470.3333333333333336,0.43912850555215430327,5,14,0.41691243805596258010,0.44215200960069768215,8099,4,11,7525.0000000000000000,8260.8000000000000000,0.04549003308263919703,1,16,0.04549003308263919707,0.04843003292022425045 -"34",117807,40,2,116212.933333333333,186318.866666666666,14008860.87,16,7,12414527.08,14244560.7733333,7282777.20000003,41,1,3337325.07,8065105.74066665,12323135,38,2,9374394.4,14797993.8,104.604437766856,1,16,104.604437766856,106.802492202781,1.92356026901385,2,15,1.90176214666277,2.02326302275543,0.342048703629876,49,1,0.330768442068462,0.364238073103873,94875,16,7,86569.200000000002,97833.066666666669,0.80534263668542616313,1,16,0.80534263668542616314,0.84870393308238730466,13107,36,1,6028.0000000000000000,14822.4666666666666667,0.11125824441671547531,15,12,0.10984187826426158914,0.11506625047927064910,0.66437781338216220340,7,11,0.66409761205024730352,0.67234259439874560453,45969,47,1,33403.000000000000,83228.066666666667,0.39020601492271257226,50,1,0.39020601492271257226,0.41847534353651759056,10928,33,1,4553.0000000000000000,11797.5333333333333333,0.09276189021025915268,10,12,0.08998673796830118103,0.09439011015848818055,55062,20,5,46623.6666666666666668,56585.3333333333333335,0.46739158114543278413,1,16,0.46739158114543278420,0.49263115269016788625,5119,16,7,4581.8000000000000000,5317.6000000000000000,0.04345242642627348120,2,15,0.04255003324505414369,0.04549003308263919707 -"24",210131,18,3,186318.866666666666,256424.799999999999,23100283.56,3,12,21564695.5466666,23394729.24,11417340.85,26,2,8065105.74066665,12792886.4113333,19847895,13,3,14797993.8,20221593.2,94.4548638706331,13,11,93.6141655872332,95.8122200231577,2.02326302275543,1,16,2.02326302275543,2.14476389884808,0.330768442068462,50,1,0.330768442068462,0.364238073103873,138921,7,11,131624.666666666670,142888.533333333337,0.66111616087107566232,10,12,0.63189745109758159706,0.67525874749454273858,18255,25,2,14822.4666666666666667,23616.9333333333333334,0.08687437836397295021,40,7,0.08372001718921628934,0.08894438940422534930,0.67110380717611613257,4,11,0.66409761205024730352,0.67234259439874560453,88325,31,2,83228.066666666667,133053.133333333334,0.42033303034773546026,48,2,0.41847534353651759056,0.44674467215032260886,15085,24,2,11797.5333333333333333,19042.0666666666666666,0.07178855095154927164,38,7,0.06796987701736618343,0.07237324920755318295,97201,4,10,96432.0000000000000003,106393.6666666666666670,0.46257334710252176024,2,15,0.44215200960069768215,0.46739158114543278420,9018,2,13,8996.6000000000000000,9732.4000000000000000,0.04291608567988540482,3,15,0.04255003324505414369,0.04549003308263919707 -"6",203418,21,3,186318.866666666666,256424.799999999999,21274015.74,5,11,19734661.8533333,21564695.5466666,11971217.6,23,2,8065105.74066665,12792886.4113333,19595595,14,3,14797993.8,20221593.2,96.3316668141462,11,12,95.8122200231577,98.0102744590823,1.7770970715627,6,13,1.65876039447746,1.78026127057011,0.360088241149341,45,1,0.330768442068462,0.364238073103873,145500,5,12,142888.533333333337,154152.400000000004,0.71527593428310179040,6,13,0.67525874749454273858,0.71862004389150388010,21574,18,2,14822.4666666666666667,23616.9333333333333334,0.10605747770600438506,23,11,0.10461750604925252918,0.10984187826426158914,0.65690182627236488366,12,10,0.65585262970174900251,0.66409761205024730352,86155,32,2,83228.066666666667,133053.133333333334,0.42353675682584628696,47,2,0.41847534353651759056,0.44674467215032260886,17553,17,2,11797.5333333333333333,19042.0666666666666666,0.08629029879361708403,24,11,0.08558336577811418151,0.08998673796830118103,90170,6,9,86470.3333333333333336,96432.0000000000000003,0.44327443982341778997,3,15,0.44215200960069768215,0.46739158114543278420,8718,3,12,8260.8000000000000000,8996.6000000000000000,0.04285756422735451140,4,15,0.04255003324505414369,0.04549003308263919707 -"17",174707,31,2,116212.933333333333,186318.866666666666,19067489,9,10,17904628.16,19734661.8533333,10617409.84,34,2,8065105.74066665,12792886.4113333,17580450,20,3,14797993.8,20221593.2,100.628194634445,3,14,100.208328895007,102.406383330931,1.79587011214027,4,14,1.78026127057011,1.90176214666277,0.357670406667958,47,1,0.330768442068462,0.364238073103873,125729,9,10,120360.800000000003,131624.666666666670,0.71965633889884206128,5,14,0.71862004389150388010,0.76198134028846502162,18663,23,2,14822.4666666666666667,23616.9333333333333334,0.10682456913575300360,21,11,0.10461750604925252918,0.10984187826426158914,0.66307667577559877833,8,10,0.65585262970174900251,0.66409761205024730352,74088,36,1,33403.000000000000,83228.066666666667,0.42407001436691145747,46,2,0.41847534353651759056,0.44674467215032260886,15235,23,2,11797.5333333333333333,19042.0666666666666666,0.08720314583846096607,21,11,0.08558336577811418151,0.08998673796830118103,76590,10,8,76508.6666666666666669,86470.3333333333333336,0.43839113487152775790,6,14,0.41691243805596258010,0.44215200960069768215,7299,8,10,6789.2000000000000000,7525.0000000000000000,0.04177852060879071817,5,14,0.03961003340746909031,0.04255003324505414369 -"21",146967,38,2,116212.933333333333,186318.866666666666,15494269.34,11,8,14244560.7733333,16074594.4666666,9605733.15000002,37,2,8065105.74066665,12792886.4113333,15166580,27,3,14797993.8,20221593.2,103.197180319391,2,15,102.406383330931,104.604437766856,1.61302308715499,11,12,1.5372595183848,1.65876039447746,0.3826984939076,40,2,0.364238073103873,0.397707704139285,103734,13,8,97833.066666666669,109096.933333333336,0.70583192145175447549,7,13,0.67525874749454273858,0.71862004389150388010,18310,24,2,14822.4666666666666667,23616.9333333333333334,0.12458579136813026053,4,14,0.12029062269427970906,0.12551499490928876902,0.65319497542326597488,15,9,0.64760764735325070150,0.65585262970174900251,63914,41,1,33403.000000000000,83228.066666666667,0.43488674328250559649,43,2,0.41847534353651759056,0.44674467215032260886,14664,25,2,11797.5333333333333333,19042.0666666666666666,0.09977750107166915022,3,14,0.09879348234867518007,0.10319685453886217959,63115,16,6,56585.3333333333333335,66547.0000000000000002,0.42945014867283131587,8,14,0.41691243805596258010,0.44215200960069768215,6046,10,8,5317.6000000000000000,6053.4000000000000000,0.04113848687120237877,6,14,0.03961003340746909031,0.04255003324505414369 -"37",183310,24,2,116212.933333333333,186318.866666666666,19276442.75,8,10,17904628.16,19734661.8533333,11051917.32,31,2,8065105.74066665,12792886.4113333,18425175,16,3,14797993.8,20221593.2,100.51374720419,4,14,100.208328895007,102.406383330931,1.74417182031542,8,13,1.65876039447746,1.78026127057011,0.36440866880014,43,2,0.364238073103873,0.397707704139285,144035,6,12,142888.533333333337,154152.400000000004,0.78574545851290164203,2,15,0.76198134028846502162,0.80534263668542616314,19395,21,2,14822.4666666666666667,23616.9333333333333334,0.10580437510228574546,24,11,0.10461750604925252918,0.10984187826426158914,0.69028100025779840165,3,14,0.68883255909574220655,0.69707754144424050756,78223,35,1,33403.000000000000,83228.066666666667,0.42672521957340025094,45,2,0.41847534353651759056,0.44674467215032260886,16729,19,2,11797.5333333333333333,19042.0666666666666666,0.09126070590802465768,13,12,0.08998673796830118103,0.09439011015848818055,77607,8,8,76508.6666666666666669,86470.3333333333333336,0.42336479188260324041,10,14,0.41691243805596258010,0.44215200960069768215,7416,7,10,6789.2000000000000000,7525.0000000000000000,0.04045605804375102286,7,14,0.03961003340746909031,0.04255003324505414369 -"7",142450,39,2,116212.933333333333,186318.866666666666,15294881.31,12,8,14244560.7733333,16074594.4666666,8225866.56000001,39,2,8065105.74066665,12792886.4113333,13945980,35,2,9374394.4,14797993.8,97.9008775008775,7,12,95.8122200231577,98.0102744590823,1.85936414096171,3,14,1.78026127057011,1.90176214666277,0.349728104117464,48,1,0.330768442068462,0.364238073103873,84193,22,6,75305.333333333335,86569.200000000002,0.59103545103545103545,13,11,0.58853615470062045554,0.63189745109758159706,15958,31,2,14822.4666666666666667,23616.9333333333333334,0.11202527202527202527,14,12,0.10984187826426158914,0.11506625047927064910,0.64776287755357814262,16,9,0.64760764735325070150,0.65585262970174900251,58594,42,1,33403.000000000000,83228.066666666667,0.41133029133029133029,49,1,0.39020601492271257226,0.41847534353651759056,12883,30,2,11797.5333333333333333,19042.0666666666666666,0.09043875043875043875,14,12,0.08998673796830118103,0.09439011015848818055,63034,17,6,56585.3333333333333335,66547.0000000000000002,0.44249912249912249912,4,15,0.44215200960069768215,0.46739158114543278420,5610,14,8,5317.6000000000000000,6053.4000000000000000,0.03938223938223938224,8,13,0.03667003356988403693,0.03961003340746909031 -"8",152703,36,2,116212.933333333333,186318.866666666666,15058378.0400001,13,8,14244560.7733333,16074594.4666666,9422614.91000001,38,2,8065105.74066665,12792886.4113333,14824765,30,3,14797993.8,20221593.2,97.082342848536,9,12,95.8122200231577,98.0102744590823,1.59811031054861,12,12,1.5372595183848,1.65876039447746,0.384895127793417,39,2,0.364238073103873,0.397707704139285,92153,17,7,86569.200000000002,97833.066666666669,0.60347864809466742631,11,11,0.58853615470062045554,0.63189745109758159706,18036,26,2,14822.4666666666666667,23616.9333333333333334,0.11811162845523663582,10,13,0.11506625047927064910,0.12029062269427970906,0.64354624085163007319,20,8,0.63936266500475240049,0.64760764735325070150,68111,40,1,33403.000000000000,83228.066666666667,0.44603576877991918954,40,2,0.41847534353651759056,0.44674467215032260886,14642,26,2,11797.5333333333333333,19042.0666666666666666,0.09588547703712435250,7,13,0.09439011015848818055,0.09879348234867518007,63467,15,6,56585.3333333333333335,66547.0000000000000002,0.41562379259084628331,12,13,0.39167286651122747805,0.41691243805596258010,5918,12,8,5317.6000000000000000,6053.4000000000000000,0.03875496879563597310,9,13,0.03667003356988403693,0.03961003340746909031 -"9",107928,42,1,46107.000000000000,116212.933333333333,10878638.69,20,6,10584493.3866667,12414527.08,6593845.89000001,44,1,3337325.07,8065105.74066665,10442390,41,2,9374394.4,14797993.8,96.7532984952932,10,12,95.8122200231577,98.0102744590823,1.6498169462071,9,12,1.5372595183848,1.65876039447746,0.377384559122615,42,2,0.364238073103873,0.397707704139285,74041,29,5,64041.466666666668,75305.333333333335,0.68602216292343043510,8,13,0.67525874749454273858,0.71862004389150388010,11928,37,1,6028.0000000000000000,14822.4666666666666667,0.11051812319323993774,17,12,0.10984187826426158914,0.11506625047927064910,0.65568410462776659960,13,9,0.64760764735325070150,0.65585262970174900251,46915,46,1,33403.000000000000,83228.066666666667,0.43468794010822029501,44,2,0.41847534353651759056,0.44674467215032260886,9697,37,1,4553.0000000000000000,11797.5333333333333333,0.08984693499369950337,15,11,0.08558336577811418151,0.08998673796830118103,45375,24,4,36662.0000000000000001,46623.6666666666666668,0.42041916833444518568,11,14,0.41691243805596258010,0.44215200960069768215,4063,18,6,3846.0000000000000000,4581.8000000000000000,0.03764546734860277222,10,13,0.03667003356988403693,0.03961003340746909031 -"28",316065,9,4,256424.799999999999,326530.733333333332,28884829.32,1,15,27054796.6266666,28884830.32,19156229.02,9,4,17520667.0819999,22248447.7526666,29826215,7,5,25645192.6,31068792,94.3673453245377,14,11,93.6141655872332,95.8122200231577,1.50785571052856,13,11,1.41575864229215,1.5372595183848,0.398747023523629,38,3,0.397707704139285,0.431177335174697,187944,1,16,187944.000000000005,199207.866666666672,0.59463717906126904276,12,11,0.58853615470062045554,0.63189745109758159706,33385,10,4,32411.4000000000000001,41205.8666666666666668,0.10562700710296932593,25,11,0.10461750604925252918,0.10984187826426158914,0.65424591882581997903,14,9,0.64760764735325070150,0.65585262970174900251,159462,13,3,133053.133333333334,182878.200000000001,0.50452280385363770111,38,5,0.50328332937793264546,0.53155265799173766376,26798,10,4,26286.5999999999999999,33531.1333333333333332,0.08478635723664436113,26,10,0.08117999358792718199,0.08558336577811418151,118635,2,12,116355.3333333333333337,126317.0000000000000004,0.37535000711878885672,13,12,0.36643329496649237600,0.39167286651122747805,11204,1,16,11204.0000000000000000,11939.8000000000000000,0.03544840460031955452,11,12,0.03373003373229898355,0.03667003356988403693 -"20",215139,16,3,186318.866666666666,256424.799999999999,22035401.83,4,12,21564695.5466666,23394729.24,12379069.66,22,2,8065105.74066665,12792886.4113333,20395455,12,4,20221593.2,25645192.6,94.8012912582098,12,11,93.6141655872332,95.8122200231577,1.78005314092399,5,13,1.65876039447746,1.78026127057011,0.359705354289607,46,1,0.330768442068462,0.364238073103873,157945,4,13,154152.400000000004,165416.266666666671,0.73415326835208864966,4,14,0.71862004389150388010,0.76198134028846502162,22614,16,2,14822.4666666666666667,23616.9333333333333334,0.10511343828873426018,28,11,0.10461750604925252918,0.10984187826426158914,0.66834704165561156806,5,11,0.66409761205024730352,0.67234259439874560453,93815,30,2,83228.066666666667,133053.133333333334,0.43606691487828799055,42,2,0.41847534353651759056,0.44674467215032260886,18968,16,2,11797.5333333333333333,19042.0666666666666666,0.08816625530470997820,18,11,0.08558336577811418151,0.08998673796830118103,94286,5,9,86470.3333333333333336,96432.0000000000000003,0.43825619715625711749,7,14,0.41691243805596258010,0.44215200960069768215,7474,6,10,6789.2000000000000000,7525.0000000000000000,0.03474033066993896969,12,12,0.03373003373229898355,0.03667003356988403693 -"16",180960,26,2,116212.933333333333,186318.866666666666,19329711.04,7,10,17904628.16,19734661.8533333,10959581.51,32,2,8065105.74066665,12792886.4113333,17894615,19,3,14797993.8,20221593.2,98.8871297524315,5,13,98.0102744590823,100.208328895007,1.76372711151084,7,13,1.65876039447746,1.78026127057011,0.361830224060483,44,1,0.330768442068462,0.364238073103873,137418,8,11,131624.666666666670,142888.533333333337,0.75938328912466843501,3,14,0.71862004389150388010,0.76198134028846502162,16116,30,2,14822.4666666666666667,23616.9333333333333334,0.08905835543766578249,38,8,0.08894438940422534930,0.09416876161923440926,0.66114420451724993795,9,10,0.65585262970174900251,0.66409761205024730352,79887,34,1,33403.000000000000,83228.066666666667,0.44146220159151193634,41,2,0.41847534353651759056,0.44674467215032260886,12926,29,2,11797.5333333333333333,19042.0666666666666666,0.07143015030946065429,39,7,0.06796987701736618343,0.07237324920755318295,77247,9,8,76508.6666666666666669,86470.3333333333333336,0.42687334217506631300,9,14,0.41691243805596258010,0.44215200960069768215,5818,13,8,5317.6000000000000000,6053.4000000000000000,0.03215075154730327144,13,11,0.03079003389471393017,0.03373003373229898355 -"18",67538,48,1,46107.000000000000,116212.933333333333,5366924.69,36,3,5094392.30666666,6924425.99999999,4658677.13,48,1,3337325.07,8065105.74066665,6557875,47,1,3950795,9374394.4,97.0990405401404,8,12,95.8122200231577,98.0102744590823,1.15202761218183,14,8,1.05125601401418,1.17275689010684,0.464678052613903,37,5,0.464646966210108,0.49811659724552,33328,45,2,30249.866666666667,41513.733333333334,0.49347034262193135716,20,8,0.45845226550973703098,0.50181356190669817250,7276,47,1,6028.0000000000000000,14822.4666666666666667,0.10773194349847493263,20,11,0.10461750604925252918,0.10984187826426158914,0.62740516767454645410,26,6,0.62287270030775579847,0.63111768265625409948,35226,48,1,33403.000000000000,83228.066666666667,0.52157304036246261364,37,5,0.50328332937793264546,0.53155265799173766376,5700,47,1,4553.0000000000000000,11797.5333333333333333,0.08439693209748585981,27,10,0.08117999358792718199,0.08558336577811418151,21407,43,2,16738.6666666666666667,26700.3333333333333334,0.31696230270366312298,14,10,0.31595415187702217190,0.34119372342175727395,1857,21,3,1638.6000000000000000,2374.4000000000000000,0.02749563208860197222,14,9,0.02491003421954382341,0.02785003405712887679 -"5",252766,12,3,186318.866666666666,256424.799999999999,14890392.69,14,8,14244560.7733333,16074594.4666666,16868621.98,12,3,12792886.4113333,17520667.0819999,21611250,11,4,20221593.2,25645192.6,85.4990386365255,22,7,84.8219478435349,87.0200022794595,0.882727273612186,18,6,0.808254261828873,0.929755137921528,0.531144374448567,33,6,0.49811659724552,0.531586228280931,91094,19,7,86569.200000000002,97833.066666666669,0.36038865986722897858,31,5,0.32836837631885360642,0.37172967271581474794,28719,11,3,23616.9333333333333334,32411.4000000000000001,0.11361892026617503936,11,12,0.10984187826426158914,0.11506625047927064910,0.59740938054946202862,48,2,0.58989277091376259443,0.59813775326226089544,152297,15,3,133053.133333333334,182878.200000000001,0.60252169991217173196,33,8,0.58809131521934770036,0.61636064383315271866,22041,11,3,19042.0666666666666666,26286.5999999999999999,0.08719922774423775350,22,11,0.08558336577811418151,0.08998673796830118103,73358,12,7,66547.0000000000000002,76508.6666666666666669,0.29022099491229041881,15,8,0.26547500878755196780,0.29071458033228706985,6016,11,8,5317.6000000000000000,6053.4000000000000000,0.02380066939382670138,15,8,0.02197003438195877003,0.02491003421954382341 -"10",86829,45,1,46107.000000000000,116212.933333333333,6310531.51,32,3,5094392.30666666,6924425.99999999,5655745.37000001,46,1,3337325.07,8065105.74066665,7933680,45,1,3950795,9374394.4,91.3713160349653,16,9,89.2180567153841,91.4161111513086,1.11577362437022,15,8,1.05125601401418,1.17275689010684,0.472640356454798,36,5,0.464646966210108,0.49811659724552,46982,41,3,41513.733333333334,52777.600000000001,0.54108650335717329464,17,9,0.50181356190669817250,0.54517485830365931402,8259,45,1,6028.0000000000000000,14822.4666666666666667,0.09511799053311681581,35,9,0.09416876161923440926,0.09939313383424346922,0.64438794042862332001,19,8,0.63936266500475240049,0.64760764735325070150,48721,45,1,33403.000000000000,83228.066666666667,0.56111437422980801345,36,7,0.55982198660554268206,0.58809131521934770036,6913,45,1,4553.0000000000000000,11797.5333333333333333,0.07961625724124428474,33,9,0.07677662139774018247,0.08117999358792718199,24747,40,2,16738.6666666666666667,26700.3333333333333334,0.28500846491379608195,16,8,0.26547500878755196780,0.29071458033228706985,1779,23,3,1638.6000000000000000,2374.4000000000000000,0.02048854645337387278,16,7,0.01903003454437371665,0.02197003438195877003 -"3",302444,10,4,256424.799999999999,326530.733333333332,14677878.0200001,15,8,14244560.7733333,16074594.4666666,19120819.4,10,4,17520667.0819999,22248447.7526666,23925780,10,4,20221593.2,25645192.6,79.1081324145958,34,4,78.2277845357613,80.4258389716858,0.767638546912906,21,5,0.686753385736217,0.808254261828873,0.565726517871231,30,8,0.565055859316343,0.598525490351755,121799,10,10,120360.800000000003,131624.666666666670,0.40271587467431987409,24,6,0.37172967271581474794,0.41509096911277588946,37159,8,4,32411.4000000000000001,41205.8666666666666668,0.12286241419899221013,6,14,0.12029062269427970906,0.12551499490928876902,0.63997954735057455798,21,8,0.63936266500475240049,0.64760764735325070150,189630,10,4,182878.200000000001,232703.266666666668,0.62699210432344500139,31,9,0.61636064383315271866,0.64462997244695773696,29240,8,4,26286.5999999999999999,33531.1333333333333332,0.09667905463490761926,5,13,0.09439011015848818055,0.09879348234867518007,75971,11,7,66547.0000000000000002,76508.6666666666666669,0.25119030299824099668,18,7,0.24023543724281686575,0.26547500878755196780,5330,15,8,5317.6000000000000000,6053.4000000000000000,0.01762309716840142307,17,6,0.01609003470678866327,0.01903003454437371665 -"19",54040,49,1,46107.000000000000,116212.933333333333,3041710.27,48,1,1434324.92,3264358.61333333,4256569.88,49,1,3337325.07,8065105.74066665,5095965,49,1,3950795,9374394.4,94.2998704663212,15,11,93.6141655872332,95.8122200231577,0.714591879318565,23,5,0.686753385736217,0.808254261828873,0.583229170779365,28,8,0.565055859316343,0.598525490351755,31428,46,2,30249.866666666667,41513.733333333334,0.58156920799407846040,14,10,0.54517485830365931402,0.58853615470062045554,6666,49,1,6028.0000000000000000,14822.4666666666666667,0.12335307179866765359,5,14,0.12029062269427970906,0.12551499490928876902,0.61671167116711671167,32,5,0.61462771795925749746,0.62287270030775579847,34346,49,1,33403.000000000000,83228.066666666667,0.63556624722427831236,30,9,0.61636064383315271866,0.64462997244695773696,4972,49,1,4553.0000000000000000,11797.5333333333333333,0.09200592153960029608,11,12,0.08998673796830118103,0.09439011015848818055,13511,48,1,6777.0000000000000000,16738.6666666666666667,0.25001850481125092524,19,7,0.24023543724281686575,0.26547500878755196780,922,34,2,902.8000000000000000,1638.6000000000000000,0.01706143597335307180,18,6,0.01609003470678866327,0.01903003454437371665 -"27",417998,6,6,396636.666666666665,466742.599999999998,19636563.0400001,6,10,17904628.16,19734661.8533333,27227027.19,6,6,26976228.4233332,31704009.0939999,34127255,3,6,31068792,36492391.4,81.6445413614419,29,5,80.4258389716858,82.6238934076104,0.721215830981807,22,5,0.686753385736217,0.808254261828873,0.580984663282806,29,8,0.565055859316343,0.598525490351755,163333,3,13,154152.400000000004,165416.266666666671,0.39075067344819831674,28,6,0.37172967271581474794,0.41509096911277588946,49808,3,5,41205.8666666666666668,50000.3333333333333335,0.11915846487303767004,8,13,0.11506625047927064910,0.12029062269427970906,0.62700770960488274976,27,6,0.62287270030775579847,0.63111768265625409948,269176,7,5,232703.266666666668,282528.333333333335,0.64396480365934765238,29,9,0.61636064383315271866,0.64462997244695773696,38938,4,5,33531.1333333333333332,40775.6666666666666665,0.09315355575863999349,9,12,0.08998673796830118103,0.09439011015848818055,97251,3,10,96432.0000000000000003,106393.6666666666666670,0.23265900793783702314,21,6,0.21499586569808176370,0.24023543724281686575,7043,9,10,6789.2000000000000000,7525.0000000000000000,0.01684936291561203642,19,6,0.01609003470678866327,0.01903003454437371665 -"4",319150,8,4,256424.799999999999,326530.733333333332,12240977.91,17,6,10584493.3866667,12414527.08,21537954.94,8,4,17520667.0819999,22248447.7526666,25166825,9,4,20221593.2,25645192.6,78.8557888140373,35,4,78.2277845357613,80.4258389716858,0.568344485077654,29,4,0.565252509643562,0.686753385736217,0.63761501985993,22,10,0.631995121387166,0.665464752422578,91715,18,7,86569.200000000002,97833.066666666669,0.28737270875763747454,38,4,0.28500707992189246490,0.32836837631885360642,37795,7,4,32411.4000000000000001,41205.8666666666666668,0.11842393858687137710,9,13,0.11506625047927064910,0.12029062269427970906,0.63182960709088503770,24,7,0.63111768265625409948,0.63936266500475240049,213201,8,4,182878.200000000001,232703.266666666668,0.66802757324142252859,23,10,0.64462997244695773696,0.67289930106076275526,29761,7,4,26286.5999999999999999,33531.1333333333333332,0.09325082249725834247,8,12,0.08998673796830118103,0.09439011015848818055,68936,13,7,66547.0000000000000002,76508.6666666666666669,0.21599874667084443052,23,6,0.21499586569808176370,0.24023543724281686575,4293,17,6,3846.0000000000000000,4581.8000000000000000,0.01345135516214945950,20,5,0.01315003486920360989,0.01609003470678866327 -"15",176710,30,2,116212.933333333333,186318.866666666666,11919359.48,18,6,10584493.3866667,12414527.08,11301877.84,28,2,8065105.74066665,12792886.4113333,15718650,26,3,14797993.8,20221593.2,88.9516722313395,18,8,87.0200022794595,89.2180567153841,1.05463531359493,16,8,1.05125601401418,1.17275689010684,0.486704376870819,35,5,0.464646966210108,0.49811659724552,95557,15,7,86569.200000000002,97833.066666666669,0.54075604097108256465,18,9,0.50181356190669817250,0.54517485830365931402,10953,40,1,6028.0000000000000000,14822.4666666666666667,0.06198290985230037915,48,2,0.05759815611417098954,0.06282252832918004950,0.66794485529078791199,6,11,0.66409761205024730352,0.67234259439874560453,102375,27,2,83228.066666666667,133053.133333333334,0.57933903004923320695,35,7,0.55982198660554268206,0.58809131521934770036,9094,38,1,4553.0000000000000000,11797.5333333333333333,0.05146284873521589044,48,3,0.05035638825661818535,0.05475976044680518487,47093,23,5,46623.6666666666666668,56585.3333333333333335,0.26649878331729953030,17,8,0.26547500878755196780,0.29071458033228706985,2054,20,3,1638.6000000000000000,2374.4000000000000000,0.01162356403146398053,21,4,0.01021003503161855651,0.01315003486920360989 -"26",226812,14,3,186318.866666666666,256424.799999999999,9987974.60000002,22,5,8754459.69333332,10584493.3866667,14823534.4,15,3,12792886.4113333,17520667.0819999,18184610,17,3,14797993.8,20221593.2,80.1748143837187,32,4,78.2277845357613,80.4258389716858,0.673791710565329,24,4,0.565252509643562,0.686753385736217,0.597445903028308,27,8,0.565055859316343,0.598525490351755,74488,27,5,64041.466666666668,75305.333333333335,0.32841295874997795531,34,5,0.32836837631885360642,0.37172967271581474794,17125,28,2,14822.4666666666666667,23616.9333333333333334,0.07550305980283230164,45,5,0.07327127275919816942,0.07849564497420722938,0.63071532846715328467,25,6,0.62287270030775579847,0.63111768265625409948,150550,17,3,133053.133333333334,182878.200000000001,0.66376558559511842407,25,10,0.64462997244695773696,0.67289930106076275526,13273,27,2,11797.5333333333333333,19042.0666666666666666,0.05851983140221857750,44,4,0.05475976044680518487,0.05916313263699218439,48617,22,5,46623.6666666666666668,56585.3333333333333335,0.21434932895966703702,24,5,0.18975629415334666165,0.21499586569808176370,1729,24,3,1638.6000000000000000,2374.4000000000000000,0.00762305345396187151,22,3,0.00727003519403350313,0.01021003503161855651 -"49",204934,20,3,186318.866666666666,256424.799999999999,7079900.96000001,30,4,6924425.99999999,8754459.69333332,13968025.51,18,3,12792886.4113333,17520667.0819999,16262345,24,3,14797993.8,20221593.2,79.354060331619,33,4,78.2277845357613,80.4258389716858,0.506864836045105,31,3,0.443751633550907,0.565252509643562,0.663629528063436,20,10,0.631995121387166,0.665464752422578,112258,12,9,109096.933333333336,120360.800000000003,0.54777635726624181444,16,10,0.54517485830365931402,0.58853615470062045554,20050,20,2,14822.4666666666666667,23616.9333333333333334,0.09783637658953614334,32,9,0.09416876161923440926,0.09939313383424346922,0.60488778054862842893,42,3,0.59813775326226089544,0.60638273561075919645,142865,18,3,133053.133333333334,182878.200000000001,0.69712687987352025530,19,11,0.67289930106076275526,0.70116862967456777356,15304,22,2,11797.5333333333333333,19042.0666666666666666,0.07467770111352923380,36,8,0.07237324920755318295,0.07677662139774018247,38241,29,4,36662.0000000000000001,46623.6666666666666668,0.18660154000800257644,30,4,0.16451672260861155960,0.18975629415334666165,1536,26,2,902.8000000000000000,1638.6000000000000000,0.00749509598212107313,23,3,0.00727003519403350313,0.01021003503161855651 -"22",178028,28,2,116212.933333333333,186318.866666666666,10069360.79,21,5,8754459.69333332,10584493.3866667,11160900.09,29,2,8065105.74066665,12792886.4113333,14870870,29,3,14797993.8,20221593.2,83.5310737636776,25,6,82.6238934076104,84.8219478435349,0.902199706905538,17,6,0.808254261828873,0.929755137921528,0.525707157019165,34,6,0.49811659724552,0.531586228280931,73718,30,5,64041.466666666668,75305.333333333335,0.41408093108949154066,22,6,0.37172967271581474794,0.41509096911277588946,9324,42,1,6028.0000000000000000,14822.4666666666666667,0.05237378389916192958,50,1,0.05237378389916192958,0.05759815611417098954,0.64768339768339768340,17,9,0.64760764735325070150,0.65585262970174900251,109144,26,2,83228.066666666667,133053.133333333334,0.61307210101781742198,32,8,0.58809131521934770036,0.61636064383315271866,7397,43,1,4553.0000000000000000,11797.5333333333333333,0.04154964387624418631,50,1,0.04154964387624418631,0.04595301606643118583,39126,27,4,36662.0000000000000001,46623.6666666666666668,0.21977441750735839306,22,6,0.21499586569808176370,0.24023543724281686575,1273,27,2,902.8000000000000000,1638.6000000000000000,0.00715056058597523985,24,2,0.00433003535644844975,0.00727003519403350313 -"12",168623,32,2,116212.933333333333,186318.866666666666,9066727.10000002,23,5,8754459.69333332,10584493.3866667,11517581.89,25,2,8065105.74066665,12792886.4113333,14301470,33,2,9374394.4,14797993.8,84.8132816994123,23,6,82.6238934076104,84.8219478435349,0.787207522081705,20,5,0.686753385736217,0.808254261828873,0.559532112328634,31,7,0.531586228280931,0.565055859316343,62916,33,4,52777.600000000001,64041.466666666668,0.37311636016439038565,30,6,0.37172967271581474794,0.41509096911277588946,11560,39,1,6028.0000000000000000,14822.4666666666666667,0.06855529791309607823,47,4,0.06804690054418910946,0.07327127275919816942,0.63754325259515570934,22,7,0.63111768265625409948,0.63936266500475240049,109421,25,2,83228.066666666667,133053.133333333334,0.64890910492637421941,27,10,0.64462997244695773696,0.67289930106076275526,8991,39,1,4553.0000000000000000,11797.5333333333333333,0.05332012833361996881,47,3,0.05035638825661818535,0.05475976044680518487,40860,25,4,36662.0000000000000001,46623.6666666666666668,0.24231569833296762601,20,7,0.24023543724281686575,0.26547500878755196780,1184,29,2,902.8000000000000000,1638.6000000000000000,0.00702158068590880248,25,2,0.00433003535644844975,0.00727003519403350313 -"42",1097695,1,15,1027590.066666666662,1097695.999999999995,27697067.77,2,15,27054796.6266666,28884830.32,74254034.1299997,1,15,69526254.4593331,74254035.1299997,85304785,1,15,79881186.6,85304786,77.7126478666661,37,3,76.0297300998367,78.2277845357613,0.373004215791286,41,2,0.322250757458251,0.443751633550907,0.728329883112327,10,12,0.69893438345799,0.732404014493401,184335,2,15,176680.133333333338,187944.000000000005,0.16792916065027170571,48,1,0.15492319073100904034,0.19828448712797018186,137945,1,16,137945.0000000000000005,146739.4666666666666672,0.12566787677815786717,3,15,0.12551499490928876902,0.13073936712429782898,0.69084780166008191671,2,14,0.68883255909574220655,0.69707754144424050756,780779,1,16,780779.000000000005,830604.066666666672,0.71128956586301294986,16,12,0.70116862967456777356,0.72943795828837279186,113221,1,16,113220.9999999999999995,120465.5333333333333328,0.10314431604407417361,2,14,0.09879348234867518007,0.10319685453886217959,156202,1,16,156202.0000000000000005,166163.6666666666666672,0.14230000136649980186,42,3,0.13927715106387645755,0.16451672260861155960,7547,5,11,7525.0000000000000000,8260.8000000000000000,0.00687531600307917955,26,2,0.00433003535644844975,0.00727003519403350313 -"31",183242,25,2,116212.933333333333,186318.866666666666,7876282.99000001,28,4,6924425.99999999,8754459.69333332,12785113.27,20,2,8065105.74066665,12792886.4113333,15044270,28,3,14797993.8,20221593.2,82.1005555494919,27,5,80.4258389716858,82.6238934076104,0.616051091896193,27,4,0.565252509643562,0.686753385736217,0.618792317281659,24,9,0.598525490351755,0.631995121387166,56659,35,4,52777.600000000001,64041.466666666668,0.30920313028672465919,36,4,0.28500707992189246490,0.32836837631885360642,13718,34,1,6028.0000000000000000,14822.4666666666666667,0.07486274980626712217,46,5,0.07327127275919816942,0.07849564497420722938,0.62377897652719055256,28,6,0.62287270030775579847,0.63111768265625409948,125857,21,2,83228.066666666667,133053.133333333334,0.68683489592997238624,22,11,0.67289930106076275526,0.70116862967456777356,10352,35,1,4553.0000000000000000,11797.5333333333333333,0.05649359862913524192,46,4,0.05475976044680518487,0.05916313263699218439,38705,28,4,36662.0000000000000001,46623.6666666666666668,0.21122340948035930627,25,5,0.18975629415334666165,0.21499586569808176370,1242,28,2,902.8000000000000000,1638.6000000000000000,0.00677792209209679004,27,2,0.00433003535644844975,0.00727003519403350313 -"11",186103,22,2,116212.933333333333,186318.866666666666,5533809.51,35,3,5094392.30666666,6924425.99999999,12727716.86,21,2,8065105.74066665,12792886.4113333,14383755,32,2,9374394.4,14797993.8,77.2892161867353,38,3,76.0297300998367,78.2277845357613,0.434784146353173,37,2,0.322250757458251,0.443751633550907,0.696968950027588,14,11,0.665464752422578,0.69893438345799,50779,40,3,41513.733333333334,52777.600000000001,0.27285427961935057468,41,3,0.24164578352493132338,0.28500707992189246490,20583,19,2,14822.4666666666666667,23616.9333333333333334,0.11060004406162179008,16,12,0.10984187826426158914,0.11506625047927064910,0.60549968420541223340,41,3,0.59813775326226089544,0.60638273561075919645,136385,20,3,133053.133333333334,182878.200000000001,0.73284686437080541421,12,13,0.72943795828837279186,0.75770728690217781016,15370,21,2,11797.5333333333333333,19042.0666666666666666,0.08258867401385254402,29,10,0.08117999358792718199,0.08558336577811418151,30509,34,3,26700.3333333333333334,36662.0000000000000001,0.16393609990166735625,33,3,0.13927715106387645755,0.16451672260861155960,1120,32,2,902.8000000000000000,1638.6000000000000000,0.00601817273230415415,28,2,0.00433003535644844975,0.00727003519403350313 -"36",110165,41,1,46107.000000000000,116212.933333333333,4954107.83,40,2,3264358.61333333,5094392.30666666,7718598.14,40,1,3337325.07,8065105.74066665,9439130,42,2,9374394.4,14797993.8,85.6817501021196,21,7,84.8219478435349,87.0200022794595,0.641840362737164,26,4,0.565252509643562,0.686753385736217,0.609072613084544,25,9,0.598525490351755,0.631995121387166,43913,42,3,41513.733333333334,52777.600000000001,0.39861117414786910543,26,6,0.37172967271581474794,0.41509096911277588946,8720,44,1,6028.0000000000000000,14822.4666666666666667,0.07915399627830980802,44,6,0.07849564497420722938,0.08372001718921628934,0.65917431192660550459,10,10,0.65585262970174900251,0.66409761205024730352,72668,38,1,33403.000000000000,83228.066666666667,0.65962873871011664322,26,10,0.64462997244695773696,0.67289930106076275526,8148,41,1,4553.0000000000000000,11797.5333333333333333,0.07396178459583352244,37,8,0.07237324920755318295,0.07677662139774018247,22366,42,2,16738.6666666666666667,26700.3333333333333334,0.20302273861934371171,26,5,0.18975629415334666165,0.21499586569808176370,624,39,1,167.0000000000000000,902.8000000000000000,0.00566423092633776608,29,2,0.00433003535644844975,0.00727003519403350313 -"50",177127,29,2,116212.933333333333,186318.866666666666,5262148.44000001,39,3,5094392.30666666,6924425.99999999,11382994.94,27,2,8065105.74066665,12792886.4113333,13604835,37,2,9374394.4,14797993.8,76.8083634906028,40,3,76.0297300998367,78.2277845357613,0.462281540819169,35,3,0.443751633550907,0.565252509643562,0.683862834950239,16,11,0.665464752422578,0.69893438345799,87411,21,7,86569.200000000002,97833.066666666669,0.49349336916449778972,19,8,0.45845226550973703098,0.50181356190669817250,22847,15,2,14822.4666666666666667,23616.9333333333333334,0.12898654637632884879,2,15,0.12551499490928876902,0.13073936712429782898,0.62213857399220904276,29,5,0.61462771795925749746,0.62287270030775579847,123986,22,2,83228.066666666667,133053.133333333334,0.69998362756666120919,18,11,0.67289930106076275526,0.70116862967456777356,17003,18,2,11797.5333333333333333,19042.0666666666666666,0.09599327036533109012,6,13,0.09439011015848818055,0.09879348234867518007,27476,36,3,26700.3333333333333334,36662.0000000000000001,0.15512033738504011246,35,3,0.13927715106387645755,0.16451672260861155960,994,33,2,902.8000000000000000,1638.6000000000000000,0.00561179266853726422,30,2,0.00433003535644844975,0.00727003519403350313 -"25",443235,4,6,396636.666666666665,466742.599999999998,11097151.34,19,6,10584493.3866667,12414527.08,29428144.58,4,6,26976228.4233332,31704009.0939999,32617865,5,6,31068792,36492391.4,73.5904542736923,45,1,71.6336212279876,73.8316756639122,0.3770931364644,40,2,0.322250757458251,0.443751633550907,0.726167296547158,11,12,0.69893438345799,0.732404014493401,79621,25,6,75305.333333333335,86569.200000000002,0.17963608469547756833,46,1,0.15492319073100904034,0.19828448712797018186,41555,6,5,41205.8666666666666668,50000.3333333333333335,0.09375387773979942920,36,8,0.08894438940422534930,0.09416876161923440926,0.60363373841896282036,43,3,0.59813775326226089544,0.60638273561075919645,332048,4,6,282528.333333333335,332353.400000000002,0.74914661522668561824,8,13,0.72943795828837279186,0.75770728690217781016,36014,5,5,33531.1333333333333332,40775.6666666666666665,0.08125260866131961601,30,10,0.08117999358792718199,0.08558336577811418151,66669,14,7,66547.0000000000000002,76508.6666666666666669,0.15041456563673897594,37,3,0.13927715106387645755,0.16451672260861155960,2464,19,4,2374.4000000000000000,3110.2000000000000000,0.00555912777646169639,31,2,0.00433003535644844975,0.00727003519403350313 -"46",242468,13,3,186318.866666666666,256424.799999999999,5787010.11,33,3,5094392.30666666,6924425.99999999,16103422.92,14,3,12792886.4113333,17520667.0819999,18080795,18,3,14797993.8,20221593.2,74.5698195225762,42,2,73.8316756639122,76.0297300998367,0.359365219354246,43,2,0.322250757458251,0.443751633550907,0.735637476788645,8,13,0.732404014493401,0.765873645528813,71665,31,5,64041.466666666668,75305.333333333335,0.29556477555801177887,37,4,0.28500707992189246490,0.32836837631885360642,26585,13,3,23616.9333333333333334,32411.4000000000000001,0.10964333437814474487,18,11,0.10461750604925252918,0.10984187826426158914,0.59969907842768478465,46,3,0.59813775326226089544,0.60638273561075919645,179242,11,3,133053.133333333334,182878.200000000001,0.73923981721299305475,11,13,0.72943795828837279186,0.75770728690217781016,21572,12,3,19042.0666666666666666,26286.5999999999999999,0.08896844119636405629,16,11,0.08558336577811418151,0.08998673796830118103,35492,30,3,26700.3333333333333334,36662.0000000000000001,0.14637807875678440042,40,3,0.13927715106387645755,0.16451672260861155960,1155,30,2,902.8000000000000000,1638.6000000000000000,0.00476351518550901562,32,2,0.00433003535644844975,0.00727003519403350313 -"48",161715,35,2,116212.933333333333,186318.866666666666,3843111.95999999,44,2,3264358.61333333,5094392.30666666,10572939.57,35,2,8065105.74066665,12792886.4113333,11868930,40,2,9374394.4,14797993.8,73.3941192839254,46,1,71.6336212279876,73.8316756639122,0.363485663996847,42,2,0.322250757458251,0.443751633550907,0.733414385207876,9,13,0.732404014493401,0.765873645528813,61529,34,4,52777.600000000001,64041.466666666668,0.38047800142225520205,29,6,0.37172967271581474794,0.41509096911277588946,17207,27,2,14822.4666666666666667,23616.9333333333333334,0.10640324026837337291,22,11,0.10461750604925252918,0.10984187826426158914,0.61242517580054628930,36,4,0.60638273561075919645,0.61462771795925749746,121081,23,2,83228.066666666667,133053.133333333334,0.74873079182512444733,9,13,0.72943795828837279186,0.75770728690217781016,13127,28,2,11797.5333333333333333,19042.0666666666666666,0.08117366972760721022,31,9,0.07677662139774018247,0.08117999358792718199,23758,41,2,16738.6666666666666667,26700.3333333333333334,0.14691277865380453267,39,3,0.13927715106387645755,0.16451672260861155960,740,35,1,167.0000000000000000,902.8000000000000000,0.00457595151964876480,33,2,0.00433003535644844975,0.00727003519403350313 -"13",83126,46,1,46107.000000000000,116212.933333333333,4005094.08,42,2,3264358.61333333,5094392.30666666,6039951.63000001,45,1,3337325.07,8065105.74066665,7458395,46,1,3950795,9374394.4,89.7239732454346,17,9,89.2180567153841,91.4161111513086,0.663100356649709,25,4,0.565252509643562,0.686753385736217,0.601286624707654,26,9,0.598525490351755,0.631995121387166,28907,48,1,18986.000000000000,30249.866666666667,0.34774920000962394437,32,5,0.32836837631885360642,0.37172967271581474794,7761,46,1,6028.0000000000000000,14822.4666666666666667,0.09336429035440175156,37,8,0.08894438940422534930,0.09416876161923440926,0.61242107975776317485,37,4,0.60638273561075919645,0.61462771795925749746,53565,43,1,33403.000000000000,83228.066666666667,0.64438322546495681255,28,9,0.61636064383315271866,0.64462997244695773696,5866,46,1,4553.0000000000000000,11797.5333333333333333,0.07056757211943314968,40,7,0.06796987701736618343,0.07237324920755318295,15752,46,1,6777.0000000000000000,16738.6666666666666667,0.18949546471621394028,28,4,0.16451672260861155960,0.18975629415334666165,369,45,1,167.0000000000000000,902.8000000000000000,0.00443904434232370137,34,2,0.00433003535644844975,0.00727003519403350313 -"2",455095,3,6,396636.666666666665,466742.599999999998,8484861.24000002,26,4,6924425.99999999,8754459.69333332,30311415.33,3,6,26976228.4233332,31704009.0939999,33039930,4,6,31068792,36492391.4,72.6000725123326,47,1,71.6336212279876,73.8316756639122,0.279922964586953,46,1,0.200749881365596,0.322250757458251,0.78129702151466,5,14,0.765873645528813,0.799343276564225,99033,14,8,97833.066666666669,109096.933333333336,0.21760951010228633582,44,2,0.19828448712797018186,0.24164578352493132338,47362,4,5,41205.8666666666666668,50000.3333333333333335,0.10407057867038750151,30,10,0.09939313383424346922,0.10461750604925252918,0.62153202989738609011,30,5,0.61462771795925749746,0.62287270030775579847,346824,3,7,332353.400000000002,382178.466666666669,0.76209143145936562696,6,14,0.75770728690217781016,0.78597661551598282846,40360,3,5,33531.1333333333333332,40775.6666666666666665,0.08868478010085806260,17,11,0.08558336577811418151,0.08998673796830118103,55104,19,5,46623.6666666666666668,56585.3333333333333335,0.12108241136466012591,46,2,0.11403757951914135550,0.13927715106387645755,1826,22,3,1638.6000000000000000,2374.4000000000000000,0.00401234906997440095,35,1,0.00139003551886339637,0.00433003535644844975 -"30",165844,33,2,116212.933333333333,186318.866666666666,6473144.33,31,3,5094392.30666666,6924425.99999999,11751926.58,24,2,8065105.74066665,12792886.4113333,13645955,36,2,9374394.4,14797993.8,82.2818733267408,26,5,80.4258389716858,82.6238934076104,0.550815586358096,30,3,0.443751633550907,0.565252509643562,0.644821994824272,21,10,0.631995121387166,0.665464752422578,51499,38,3,41513.733333333334,52777.600000000001,0.31052676008779334797,35,4,0.28500707992189246490,0.32836837631885360642,13436,35,1,6028.0000000000000000,14822.4666666666666667,0.08101589445503002822,42,6,0.07849564497420722938,0.08372001718921628934,0.61915748734742482882,31,5,0.61462771795925749746,0.62287270030775579847,115570,24,2,83228.066666666667,133053.133333333334,0.69685969947661657944,20,11,0.67289930106076275526,0.70116862967456777356,10077,36,1,4553.0000000000000000,11797.5333333333333333,0.06076192084127252116,43,5,0.05916313263699218439,0.06356650482717918391,31472,32,3,26700.3333333333333334,36662.0000000000000001,0.18976869829478304913,27,5,0.18975629415334666165,0.21499586569808176370,665,38,1,167.0000000000000000,902.8000000000000000,0.00400979233496538916,36,1,0.00139003551886339637,0.00433003535644844975 -"1",423120,5,6,396636.666666666665,466742.599999999998,8875342.43,24,5,8754459.69333332,10584493.3866667,28610635.01,5,6,26976228.4233332,31704009.0939999,30520260,6,5,25645192.6,31068792,72.1314520703347,48,1,71.6336212279876,73.8316756639122,0.310211305233103,45,1,0.200749881365596,0.322250757458251,0.763235667411744,6,13,0.732404014493401,0.765873645528813,74299,28,5,64041.466666666668,75305.333333333335,0.17559793911892607298,47,1,0.15492319073100904034,0.19828448712797018186,36764,9,4,32411.4000000000000001,41205.8666666666666668,0.08688788050671204386,39,7,0.08372001718921628934,0.08894438940422534930,0.60303557828310303558,44,3,0.59813775326226089544,0.60638273561075919645,330507,5,6,282528.333333333335,332353.400000000002,0.78111883153715258083,4,14,0.75770728690217781016,0.78597661551598282846,27514,9,4,26286.5999999999999999,33531.1333333333333332,0.06502647003214218189,41,6,0.06356650482717918391,0.06796987701736618343,56955,18,6,56585.3333333333333335,66547.0000000000000002,0.13460720363017583664,44,2,0.11403757951914135550,0.13927715106387645755,1586,25,2,902.8000000000000000,1638.6000000000000000,0.00374834562299111363,37,1,0.00139003551886339637,0.00433003535644844975 -"41",46107,50,1,46107.000000000000,116212.933333333333,1434324.92,50,1,1434324.92,3264358.61333333,3337325.07,50,1,3337325.07,8065105.74066665,3950795,50,1,3950795,9374394.4,85.6875311774785,20,7,84.8219478435349,87.0200022794595,0.429782802069084,38,2,0.322250757458251,0.443751633550907,0.699406929886741,13,12,0.69893438345799,0.732404014493401,18986,50,1,18986.000000000000,30249.866666666667,0.41178129134404754159,23,6,0.37172967271581474794,0.41509096911277588946,6028,50,1,6028.0000000000000000,14822.4666666666666667,0.13073936712429782896,1,16,0.13073936712429782898,0.13596373933930688894,0.60998672859986728600,38,4,0.60638273561075919645,0.61462771795925749746,33403,50,1,33403.000000000000,83228.066666666667,0.72446700067234910100,13,12,0.70116862967456777356,0.72943795828837279186,4553,50,1,4553.0000000000000000,11797.5333333333333333,0.09874856312490511202,4,13,0.09439011015848818055,0.09879348234867518007,6777,50,1,6777.0000000000000000,16738.6666666666666667,0.14698418895178606285,38,3,0.13927715106387645755,0.16451672260861155960,167,50,1,167.0000000000000000,902.8000000000000000,0.00362200967315158219,38,1,0.00139003551886339637,0.00433003535644844975 -"35",209988,19,3,186318.866666666666,256424.799999999999,7263938.16000003,29,4,6924425.99999999,8754459.69333332,14518241.8,16,3,12792886.4113333,17520667.0819999,16474535,23,3,14797993.8,20221593.2,78.4546497895118,36,4,78.2277845357613,80.4258389716858,0.500331807395577,32,3,0.443751633550907,0.565252509643562,0.666519229326943,19,11,0.665464752422578,0.69893438345799,51613,37,3,41513.733333333334,52777.600000000001,0.24579023563251233404,42,3,0.24164578352493132338,0.28500707992189246490,17099,29,2,14822.4666666666666667,23616.9333333333333334,0.08142846257881402747,41,6,0.07849564497420722938,0.08372001718921628934,0.61518217439616351833,33,5,0.61462771795925749746,0.62287270030775579847,151457,16,3,133053.133333333334,182878.200000000001,0.72126502466807627103,14,12,0.70116862967456777356,0.72943795828837279186,12767,31,2,11797.5333333333333333,19042.0666666666666666,0.06079871230736994495,42,5,0.05916313263699218439,0.06356650482717918391,39158,26,4,36662.0000000000000001,46623.6666666666666668,0.18647732251366744766,31,4,0.16451672260861155960,0.18975629415334666165,727,36,1,167.0000000000000000,902.8000000000000000,0.00346210259633883841,39,1,0.00139003551886339637,0.00433003535644844975 -"45",102532,44,1,46107.000000000000,116212.933333333333,3190051.65999999,47,1,1434324.92,3264358.61333333,7120980.72000001,42,1,3337325.07,8065105.74066665,8306840,44,1,3950795,9374394.4,81.0170483361292,31,5,80.4258389716858,82.6238934076104,0.447979258115445,36,3,0.443751633550907,0.565252509643562,0.690617627562916,15,11,0.665464752422578,0.69893438345799,28943,47,1,18986.000000000000,30249.866666666667,0.28228260445519447587,39,3,0.24164578352493132338,0.28500707992189246490,11586,38,1,6028.0000000000000000,14822.4666666666666667,0.11299886864588616237,12,12,0.10984187826426158914,0.11506625047927064910,0.61410322803383393751,34,4,0.60638273561075919645,0.61462771795925749746,73302,37,1,33403.000000000000,83228.066666666667,0.71491826941832793664,15,12,0.70116862967456777356,0.72943795828837279186,8877,40,1,4553.0000000000000000,11797.5333333333333333,0.08657784886669527562,23,11,0.08558336577811418151,0.08998673796830118103,15796,45,1,6777.0000000000000000,16738.6666666666666667,0.15405922053602777669,36,3,0.13927715106387645755,0.16451672260861155960,334,47,1,167.0000000000000000,902.8000000000000000,0.00325751960363593805,40,1,0.00139003551886339637,0.00433003535644844975 -"14",163484,34,2,116212.933333333333,186318.866666666666,8711851.92000003,25,4,6924425.99999999,8754459.69333332,10923127.66,33,2,8065105.74066665,12792886.4113333,14477660,31,2,9374394.4,14797993.8,88.5570453377701,19,8,87.0200022794595,89.2180567153841,0.797560203558036,19,5,0.686753385736217,0.808254261828873,0.556309601214263,32,7,0.531586228280931,0.565055859316343,64192,32,5,64041.466666666668,75305.333333333335,0.39265004526436837856,27,6,0.37172967271581474794,0.41509096911277588946,9052,43,1,6028.0000000000000000,14822.4666666666666667,0.05536933277874287392,49,1,0.05237378389916192958,0.05759815611417098954,0.64626601855943437914,18,8,0.63936266500475240049,0.64760764735325070150,98467,28,2,83228.066666666667,133053.133333333334,0.60230358934207628881,34,8,0.58809131521934770036,0.61636064383315271866,7081,44,1,4553.0000000000000000,11797.5333333333333333,0.04331310709304886105,49,1,0.04154964387624418631,0.04595301606643118583,30693,33,3,26700.3333333333333334,36662.0000000000000001,0.18774314305987130239,29,4,0.16451672260861155960,0.18975629415334666165,524,42,1,167.0000000000000000,902.8000000000000000,0.00320520662572484157,41,1,0.00139003551886339637,0.00433003535644844975 -"33",183762,23,2,116212.933333333333,186318.866666666666,5262403.94,38,3,5094392.30666666,6924425.99999999,12846569.08,19,3,12792886.4113333,17520667.0819999,14178250,34,2,9374394.4,14797993.8,77.1555054907979,39,3,76.0297300998367,78.2277845357613,0.409634970024229,39,2,0.322250757458251,0.443751633550907,0.709403513154056,12,12,0.69893438345799,0.732404014493401,51808,36,3,41513.733333333334,52777.600000000001,0.28192988757196808916,40,3,0.24164578352493132338,0.28500707992189246490,14832,32,2,14822.4666666666666667,23616.9333333333333334,0.08071309628758938192,43,6,0.07849564497420722938,0.08372001718921628934,0.58164778856526429342,50,1,0.58164778856526429342,0.58989277091376259443,137173,19,3,133053.133333333334,182878.200000000001,0.74647097876601255972,10,13,0.72943795828837279186,0.75770728690217781016,10597,34,1,4553.0000000000000000,11797.5333333333333333,0.05766698229231288297,45,4,0.05475976044680518487,0.05916313263699218439,28949,35,3,26700.3333333333333334,36662.0000000000000001,0.15753529021233987440,34,3,0.13927715106387645755,0.16451672260861155960,570,40,1,167.0000000000000000,902.8000000000000000,0.00310183824729813563,42,1,0.00139003551886339637,0.00433003535644844975 -"39",103665,43,1,46107.000000000000,116212.933333333333,3414796.91,46,2,3264358.61333333,5094392.30666666,7036085.46000001,43,1,3337325.07,8065105.74066665,8459935,43,1,3950795,9374394.4,81.6084020643419,30,5,80.4258389716858,82.6238934076104,0.48532624133306,34,3,0.443751633550907,0.565252509643562,0.673252765737522,17,11,0.665464752422578,0.69893438345799,34306,44,2,30249.866666666667,41513.733333333334,0.33093136545603627068,33,5,0.32836837631885360642,0.37172967271581474794,10740,41,1,6028.0000000000000000,14822.4666666666666667,0.10360295181594559398,31,10,0.09939313383424346922,0.10461750604925252918,0.60763500931098696462,40,4,0.60638273561075919645,0.61462771795925749746,71558,39,1,33403.000000000000,83228.066666666667,0.69028119423141851155,21,11,0.67289930106076275526,0.70116862967456777356,7826,42,1,4553.0000000000000000,11797.5333333333333333,0.07549317513143298124,35,8,0.07237324920755318295,0.07677662139774018247,15148,47,1,6777.0000000000000000,16738.6666666666666667,0.14612453576424058265,41,3,0.13927715106387645755,0.16451672260861155960,314,48,1,167.0000000000000000,902.8000000000000000,0.00302898760430231997,43,1,0.00139003551886339637,0.00433003535644844975 -"23",147537,37,2,116212.933333333333,186318.866666666666,5661258.23,34,3,5094392.30666666,6924425.99999999,9709988.76000002,36,2,8065105.74066665,12792886.4113333,12086345,39,2,9374394.4,14797993.8,81.9207724164108,28,5,80.4258389716858,82.6238934076104,0.583034478198509,28,4,0.565252509643562,0.686753385736217,0.631698180786308,23,9,0.598525490351755,0.631995121387166,84000,23,6,75305.333333333335,86569.200000000002,0.56934870574838853982,15,10,0.54517485830365931402,0.58853615470062045554,14185,33,1,6028.0000000000000000,14822.4666666666666667,0.09614537370286775521,34,9,0.09416876161923440926,0.09939313383424346922,0.70532252379273880860,1,16,0.70532252379273880857,0.71356750614123710958,98409,29,2,83228.066666666667,133053.133333333334,0.66701234266658533114,24,10,0.64462997244695773696,0.67289930106076275526,12221,32,2,11797.5333333333333333,19042.0666666666666666,0.08283345872560781363,28,10,0.08117999358792718199,0.08558336577811418151,20770,44,2,16738.6666666666666667,26700.3333333333333334,0.14077824545707178538,43,3,0.13927715106387645755,0.16451672260861155960,437,43,1,167.0000000000000000,902.8000000000000000,0.00296196886204816419,44,1,0.00139003551886339637,0.00433003535644844975 -"38",69827,47,1,46107.000000000000,116212.933333333333,2476610.21,49,1,1434324.92,3264358.61333333,5065106.01,47,1,3337325.07,8065105.74066665,5887125,48,1,3950795,9374394.4,84.3101522333768,24,6,82.6238934076104,84.8219478435349,0.48895525683183,33,3,0.443751633550907,0.565252509643562,0.671611853621297,18,11,0.665464752422578,0.69893438345799,27999,49,1,18986.000000000000,30249.866666666667,0.40097669955747776648,25,6,0.37172967271581474794,0.41509096911277588946,7271,48,1,6028.0000000000000000,14822.4666666666666667,0.10412877540206510376,29,10,0.09939313383424346922,0.10461750604925252918,0.60789437491404208500,39,4,0.60638273561075919645,0.61462771795925749746,49354,44,1,33403.000000000000,83228.066666666667,0.70680395835421828233,17,12,0.70116862967456777356,0.72943795828837279186,5661,48,1,4553.0000000000000000,11797.5333333333333333,0.08107179171380698011,32,9,0.07677662139774018247,0.08117999358792718199,11690,49,1,6777.0000000000000000,16738.6666666666666667,0.16741375112778724562,32,4,0.16451672260861155960,0.18975629415334666165,199,49,1,167.0000000000000000,902.8000000000000000,0.00284990046830022771,45,1,0.00139003551886339637,0.00433003535644844975 -"40",211875,17,3,186318.866666666666,256424.799999999999,4676262.2,41,2,3264358.61333333,5094392.30666666,14070858.55,17,3,12792886.4113333,17520667.0819999,15788505,25,3,14797993.8,20221593.2,74.518017699115,43,2,73.8316756639122,76.0297300998367,0.332336664701955,44,2,0.322250757458251,0.443751633550907,0.750561045487479,7,13,0.732404014493401,0.765873645528813,90689,20,7,86569.200000000002,97833.066666666669,0.42803067846607669617,21,7,0.41509096911277588946,0.45845226550973703098,25292,14,3,23616.9333333333333334,32411.4000000000000001,0.11937227138643067847,7,13,0.11506625047927064910,0.12029062269427970906,0.63272971690653170963,23,7,0.63111768265625409948,0.63936266500475240049,159012,14,3,133053.133333333334,182878.200000000001,0.75049911504424778761,7,13,0.72943795828837279186,0.75770728690217781016,19372,15,3,19042.0666666666666666,26286.5999999999999999,0.09143126843657817109,12,12,0.08998673796830118103,0.09439011015848818055,26650,37,2,16738.6666666666666667,26700.3333333333333334,0.12578171091445427729,45,2,0.11403757951914135550,0.13927715106387645755,528,41,1,167.0000000000000000,902.8000000000000000,0.00249203539823008850,46,1,0.00139003551886339637,0.00433003535644844975 -"44",520445,2,7,466742.599999999998,536848.533333333331,7965664.39000002,27,4,6924425.99999999,8754459.69333332,33878370.8299999,2,7,31704009.0939999,36431789.7646665,37281360,2,7,36492391.4,41915990.8,71.6336212279876,50,1,71.6336212279876,73.8316756639122,0.235125367449673,48,1,0.200749881365596,0.322250757458251,0.809634411496893,3,15,0.799343276564225,0.832812907599636,80629,24,6,75305.333333333335,86569.200000000002,0.15492319073100904034,50,1,0.15492319073100904034,0.19828448712797018186,57017,2,6,50000.3333333333333335,58794.8000000000000002,0.10955432370375351862,19,11,0.10461750604925252918,0.10984187826426158914,0.61294000035077257660,35,4,0.60638273561075919645,0.61462771795925749746,397839,2,8,382178.466666666669,432003.533333333336,0.76442083217246779199,5,14,0.75770728690217781016,0.78597661551598282846,56000,2,8,55264.7333333333333331,62509.2666666666666664,0.10760022672904917907,1,16,0.10760022672904917911,0.11200359891923617863,52434,21,5,46623.6666666666666668,56585.3333333333333335,0.10074839800555294027,48,1,0.08879800797440625345,0.11403757951914135550,1132,31,2,902.8000000000000000,1638.6000000000000000,0.00217506172602292269,47,1,0.00139003551886339637,0.00433003535644844975 -"43",380718,7,5,326530.733333333332,396636.666666666665,5326002.86,37,3,5094392.30666666,6924425.99999999,26066514.3599999,7,5,22248447.7526666,26976228.4233332,28088930,8,5,25645192.6,31068792,73.77883367742,44,1,71.6336212279876,73.8316756639122,0.204323554213791,49,1,0.200749881365596,0.322250757458251,0.830341644071574,2,15,0.799343276564225,0.832812907599636,75425,26,6,75305.333333333335,86569.200000000002,0.19811251372406873329,45,1,0.15492319073100904034,0.19828448712797018186,42972,5,5,41205.8666666666666668,50000.3333333333333335,0.11287094384820260665,13,12,0.10984187826426158914,0.11506625047927064910,0.60006515870799590431,45,3,0.59813775326226089544,0.60638273561075919645,302105,6,6,282528.333333333335,332353.400000000002,0.79351383438660635956,2,15,0.78597661551598282846,0.81424594412978784676,32625,6,4,26286.5999999999999999,33531.1333333333333332,0.08569334783225379415,25,11,0.08558336577811418151,0.08998673796830118103,33807,31,3,26700.3333333333333334,36662.0000000000000001,0.08879800797440625345,50,1,0.08879800797440625345,0.11403757951914135550,689,37,1,167.0000000000000000,902.8000000000000000,0.00180973844157617974,48,1,0.00139003551886339637,0.00433003535644844975 -"32",226608,15,3,186318.866666666666,256424.799999999999,3888103.96999999,43,2,3264358.61333333,5094392.30666666,16109878.36,13,3,12792886.4113333,17520667.0819999,17218205,22,3,14797993.8,20221593.2,75.9823351337993,41,2,73.8316756639122,76.0297300998367,0.241349058206048,47,1,0.200749881365596,0.322250757458251,0.805575187244403,4,15,0.799343276564225,0.832812907599636,50958,39,3,41513.733333333334,52777.600000000001,0.22487290828214361364,43,2,0.19828448712797018186,0.24164578352493132338,21886,17,2,14822.4666666666666667,23616.9333333333333334,0.09658087975711360587,33,9,0.09416876161923440926,0.09939313383424346922,0.58594535319382253495,49,1,0.58164778856526429342,0.58989277091376259443,177439,12,3,133053.133333333334,182878.200000000001,0.78302178210831038622,3,14,0.75770728690217781016,0.78597661551598282846,19925,14,3,19042.0666666666666666,26286.5999999999999999,0.08792716938501729859,20,11,0.08558336577811418151,0.08998673796830118103,24806,39,2,16738.6666666666666667,26700.3333333333333334,0.10946656781755277837,47,1,0.08879800797440625345,0.11403757951914135550,398,44,1,167.0000000000000000,902.8000000000000000,0.00175633693426533926,49,1,0.00139003551886339637,0.00433003535644844975 -"47",260425,11,4,256424.799999999999,326530.733333333332,3589766.39,45,2,3264358.61333333,5094392.30666666,17881785.86,11,4,17520667.0819999,22248447.7526666,18679115,15,3,14797993.8,20221593.2,71.7255063837957,49,1,71.6336212279876,73.8316756639122,0.200749881365596,50,1,0.200749881365596,0.322250757458251,0.832812907599636,1,16,0.832812907599636,0.866282538635048,43198,43,3,41513.733333333334,52777.600000000001,0.16587501199961601229,49,1,0.15492319073100904034,0.19828448712797018186,27457,12,3,23616.9333333333333334,32411.4000000000000001,0.10543150619180186234,26,11,0.10461750604925252918,0.10984187826426158914,0.59769821903339767637,47,2,0.58989277091376259443,0.59813775326226089544,212050,9,4,182878.200000000001,232703.266666666668,0.81424594412978784679,1,16,0.81424594412978784676,0.84251527274359286506,20125,13,3,19042.0666666666666666,26286.5999999999999999,0.07727752711913218777,34,9,0.07677662139774018247,0.08117999358792718199,25577,38,2,16738.6666666666666667,26700.3333333333333334,0.09821253719880963809,49,1,0.08879800797440625345,0.11403757951914135550,362,46,1,167.0000000000000000,902.8000000000000000,0.00139003551886339637,50,1,0.00139003551886339637,0.00433003535644844975 \ No newline at end of file +"ward","ticket_count","ticket_count_rank","ticket_count_rank_type","ticket_count_bucket","current_amount_due","current_amount_due_rank","current_amount_due_rank_type","current_amount_due_bucket","fine_level1_amount","fine_level1_amount_rank","fine_level1_amount_rank_type","fine_level1_amount_bucket","total_payments","total_payments_rank","total_payments_rank_type","total_payments_bucket","avg_per_ticket","avg_per_ticket_rank","avg_per_ticket_rank_type","avg_per_ticket_bucket","debt_to_payment_ratio","debt_to_payment_ratio_rank","debt_to_payment_ratio_rank_type","debt_to_payment_ratio_bucket","paid_pct","paid_pct_rank","paid_pct_rank_type","paid_pct_bucket","police_ticket_count","police_ticket_count_rank","police_ticket_count_rank_type","police_ticket_count_pct","police_ticket_count_pct_rank","police_ticket_count_pct_rank_type","contested_and_notliable_pct","contested_and_notliable_pct_rank","contested_and_notliable_pct_rank_type","contested_ticket_count","contested_ticket_count_rank","contested_ticket_count_rank_type","contested_ticket_count_pct","contested_ticket_count_pct_rank","contested_ticket_count_pct_rank_type","paid_ticket_count","paid_ticket_count_rank","paid_ticket_count_rank_type","paid_ticket_count_pct","paid_ticket_count_pct_rank","paid_ticket_count_pct_rank_type","dismissed_ticket_count","dismissed_ticket_count_rank","dismissed_ticket_count_rank_type","dismissed_ticket_count_pct","dismissed_ticket_count_pct_rank","dismissed_ticket_count_pct_rank_type","seized_or_suspended_ticket_count","seized_or_suspended_ticket_count_rank","seized_or_suspended_ticket_count_rank_type","seized_or_suspended_ticket_count_pct","seized_or_suspended_ticket_count_pct_rank","seized_or_suspended_ticket_count_pct_rank_type","bankruptcy_ticket_count","bankruptcy_ticket_count_rank","bankruptcy_ticket_count_rank_type","bankruptcy_ticket_count_pct","bankruptcy_ticket_count_pct_rank","bankruptcy_ticket_count_pct_rank_type" +"29","171743","30","middle30","2","17331333.4500001","10","top10","9","16820830","21","middle30","3","10729273.08","32","middle30","2","97.9418666262963","6","top10","13","1.61533156261132","10","top10","12","0.382360697318826","41","bottom10","2","113230","10","top10","0.65929906895768677617","9","top10","0.65576047105877124764","11","middle30","18002","25","middle30","0.10481941039809482774","27","middle30","78410","33","middle30","0.45655427004302941022","39","middle30","14915","22","middle30","0.08684487868501190733","21","middle30","75135","9","top10","0.43748507945010859249","7","top10","7766","4","top10","0.0452187279830910139","1","top10" +"34","115323","40","middle30","1","13764219.54","16","middle30","7","12050750","38","middle30","2","7084127.64000002","42","bottom10","1","104.49563400189","1","top10","16","1.94296605587417","2","top10","15","0.339793249740002","49","bottom10","1","92399","15","middle30","0.80121918437779107377","1","top10","0.66497303212694442273","7","top10","12793","36","middle30","0.11093190430356477025","16","middle30","44740","46","bottom10","0.38795383401403015877","50","bottom10","10690","32","middle30","0.0926961664195346982","10","top10","53987","20","middle30","0.46813731866149857357","1","top10","5046","15","middle30","0.04375536536510496605","2","top10" +"6","198939","20","middle30","3","20892562.18","5","top10","11","19179765","14","middle30","3","11660974.51","24","middle30","2","96.4102815435887","11","middle30","12","1.79166519591337","4","top10","14","0.358209143941713","47","bottom10","1","141079","6","top10","0.70915707830038353465","6","top10","0.6566838838079893854","10","top10","21103","18","middle30","0.10607774242355696972","23","middle30","83914","32","middle30","0.42180768979435907489","47","bottom10","17175","17","middle30","0.08633299654668013813","24","middle30","88259","6","top10","0.44364855558739110984","3","top10","8575","3","top10","0.04310366494252006897","3","top10" +"24","210130","17","middle30","3","23099795.56","3","top10","13","19847695","13","middle30","3","11417340.85","25","middle30","2","94.454361585685","13","middle30","11","2.0232202807539","1","top10","16","0.330773118441316","50","bottom10","1","138920","7","top10","0.66111454813686765336","8","top10","0.67110380717611613257","4","top10","18255","22","middle30","0.08687479179555513254","39","middle30","88325","31","middle30","0.42033503069528387189","48","bottom10","15085","21","middle30","0.07178889259030124209","38","middle30","97200","3","top10","0.46257078951125493742","2","top10","9018","2","top10","0.04291628991576643031","4","top10" +"17","169970","31","middle30","2","18538535.16","9","top10","10","17095260","20","middle30","3","10353183.77","35","middle30","2","100.578102018003","3","top10","14","1.79061200610757","5","top10","14","0.358344333720126","46","bottom10","1","122623","9","top10","0.72143907748426192858","5","top10","0.66124496884821083972","8","top10","18137","23","middle30","0.10670706595281520268","21","middle30","72086","37","middle30","0.42411013708301464964","46","bottom10","14762","24","middle30","0.08685062069777019474","20","middle30","74609","10","top10","0.43895393304700829558","5","top10","7092","8","top10","0.04172501029593457669","5","top10" +"21","142107","38","middle30","2","14995774.85","12","middle30","8","14690635","30","middle30","2","9314422.33000002","38","middle30","2","103.377279092515","2","top10","15","1.60995221375151","11","middle30","12","0.383148777487621","40","middle30","2","100545","13","middle30","0.70753024129705081382","7","top10","0.65343960205754338364","14","middle30","17691","26","middle30","0.12449070066921404294","4","top10","61875","41","bottom10","0.43541134497245033672","43","bottom10","14162","26","middle30","0.09965730048484592596","3","top10","61019","16","middle30","0.42938771489089207428","8","top10","5869","12","middle30","0.04129986559423532972","6","top10" +"37","183307","23","middle30","2","19275808.35","6","top10","11","18424855","15","middle30","3","11051857.32","29","middle30","2","100.513646505589","4","top10","14","1.74412388722369","8","top10","13","0.364415034122869","43","bottom10","2","144034","5","top10","0.7857528626839127802","2","top10","0.69031659276064762298","3","top10","19394","21","middle30","0.10580065136628715761","25","middle30","78222","34","middle30","0.42672674802380705592","45","bottom10","16729","18","middle30","0.09126219947956160976","12","middle30","77605","7","top10","0.42336081000725558762","10","top10","7415","6","top10","0.04045126481803749993","7","top10" +"7","134197","39","middle30","2","14267365.3","14","middle30","8","13080905","37","middle30","2","7777808.26000002","39","middle30","1","97.4753906570192","8","top10","12","1.83436834941982","3","top10","14","0.352812294211758","48","bottom10","1","78747","24","middle30","0.58680149332697452253","13","middle30","0.64591904445919044459","17","middle30","15070","31","middle30","0.11229759234558149586","15","middle30","55681","42","bottom10","0.41491985662868767558","49","bottom10","12117","31","middle30","0.09029262949246257368","14","middle30","59152","17","middle30","0.44078481635207940565","4","top10","5244","14","middle30","0.03907687951295483506","8","top10" +"8","152629","36","middle30","2","15048179.7200001","11","middle30","8","14817095","29","middle30","3","9418453.71000001","37","middle30","2","97.0791592685532","10","top10","12","1.59773357531319","12","middle30","12","0.384950947049848","39","middle30","2","92106","17","middle30","0.60346329989713619299","11","middle30","0.64346716947648624667","20","middle30","18032","24","middle30","0.11814268585917486192","9","top10","68080","40","middle30","0.44604891599892549909","40","middle30","14636","25","middle30","0.09589265473795936552","7","top10","63433","15","middle30","0.41560253949118450622","12","middle30","5913","11","middle30","0.03874099941688669912","9","top10" +"9","91600","44","bottom10","1","9364043.37000003","22","middle30","5","8964050","42","bottom10","1","5579514.49000001","46","bottom10","1","97.860807860262","7","top10","12","1.67828999938667","9","top10","13","0.373372562429386","42","bottom10","2","57760","34","middle30","0.63056768558951965066","10","top10","0.65291146478604784142","15","middle30","10493","41","bottom10","0.11455240174672489083","10","top10","39646","47","bottom10","0.4328165938864628821","44","bottom10","8558","39","middle30","0.09342794759825327511","8","top10","38191","28","middle30","0.41693231441048034934","11","middle30","3365","18","middle30","0.03673580786026200873","10","top10" +"20","210320","16","middle30","3","21517797.73","4","top10","12","19904355","12","middle30","3","12078920.59","22","middle30","2","94.638431913275","12","middle30","11","1.78143382677871","6","top10","14","0.35952679886623","45","bottom10","1","154122","4","top10","0.73279764168885507798","4","top10","0.66835465931184156983","6","top10","22117","16","middle30","0.10515880562951692659","26","middle30","91711","30","middle30","0.43605458349182198555","42","bottom10","18551","16","middle30","0.08820368961582350704","19","middle30","92243","5","top10","0.43858406238113351084","6","top10","7362","7","top10","0.03500380372765310004","11","middle30" +"28","310576","9","top10","4","28116296.23","1","top10","15","29227215","7","top10","5","18841919.14","9","top10","4","94.1064827932615","15","middle30","11","1.49222040605785","13","middle30","11","0.401248620535044","38","middle30","3","182640","1","top10","0.58806862088506516923","12","middle30","0.65395617772367620207","13","middle30","32860","10","top10","0.10580341043738086652","24","middle30","157536","13","middle30","0.5072381639276698779","38","middle30","26373","10","top10","0.08491641337386018237","26","middle30","115714","2","top10","0.37257869249394673123","13","middle30","10864","1","top10","0.03498016588532275514","12","middle30" +"16","176581","27","middle30","2","18833535.22","8","top10","10","17442070","19","middle30","3","10715125.65","33","middle30","2","98.7765954434509","5","top10","13","1.75765883062696","7","top10","13","0.362626438373687","44","bottom10","1","133995","8","top10","0.75883022522241917307","3","top10","0.66111323886122813737","9","top10","15666","30","middle30","0.08871849179696569846","38","middle30","78044","35","middle30","0.44197280568124543411","41","bottom10","12562","29","middle30","0.07114015664199432555","39","middle30","75408","8","top10","0.42704481229577361098","9","top10","5688","13","middle30","0.03221184612160991273","13","middle30" +"18","67500","48","bottom10","1","5366658.29","36","middle30","3","6555625","47","bottom10","1","4656593.93","48","bottom10","1","97.1203703703704","9","top10","12","1.15248578052414","14","middle30","8","0.464579143355129","37","middle30","4","33304","45","bottom10","0.49339259259259259259","19","middle30","0.62783661119515885023","25","middle30","7271","47","bottom10","0.10771851851851851852","20","middle30","35192","48","bottom10","0.52136296296296296296","37","middle30","5699","46","bottom10","0.08442962962962962963","27","middle30","21407","43","bottom10","0.31714074074074074074","14","middle30","1857","21","middle30","0.02751111111111111111","14","middle30" +"5","248972","11","middle30","3","14727556.39","13","middle30","8","21308210","11","middle30","4","16620649.63","12","middle30","3","85.5847645518372","22","middle30","7","0.886099924964245","18","middle30","6","0.530194602504402","33","middle30","6","87460","19","middle30","0.35128448178911684848","31","middle30","0.59621853202563467054","48","bottom10","28243","11","middle30","0.11343845894317433286","12","middle30","149978","16","middle30","0.60238902366531176197","33","middle30","21554","11","middle30","0.08657198399820060087","23","middle30","72362","11","middle30","0.29064312452805938017","15","middle30","5966","10","top10","0.02396253393955946853","15","middle30" +"10","86078","45","bottom10","1","6297504.33","32","middle30","3","7891920","45","bottom10","1","5616550.79000001","45","bottom10","1","91.6833569553196","16","middle30","10","1.12124052028736","15","middle30","8","0.471422259963491","36","middle30","5","46946","41","bottom10","0.54538906573108111248","16","middle30","0.64487351826958328241","19","middle30","8183","45","bottom10","0.09506494109993261925","35","middle30","48139","45","bottom10","0.55924858848950951463","36","middle30","6855","44","bottom10","0.07963707335207602407","33","middle30","24655","38","middle30","0.28642626455075629081","16","middle30","1768","23","middle30","0.0205395106763632984","16","middle30" +"19","54036","49","bottom10","1","3041397.58","48","bottom10","1","5095735","49","bottom10","1","4256416.18","49","bottom10","1","94.3025945665852","14","middle30","11","0.714544220156592","23","middle30","5","0.583245382792558","28","middle30","8","31425","46","bottom10","0.58155673995114368199","14","middle30","0.61671167116711671167","31","middle30","6666","49","bottom10","0.12336220297579391517","5","top10","34345","49","bottom10","0.63559478865941224369","30","middle30","4972","48","bottom10","0.09201273225257235917","11","middle30","13508","48","bottom10","0.24998149381893552447","18","middle30","922","34","middle30","0.01706269894144644311","17","middle30" +"3","288812","10","top10","4","13842674.9700001","15","middle30","7","22750745","10","top10","4","18236863.45","10","top10","4","78.7735447280584","35","middle30","4","0.759049109949885","21","middle30","5","0.568488960509175","30","middle30","8","109065","11","middle30","0.37763320083653033807","29","middle30","0.63746130030959752322","22","middle30","35530","9","top10","0.12302120410509258618","6","top10","181628","10","top10","0.62887968643962162237","31","middle30","27842","7","top10","0.09640181155907649267","5","top10","71908","12","middle30","0.24897857429746686426","19","middle30","4896","16","middle30","0.01695220420204146642","18","middle30" +"27","410439","6","top10","6","19262541.7800001","7","top10","11","33508485","3","top10","6","26759502.97","6","top10","5","81.6405970192891","29","middle30","5","0.719839296028603","22","middle30","5","0.58144967515812","29","middle30","8","158291","3","top10","0.3856626685085968926","27","middle30","0.62668822133093230744","26","middle30","48868","3","top10","0.11906275963054193193","7","top10","264505","7","top10","0.64444411958902540938","28","middle30","38162","4","top10","0.09297849375912133106","9","top10","95398","4","top10","0.23242917948830398671","21","middle30","6904","9","top10","0.01682101359763570226","19","middle30" +"4","311832","8","top10","4","11970293.62","17","middle30","6","24575955","9","top10","4","21133826.48","8","top10","4","78.8115235126607","34","middle30","4","0.566404462122755","29","middle30","4","0.638404718692402","22","middle30","10","84469","21","middle30","0.27087983273044459837","41","bottom10","0.61486942818550202611","33","middle30","35536","8","top10","0.11395879832730444598","11","middle30","209586","8","top10","0.6721119064111444624","23","middle30","27654","8","top10","0.0886823674286154083","17","middle30","67525","13","middle30","0.21654288206470150594","23","middle30","4177","17","middle30","0.01339503322301752226","20","middle30" +"15","172100","29","middle30","2","11500258.2500001","18","middle30","6","15276780","26","middle30","3","11015543.15","30","middle30","2","88.7668797210924","18","middle30","8","1.04400283248857","16","middle30","7","0.489236112643985","35","middle30","5","92397","16","middle30","0.53687972109238814643","18","middle30","0.66944497063837848077","5","top10","10558","40","middle30","0.06134805345729227193","48","bottom10","100030","27","middle30","0.58123184195235328298","35","middle30","8759","38","middle30","0.05089482858803021499","48","bottom10","45463","23","middle30","0.26416618245206275421","17","middle30","1963","20","middle30","0.01140615920976176641","21","middle30" +"26","224051","14","middle30","3","9882146.51000002","21","middle30","5","17981045","16","middle30","3","14649159.94","15","middle30","3","80.2542501484037","32","middle30","4","0.674587932036736","24","middle30","4","0.597161833588362","27","middle30","8","73991","26","middle30","0.33024177531008565014","34","middle30","0.63109035004730368969","24","middle30","16912","29","middle30","0.07548281418069992993","45","bottom10","148571","17","middle30","0.66311241636948730423","25","middle30","13112","27","middle30","0.0585223899915644206","44","bottom10","48059","22","middle30","0.21450027002780616913","24","middle30","1717","24","middle30","0.00766343377177517619","22","middle30" +"49","198181","21","middle30","3","6716489.27000002","30","middle30","3","15719280","24","middle30","3","13562476.61","18","middle30","3","79.3177953486964","33","middle30","4","0.495225869370181","32","middle30","3","0.66879527734577","19","middle30","11","107872","12","middle30","0.54431050403419096684","17","middle30","0.60427284427284427284","42","bottom10","19425","20","middle30","0.09801645970098041689","32","middle30","138660","18","middle30","0.69966343897750036583","19","middle30","14848","23","middle30","0.07492141022600552021","36","middle30","36593","29","middle30","0.18464434027479929963","31","middle30","1443","26","middle30","0.00728122272064425954","23","middle30" +"22","178012","26","middle30","2","10068911.39","20","middle30","5","14869430","28","middle30","3","11160118.69","27","middle30","2","83.53049232636","25","middle30","6","0.90222260799271","17","middle30","6","0.525700827967361","34","middle30","6","73714","27","middle30","0.41409567894299260724","22","middle30","0.64760167399935615409","16","middle30","9319","42","bottom10","0.05235040334359481383","50","bottom10","109136","25","middle30","0.61308226411702581848","32","middle30","7392","42","bottom10","0.04152529042985866121","50","bottom10","39124","25","middle30","0.21978293598184392063","22","middle30","1272","27","middle30","0.00714558569085230209","24","middle30" +"12","165265","32","middle30","2","8909673.99000003","23","middle30","5","14021130","33","middle30","2","11286688.4","26","middle30","2","84.8402868120897","23","middle30","7","0.789396648001731","20","middle30","5","0.55884758760263","31","middle30","7","62176","32","middle30","0.37622001028650954528","30","middle30","0.63747238179407865665","21","middle30","11315","38","middle30","0.06846579735576195807","47","bottom10","107222","26","middle30","0.64878830968444619248","27","middle30","8793","37","middle30","0.05320545790094696397","47","bottom10","40155","24","middle30","0.24297340634738147823","20","middle30","1159","29","middle30","0.0070129791546909509","25","middle30" +"42","1088623","1","top10","15","27426712.51","2","top10","15","84590300","1","top10","15","73656206.9999997","1","top10","15","77.703943422103","37","middle30","3","0.372361184848957","41","bottom10","2","0.728671147974839","10","top10","12","178778","2","top10","0.16422397836532941156","49","bottom10","0.69079293608560902871","2","top10","136808","1","top10","0.12567068672993313571","3","top10","774611","1","top10","0.71155119816502131592","16","middle30","112267","1","top10","0.10312752899764197523","2","top10","154892","1","top10","0.14228249816511317508","42","bottom10","7496","5","top10","0.00688576302356279447","26","middle30" +"31","181986","24","middle30","2","7828466.84000001","27","middle30","4","14937895","27","middle30","3","12689902.17","19","middle30","2","82.0826602046311","27","middle30","5","0.616905216062828","27","middle30","4","0.618465442541527","24","middle30","9","56196","35","middle30","0.30879298407569813063","36","middle30","0.62332794355431427311","27","middle30","13606","34","middle30","0.0747639928346136516","46","bottom10","124965","21","middle30","0.68667370017473871616","22","middle30","10261","34","middle30","0.05638345806820304859","46","bottom10","38438","27","middle30","0.21121404943237391887","25","middle30","1240","28","middle30","0.00681371094479795149","27","middle30" +"11","185423","22","middle30","3","5522720.69","35","middle30","3","14330390","32","middle30","2","12686951.91","20","middle30","2","77.2848567869142","38","middle30","3","0.435307135171445","37","middle30","2","0.696714992558406","14","middle30","11","50650","39","middle30","0.27315920894387427665","40","middle30","0.60536473347339619876","41","bottom10","20467","19","middle30","0.11038004993986722251","17","middle30","135913","19","middle30","0.73298889566019317992","12","middle30","15273","20","middle30","0.08236842247186163529","29","middle30","30496","34","middle30","0.16446719123301855757","33","middle30","1117","30","middle30","0.00602406389714328859","28","middle30" +"36","108037","41","bottom10","1","4862373.05","40","middle30","2","9252005","41","bottom10","1","7574161.74","40","middle30","1","85.6373742329017","21","middle30","7","0.641968473464365","26","middle30","4","0.609025091626829","25","middle30","9","43223","42","bottom10","0.40007589992317446801","25","middle30","0.65564705882352941176","12","middle30","8500","44","bottom10","0.07867674963207049437","44","bottom10","71358","39","middle30","0.66049594120532780436","26","middle30","7944","40","middle30","0.07353036459731388321","37","middle30","21961","42","bottom10","0.20327295278469413257","26","middle30","620","39","middle30","0.00573877467904514194","29","middle30" +"50","173308","28","middle30","2","5139240.4","39","middle30","3","13271730","36","middle30","2","11094340.21","28","middle30","2","76.5788653726314","40","middle30","3","0.463230827856504","35","middle30","3","0.683419171440576","16","middle30","11","84736","20","middle30","0.48893299789969303206","20","middle30","0.62210156215229872268","28","middle30","22469","15","middle30","0.12964779467768366146","2","top10","121305","22","middle30","0.69993883721466983636","18","middle30","16706","19","middle30","0.09639485770997299605","6","top10","26914","36","middle30","0.15529577399773813096","35","middle30","991","33","middle30","0.00571814342096152515","30","middle30" +"25","437064","4","top10","6","10987440.64","19","middle30","6","32261020","5","top10","6","29086249.1599999","4","top10","6","73.8130342467007","44","bottom10","2","0.377753782536876","40","middle30","2","0.72581909240611","11","middle30","12","79287","23","middle30","0.18140821481522156938","46","bottom10","0.60317614727984629976","44","bottom10","41119","6","top10","0.09408004319733494408","36","middle30","327143","4","top10","0.74850136364468361613","9","top10","35677","5","top10","0.08162877747881317153","30","middle30","65814","14","middle30","0.1505820657844160123","37","middle30","2443","19","middle30","0.00558957040616477221","31","middle30" +"46","237744","13","middle30","3","5639857.54","33","middle30","3","17738175","17","middle30","3","15808691.49","13","middle30","3","74.6104002624672","42","bottom10","2","0.356756758999792","43","bottom10","2","0.737051791610167","8","top10","13","69653","30","middle30","0.29297479641967830944","37","middle30","0.59941106734483154232","46","bottom10","26149","12","middle30","0.10998805437781815735","18","middle30","176039","11","middle30","0.74045612086950669628","11","middle30","21096","12","middle30","0.08873410054512416717","16","middle30","34590","30","middle30","0.14549263072885120129","41","bottom10","1109","31","middle30","0.00466468133790968437","32","middle30" +"48","161512","35","middle30","2","3834153.67999999","43","bottom10","2","11852865","40","middle30","2","10558535.63","34","middle30","2","73.3869000445787","46","bottom10","1","0.363133091023153","42","bottom10","2","0.733604082085199","9","top10","13","61338","33","middle30","0.37977363911040665709","28","middle30","0.61247527056906784592","37","middle30","17186","27","middle30","0.10640695428203477141","22","middle30","120951","23","middle30","0.74886695725395017089","8","top10","13112","27","middle30","0.08118282232899103472","31","middle30","23698","41","bottom10","0.14672593986824508396","39","middle30","736","35","middle30","0.00455693694586160781","33","middle30" +"13","82355","46","bottom10","1","3964726.62","42","bottom10","2","7387005","46","bottom10","1","5982541.72000001","44","bottom10","1","89.6971040009714","17","middle30","9","0.66271608382532","25","middle30","4","0.601425588967273","26","middle30","9","28762","48","bottom10","0.3492441260397061502","32","middle30","0.61270545264805635273","36","middle30","7666","46","bottom10","0.09308481573674943841","37","middle30","53050","43","bottom10","0.64416246736688725639","29","middle30","5802","45","bottom10","0.07045109586546050634","40","middle30","15595","46","bottom10","0.18936312306478052334","28","middle30","365","45","bottom10","0.00443203205634144861","34","middle30" +"2","454049","3","top10","6","8465230.24000002","26","middle30","4","32954155","4","top10","6","30224978.07","3","top10","6","72.5784111406478","47","bottom10","1","0.280073991133917","46","bottom10","1","0.781204842006186","5","top10","14","98498","14","middle30","0.21693253371332168995","44","bottom10","0.62189485236698254575","29","middle30","47381","4","top10","0.10435217344383535698","28","middle30","345898","3","top10","0.76180764631130120317","6","top10","40419","3","top10","0.08901902658083158426","15","middle30","55052","19","middle30","0.12124682578312032402","46","bottom10","1825","22","middle30","0.00401938997773368073","35","middle30" +"30","164963","33","middle30","2","6436175.2","31","middle30","3","13571685","35","middle30","2","11685772.22","23","middle30","2","82.2710850311888","26","middle30","5","0.550770208320901","30","middle30","3","0.644840863355733","21","middle30","10","51215","36","middle30","0.3104635584949352279","35","middle30","0.61958146487294469357","30","middle30","13380","35","middle30","0.08110909719149142535","42","bottom10","114947","24","middle30","0.69680473803216478847","20","middle30","10037","35","middle30","0.06084394682443941975","43","bottom10","31267","32","middle30","0.18953947248776998478","27","middle30","663","38","middle30","0.00401908306711201906","36","middle30" +"1","413658","5","top10","6","8675790.96","25","middle30","5","29805325","6","top10","5","27938207.77","5","top10","6","72.0530607409986","48","bottom10","1","0.310534986045743","45","bottom10","1","0.763047160623529","6","top10","13","72173","29","middle30","0.17447504943697450551","47","bottom10","0.60369048946370832869","43","bottom10","35876","7","top10","0.08672865023763592146","40","middle30","323136","5","top10","0.78116705104216526696","4","top10","26878","9","top10","0.06497638145521179332","41","bottom10","55718","18","middle30","0.13469581151579323983","44","bottom10","1571","25","middle30","0.00379782332264817796","37","middle30" +"41","46107","50","bottom10","1","1434324.92","50","bottom10","1","3950795","50","bottom10","1","3337325.07","50","bottom10","1","85.6875311774785","20","middle30","7","0.429782802069084","38","middle30","2","0.699406929886741","13","middle30","11","18986","50","bottom10","0.41178129134404754159","23","middle30","0.609986728599867286","38","middle30","6028","50","bottom10","0.13073936712429782896","1","top10","33403","50","bottom10","0.724467000672349101","13","middle30","4553","49","bottom10","0.09874856312490511202","4","top10","6777","50","bottom10","0.14698418895178606285","38","middle30","167","50","bottom10","0.00362200967315158219","38","middle30" +"35","208244","18","middle30","3","7173577.39000003","29","middle30","4","16320615","23","middle30","3","14387005.13","16","middle30","3","78.372558152936","36","middle30","4","0.498615057489732","31","middle30","3","0.667282765512218","20","middle30","11","50937","38","middle30","0.24460248554580203991","42","bottom10","0.61541180629197596324","32","middle30","16974","28","middle30","0.08151015155298592036","41","bottom10","150265","15","middle30","0.72158141411037052688","14","middle30","12675","28","middle30","0.06086609938341560861","42","bottom10","38749","26","middle30","0.18607498895526401721","30","middle30","723","36","middle30","0.00347188874589423945","39","middle30" +"45","102368","43","bottom10","1","3185797.88999999","47","bottom10","1","8292415","44","bottom10","1","7107147.75000001","41","bottom10","1","81.0059295873711","31","middle30","5","0.448252660851181","36","middle30","3","0.690487252004958","15","middle30","11","28881","47","bottom10","0.28212918099406064395","39","middle30","0.61410788381742738589","34","middle30","11568","37","middle30","0.11300406376992810253","13","middle30","73178","36","middle30","0.71485229759299781182","15","middle30","8865","36","middle30","0.0865993279149734292","22","middle30","15769","45","bottom10","0.15404227883713660519","36","middle30","334","47","bottom10","0.00326273835573616755","40","middle30" +"14","162992","34","middle30","2","8691724.19000002","24","middle30","5","14437970","31","middle30","2","10894734.93","31","middle30","2","88.5808505938942","19","middle30","8","0.7977912492452","19","middle30","5","0.556238106298409","32","middle30","7","63991","31","middle30","0.39260209090016687936","26","middle30","0.64538375973303670745","18","middle30","8990","43","bottom10","0.05515608128006282517","49","bottom10","98127","28","middle30","0.60203568273289486601","34","middle30","7020","43","bottom10","0.04306959850790222833","49","bottom10","30603","33","middle30","0.18775768135859428684","29","middle30","523","41","bottom10","0.00320874644154314322","41","bottom10" +"33","181450","25","middle30","2","5204523.62","37","middle30","3","13985490","34","middle30","2","12661446.1","21","middle30","2","77.0762744557729","39","middle30","3","0.411052859120096","39","middle30","2","0.708690672738922","12","middle30","12","51208","37","middle30","0.28221548635987875448","38","middle30","0.58143199725933538883","50","bottom10","14595","32","middle30","0.08043538164783686966","43","bottom10","135389","20","middle30","0.74615045467070818407","10","top10","10426","33","middle30","0.0574593551942683935","45","bottom10","28592","35","middle30","0.15757508955635161201","34","middle30","570","40","middle30","0.00314136125654450262","42","bottom10" +"39","103665","42","bottom10","1","3414796.91","45","bottom10","2","8459935","43","bottom10","1","7036085.46000001","43","bottom10","1","81.6084020643419","30","middle30","5","0.48532624133306","34","middle30","3","0.673252765737522","17","middle30","11","34306","44","bottom10","0.33093136545603627068","33","middle30","0.60763500931098696462","40","middle30","10740","39","middle30","0.10360295181594559398","31","middle30","71558","38","middle30","0.69028119423141851155","21","middle30","7826","41","bottom10","0.07549317513143298124","35","middle30","15148","47","bottom10","0.14612453576424058265","40","middle30","314","48","bottom10","0.00302898760430231997","43","bottom10" +"38","69469","47","bottom10","1","2470121.94","49","bottom10","1","5857440","48","bottom10","1","5036736.08","47","bottom10","1","84.3173213951547","24","middle30","6","0.490421157822507","33","middle30","3","0.670951291016957","18","middle30","11","27945","49","bottom10","0.40226575882767853287","24","middle30","0.60839547086440209887","39","middle30","7242","48","bottom10","0.10424793792914825318","29","middle30","49067","44","bottom10","0.70631504699938101887","17","middle30","5635","47","bottom10","0.08111531762368826383","32","middle30","11650","49","bottom10","0.16770070103211504412","32","middle30","199","49","bottom10","0.00286458708200780204","44","bottom10" +"23","146006","37","middle30","2","5586622.55","34","middle30","3","11946210","39","middle30","2","9583013.55000002","36","middle30","2","81.8199936988891","28","middle30","5","0.58297137125513","28","middle30","4","0.631723364148465","23","middle30","9","83538","22","middle30","0.57215456899031546649","15","middle30","0.70594087549744172825","1","top10","14072","33","middle30","0.09637960083832171281","34","middle30","97331","29","middle30","0.66662328945385806063","24","middle30","12135","30","middle30","0.08311302275248962371","28","middle30","20399","44","bottom10","0.13971343643411914579","43","bottom10","415","43","bottom10","0.00284234894456392203","45","bottom10" +"40","207870","19","middle30","3","4554063.33","41","bottom10","2","15469085","25","middle30","3","13789698.47","17","middle30","3","74.4171116563237","43","bottom10","2","0.330251117521353","44","bottom10","2","0.751737763515879","7","top10","13","88597","18","middle30","0.42621349882137874633","21","middle30","0.63239396757368697691","23","middle30","24733","14","middle30","0.1189830182325491894","8","top10","156192","14","middle30","0.75139269735892625198","7","top10","18961","14","middle30","0.09121566363592630009","13","middle30","25987","37","middle30","0.12501563477173233271","45","bottom10","509","42","bottom10","0.00244864578823303026","46","bottom10" +"44","499520","2","top10","7","7544536.56000002","28","middle30","4","35690120","2","top10","6","32453904.9399999","2","top10","7","71.4488308776425","50","bottom10","1","0.232469299886969","48","bottom10","1","0.811379236863516","3","top10","15","76112","25","middle30","0.15237027546444586803","50","bottom10","0.61321705355343434528","35","middle30","54581","2","top10","0.10926689622037155669","19","middle30","382132","2","top10","0.76499839846252402306","5","top10","54015","2","top10","0.10813380845611787316","1","top10","50010","21","middle30","0.10011611146700832799","48","bottom10","1079","32","middle30","0.00216007367072389494","47","bottom10" +"43","374662","7","top10","5","5201360.37","38","middle30","3","27597355","8","top10","5","25629328.3699999","7","top10","5","73.6593382835729","45","bottom10","2","0.202945636924625","49","bottom10","1","0.831292761123052","2","top10","15","73588","28","middle30","0.19641169907810239629","45","bottom10","0.60094297154500438316","45","bottom10","42207","5","top10","0.11265353838926819373","14","middle30","297527","6","top10","0.79412110115250545825","2","top10","32104","6","top10","0.08568790002722453838","25","middle30","33182","31","middle30","0.08856516006427126317","50","bottom10","683","37","middle30","0.00182297644276708073","48","bottom10" +"32","219654","15","middle30","3","3752677.43999999","44","bottom10","2","16665080","22","middle30","3","15583958.69","14","middle30","3","75.8696859606472","41","bottom10","3","0.24080386214114","47","bottom10","1","0.805929148442843","4","top10","15","49655","40","middle30","0.2260600763018201353","43","bottom10","0.58824083670969565627","49","bottom10","21226","17","middle30","0.09663379678949620767","33","middle30","171993","12","middle30","0.78301783714387172553","3","top10","19465","13","middle30","0.08861664253780946398","18","middle30","23967","39","middle30","0.10911251331639760715","47","bottom10","377","44","bottom10","0.0017163356915876788","49","bottom10" +"47","243828","12","middle30","3","3339098.22","46","bottom10","2","17463555","18","middle30","3","16748067.73","11","middle30","3","71.6224346670604","49","bottom10","1","0.199372146914526","50","bottom10","1","0.833769570664597","1","top10","16","40609","43","bottom10","0.16654773036730810243","48","bottom10","0.59754847863786851647","47","bottom10","25372","13","middle30","0.10405695818363764621","30","middle30","198879","9","top10","0.81565283724592745706","1","top10","18572","15","middle30","0.07616844660990534311","34","middle30","23965","40","middle30","0.09828649703889627114","49","bottom10","344","46","bottom10","0.00141083058549469298","50","bottom10" diff --git a/sql/exports/parking_geo.sql b/sql/exports/parking_geo.sql index 68454aa..53425be 100644 --- a/sql/exports/parking_geo.sql +++ b/sql/exports/parking_geo.sql @@ -12,5 +12,6 @@ from parking p join geocodes g on p.address = g.address -full join blocks b on - g.geocoded_address = b.address +join blocks b on + g.geocoded_address = b.address +where b.ward is not null diff --git a/sql/exports/parking_geo_ward7.sql b/sql/exports/parking_geo_ward7.sql new file mode 100644 index 0000000..50007bf --- /dev/null +++ b/sql/exports/parking_geo_ward7.sql @@ -0,0 +1,17 @@ +select + p.*, + b.ward, + g.geocode_accuracy, + g.geocode_accuracy_type, + g.geocoded_address, + g.geocoded_lng, + g.geocoded_lat, + g.geocoded_city, + g.geocoded_state +from parking p +join + geocodes g on + p.address = g.address +join blocks b on + g.geocoded_address = b.address +where b.ward = '7' diff --git a/sql/tables/acs_17_5yr_b03002.sql b/sql/tables/acs_17_5yr_b03002.sql index b67e0b7..118c558 100644 --- a/sql/tables/acs_17_5yr_b03002.sql +++ b/sql/tables/acs_17_5yr_b03002.sql @@ -1,4 +1,4 @@ -create table if not exists public.acs_16_5yr_b03002 ( +create table if not exists public.acs_17_5yr_b03002 ( id character varying, geoid character varying, geography character varying, diff --git a/sql/tables/wardmeta.sql b/sql/tables/wardmeta.sql index ed4a21a..87bd6ab 100644 --- a/sql/tables/wardmeta.sql +++ b/sql/tables/wardmeta.sql @@ -6,13 +6,5 @@ create table public.wardmeta ( state character varying, zipcode character varying(5), ward_phone character varying(14), - ward_fax character varying(14), - email character varying, - website character varying, - location character varying, - city_hall_address character varying, - city_hall_city character varying, - city_hall_state character varying, - city_hall_zipcode character varying, - city_hall_phone character varying(14) + email character varying ); diff --git a/sql/views/blocks.sql b/sql/views/blocks.sql index a760e93..4968006 100644 --- a/sql/views/blocks.sql +++ b/sql/views/blocks.sql @@ -23,6 +23,7 @@ create table if not exists blocks as g.geocode_accuracy_type = 'intersection' or g.geocode_accuracy_type = 'point' ) + order by geocoded_address, geocode_accuracy desc ; alter table blocks diff --git a/sql/views/geoblocks.sql b/sql/views/geoblocks.sql new file mode 100644 index 0000000..156a55e --- /dev/null +++ b/sql/views/geoblocks.sql @@ -0,0 +1,16 @@ +create table if not exists geoblocks as + select + b.geom, + b.ward, + b.address, + t.ticket_count, + t.total_payments, + t.current_amount_due, + t.fine_level1_amount + from + blockstotals t + join + blocks b + on b.address = t.address +; + diff --git a/sql/views/parking_geo.sql b/sql/views/parking_geo.sql index c53f5da..609731e 100644 --- a/sql/views/parking_geo.sql +++ b/sql/views/parking_geo.sql @@ -2,11 +2,19 @@ create table parking_geo as select p.*, - g.geocoded_address, - b.ward + b.ward, + g.geocode_accuracy, + g.geocode_accuracy_type, + g.geocoded_address, + g.geocoded_lng, + g.geocoded_lat, + g.geocoded_city, + g.geocoded_state from parking p join geocodes g on p.address = g.address -full join blocks b on - g.geocoded_address = b.address; +join blocks b on + g.geocoded_address = b.address +where b.ward is not null +; diff --git a/sql/views/wards.sql b/sql/views/wards.sql index 4bd0431..2c328d4 100644 --- a/sql/views/wards.sql +++ b/sql/views/wards.sql @@ -5,9 +5,9 @@ create table if not exists wards as shape_area, shape_leng, wkb_geometry, - st_asgeojson(st_extent(wkb_geometry))::jsonb as extent, - st_asgeojson(st_centroid(wkb_geometry))::jsonb as centroid, - st_asgeojson(wkb_geometry)::jsonb as geojson_geometry + st_asgeojson(st_setsrid(st_extent(wkb_geometry), 3857))::jsonb as extent, + st_asgeojson(st_setsrid(st_centroid(wkb_geometry), 3857))::jsonb as centroid, + st_asgeojson(st_setsrid(wkb_geometry, 3857))::jsonb as geojson_geometry from wards2015 group by (ogc_fid, ward, shape_area, shape_leng) ; diff --git a/sql/views/wardstop5violations5yr.sql b/sql/views/wardstop5violations5yr.sql new file mode 100644 index 0000000..a34de65 --- /dev/null +++ b/sql/views/wardstop5violations5yr.sql @@ -0,0 +1,18 @@ +create table if not exists wardstop5violations5yr as + +WITH ranked AS ( + SELECT + w.*, + RANK () OVER ( PARTITION BY ward ORDER BY ticket_count DESC ) + FROM + wardsviolations5yr w + ) SELECT + * +FROM + ranked +WHERE + RANK < 6 +ORDER BY + ward + +; diff --git a/sql/views/wardstotals.sql b/sql/views/wardstotals.sql index f48c3a1..c23db4d 100644 --- a/sql/views/wardstotals.sql +++ b/sql/views/wardstotals.sql @@ -203,152 +203,324 @@ create table if not exists wardstotals as min(bankruptcy_ticket_count_pct) as min_bankruptcy_ticket_count_pct, max(bankruptcy_ticket_count_pct) as max_bankruptcy_ticket_count_pct from wards_summary - ) + ), + wardsranked as ( + select + ward, - select - ward, + ticket_count, + dense_rank() over (order by ticket_count desc) as ticket_count_rank, - ticket_count, - dense_rank() over (order by ticket_count desc) as ticket_count_rank, + width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) as ticket_count_bucket, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) - 1) as ticket_count_bucket_min, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins)) as ticket_count_bucket_max, - width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) as ticket_count_bucket, - min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) - 1) as ticket_count_bucket_min, - min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins)) as ticket_count_bucket_max, + current_amount_due, + dense_rank() over (order by current_amount_due desc) as current_amount_due_rank, - current_amount_due, - dense_rank() over (order by current_amount_due desc) as current_amount_due_rank, + width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) as current_amount_due_bucket, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) - 1) as current_amount_due_bucket_min, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins)) as current_amount_due_bucket_max, - width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) as current_amount_due_bucket, - min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) - 1) as current_amount_due_bucket_min, - min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins)) as current_amount_due_bucket_max, + total_payments, + dense_rank() over (order by total_payments desc) as total_payments_rank, - total_payments, - dense_rank() over (order by total_payments desc) as total_payments_rank, + width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) as total_payments_bucket, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) - 1) as total_payments_bucket_min, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins)) as total_payments_bucket_max, - width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) as total_payments_bucket, - min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) - 1) as total_payments_bucket_min, - min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins)) as total_payments_bucket_max, + fine_level1_amount, + dense_rank() over (order by fine_level1_amount desc) as fine_level1_amount_rank, - fine_level1_amount, - dense_rank() over (order by fine_level1_amount desc) as fine_level1_amount_rank, + width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) as fine_level1_amount_bucket, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) - 1) as fine_level1_amount_bucket_min, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins)) as fine_level1_amount_bucket_max, - width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) as fine_level1_amount_bucket, - min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) - 1) as fine_level1_amount_bucket_min, - min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins)) as fine_level1_amount_bucket_max, + avg_per_ticket, + dense_rank() over (order by avg_per_ticket desc) as avg_per_ticket_rank, - avg_per_ticket, - dense_rank() over (order by avg_per_ticket desc) as avg_per_ticket_rank, + width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) as avg_per_ticket_bucket, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) - 1) as avg_per_ticket_bucket_min, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins)) as avg_per_ticket_bucket_max, - width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) as avg_per_ticket_bucket, - min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) - 1) as avg_per_ticket_bucket_min, - min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins)) as avg_per_ticket_bucket_max, + debt_to_payment_ratio, + dense_rank() over (order by debt_to_payment_ratio desc) as debt_to_payment_ratio_rank, - debt_to_payment_ratio, - dense_rank() over (order by debt_to_payment_ratio desc) as debt_to_payment_ratio_rank, + width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) as debt_to_payment_ratio_bucket, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, - width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) as debt_to_payment_ratio_bucket, - min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, - min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, + paid_pct, + dense_rank() over (order by paid_pct desc) as paid_pct_rank, - paid_pct, - dense_rank() over (order by paid_pct desc) as paid_pct_rank, + width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) as paid_pct_bucket, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) - 1) as paid_pct_bucket_min, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins)) as paid_pct_bucket_max, - width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) as paid_pct_bucket, - min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) - 1) as paid_pct_bucket_min, - min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins)) as paid_pct_bucket_max, + police_ticket_count, + dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, - police_ticket_count, - dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, + width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) as police_ticket_count_bucket, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) - 1) as police_ticket_count_bucket_min, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins)) as police_ticket_count_bucket_max, - width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) as police_ticket_count_bucket, - min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) - 1) as police_ticket_count_bucket_min, - min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins)) as police_ticket_count_bucket_max, + police_ticket_count_pct, + dense_rank() over (order by police_ticket_count_pct desc) as police_ticket_count_pct_rank, - police_ticket_count_pct, - dense_rank() over (order by police_ticket_count_pct desc) as police_ticket_count_pct_rank, + width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) as police_ticket_count_pct_bucket, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) - 1) as police_ticket_count_pct_bucket_min, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins)) as police_ticket_count_pct_bucket_max, - width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) as police_ticket_count_pct_bucket, - min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) - 1) as police_ticket_count_pct_bucket_min, - min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins)) as police_ticket_count_pct_bucket_max, + contested_ticket_count, + dense_rank() over (order by contested_ticket_count desc) as contested_ticket_count_rank, - contested_ticket_count, - dense_rank() over (order by contested_ticket_count desc) as contested_ticket_count_rank, + width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) as contested_ticket_count_bucket, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) - 1) as contested_ticket_count_bucket_min, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins)) as contested_ticket_count_bucket_max, - width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) as contested_ticket_count_bucket, - min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) - 1) as contested_ticket_count_bucket_min, - min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins)) as contested_ticket_count_bucket_max, + contested_ticket_count_pct, + dense_rank() over (order by contested_ticket_count_pct desc) as contested_ticket_count_pct_rank, - contested_ticket_count_pct, - dense_rank() over (order by contested_ticket_count_pct desc) as contested_ticket_count_pct_rank, + width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) as contested_ticket_count_pct_bucket, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, - width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) as contested_ticket_count_pct_bucket, - min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, - min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, + contested_and_notliable_pct, + dense_rank() over (order by contested_and_notliable_pct desc) as contested_and_notliable_pct_rank, - contested_and_notliable_pct, - dense_rank() over (order by contested_and_notliable_pct desc) as contested_and_notliable_pct_rank, + width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) as contested_and_notliable_pct_bucket, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) - 1) as contested_and_notliable_pct_bucket_min, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins)) as contested_and_notliable_pct_bucket_max, - width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) as contested_and_notliable_pct_bucket, - min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) - 1) as contested_and_notliable_pct_bucket_min, - min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins)) as contested_and_notliable_pct_bucket_max, + paid_ticket_count, + dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, - paid_ticket_count, - dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, + width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) as paid_ticket_count_bucket, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) - 1) as paid_ticket_count_bucket_min, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins)) as paid_ticket_count_bucket_max, - width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) as paid_ticket_count_bucket, - min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) - 1) as paid_ticket_count_bucket_min, - min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins)) as paid_ticket_count_bucket_max, + paid_ticket_count_pct, + dense_rank() over (order by paid_ticket_count_pct desc) as paid_ticket_count_pct_rank, - paid_ticket_count_pct, - dense_rank() over (order by paid_ticket_count_pct desc) as paid_ticket_count_pct_rank, + width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) as paid_ticket_count_pct_bucket, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) - 1) as paid_ticket_count_pct_bucket_min, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins)) as paid_ticket_count_pct_bucket_max, - width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) as paid_ticket_count_pct_bucket, - min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) - 1) as paid_ticket_count_pct_bucket_min, - min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins)) as paid_ticket_count_pct_bucket_max, + dismissed_ticket_count, + dense_rank() over (order by dismissed_ticket_count desc) as dismissed_ticket_count_rank, - dismissed_ticket_count, - dense_rank() over (order by dismissed_ticket_count desc) as dismissed_ticket_count_rank, + width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) as dismissed_ticket_count_bucket, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) - 1) as dismissed_ticket_count_bucket_min, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins)) as dismissed_ticket_count_bucket_max, - width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) as dismissed_ticket_count_bucket, - min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) - 1) as dismissed_ticket_count_bucket_min, - min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins)) as dismissed_ticket_count_bucket_max, + dismissed_ticket_count_pct, + dense_rank() over (order by dismissed_ticket_count_pct desc) as dismissed_ticket_count_pct_rank, - dismissed_ticket_count_pct, - dense_rank() over (order by dismissed_ticket_count_pct desc) as dismissed_ticket_count_pct_rank, + width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) as dismissed_ticket_count_pct_bucket, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) - 1) as dismissed_ticket_count_pct_bucket_min, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins)) as dismissed_ticket_count_pct_bucket_max, - width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) as dismissed_ticket_count_pct_bucket, - min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) - 1) as dismissed_ticket_count_pct_bucket_min, - min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins)) as dismissed_ticket_count_pct_bucket_max, + seized_or_suspended_ticket_count, + dense_rank() over (order by seized_or_suspended_ticket_count desc) as seized_or_suspended_ticket_count_rank, - seized_or_suspended_ticket_count, - dense_rank() over (order by seized_or_suspended_ticket_count desc) as seized_or_suspended_ticket_count_rank, + width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) as seized_or_suspended_ticket_count_bucket, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) - 1) as seized_or_suspended_ticket_count_bucket_min, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins)) as seized_or_suspended_ticket_count_bucket_max, - width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) as seized_or_suspended_ticket_count_bucket, - min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) - 1) as seized_or_suspended_ticket_count_bucket_min, - min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins)) as seized_or_suspended_ticket_count_bucket_max, + seized_or_suspended_ticket_count_pct, + dense_rank() over (order by seized_or_suspended_ticket_count_pct desc) as seized_or_suspended_ticket_count_pct_rank, - seized_or_suspended_ticket_count_pct, - dense_rank() over (order by seized_or_suspended_ticket_count_pct desc) as seized_or_suspended_ticket_count_pct_rank, + width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) as seized_or_suspended_ticket_count_pct_bucket, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) - 1) as seized_or_suspended_ticket_count_pct_bucket_min, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins)) as seized_or_suspended_ticket_count_pct_bucket_max, - width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) as seized_or_suspended_ticket_count_pct_bucket, - min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) - 1) as seized_or_suspended_ticket_count_pct_bucket_min, - min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins)) as seized_or_suspended_ticket_count_pct_bucket_max, + bankruptcy_ticket_count, + dense_rank() over (order by bankruptcy_ticket_count desc) as bankruptcy_ticket_count_rank, - bankruptcy_ticket_count, - dense_rank() over (order by bankruptcy_ticket_count desc) as bankruptcy_ticket_count_rank, + width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) as bankruptcy_ticket_count_bucket, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) - 1) as bankruptcy_ticket_count_bucket_min, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins)) as bankruptcy_ticket_count_bucket_max, - width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) as bankruptcy_ticket_count_bucket, - min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) - 1) as bankruptcy_ticket_count_bucket_min, - min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins)) as bankruptcy_ticket_count_bucket_max, + bankruptcy_ticket_count_pct, + dense_rank() over (order by bankruptcy_ticket_count_pct desc) as bankruptcy_ticket_count_pct_rank, - bankruptcy_ticket_count_pct, - dense_rank() over (order by bankruptcy_ticket_count_pct desc) as bankruptcy_ticket_count_pct_rank, + width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) as bankruptcy_ticket_count_pct_bucket, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) - 1) as bankruptcy_ticket_count_pct_bucket_min, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins)) as bankruptcy_ticket_count_pct_bucket_max - width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) as bankruptcy_ticket_count_pct_bucket, - min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) - 1) as bankruptcy_ticket_count_pct_bucket_min, - min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins)) as bankruptcy_ticket_count_pct_bucket_max + from wards_summary, wards_stats, num_bins + ) - from wards_summary, wards_stats, num_bins + select + ward, + ticket_count, + ticket_count_rank, + case + when (ticket_count_rank <= 10) then 'top10' + when (ticket_count_rank >= 11 + and ticket_count_rank <= 40) then 'middle30' + when (ticket_count_rank >= 40) then 'bottom10' + end as ticket_count_rank_type, + ticket_count_bucket, + current_amount_due, + current_amount_due_rank, + case + when (current_amount_due_rank <= 10) then 'top10' + when (current_amount_due_rank >= 11 + and current_amount_due_rank <= 40) then 'middle30' + when (current_amount_due_rank >= 40) then 'bottom10' + end as current_amount_due_rank_type, + current_amount_due_bucket, + fine_level1_amount, + fine_level1_amount_rank, + case + when (fine_level1_amount_rank <= 10) then 'top10' + when (fine_level1_amount_rank >= 11 + and fine_level1_amount_rank <= 40) then 'middle30' + when (fine_level1_amount_rank >= 40) then 'bottom10' + end as fine_level1_amount_rank_type, + fine_level1_amount_bucket, + total_payments, + total_payments_rank, + case + when (total_payments_rank <= 10) then 'top10' + when (total_payments_rank >= 11 + and total_payments_rank <= 40) then 'middle30' + when (total_payments_rank >= 40) then 'bottom10' + end as total_payments_rank_type, + total_payments_bucket, + avg_per_ticket, + avg_per_ticket_rank, + case + when (avg_per_ticket_rank <= 10) then 'top10' + when (avg_per_ticket_rank >= 11 + and avg_per_ticket_rank <= 40) then 'middle30' + when (avg_per_ticket_rank >= 40) then 'bottom10' + end as avg_per_ticket_rank_type, + avg_per_ticket_bucket, + debt_to_payment_ratio, + debt_to_payment_ratio_rank, + case + when (debt_to_payment_ratio_rank <= 10) then 'top10' + when (debt_to_payment_ratio_rank >= 11 + and debt_to_payment_ratio_rank <= 40) then 'middle30' + when (debt_to_payment_ratio_rank >= 40) then 'bottom10' + end as debt_to_payment_ratio_rank_type, + debt_to_payment_ratio_bucket, + paid_pct, + paid_pct_rank, + case + when (paid_pct_rank <= 10) then 'top10' + when (paid_pct_rank >= 11 + and paid_pct_rank <= 40) then 'middle30' + when (paid_pct_rank >= 40) then 'bottom10' + end as paid_pct_rank_type, + paid_pct_bucket, + police_ticket_count, + police_ticket_count_rank, + case + when (police_ticket_count_rank <= 10) then 'top10' + when (police_ticket_count_rank >= 11 + and police_ticket_count_rank <= 40) then 'middle30' + when (police_ticket_count_rank >= 40) then 'bottom10' + end as police_ticket_count_rank_type, + police_ticket_count_pct, + police_ticket_count_pct_rank, + case + when (police_ticket_count_pct_rank <= 10) then 'top10' + when (police_ticket_count_pct_rank >= 11 + and police_ticket_count_pct_rank <= 40) then 'middle30' + when (police_ticket_count_pct_rank >= 40) then 'bottom10' + end as police_ticket_count_pct_rank_type, + contested_and_notliable_pct, + contested_and_notliable_pct_rank, + case + when (contested_and_notliable_pct_rank <= 10) then 'top10' + when (contested_and_notliable_pct_rank >= 11 + and contested_and_notliable_pct_rank <= 40) then 'middle30' + when (contested_and_notliable_pct_rank >= 40) then 'bottom10' + end as contested_and_notliable_pct_rank_type, + contested_ticket_count, + contested_ticket_count_rank, + case + when (contested_ticket_count_rank <= 10) then 'top10' + when (contested_ticket_count_rank >= 11 + and contested_ticket_count_rank <= 40) then 'middle30' + when (contested_ticket_count_rank >= 40) then 'bottom10' + end as contested_ticket_count_rank_type, + contested_ticket_count_pct, + contested_ticket_count_pct_rank, + case + when (contested_ticket_count_pct_rank <= 10) then 'top10' + when (contested_ticket_count_pct_rank >= 11 + and contested_ticket_count_pct_rank <= 40) then 'middle30' + when (contested_ticket_count_pct_rank >= 40) then 'bottom10' + end as contested_ticket_count_pct_rank_type, + paid_ticket_count, + paid_ticket_count_rank, + case + when (paid_ticket_count_rank <= 10) then 'top10' + when (paid_ticket_count_rank >= 11 + and paid_ticket_count_rank <= 40) then 'middle30' + when (paid_ticket_count_rank >= 40) then 'bottom10' + end as paid_ticket_count_rank_type, + paid_ticket_count_pct, + paid_ticket_count_pct_rank, + case + when (paid_ticket_count_pct_rank <= 10) then 'top10' + when (paid_ticket_count_pct_rank >= 11 + and paid_ticket_count_pct_rank <= 40) then 'middle30' + when (paid_ticket_count_pct_rank >= 40) then 'bottom10' + end as paid_ticket_count_pct_rank_type, + dismissed_ticket_count, + dismissed_ticket_count_rank, + case + when (dismissed_ticket_count_rank <= 10) then 'top10' + when (dismissed_ticket_count_rank >= 11 + and dismissed_ticket_count_rank <= 40) then 'middle30' + when (dismissed_ticket_count_rank >= 40) then 'bottom10' + end as dismissed_ticket_count_rank_type, + dismissed_ticket_count_pct, + dismissed_ticket_count_pct_rank, + case + when (dismissed_ticket_count_pct_rank <= 10) then 'top10' + when (dismissed_ticket_count_pct_rank >= 11 + and dismissed_ticket_count_pct_rank <= 40) then 'middle30' + when (dismissed_ticket_count_pct_rank >= 40) then 'bottom10' + end as dismissed_ticket_count_pct_rank_type, + seized_or_suspended_ticket_count, + seized_or_suspended_ticket_count_rank, + case + when (seized_or_suspended_ticket_count_rank <= 10) then 'top10' + when (seized_or_suspended_ticket_count_rank >= 11 + and seized_or_suspended_ticket_count_rank <= 40) then 'middle30' + when (seized_or_suspended_ticket_count_rank >= 40) then 'bottom10' + end as seized_or_suspended_ticket_count_rank_type, + seized_or_suspended_ticket_count_pct, + seized_or_suspended_ticket_count_pct_rank, + case + when (seized_or_suspended_ticket_count_pct_rank <= 10) then 'top10' + when (seized_or_suspended_ticket_count_pct_rank >= 11 + and seized_or_suspended_ticket_count_pct_rank <= 40) then 'middle30' + when (seized_or_suspended_ticket_count_pct_rank >= 40) then 'bottom10' + end as seized_or_suspended_ticket_count_pct_rank_type, + bankruptcy_ticket_count, + bankruptcy_ticket_count_rank, + case + when (bankruptcy_ticket_count_rank <= 10) then 'top10' + when (bankruptcy_ticket_count_rank >= 11 + and bankruptcy_ticket_count_rank <= 40) then 'middle30' + when (bankruptcy_ticket_count_rank >= 40) then 'bottom10' + end as bankruptcy_ticket_count_rank_type, + bankruptcy_ticket_count_pct, + bankruptcy_ticket_count_pct_rank, + case + when (bankruptcy_ticket_count_pct_rank <= 10) then 'top10' + when (bankruptcy_ticket_count_pct_rank >= 11 + and bankruptcy_ticket_count_pct_rank <= 40) then 'middle30' + when (bankruptcy_ticket_count_pct_rank >= 40) then 'bottom10' + end as bankruptcy_ticket_count_pct_rank_type + + from wardsranked ; - diff --git a/sql/views/wardstotals5yr.sql b/sql/views/wardstotals5yr.sql index 707ddc2..617cb11 100644 --- a/sql/views/wardstotals5yr.sql +++ b/sql/views/wardstotals5yr.sql @@ -203,152 +203,323 @@ create table if not exists wardstotals5yr as min(bankruptcy_ticket_count_pct) as min_bankruptcy_ticket_count_pct, max(bankruptcy_ticket_count_pct) as max_bankruptcy_ticket_count_pct from wards_summary - ) + ), + wardsranked as ( + select + ward, - select - ward, + ticket_count, + dense_rank() over (order by ticket_count desc) as ticket_count_rank, - ticket_count, - dense_rank() over (order by ticket_count desc) as ticket_count_rank, + width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) as ticket_count_bucket, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) - 1) as ticket_count_bucket_min, + min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins)) as ticket_count_bucket_max, - width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) as ticket_count_bucket, - min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins) - 1) as ticket_count_bucket_min, - min_ticket_count + ((max_ticket_count - min_ticket_count) / num_bins) * (width_bucket(ticket_count, min_ticket_count, max_ticket_count, num_bins)) as ticket_count_bucket_max, + current_amount_due, + dense_rank() over (order by current_amount_due desc) as current_amount_due_rank, - current_amount_due, - dense_rank() over (order by current_amount_due desc) as current_amount_due_rank, + width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) as current_amount_due_bucket, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) - 1) as current_amount_due_bucket_min, + min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins)) as current_amount_due_bucket_max, - width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) as current_amount_due_bucket, - min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins) - 1) as current_amount_due_bucket_min, - min_current_amount_due + ((max_current_amount_due - min_current_amount_due) / num_bins) * (width_bucket(current_amount_due, min_current_amount_due, max_current_amount_due, num_bins)) as current_amount_due_bucket_max, + total_payments, + dense_rank() over (order by total_payments desc) as total_payments_rank, - total_payments, - dense_rank() over (order by total_payments desc) as total_payments_rank, + width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) as total_payments_bucket, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) - 1) as total_payments_bucket_min, + min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins)) as total_payments_bucket_max, - width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) as total_payments_bucket, - min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins) - 1) as total_payments_bucket_min, - min_total_payments + ((max_total_payments - min_total_payments) / num_bins) * (width_bucket(total_payments, min_total_payments, max_total_payments, num_bins)) as total_payments_bucket_max, + fine_level1_amount, + dense_rank() over (order by fine_level1_amount desc) as fine_level1_amount_rank, - fine_level1_amount, - dense_rank() over (order by fine_level1_amount desc) as fine_level1_amount_rank, + width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) as fine_level1_amount_bucket, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) - 1) as fine_level1_amount_bucket_min, + min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins)) as fine_level1_amount_bucket_max, - width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) as fine_level1_amount_bucket, - min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins) - 1) as fine_level1_amount_bucket_min, - min_fine_level1_amount + ((max_fine_level1_amount - min_fine_level1_amount) / num_bins) * (width_bucket(fine_level1_amount, min_fine_level1_amount, max_fine_level1_amount, num_bins)) as fine_level1_amount_bucket_max, + avg_per_ticket, + dense_rank() over (order by avg_per_ticket desc) as avg_per_ticket_rank, - avg_per_ticket, - dense_rank() over (order by avg_per_ticket desc) as avg_per_ticket_rank, + width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) as avg_per_ticket_bucket, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) - 1) as avg_per_ticket_bucket_min, + min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins)) as avg_per_ticket_bucket_max, - width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) as avg_per_ticket_bucket, - min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins) - 1) as avg_per_ticket_bucket_min, - min_avg_per_ticket + ((max_avg_per_ticket - min_avg_per_ticket) / num_bins) * (width_bucket(avg_per_ticket, min_avg_per_ticket, max_avg_per_ticket, num_bins)) as avg_per_ticket_bucket_max, + debt_to_payment_ratio, + dense_rank() over (order by debt_to_payment_ratio desc) as debt_to_payment_ratio_rank, - debt_to_payment_ratio, - dense_rank() over (order by debt_to_payment_ratio desc) as debt_to_payment_ratio_rank, + width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) as debt_to_payment_ratio_bucket, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, + min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, - width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) as debt_to_payment_ratio_bucket, - min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins) - 1) as debt_to_payment_ratio_bucket_min, - min_debt_to_payment_ratio + ((max_debt_to_payment_ratio - min_debt_to_payment_ratio) / num_bins) * (width_bucket(debt_to_payment_ratio, min_debt_to_payment_ratio, max_debt_to_payment_ratio, num_bins)) as debt_to_payment_ratio_bucket_max, + paid_pct, + dense_rank() over (order by paid_pct desc) as paid_pct_rank, - paid_pct, - dense_rank() over (order by paid_pct desc) as paid_pct_rank, + width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) as paid_pct_bucket, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) - 1) as paid_pct_bucket_min, + min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins)) as paid_pct_bucket_max, - width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) as paid_pct_bucket, - min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins) - 1) as paid_pct_bucket_min, - min_paid_pct + ((max_paid_pct - min_paid_pct) / num_bins) * (width_bucket(paid_pct, min_paid_pct, max_paid_pct, num_bins)) as paid_pct_bucket_max, + police_ticket_count, + dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, + width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) as police_ticket_count_bucket, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) - 1) as police_ticket_count_bucket_min, + min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins)) as police_ticket_count_bucket_max, - police_ticket_count, - dense_rank() over (order by police_ticket_count desc) as police_ticket_count_rank, + police_ticket_count_pct, + dense_rank() over (order by police_ticket_count_pct desc) as police_ticket_count_pct_rank, - width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) as police_ticket_count_bucket, - min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins) - 1) as police_ticket_count_bucket_min, - min_police_ticket_count + ((max_police_ticket_count - min_police_ticket_count) / num_bins) * (width_bucket(police_ticket_count, min_police_ticket_count, max_police_ticket_count, num_bins)) as police_ticket_count_bucket_max, + width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) as police_ticket_count_pct_bucket, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) - 1) as police_ticket_count_pct_bucket_min, + min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins)) as police_ticket_count_pct_bucket_max, - police_ticket_count_pct, - dense_rank() over (order by police_ticket_count_pct desc) as police_ticket_count_pct_rank, + contested_ticket_count, + dense_rank() over (order by contested_ticket_count desc) as contested_ticket_count_rank, - width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) as police_ticket_count_pct_bucket, - min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins) - 1) as police_ticket_count_pct_bucket_min, - min_police_ticket_count_pct + ((max_police_ticket_count_pct - min_police_ticket_count_pct) / num_bins) * (width_bucket(police_ticket_count_pct, min_police_ticket_count_pct, max_police_ticket_count_pct, num_bins)) as police_ticket_count_pct_bucket_max, + width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) as contested_ticket_count_bucket, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) - 1) as contested_ticket_count_bucket_min, + min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins)) as contested_ticket_count_bucket_max, - contested_ticket_count, - dense_rank() over (order by contested_ticket_count desc) as contested_ticket_count_rank, + contested_ticket_count_pct, + dense_rank() over (order by contested_ticket_count_pct desc) as contested_ticket_count_pct_rank, - width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) as contested_ticket_count_bucket, - min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins) - 1) as contested_ticket_count_bucket_min, - min_contested_ticket_count + ((max_contested_ticket_count - min_contested_ticket_count) / num_bins) * (width_bucket(contested_ticket_count, min_contested_ticket_count, max_contested_ticket_count, num_bins)) as contested_ticket_count_bucket_max, + width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) as contested_ticket_count_pct_bucket, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, + min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, - contested_ticket_count_pct, - dense_rank() over (order by contested_ticket_count_pct desc) as contested_ticket_count_pct_rank, + contested_and_notliable_pct, + dense_rank() over (order by contested_and_notliable_pct desc) as contested_and_notliable_pct_rank, - width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) as contested_ticket_count_pct_bucket, - min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins) - 1) as contested_ticket_count_pct_bucket_min, - min_contested_ticket_count_pct + ((max_contested_ticket_count_pct - min_contested_ticket_count_pct) / num_bins) * (width_bucket(contested_ticket_count_pct, min_contested_ticket_count_pct, max_contested_ticket_count_pct, num_bins)) as contested_ticket_count_pct_bucket_max, + width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) as contested_and_notliable_pct_bucket, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) - 1) as contested_and_notliable_pct_bucket_min, + min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins)) as contested_and_notliable_pct_bucket_max, - contested_and_notliable_pct, - dense_rank() over (order by contested_and_notliable_pct desc) as contested_and_notliable_pct_rank, + paid_ticket_count, + dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, - width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) as contested_and_notliable_pct_bucket, - min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins) - 1) as contested_and_notliable_pct_bucket_min, - min_contested_and_notliable_pct + ((max_contested_and_notliable_pct - min_contested_and_notliable_pct) / num_bins) * (width_bucket(contested_and_notliable_pct, min_contested_and_notliable_pct, max_contested_and_notliable_pct, num_bins)) as contested_and_notliable_pct_bucket_max, + width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) as paid_ticket_count_bucket, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) - 1) as paid_ticket_count_bucket_min, + min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins)) as paid_ticket_count_bucket_max, - paid_ticket_count, - dense_rank() over (order by paid_ticket_count desc) as paid_ticket_count_rank, + paid_ticket_count_pct, + dense_rank() over (order by paid_ticket_count_pct desc) as paid_ticket_count_pct_rank, - width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) as paid_ticket_count_bucket, - min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins) - 1) as paid_ticket_count_bucket_min, - min_paid_ticket_count + ((max_paid_ticket_count - min_paid_ticket_count) / num_bins) * (width_bucket(paid_ticket_count, min_paid_ticket_count, max_paid_ticket_count, num_bins)) as paid_ticket_count_bucket_max, + width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) as paid_ticket_count_pct_bucket, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) - 1) as paid_ticket_count_pct_bucket_min, + min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins)) as paid_ticket_count_pct_bucket_max, - paid_ticket_count_pct, - dense_rank() over (order by paid_ticket_count_pct desc) as paid_ticket_count_pct_rank, + dismissed_ticket_count, + dense_rank() over (order by dismissed_ticket_count desc) as dismissed_ticket_count_rank, - width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) as paid_ticket_count_pct_bucket, - min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins) - 1) as paid_ticket_count_pct_bucket_min, - min_paid_ticket_count_pct + ((max_paid_ticket_count_pct - min_paid_ticket_count_pct) / num_bins) * (width_bucket(paid_ticket_count_pct, min_paid_ticket_count_pct, max_paid_ticket_count_pct, num_bins)) as paid_ticket_count_pct_bucket_max, + width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) as dismissed_ticket_count_bucket, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) - 1) as dismissed_ticket_count_bucket_min, + min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins)) as dismissed_ticket_count_bucket_max, - dismissed_ticket_count, - dense_rank() over (order by dismissed_ticket_count desc) as dismissed_ticket_count_rank, + dismissed_ticket_count_pct, + dense_rank() over (order by dismissed_ticket_count_pct desc) as dismissed_ticket_count_pct_rank, - width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) as dismissed_ticket_count_bucket, - min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins) - 1) as dismissed_ticket_count_bucket_min, - min_dismissed_ticket_count + ((max_dismissed_ticket_count - min_dismissed_ticket_count) / num_bins) * (width_bucket(dismissed_ticket_count, min_dismissed_ticket_count, max_dismissed_ticket_count, num_bins)) as dismissed_ticket_count_bucket_max, + width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) as dismissed_ticket_count_pct_bucket, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) - 1) as dismissed_ticket_count_pct_bucket_min, + min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins)) as dismissed_ticket_count_pct_bucket_max, - dismissed_ticket_count_pct, - dense_rank() over (order by dismissed_ticket_count_pct desc) as dismissed_ticket_count_pct_rank, + seized_or_suspended_ticket_count, + dense_rank() over (order by seized_or_suspended_ticket_count desc) as seized_or_suspended_ticket_count_rank, - width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) as dismissed_ticket_count_pct_bucket, - min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins) - 1) as dismissed_ticket_count_pct_bucket_min, - min_dismissed_ticket_count_pct + ((max_dismissed_ticket_count_pct - min_dismissed_ticket_count_pct) / num_bins) * (width_bucket(dismissed_ticket_count_pct, min_dismissed_ticket_count_pct, max_dismissed_ticket_count_pct, num_bins)) as dismissed_ticket_count_pct_bucket_max, + width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) as seized_or_suspended_ticket_count_bucket, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) - 1) as seized_or_suspended_ticket_count_bucket_min, + min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins)) as seized_or_suspended_ticket_count_bucket_max, - seized_or_suspended_ticket_count, - dense_rank() over (order by seized_or_suspended_ticket_count desc) as seized_or_suspended_ticket_count_rank, + seized_or_suspended_ticket_count_pct, + dense_rank() over (order by seized_or_suspended_ticket_count_pct desc) as seized_or_suspended_ticket_count_pct_rank, - width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) as seized_or_suspended_ticket_count_bucket, - min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins) - 1) as seized_or_suspended_ticket_count_bucket_min, - min_seized_or_suspended_ticket_count + ((max_seized_or_suspended_ticket_count - min_seized_or_suspended_ticket_count) / num_bins) * (width_bucket(seized_or_suspended_ticket_count, min_seized_or_suspended_ticket_count, max_seized_or_suspended_ticket_count, num_bins)) as seized_or_suspended_ticket_count_bucket_max, + width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) as seized_or_suspended_ticket_count_pct_bucket, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) - 1) as seized_or_suspended_ticket_count_pct_bucket_min, + min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins)) as seized_or_suspended_ticket_count_pct_bucket_max, - seized_or_suspended_ticket_count_pct, - dense_rank() over (order by seized_or_suspended_ticket_count_pct desc) as seized_or_suspended_ticket_count_pct_rank, + bankruptcy_ticket_count, + dense_rank() over (order by bankruptcy_ticket_count desc) as bankruptcy_ticket_count_rank, - width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) as seized_or_suspended_ticket_count_pct_bucket, - min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins) - 1) as seized_or_suspended_ticket_count_pct_bucket_min, - min_seized_or_suspended_ticket_count_pct + ((max_seized_or_suspended_ticket_count_pct - min_seized_or_suspended_ticket_count_pct) / num_bins) * (width_bucket(seized_or_suspended_ticket_count_pct, min_seized_or_suspended_ticket_count_pct, max_seized_or_suspended_ticket_count_pct, num_bins)) as seized_or_suspended_ticket_count_pct_bucket_max, + width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) as bankruptcy_ticket_count_bucket, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) - 1) as bankruptcy_ticket_count_bucket_min, + min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins)) as bankruptcy_ticket_count_bucket_max, - bankruptcy_ticket_count, - dense_rank() over (order by bankruptcy_ticket_count desc) as bankruptcy_ticket_count_rank, + bankruptcy_ticket_count_pct, + dense_rank() over (order by bankruptcy_ticket_count_pct desc) as bankruptcy_ticket_count_pct_rank, - width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) as bankruptcy_ticket_count_bucket, - min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins) - 1) as bankruptcy_ticket_count_bucket_min, - min_bankruptcy_ticket_count + ((max_bankruptcy_ticket_count - min_bankruptcy_ticket_count) / num_bins) * (width_bucket(bankruptcy_ticket_count, min_bankruptcy_ticket_count, max_bankruptcy_ticket_count, num_bins)) as bankruptcy_ticket_count_bucket_max, + width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) as bankruptcy_ticket_count_pct_bucket, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) - 1) as bankruptcy_ticket_count_pct_bucket_min, + min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins)) as bankruptcy_ticket_count_pct_bucket_max - bankruptcy_ticket_count_pct, - dense_rank() over (order by bankruptcy_ticket_count_pct desc) as bankruptcy_ticket_count_pct_rank, + from wards_summary, wards_stats, num_bins + ) - width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) as bankruptcy_ticket_count_pct_bucket, - min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins) - 1) as bankruptcy_ticket_count_pct_bucket_min, - min_bankruptcy_ticket_count_pct + ((max_bankruptcy_ticket_count_pct - min_bankruptcy_ticket_count_pct) / num_bins) * (width_bucket(bankruptcy_ticket_count_pct, min_bankruptcy_ticket_count_pct, max_bankruptcy_ticket_count_pct, num_bins)) as bankruptcy_ticket_count_pct_bucket_max - - from wards_summary, wards_stats, num_bins + select + ward, + ticket_count, + ticket_count_rank, + case + when (ticket_count_rank <= 10) then 'top10' + when (ticket_count_rank >= 11 + and ticket_count_rank <= 40) then 'middle30' + when (ticket_count_rank >= 40) then 'bottom10' + end as ticket_count_rank_type, + ticket_count_bucket, + current_amount_due, + current_amount_due_rank, + case + when (current_amount_due_rank <= 10) then 'top10' + when (current_amount_due_rank >= 11 + and current_amount_due_rank <= 40) then 'middle30' + when (current_amount_due_rank >= 40) then 'bottom10' + end as current_amount_due_rank_type, + current_amount_due_bucket, + fine_level1_amount, + fine_level1_amount_rank, + case + when (fine_level1_amount_rank <= 10) then 'top10' + when (fine_level1_amount_rank >= 11 + and fine_level1_amount_rank <= 40) then 'middle30' + when (fine_level1_amount_rank >= 40) then 'bottom10' + end as fine_level1_amount_rank_type, + fine_level1_amount_bucket, + total_payments, + total_payments_rank, + case + when (total_payments_rank <= 10) then 'top10' + when (total_payments_rank >= 11 + and total_payments_rank <= 40) then 'middle30' + when (total_payments_rank >= 40) then 'bottom10' + end as total_payments_rank_type, + total_payments_bucket, + avg_per_ticket, + avg_per_ticket_rank, + case + when (avg_per_ticket_rank <= 10) then 'top10' + when (avg_per_ticket_rank >= 11 + and avg_per_ticket_rank <= 40) then 'middle30' + when (avg_per_ticket_rank >= 40) then 'bottom10' + end as avg_per_ticket_rank_type, + avg_per_ticket_bucket, + debt_to_payment_ratio, + debt_to_payment_ratio_rank, + case + when (debt_to_payment_ratio_rank <= 10) then 'top10' + when (debt_to_payment_ratio_rank >= 11 + and debt_to_payment_ratio_rank <= 40) then 'middle30' + when (debt_to_payment_ratio_rank >= 40) then 'bottom10' + end as debt_to_payment_ratio_rank_type, + debt_to_payment_ratio_bucket, + paid_pct, + paid_pct_rank, + case + when (paid_pct_rank <= 10) then 'top10' + when (paid_pct_rank >= 11 + and paid_pct_rank <= 40) then 'middle30' + when (paid_pct_rank >= 40) then 'bottom10' + end as paid_pct_rank_type, + paid_pct_bucket, + police_ticket_count, + police_ticket_count_rank, + case + when (police_ticket_count_rank <= 10) then 'top10' + when (police_ticket_count_rank >= 11 + and police_ticket_count_rank <= 40) then 'middle30' + when (police_ticket_count_rank >= 40) then 'bottom10' + end as police_ticket_count_rank_type, + police_ticket_count_pct, + police_ticket_count_pct_rank, + case + when (police_ticket_count_pct_rank <= 10) then 'top10' + when (police_ticket_count_pct_rank >= 11 + and police_ticket_count_pct_rank <= 40) then 'middle30' + when (police_ticket_count_pct_rank >= 40) then 'bottom10' + end as police_ticket_count_pct_rank_type, + contested_and_notliable_pct, + contested_and_notliable_pct_rank, + case + when (contested_and_notliable_pct_rank <= 10) then 'top10' + when (contested_and_notliable_pct_rank >= 11 + and contested_and_notliable_pct_rank <= 40) then 'middle30' + when (contested_and_notliable_pct_rank >= 40) then 'bottom10' + end as contested_and_notliable_pct_rank_type, + contested_ticket_count, + contested_ticket_count_rank, + case + when (contested_ticket_count_rank <= 10) then 'top10' + when (contested_ticket_count_rank >= 11 + and contested_ticket_count_rank <= 40) then 'middle30' + when (contested_ticket_count_rank >= 40) then 'bottom10' + end as contested_ticket_count_rank_type, + contested_ticket_count_pct, + contested_ticket_count_pct_rank, + case + when (contested_ticket_count_pct_rank <= 10) then 'top10' + when (contested_ticket_count_pct_rank >= 11 + and contested_ticket_count_pct_rank <= 40) then 'middle30' + when (contested_ticket_count_pct_rank >= 40) then 'bottom10' + end as contested_ticket_count_pct_rank_type, + paid_ticket_count, + paid_ticket_count_rank, + case + when (paid_ticket_count_rank <= 10) then 'top10' + when (paid_ticket_count_rank >= 11 + and paid_ticket_count_rank <= 40) then 'middle30' + when (paid_ticket_count_rank >= 40) then 'bottom10' + end as paid_ticket_count_rank_type, + paid_ticket_count_pct, + paid_ticket_count_pct_rank, + case + when (paid_ticket_count_pct_rank <= 10) then 'top10' + when (paid_ticket_count_pct_rank >= 11 + and paid_ticket_count_pct_rank <= 40) then 'middle30' + when (paid_ticket_count_pct_rank >= 40) then 'bottom10' + end as paid_ticket_count_pct_rank_type, + dismissed_ticket_count, + dismissed_ticket_count_rank, + case + when (dismissed_ticket_count_rank <= 10) then 'top10' + when (dismissed_ticket_count_rank >= 11 + and dismissed_ticket_count_rank <= 40) then 'middle30' + when (dismissed_ticket_count_rank >= 40) then 'bottom10' + end as dismissed_ticket_count_rank_type, + dismissed_ticket_count_pct, + dismissed_ticket_count_pct_rank, + case + when (dismissed_ticket_count_pct_rank <= 10) then 'top10' + when (dismissed_ticket_count_pct_rank >= 11 + and dismissed_ticket_count_pct_rank <= 40) then 'middle30' + when (dismissed_ticket_count_pct_rank >= 40) then 'bottom10' + end as dismissed_ticket_count_pct_rank_type, + seized_or_suspended_ticket_count, + seized_or_suspended_ticket_count_rank, + case + when (seized_or_suspended_ticket_count_rank <= 10) then 'top10' + when (seized_or_suspended_ticket_count_rank >= 11 + and seized_or_suspended_ticket_count_rank <= 40) then 'middle30' + when (seized_or_suspended_ticket_count_rank >= 40) then 'bottom10' + end as seized_or_suspended_ticket_count_rank_type, + seized_or_suspended_ticket_count_pct, + seized_or_suspended_ticket_count_pct_rank, + case + when (seized_or_suspended_ticket_count_pct_rank <= 10) then 'top10' + when (seized_or_suspended_ticket_count_pct_rank >= 11 + and seized_or_suspended_ticket_count_pct_rank <= 40) then 'middle30' + when (seized_or_suspended_ticket_count_pct_rank >= 40) then 'bottom10' + end as seized_or_suspended_ticket_count_pct_rank_type, + bankruptcy_ticket_count, + bankruptcy_ticket_count_rank, + case + when (bankruptcy_ticket_count_rank <= 10) then 'top10' + when (bankruptcy_ticket_count_rank >= 11 + and bankruptcy_ticket_count_rank <= 40) then 'middle30' + when (bankruptcy_ticket_count_rank >= 40) then 'bottom10' + end as bankruptcy_ticket_count_rank_type, + bankruptcy_ticket_count_pct, + bankruptcy_ticket_count_pct_rank, + case + when (bankruptcy_ticket_count_pct_rank <= 10) then 'top10' + when (bankruptcy_ticket_count_pct_rank >= 11 + and bankruptcy_ticket_count_pct_rank <= 40) then 'middle30' + when (bankruptcy_ticket_count_pct_rank >= 40) then 'bottom10' + end as bankruptcy_ticket_count_pct_rank_type + + from wardsranked ; - diff --git a/sql/views/wardsviolations5yr.sql b/sql/views/wardsviolations5yr.sql new file mode 100644 index 0000000..b27ce3b --- /dev/null +++ b/sql/views/wardsviolations5yr.sql @@ -0,0 +1,15 @@ +create table if not exists wardsviolations5yr as + select + distinct on (w.ward, w.violation_code) + w.ward, + w.violation_code, + v.violation_description, + sum(w.ticket_count) as ticket_count, + sum(w.fine_level1_amount)::float / sum(w.ticket_count)::float as avg_per_ticket + from wardsyearly w + join violations v + on w.violation_code = v.violation_code + where year >= 2013 and year <= 2017 + group by w.ward, w.violation_code, v.violation_description + order by w.ward, w.violation_code, ticket_count desc + ; diff --git a/sql/views/wardsyearly.sql b/sql/views/wardsyearly.sql index 093735a..ef0c2b9 100644 --- a/sql/views/wardsyearly.sql +++ b/sql/views/wardsyearly.sql @@ -22,5 +22,12 @@ create table if not exists wardsyearly as join parking p on p.address = g.address + where + g.geocoded_city = 'Chicago' and ( + g.geocode_accuracy_type = 'range_interpolation' or + g.geocode_accuracy_type = 'rooftop' or + g.geocode_accuracy_type = 'intersection' or + g.geocode_accuracy_type = 'point' + ) GROUP BY w.ward, p.year, p.notice_level, p.unit_description, p.hearing_disposition, p.ticket_queue, p.violation_code ; From f05a0163115afebb9296155a8adbed869cbdd6d6 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 17 Dec 2018 11:59:40 -0600 Subject: [PATCH 126/140] bump to latest metadata --- hasura/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hasura/metadata.json b/hasura/metadata.json index 7eac840..70c39e9 100644 --- a/hasura/metadata.json +++ b/hasura/metadata.json @@ -1 +1 @@ -{"remote_schemas":[],"tables":[{"table":"warddemographics","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wards","object_relationships":[{"using":{"manual_configuration":{"remote_table":"wardmeta","column_mapping":{"ward":"ward"}}},"name":"wardMeta","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals","column_mapping":{"ward":"ward"}}},"name":"wardTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals5yr","column_mapping":{"ward":"ward"}}},"name":"wardTotals5yr","comment":null},{"using":{"manual_configuration":{"remote_table":"warddemographics","column_mapping":{"ward":"ward"}}},"name":"wardDemographics","comment":null}],"array_relationships":[{"using":{"manual_configuration":{"remote_table":"wardsyearly","column_mapping":{"ward":"ward"}}},"name":"wardTicketsYearly","comment":null},{"using":{"manual_configuration":{"remote_table":"blocks","column_mapping":{"ward":"ward"}}},"name":"wardBlocks","comment":null},{"using":{"manual_configuration":{"remote_table":"wardscommunityareas","column_mapping":{"ward":"ward"}}},"name":"wardCommunityAreas","comment":null}],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardscommunityareas","object_relationships":[{"using":{"manual_configuration":{"remote_table":"communityareas","column_mapping":{"community":"community"}}},"name":"wardCommunityAreaDetails","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearly","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"communityareas","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardmeta","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blockstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blocks","object_relationships":[{"using":{"manual_configuration":{"remote_table":"blockstotals","column_mapping":{"address":"address"}}},"name":"blockTotals","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} \ No newline at end of file +{"remote_schemas":[],"tables":[{"table":"warddemographics","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wards","object_relationships":[{"using":{"manual_configuration":{"remote_table":"wardmeta","column_mapping":{"ward":"ward"}}},"name":"wardMeta","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals","column_mapping":{"ward":"ward"}}},"name":"wardTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals5yr","column_mapping":{"ward":"ward"}}},"name":"wardTotals5yr","comment":null},{"using":{"manual_configuration":{"remote_table":"warddemographics","column_mapping":{"ward":"ward"}}},"name":"wardDemographics","comment":null}],"array_relationships":[{"using":{"manual_configuration":{"remote_table":"wardsyearly","column_mapping":{"ward":"ward"}}},"name":"wardTicketsYearly","comment":null},{"using":{"manual_configuration":{"remote_table":"blocks","column_mapping":{"ward":"ward"}}},"name":"wardBlocks","comment":null},{"using":{"manual_configuration":{"remote_table":"wardscommunityareas","column_mapping":{"ward":"ward"}}},"name":"wardCommunityAreas","comment":null},{"using":{"manual_configuration":{"remote_table":"wardsyearlytotals","column_mapping":{"ward":"ward"}}},"name":"wardYearlyTotals","comment":null}],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardscommunityareas","object_relationships":[{"using":{"manual_configuration":{"remote_table":"communityareas","column_mapping":{"community":"community"}}},"name":"wardCommunityAreaDetails","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearly","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"communityareas","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearlytotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardmeta","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blockstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blocks","object_relationships":[{"using":{"manual_configuration":{"remote_table":"blockstotals","column_mapping":{"address":"address"}}},"name":"blockTotals","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} \ No newline at end of file From 49b7a462ac0b5bd9181224f39e4d745cec35111a Mon Sep 17 00:00:00 2001 From: Jeff Kao Date: Tue, 18 Dec 2018 11:38:48 -0500 Subject: [PATCH 127/140] check top 5 violation categories for 2013-2017 --- .gitignore | 3 + bulletproof/bulletproof_sql_notebook.ipynb | 4476 +++++++++-------- bulletproof/df_1996to2018.csv | 100 +- bulletproof/df_2013to2017.csv | 100 +- bulletproof/ticket_count_identical.csv | 26 +- bulletproof/top_five_violations_2013_2017.csv | 26 + .../wardstotals5yr_sql_minus_pandas.csv | 100 +- bulletproof/wardstotals_sql_minus_pandas.csv | 100 +- 8 files changed, 2517 insertions(+), 2414 deletions(-) create mode 100644 bulletproof/top_five_violations_2013_2017.csv diff --git a/.gitignore b/.gitignore index a437b7d..fa87f36 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ __pycache__/ il-ticket-loader/ processors/salt.txt env/mapbox.sh +bulletproof/.ipynb_checkpoints/bulletproof_sql_notebook-checkpoint.ipynb +bulletproof/parking-geo.csv +bulletproof/parking-geo.csv.gz diff --git a/bulletproof/bulletproof_sql_notebook.ipynb b/bulletproof/bulletproof_sql_notebook.ipynb index 313316e..a8e83a6 100644 --- a/bulletproof/bulletproof_sql_notebook.ipynb +++ b/bulletproof/bulletproof_sql_notebook.ipynb @@ -168,8 +168,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 9min 52s, sys: 2min 43s, total: 12min 36s\n", - "Wall time: 13min 8s\n" + "CPU times: user 9min 15s, sys: 2min 30s, total: 11min 46s\n", + "Wall time: 12min 12s\n" ] } ], @@ -188,8 +188,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1min 26s, sys: 3min 1s, total: 4min 28s\n", - "Wall time: 5min 16s\n" + "CPU times: user 1min 22s, sys: 2min 39s, total: 4min 2s\n", + "Wall time: 4min 42s\n" ] } ], @@ -207,8 +207,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 18.7 s, sys: 9.22 s, total: 27.9 s\n", - "Wall time: 21.7 s\n" + "CPU times: user 19.4 s, sys: 10.4 s, total: 29.9 s\n", + "Wall time: 24.4 s\n" ] } ], @@ -243,8 +243,8 @@ "metadata": {}, "outputs": [], "source": [ - "df_check = pd.read_csv('./wardstotals.csv', index_col='ward').sort_index(ascending=True)\n", - "df_check5yr = pd.read_csv('./wardstotals5yr.csv', index_col='ward').sort_index(ascending=True)\n", + "df_check = pd.read_csv('./wardstotals (1).csv', index_col='ward').sort_index(ascending=True)\n", + "df_check5yr = pd.read_csv('./wardstotals5yr (1).csv', index_col='ward').sort_index(ascending=True)\n", "df_1996to2018_check = df_check[df_1996to2018.columns.tolist()]\n", "df_2013to2017_check = df_check5yr[df_2013to2017.columns.tolist()]" ] @@ -365,197 +365,197 @@ " \n", " \n", " 1\n", - " 1720717\n", + " 1681635\n", " 8\n", - " 3.940247e+07\n", - " 16\n", - " 100835215\n", - " 8\n", - " 9.224356e+07\n", + " 3.842208e+07\n", + " 17\n", + " 98467185\n", + " 7\n", + " 9.010842e+07\n", " 6\n", - " 58.600697\n", - " 38\n", - " 0.700694\n", + " 58.554434\n", + " 39\n", + " 0.701066\n", " 7\n", - " 598783\n", + " 584989\n", " 14\n", - " 0.347985\n", + " 0.347869\n", " 48\n", - " 120036\n", + " 117098\n", " 8\n", - " 0.069759\n", - " 35\n", - " 1184804\n", + " 0.069633\n", + " 37\n", + " 1158544\n", " 6\n", - " 0.688553\n", + " 0.688939\n", " 6\n", - " 110457\n", + " 107759\n", " 8\n", - " 0.064192\n", + " 0.064080\n", " 40\n", - " 392455\n", - " 7\n", - " 0.228076\n", + " 383301\n", + " 9\n", + " 0.227934\n", " 41\n", - " 5904\n", - " 25\n", - " 0.003431\n", + " 5791\n", + " 26\n", + " 0.003444\n", " 38\n", " \n", " \n", " 2\n", - " 2081261\n", + " 2076974\n", " 3\n", - " 3.431393e+07\n", - " 24\n", - " 117298610\n", - " 4\n", - " 1.093965e+08\n", + " 3.425586e+07\n", + " 22\n", + " 117031080\n", " 3\n", - " 56.359395\n", + " 1.091317e+08\n", + " 3\n", + " 56.346916\n", " 46\n", - " 0.761229\n", + " 0.761096\n", " 4\n", - " 825312\n", - " 5\n", - " 0.396544\n", - " 46\n", - " 179269\n", + " 818518\n", " 4\n", - " 0.086135\n", + " 0.394092\n", + " 46\n", + " 179764\n", + " 3\n", + " 0.086551\n", " 15\n", - " 1482622\n", + " 1479128\n", " 4\n", - " 0.712367\n", + " 0.712155\n", " 5\n", - " 175963\n", - " 4\n", - " 0.084546\n", - " 13\n", - " 388546\n", - " 8\n", - " 0.186688\n", + " 176272\n", + " 3\n", + " 0.084870\n", + " 14\n", + " 388287\n", + " 6\n", + " 0.186948\n", " 47\n", - " 7169\n", + " 7167\n", " 21\n", - " 0.003445\n", - " 37\n", + " 0.003451\n", + " 36\n", " \n", " \n", " 3\n", - " 1189111\n", - " 12\n", - " 4.315614e+07\n", - " 12\n", - " 73217160\n", - " 10\n", - " 6.189717e+07\n", + " 1068060\n", + " 15\n", + " 3.942537e+07\n", + " 14\n", + " 66560465\n", + " 13\n", + " 5.606786e+07\n", + " 14\n", + " 62.319032\n", + " 28\n", + " 0.587140\n", + " 29\n", + " 657643\n", + " 9\n", + " 0.615736\n", + " 13\n", + " 95109\n", " 12\n", - " 61.573024\n", - " 30\n", - " 0.589198\n", + " 0.089048\n", + " 9\n", + " 631895\n", + " 18\n", + " 0.591629\n", " 29\n", - " 764735\n", - " 7\n", - " 0.643115\n", - " 10\n", - " 104479\n", - " 11\n", - " 0.087863\n", - " 10\n", - " 705441\n", + " 92175\n", " 13\n", - " 0.593251\n", - " 28\n", - " 102294\n", - " 10\n", - " 0.086026\n", - " 11\n", - " 405934\n", - " 6\n", - " 0.341376\n", - " 15\n", - " 16634\n", + " 0.086301\n", + " 12\n", + " 363786\n", + " 12\n", + " 0.340604\n", + " 16\n", + " 15058\n", " 13\n", - " 0.013989\n", + " 0.014098\n", " 16\n", " \n", " \n", " 4\n", - " 1783330\n", - " 6\n", - " 4.619477e+07\n", - " 9\n", - " 101895980\n", - " 7\n", - " 9.088336e+07\n", + " 1700508\n", " 7\n", - " 57.138040\n", + " 4.450665e+07\n", + " 9\n", + " 97472810\n", + " 8\n", + " 8.736265e+07\n", + " 8\n", + " 57.319819\n", " 45\n", - " 0.663004\n", + " 0.662494\n", " 14\n", - " 1054462\n", - " 2\n", - " 0.591288\n", + " 975703\n", + " 3\n", + " 0.573771\n", " 20\n", - " 171359\n", - " 5\n", - " 0.096089\n", - " 5\n", - " 1121035\n", + " 149170\n", + " 6\n", + " 0.087721\n", + " 11\n", + " 1081707\n", " 8\n", - " 0.628619\n", - " 19\n", - " 179054\n", - " 3\n", - " 0.100404\n", - " 2\n", - " 510207\n", + " 0.636108\n", + " 18\n", + " 155889\n", + " 6\n", + " 0.091672\n", + " 4\n", + " 486627\n", " 4\n", - " 0.286098\n", + " 0.286166\n", " 26\n", - " 16886\n", + " 16270\n", " 12\n", - " 0.009469\n", + " 0.009568\n", " 20\n", " \n", " \n", " 5\n", - " 1082520\n", + " 1066278\n", " 16\n", - " 3.955258e+07\n", + " 3.909947e+07\n", " 15\n", - " 68784395\n", + " 67806820\n", + " 12\n", + " 5.826371e+07\n", " 13\n", - " 5.915885e+07\n", - " 14\n", - " 63.540992\n", + " 63.592065\n", " 24\n", - " 0.599311\n", + " 0.598416\n", " 25\n", - " 491319\n", + " 476558\n", " 23\n", - " 0.453866\n", + " 0.446936\n", " 39\n", - " 89974\n", + " 88310\n", " 15\n", - " 0.083115\n", - " 21\n", - " 652664\n", - " 18\n", - " 0.602912\n", + " 0.082821\n", + " 22\n", + " 642266\n", + " 17\n", + " 0.602344\n", " 26\n", - " 93870\n", - " 13\n", - " 0.086714\n", - " 10\n", - " 369375\n", - " 13\n", - " 0.341218\n", - " 16\n", - " 17008\n", + " 92194\n", + " 12\n", + " 0.086463\n", " 11\n", - " 0.015711\n", + " 364347\n", + " 11\n", + " 0.341700\n", + " 15\n", + " 16854\n", + " 11\n", + " 0.015806\n", " 15\n", " \n", " \n", @@ -565,136 +565,136 @@ "text/plain": [ " ticket_count ticket_count_rank current_amount_due \\\n", "ward \n", - "1 1720717 8 3.940247e+07 \n", - "2 2081261 3 3.431393e+07 \n", - "3 1189111 12 4.315614e+07 \n", - "4 1783330 6 4.619477e+07 \n", - "5 1082520 16 3.955258e+07 \n", + "1 1681635 8 3.842208e+07 \n", + "2 2076974 3 3.425586e+07 \n", + "3 1068060 15 3.942537e+07 \n", + "4 1700508 7 4.450665e+07 \n", + "5 1066278 16 3.909947e+07 \n", "\n", " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", "ward \n", - "1 16 100835215 8 \n", - "2 24 117298610 4 \n", - "3 12 73217160 10 \n", - "4 9 101895980 7 \n", - "5 15 68784395 13 \n", + "1 17 98467185 7 \n", + "2 22 117031080 3 \n", + "3 14 66560465 13 \n", + "4 9 97472810 8 \n", + "5 15 67806820 12 \n", "\n", " total_payments total_payments_rank avg_per_ticket \\\n", "ward \n", - "1 9.224356e+07 6 58.600697 \n", - "2 1.093965e+08 3 56.359395 \n", - "3 6.189717e+07 12 61.573024 \n", - "4 9.088336e+07 7 57.138040 \n", - "5 5.915885e+07 14 63.540992 \n", + "1 9.010842e+07 6 58.554434 \n", + "2 1.091317e+08 3 56.346916 \n", + "3 5.606786e+07 14 62.319032 \n", + "4 8.736265e+07 8 57.319819 \n", + "5 5.826371e+07 13 63.592065 \n", "\n", " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", "ward \n", - "1 38 0.700694 7 598783 \n", - "2 46 0.761229 4 825312 \n", - "3 30 0.589198 29 764735 \n", - "4 45 0.663004 14 1054462 \n", - "5 24 0.599311 25 491319 \n", + "1 39 0.701066 7 584989 \n", + "2 46 0.761096 4 818518 \n", + "3 28 0.587140 29 657643 \n", + "4 45 0.662494 14 975703 \n", + "5 24 0.598416 25 476558 \n", "\n", " police_ticket_count_rank police_ticket_count_pct \\\n", "ward \n", - "1 14 0.347985 \n", - "2 5 0.396544 \n", - "3 7 0.643115 \n", - "4 2 0.591288 \n", - "5 23 0.453866 \n", + "1 14 0.347869 \n", + "2 4 0.394092 \n", + "3 9 0.615736 \n", + "4 3 0.573771 \n", + "5 23 0.446936 \n", "\n", " police_ticket_count_pct_rank contested_ticket_count \\\n", "ward \n", - "1 48 120036 \n", - "2 46 179269 \n", - "3 10 104479 \n", - "4 20 171359 \n", - "5 39 89974 \n", + "1 48 117098 \n", + "2 46 179764 \n", + "3 13 95109 \n", + "4 20 149170 \n", + "5 39 88310 \n", "\n", " contested_ticket_count_rank contested_ticket_count_pct \\\n", "ward \n", - "1 8 0.069759 \n", - "2 4 0.086135 \n", - "3 11 0.087863 \n", - "4 5 0.096089 \n", - "5 15 0.083115 \n", + "1 8 0.069633 \n", + "2 3 0.086551 \n", + "3 12 0.089048 \n", + "4 6 0.087721 \n", + "5 15 0.082821 \n", "\n", " contested_ticket_count_pct_rank paid_ticket_count \\\n", "ward \n", - "1 35 1184804 \n", - "2 15 1482622 \n", - "3 10 705441 \n", - "4 5 1121035 \n", - "5 21 652664 \n", + "1 37 1158544 \n", + "2 15 1479128 \n", + "3 9 631895 \n", + "4 11 1081707 \n", + "5 22 642266 \n", "\n", " paid_ticket_count_rank paid_ticket_count_pct \\\n", "ward \n", - "1 6 0.688553 \n", - "2 4 0.712367 \n", - "3 13 0.593251 \n", - "4 8 0.628619 \n", - "5 18 0.602912 \n", + "1 6 0.688939 \n", + "2 4 0.712155 \n", + "3 18 0.591629 \n", + "4 8 0.636108 \n", + "5 17 0.602344 \n", "\n", " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", "ward \n", - "1 6 110457 \n", - "2 5 175963 \n", - "3 28 102294 \n", - "4 19 179054 \n", - "5 26 93870 \n", + "1 6 107759 \n", + "2 5 176272 \n", + "3 29 92175 \n", + "4 18 155889 \n", + "5 26 92194 \n", "\n", " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", "ward \n", - "1 8 0.064192 \n", - "2 4 0.084546 \n", - "3 10 0.086026 \n", - "4 3 0.100404 \n", - "5 13 0.086714 \n", + "1 8 0.064080 \n", + "2 3 0.084870 \n", + "3 13 0.086301 \n", + "4 6 0.091672 \n", + "5 12 0.086463 \n", "\n", " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", "ward \n", - "1 40 392455 \n", - "2 13 388546 \n", - "3 11 405934 \n", - "4 2 510207 \n", - "5 10 369375 \n", + "1 40 383301 \n", + "2 14 388287 \n", + "3 12 363786 \n", + "4 4 486627 \n", + "5 11 364347 \n", "\n", " seized_or_suspended_ticket_count_rank \\\n", "ward \n", - "1 7 \n", - "2 8 \n", - "3 6 \n", + "1 9 \n", + "2 6 \n", + "3 12 \n", "4 4 \n", - "5 13 \n", + "5 11 \n", "\n", " seized_or_suspended_ticket_count_pct \\\n", "ward \n", - "1 0.228076 \n", - "2 0.186688 \n", - "3 0.341376 \n", - "4 0.286098 \n", - "5 0.341218 \n", + "1 0.227934 \n", + "2 0.186948 \n", + "3 0.340604 \n", + "4 0.286166 \n", + "5 0.341700 \n", "\n", " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", "ward \n", - "1 41 5904 \n", - "2 47 7169 \n", - "3 15 16634 \n", - "4 26 16886 \n", - "5 16 17008 \n", + "1 41 5791 \n", + "2 47 7167 \n", + "3 16 15058 \n", + "4 26 16270 \n", + "5 15 16854 \n", "\n", " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", "ward \n", - "1 25 0.003431 \n", - "2 21 0.003445 \n", - "3 13 0.013989 \n", - "4 12 0.009469 \n", - "5 11 0.015711 \n", + "1 26 0.003444 \n", + "2 21 0.003451 \n", + "3 13 0.014098 \n", + "4 12 0.009568 \n", + "5 11 0.015806 \n", "\n", " bankruptcy_ticket_count_pct_rank \n", "ward \n", "1 38 \n", - "2 37 \n", + "2 36 \n", "3 16 \n", "4 20 \n", "5 15 " @@ -817,19 +817,19 @@ " 1\n", " 0\n", " 0\n", - " 2.923608e-05\n", + " 2.673268e-05\n", " 0\n", " 0\n", " 0\n", - " -1.730025e-05\n", + " -1.412630e-05\n", " 0\n", " 0.000000e+00\n", " 0\n", - " -1.950662e-13\n", + " -1.787459e-13\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -837,11 +837,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -849,30 +849,30 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -4.336809e-19\n", " 0\n", " \n", " \n", " 2\n", " 0\n", " 0\n", - " 1.396239e-05\n", + " 1.467764e-05\n", " 0\n", " 0\n", " 0\n", - " -1.676381e-05\n", + " -1.725554e-05\n", " 0\n", - " -3.552714e-14\n", + " -7.105427e-15\n", " 0\n", - " -1.012523e-13\n", + " -1.065814e-13\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -883,144 +883,144 @@ " -1.387779e-17\n", " 0\n", " 0\n", - " 1\n", + " 0\n", " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 4.336809e-19\n", + " -4.336809e-19\n", " 0\n", " \n", " \n", " 3\n", - " 21\n", " 0\n", - " 1.334800e+03\n", " 0\n", - " 2755\n", + " 2.803653e-05\n", " 0\n", - " 1.791000e+03\n", " 0\n", - " 1.229440e-03\n", " 0\n", - " -4.827330e-07\n", + " 1.446903e-05\n", " 0\n", - " 19\n", + " -2.131628e-14\n", " 0\n", - " 4.620670e-06\n", + " -1.096900e-13\n", " 0\n", - " 3\n", " 0\n", - " 9.711912e-07\n", " 0\n", - " 8\n", + " 1.110223e-16\n", " 0\n", - " -3.749177e-06\n", " 0\n", " 0\n", + " -1.387779e-17\n", " 0\n", - " -1.519207e-06\n", " 0\n", - " 7\n", " 0\n", - " -1.420337e-07\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " -1.387779e-17\n", + " 0\n", " 0\n", " 0\n", + " -5.551115e-17\n", + " 0\n", " 0\n", - " -2.470379e-07\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 4\n", - " 1935\n", " 0\n", - " 7.209669e+04\n", " 0\n", - " 109620\n", + " 1.683086e-05\n", " 0\n", - " 8.887544e+04\n", " 0\n", - " -5.277124e-04\n", " 0\n", - " -1.300631e-04\n", + " -8.404255e-06\n", " 0\n", - " 1512\n", + " 2.842171e-14\n", " 0\n", - " 2.060519e-04\n", + " -1.062483e-13\n", " 0\n", - " 82\n", " 0\n", - " -5.821705e-05\n", " 0\n", - " 1071\n", + " 0.000000e+00\n", " 0\n", - " -8.143196e-05\n", " 0\n", - " 115\n", " 0\n", - " -4.440927e-05\n", + " -1.387779e-17\n", " 0\n", - " 652\n", " 0\n", - " 5.511816e-05\n", " 0\n", - " 15\n", + " -1.110223e-16\n", + " 0\n", + " 0\n", + " 0\n", + " -1.387779e-17\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", " 0\n", - " -1.860863e-06\n", + " 0\n", + " -3.469447e-18\n", " 0\n", " \n", " \n", " 5\n", - " 309\n", " 0\n", - " 1.934395e+04\n", " 0\n", - " 22740\n", + " 2.440065e-05\n", " 0\n", - " 1.616363e+04\n", " 0\n", - " 2.868258e-03\n", " 0\n", - " -5.181380e-05\n", + " 1.393259e-05\n", " 0\n", - " 262\n", + " 7.105427e-15\n", " 0\n", - " 1.124420e-04\n", + " -9.259260e-14\n", " 0\n", - " 24\n", " 0\n", - " -1.553925e-06\n", " 0\n", - " 146\n", + " -1.110223e-16\n", " 0\n", - " -3.721707e-05\n", " 0\n", - " 26\n", " 0\n", - " -7.339376e-07\n", + " -1.387779e-17\n", " 0\n", - " 141\n", " 0\n", - " 3.284334e-05\n", " 0\n", - " 7\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " -1.387779e-17\n", + " 0\n", " 0\n", - " 1.981061e-06\n", + " 0\n", + " 5.551115e-17\n", + " 0\n", + " 0\n", + " 0\n", + " -3.469447e-18\n", " 0\n", " \n", " \n", " 6\n", " 0\n", " 0\n", - " 3.892928e-05\n", + " 3.805012e-05\n", " 0\n", " 0\n", " 0\n", - " 1.294911e-05\n", + " 1.320988e-05\n", " 0\n", - " -2.842171e-14\n", + " 5.684342e-14\n", " 0\n", - " -1.255662e-13\n", + " -1.217915e-13\n", " 0\n", " 0\n", " 0\n", @@ -1032,15 +1032,15 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -1049,255 +1049,177 @@ " \n", " \n", " 7\n", - " 8\n", - " 0\n", - " 3.432000e+02\n", - " 0\n", - " 435\n", " 0\n", - " 1.720000e+02\n", " 0\n", - " -2.007704e-04\n", - " 0\n", - " -9.814407e-07\n", - " 0\n", - " 6\n", - " 0\n", - " 2.792238e-06\n", + " 1.917034e-05\n", " 0\n", " 0\n", " 0\n", - " -1.041613e-06\n", + " 4.161149e-06\n", " 0\n", - " 3\n", + " 4.263256e-14\n", " 0\n", - " -1.347219e-06\n", + " -1.054157e-13\n", " 0\n", - " 1\n", " 0\n", - " 5.219463e-07\n", " 0\n", - " 4\n", + " -1.110223e-16\n", " 0\n", - " 3.939448e-07\n", " 0\n", " 0\n", + " 1.387779e-17\n", " 0\n", - " -3.241942e-07\n", " 0\n", - " \n", - " \n", - " 8\n", - " 395\n", " 0\n", - " 2.151348e+04\n", + " -5.551115e-17\n", " 0\n", - " 24900\n", " 0\n", - " 1.981637e+04\n", " 0\n", - " -3.733468e-03\n", + " -1.387779e-17\n", " 0\n", - " -1.549615e-05\n", " 0\n", - " 310\n", " 0\n", - " 1.642837e-04\n", + " 0.000000e+00\n", " 0\n", - " 26\n", " 0\n", - " -1.101439e-05\n", " 0\n", - " 210\n", + " 0.000000e+00\n", " 0\n", - " 4.370182e-06\n", + " \n", + " \n", + " 8\n", " 0\n", - " 29\n", " 0\n", - " -9.171336e-06\n", + " 1.595169e-05\n", " 0\n", - " 181\n", " 0\n", - " 1.481744e-05\n", " 0\n", - " 11\n", + " 6.012619e-06\n", " 0\n", - " 2.944374e-06\n", + " 1.421085e-14\n", " 0\n", - " \n", - " \n", - " 9\n", - " 39\n", + " -7.327472e-14\n", " 0\n", - " 2.016200e+03\n", " 0\n", - " 2145\n", " 0\n", - " 1.295180e+03\n", + " 0.000000e+00\n", " 0\n", - " -1.554128e-03\n", " 0\n", - " -6.946400e-06\n", " 0\n", - " 20\n", + " 1.387779e-17\n", " 0\n", - " -8.856891e-06\n", " 0\n", - " 3\n", " 0\n", - " -6.244180e-07\n", + " -1.110223e-16\n", " 0\n", - " 16\n", " 0\n", - " -9.113263e-06\n", " 0\n", - " 3\n", + " -1.387779e-17\n", " 0\n", - " -6.428599e-07\n", " 0\n", - " 16\n", " 0\n", - " -1.610630e-06\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -2.085649e-06\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", - " 10\n", - " 199\n", - " 0\n", - " 1.239592e+04\n", - " 0\n", - " 12110\n", - " 0\n", - " 8.037420e+03\n", + " 9\n", " 0\n", - " -2.594843e-03\n", " 0\n", - " -7.186215e-05\n", + " -2.086163e-07\n", " 0\n", - " 152\n", " 0\n", - " 9.518341e-05\n", " 0\n", - " 11\n", + " -5.885959e-07\n", " 0\n", - " -8.034173e-06\n", + " -5.684342e-14\n", " 0\n", - " 74\n", + " -5.773160e-15\n", " 0\n", - " -8.854411e-05\n", " 0\n", - " 11\n", " 0\n", - " -1.075787e-05\n", + " 1.110223e-16\n", " 0\n", - " 79\n", " 0\n", - " 3.678483e-05\n", " 0\n", + " -1.387779e-17\n", " 0\n", " 0\n", - " -5.751570e-06\n", " 0\n", - " \n", - " \n", - " 11\n", - " 449\n", + " -1.110223e-16\n", " 0\n", - " 2.401794e+04\n", " 0\n", - " 29670\n", " 0\n", - " 1.795969e+04\n", + " -1.387779e-17\n", " 0\n", - " 1.804341e-03\n", " 0\n", - " -1.814144e-04\n", " 0\n", - " 232\n", + " 5.551115e-17\n", " 0\n", - " 5.287497e-05\n", " 0\n", - " 20\n", " 0\n", - " -3.159800e-05\n", + " -3.469447e-18\n", " 0\n", - " 208\n", + " \n", + " \n", + " 10\n", " 0\n", - " -1.313374e-04\n", " 0\n", - " 17\n", + " -4.071742e-06\n", " 0\n", - " -2.932489e-05\n", " 0\n", - " 130\n", " 0\n", - " 3.319619e-05\n", + " -6.705523e-07\n", " 0\n", - " 3\n", + " 4.263256e-14\n", " 0\n", - " 7.198188e-07\n", + " 4.884981e-14\n", " 0\n", - " \n", - " \n", - " 12\n", - " 802\n", " 0\n", - " 2.340800e+04\n", " 0\n", - " 47275\n", + " 1.110223e-16\n", " 0\n", - " 4.188098e+04\n", " 0\n", - " -3.416550e-03\n", " 0\n", - " 8.415202e-05\n", + " 0.000000e+00\n", " 0\n", - " 473\n", " 0\n", - " 8.713349e-05\n", " 0\n", - " 38\n", + " 0.000000e+00\n", " 0\n", - " 7.057821e-09\n", " 0\n", - " 495\n", " 0\n", - " 4.439429e-05\n", + " -1.387779e-17\n", " 0\n", - " 42\n", " 0\n", - " 2.776381e-06\n", " 0\n", - " 185\n", + " -5.551115e-17\n", " 0\n", - " -6.284368e-05\n", " 0\n", - " 1\n", " 0\n", - " -3.288856e-06\n", + " -1.734723e-18\n", " 0\n", " \n", " \n", - " 13\n", + " 11\n", " 0\n", " 0\n", - " -2.371147e-06\n", + " -2.719462e-07\n", " 0\n", " 0\n", " 0\n", - " -1.069158e-06\n", + " 4.224479e-06\n", " 0\n", - " 1.421085e-14\n", + " -1.421085e-14\n", " 0\n", - " 3.419487e-14\n", + " 2.664535e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -1309,7 +1231,7 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -1317,26 +1239,26 @@ " 0\n", " 0\n", " 0\n", - " 8.673617e-19\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", - " 14\n", + " 12\n", " 0\n", " 0\n", - " 8.527189e-06\n", + " 2.012402e-05\n", " 0\n", " 0\n", " 0\n", - " 4.045665e-06\n", + " 8.136034e-06\n", " 0\n", - " 2.842171e-14\n", + " 1.421085e-14\n", " 0\n", - " -4.807266e-14\n", + " -9.769963e-14\n", " 0\n", " 0\n", " 0\n", - " 1.665335e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -1348,34 +1270,34 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", - " 15\n", + " 13\n", " 0\n", " 0\n", - " 2.465397e-05\n", + " -2.341345e-06\n", " 0\n", " 0\n", " 0\n", - " 6.839633e-06\n", + " -1.017004e-06\n", " 0\n", - " -2.842171e-14\n", + " -4.263256e-14\n", " 0\n", - " -1.169065e-13\n", + " 3.486100e-14\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -1391,116 +1313,116 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 1.734723e-18\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", - " 16\n", + " 14\n", " 0\n", " 0\n", - " 4.615635e-05\n", + " 8.646399e-06\n", " 0\n", " 0\n", " 0\n", - " 1.048297e-05\n", + " 4.008412e-06\n", " 0\n", - " -4.263256e-14\n", + " 4.263256e-14\n", " 0\n", - " -1.605382e-13\n", + " -4.984901e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " -6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -3.469447e-18\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", - " 17\n", - " 349\n", + " 15\n", " 0\n", - " 1.988240e+04\n", " 0\n", - " 23890\n", + " 2.058595e-05\n", " 0\n", - " 1.713653e+04\n", " 0\n", - " -2.038958e-03\n", " 0\n", - " -2.418054e-06\n", + " 6.116927e-06\n", " 0\n", - " 283\n", + " 1.421085e-14\n", " 0\n", - " 7.803109e-05\n", + " -9.903189e-14\n", " 0\n", - " 25\n", - " -1\n", - " -8.725616e-07\n", " 0\n", - " 168\n", " 0\n", - " -7.195541e-06\n", + " -2.220446e-16\n", " 0\n", - " 35\n", " 0\n", - " 1.142160e-05\n", " 0\n", - " 145\n", - " -1\n", - " -1.675568e-05\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 1.110223e-16\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " -5.551115e-17\n", " 0\n", - " 6\n", " 0\n", - " -4.137846e-06\n", + " 0\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", - " 18\n", + " 16\n", " 0\n", " 0\n", - " -3.006309e-06\n", + " 4.453212e-05\n", " 0\n", " 0\n", " 0\n", - " -1.689419e-06\n", + " 1.034886e-05\n", " 0\n", - " -2.842171e-14\n", + " 2.842171e-14\n", " 0\n", - " 3.130829e-14\n", + " -1.578737e-13\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " -6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -1508,69 +1430,69 @@ " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 3.469447e-18\n", " 0\n", " \n", " \n", - " 19\n", - " 58\n", + " 17\n", " 0\n", - " 3.719090e+03\n", " 0\n", - " 4450\n", + " 3.380328e-05\n", " 0\n", - " 2.402500e+03\n", " 0\n", - " 1.403785e-03\n", " 0\n", - " -7.172784e-05\n", + " 9.424984e-06\n", " 0\n", - " 37\n", + " 0.000000e+00\n", " 0\n", - " 1.100951e-05\n", + " -1.332823e-13\n", " 0\n", - " 7\n", " 0\n", - " 2.670217e-06\n", " 0\n", - " 19\n", + " 0.000000e+00\n", " 0\n", - " -8.174453e-05\n", " 0\n", - " 5\n", " 0\n", - " -1.529432e-06\n", + " -1.387779e-17\n", " 0\n", - " 23\n", " 0\n", - " 2.922248e-05\n", " 0\n", - " 1\n", + " 1.665335e-16\n", + " 0\n", + " 0\n", + " 0\n", + " -1.387779e-17\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", " 0\n", - " 1.674406e-06\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", - " 20\n", + " 18\n", " 0\n", " 0\n", - " 4.819781e-05\n", + " -2.985820e-06\n", " 0\n", " 0\n", " 0\n", - " 1.245737e-05\n", + " -1.687557e-06\n", " 0\n", - " -1.421085e-14\n", + " -4.263256e-14\n", " 0\n", - " -1.604272e-13\n", + " 3.130829e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -1582,34 +1504,34 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 3.469447e-18\n", " 0\n", " \n", " \n", - " 21\n", + " 19\n", " 0\n", " 0\n", - " 1.519173e-05\n", + " -8.447096e-07\n", " 0\n", " 0\n", " 0\n", - " 5.085021e-06\n", + " -1.123175e-06\n", " 0\n", " 2.842171e-14\n", " 0\n", - " -7.693846e-14\n", + " 6.994405e-15\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -1621,34 +1543,34 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.734723e-18\n", " 0\n", " \n", " \n", - " 22\n", + " 20\n", " 0\n", " 0\n", - " 2.104044e-05\n", + " 4.573911e-05\n", " 0\n", " 0\n", " 0\n", - " 5.036592e-06\n", + " 1.161546e-05\n", " 0\n", - " -2.842171e-14\n", + " -4.263256e-14\n", " 0\n", - " -1.024736e-13\n", + " -1.582623e-13\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -1660,11 +1582,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -1672,22 +1594,22 @@ " 0\n", " \n", " \n", - " 23\n", + " 21\n", " 0\n", " 0\n", - " -2.320856e-06\n", + " 1.335517e-05\n", " 0\n", " 0\n", " 0\n", - " 3.222376e-06\n", + " 4.656613e-06\n", " 0\n", - " 1.421085e-14\n", + " 2.842171e-14\n", " 0\n", - " 5.329071e-14\n", + " -6.855627e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 2.220446e-16\n", " 0\n", " 0\n", " 0\n", @@ -1695,34 +1617,34 @@ " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 2.220446e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 2.775558e-17\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " -4.336809e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", - " 24\n", + " 22\n", " 0\n", " 0\n", - " 5.628914e-05\n", + " 2.045929e-05\n", " 0\n", " 0\n", " 0\n", - " 1.132488e-05\n", + " 4.962087e-06\n", " 0\n", " 0.000000e+00\n", " 0\n", - " -1.875167e-13\n", + " -9.903189e-14\n", " 0\n", " 0\n", " 0\n", @@ -1730,11 +1652,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -1742,7 +1664,7 @@ " 0\n", " 0\n", " 0\n", - " -1.665335e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -1750,57 +1672,57 @@ " 0\n", " \n", " \n", - " 25\n", - " 4184\n", + " 23\n", + " 0\n", + " 0\n", + " -2.488494e-06\n", " 0\n", - " 1.786686e+05\n", " 0\n", - " 243795\n", " 0\n", - " 1.801621e+05\n", + " 2.749264e-06\n", " 0\n", - " -2.850664e-03\n", + " 1.421085e-14\n", " 0\n", - " -4.757110e-04\n", - " 1\n", - " 2724\n", + " 5.229150e-14\n", " 0\n", - " 5.345568e-04\n", " 0\n", - " 213\n", " 0\n", - " -5.570114e-05\n", + " 1.110223e-16\n", " 0\n", - " 2047\n", " 0\n", - " -4.478696e-04\n", " 0\n", - " 260\n", + " 0.000000e+00\n", " 0\n", - " -1.874044e-05\n", " 0\n", - " 1378\n", - " -1\n", - " 2.514976e-04\n", " 0\n", - " 37\n", + " 1.110223e-16\n", + " 0\n", + " 0\n", " 0\n", - " 1.003383e-05\n", + " -1.387779e-17\n", + " 0\n", + " 0\n", + " 0\n", + " -2.775558e-17\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", - " 26\n", + " 24\n", " 0\n", " 0\n", - " 3.063679e-05\n", + " 5.733967e-05\n", " 0\n", " 0\n", " 0\n", - " 1.303107e-05\n", + " 1.144409e-05\n", " 0\n", - " 7.105427e-15\n", + " 4.263256e-14\n", " 0\n", - " -1.302292e-13\n", + " -1.910139e-13\n", " 0\n", " 0\n", " 0\n", @@ -1816,30 +1738,30 @@ " 0\n", " 0\n", " 0\n", - " -6.938894e-18\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " 1\n", - " -5.551115e-17\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " 0\n", + " -6.938894e-18\n", " 0\n", " \n", " \n", - " 27\n", + " 25\n", " 0\n", " 0\n", - " 4.252046e-05\n", + " 2.098829e-05\n", " 0\n", " 0\n", " 0\n", - " -2.898276e-05\n", + " -1.239777e-05\n", " 0\n", - " -2.842171e-14\n", + " 2.842171e-14\n", " 0\n", - " -2.271516e-13\n", + " -1.372236e-13\n", " 0\n", " 0\n", " 0\n", @@ -1847,7 +1769,7 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -1855,11 +1777,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -1867,22 +1789,22 @@ " 0\n", " \n", " \n", - " 28\n", + " 26\n", " 0\n", " 0\n", - " 3.261864e-05\n", + " 2.988428e-05\n", " 0\n", " 0\n", " 0\n", - " 1.764297e-05\n", + " 1.304597e-05\n", " 0\n", - " -4.263256e-14\n", + " -2.842171e-14\n", " 0\n", - " -5.156986e-14\n", + " -1.265654e-13\n", " 0\n", " 0\n", " 0\n", - " -2.220446e-16\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -1890,11 +1812,11 @@ " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 6.938894e-18\n", " 0\n", " 0\n", " 0\n", @@ -1902,29 +1824,29 @@ " 0\n", " 0\n", " 0\n", - " 3.469447e-18\n", + " -1.734723e-18\n", " 0\n", " \n", " \n", - " 29\n", + " 27\n", " 0\n", " 0\n", - " 3.369898e-05\n", + " 4.594773e-05\n", " 0\n", " 0\n", " 0\n", - " 1.019239e-05\n", + " -2.536178e-05\n", " 0\n", - " -2.842171e-14\n", + " 1.421085e-14\n", " 0\n", - " -1.268430e-13\n", + " -2.364775e-13\n", " 0\n", " 0\n", " 0\n", " 0.000000e+00\n", " 0\n", " 0\n", - " 1\n", + " 0\n", " 0.000000e+00\n", " 0\n", " 0\n", @@ -1933,34 +1855,34 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 6.938894e-18\n", + " 1.734723e-18\n", " 0\n", " \n", " \n", - " 30\n", + " 28\n", " 0\n", " 0\n", - " 6.780028e-06\n", + " 3.819168e-05\n", " 0\n", " 0\n", " 0\n", - " 5.848706e-06\n", + " 1.865625e-05\n", " 0\n", - " -4.973799e-14\n", + " -4.263256e-14\n", " 0\n", - " -2.764455e-14\n", + " -6.927792e-14\n", " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -1972,11 +1894,11 @@ " 0\n", " 0\n", " 0\n", - " -6.938894e-18\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -1984,22 +1906,22 @@ " 0\n", " \n", " \n", - " 31\n", + " 29\n", " 0\n", " 0\n", - " 1.204759e-05\n", + " 2.997369e-05\n", " 0\n", " 0\n", " 0\n", - " 8.247793e-06\n", + " 9.767711e-06\n", " 0\n", - " 3.552714e-14\n", + " 4.263256e-14\n", " 0\n", - " -5.384582e-14\n", + " -1.141864e-13\n", " 0\n", " 0\n", " 0\n", - " -1.665335e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -2011,69 +1933,69 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 3.469447e-18\n", " 0\n", " \n", " \n", - " 32\n", + " 30\n", " 0\n", " 0\n", - " 1.393259e-06\n", + " 6.757677e-06\n", " 0\n", " 0\n", " 0\n", - " 1.023710e-05\n", + " 5.699694e-06\n", " 0\n", - " -4.263256e-14\n", + " -2.842171e-14\n", " 0\n", - " 1.831868e-14\n", + " -2.897682e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " -6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 5.551115e-17\n", " 0\n", " 0\n", - " 1\n", - " 0.000000e+00\n", + " 0\n", + " -4.336809e-19\n", " 0\n", " \n", " \n", - " 33\n", + " 31\n", " 0\n", " 0\n", - " 2.129748e-05\n", + " 1.183897e-05\n", " 0\n", " 0\n", " 0\n", - " 8.389354e-06\n", + " 8.016825e-06\n", " 0\n", - " 0.000000e+00\n", + " -1.421085e-14\n", " 0\n", - " -1.181277e-13\n", + " -5.462297e-14\n", " 0\n", " 0\n", " 0\n", @@ -2081,81 +2003,89 @@ " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 6.938894e-18\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 4.336809e-19\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", - " 34\n", - " 65\n", + " 32\n", " 0\n", - " 3.658190e+03\n", " 0\n", - " 4725\n", + " 7.860363e-07\n", " 0\n", - " 4.025210e+03\n", " 0\n", - " -5.805493e-04\n", " 0\n", - " 9.934775e-06\n", + " 9.573996e-06\n", " 0\n", - " 59\n", + " -1.421085e-14\n", " 0\n", - " 2.247954e-05\n", + " 2.220446e-14\n", " 0\n", - " 2\n", " 0\n", - " -7.906166e-06\n", " 0\n", - " 29\n", + " -1.110223e-16\n", " 0\n", - " -4.057160e-06\n", " 0\n", - " 5\n", " 0\n", - " -1.614228e-06\n", + " 0.000000e+00\n", " 0\n", - " 26\n", " 0\n", - " -9.078800e-06\n", " 0\n", - " 3\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", " 0\n", - " 3.105567e-06\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 4.336809e-19\n", " 0\n", " \n", " \n", - " 35\n", + " 33\n", " 0\n", " 0\n", - " 2.461672e-05\n", + " 2.105534e-05\n", " 0\n", " 0\n", " 0\n", - " 1.065433e-05\n", + " 8.106232e-06\n", " 0\n", - " -2.842171e-14\n", + " 1.421085e-14\n", " 0\n", - " -1.119105e-13\n", + " -1.180167e-13\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", + " 0\n", + " 0\n", + " 0\n", + " -6.938894e-18\n", + " 0\n", + " 0\n", + " 0\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -2167,7 +2097,61 @@ " 0\n", " 0\n", " 0\n", - " 6.938894e-18\n", + " 4.336809e-19\n", + " 0\n", + " \n", + " \n", + " 34\n", + " 0\n", + " 0\n", + " 1.076609e-05\n", + " 0\n", + " 0\n", + " 0\n", + " 1.370907e-06\n", + " 0\n", + " -4.263256e-14\n", + " 0\n", + " -7.854828e-14\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 1.110223e-16\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 3.469447e-18\n", + " 0\n", + " \n", + " \n", + " 35\n", + " 0\n", + " 0\n", + " 2.440810e-05\n", + " 0\n", + " 0\n", + " 0\n", + " 1.051277e-05\n", + " 0\n", + " -3.552714e-14\n", + " 0\n", + " -1.123546e-13\n", " 0\n", " 0\n", " 0\n", @@ -2175,6 +2159,22 @@ " 0\n", " 0\n", " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 1.110223e-16\n", + " 0\n", + " 0\n", + " 0\n", + " 6.938894e-18\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", " 8.673617e-19\n", " 0\n", " \n", @@ -2182,15 +2182,15 @@ " 36\n", " 0\n", " 0\n", - " -2.227724e-06\n", + " -2.786517e-06\n", " 0\n", " 0\n", " 0\n", - " 1.765788e-06\n", + " 1.545995e-06\n", " 0\n", - " -2.842171e-14\n", + " 1.421085e-14\n", " 0\n", - " 4.574119e-14\n", + " 5.284662e-14\n", " 0\n", " 0\n", " 0\n", @@ -2202,7 +2202,7 @@ " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -2214,26 +2214,26 @@ " 0\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 37\n", " 0\n", " 0\n", - " 4.132837e-05\n", + " 4.176795e-05\n", " 0\n", " 0\n", " 0\n", - " 8.724630e-06\n", + " 9.037554e-06\n", " 0\n", " 2.842171e-14\n", " 0\n", - " -1.619260e-13\n", + " -1.627587e-13\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -2241,7 +2241,7 @@ " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -2249,26 +2249,26 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -3.469447e-18\n", " 0\n", " \n", " \n", " 38\n", " 0\n", " 0\n", - " -1.652166e-06\n", + " -1.637265e-06\n", " 0\n", " 0\n", " 0\n", - " -9.313226e-07\n", + " -9.834766e-07\n", " 0\n", - " 7.105427e-15\n", + " 3.552714e-14\n", " 0\n", - " 2.753353e-14\n", + " 2.731149e-14\n", " 0\n", " 0\n", " 0\n", @@ -2276,50 +2276,50 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -2.220446e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " -8.326673e-17\n", " 0\n", " 0\n", " 0\n", - " 4.336809e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 39\n", " 0\n", " 0\n", - " -2.626330e-06\n", + " -2.622604e-06\n", " 0\n", " 0\n", " 0\n", - " 1.177192e-06\n", + " 1.262873e-06\n", " 0\n", - " -3.552714e-14\n", + " 0.000000e+00\n", " 0\n", - " 5.595524e-14\n", + " 5.706546e-14\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 2.220446e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -2327,34 +2327,34 @@ " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " -4.336809e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 40\n", " 0\n", " 0\n", - " 7.707626e-06\n", + " 7.059425e-06\n", " 0\n", " 0\n", " 0\n", - " 9.134412e-06\n", + " 8.523464e-06\n", " 0\n", - " 0.000000e+00\n", + " -1.421085e-14\n", " 0\n", - " -2.997602e-14\n", - " -1\n", + " -2.819966e-14\n", " 0\n", " 0\n", - " -1.110223e-16\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 0\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -2362,7 +2362,7 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -2377,15 +2377,15 @@ " 41\n", " 0\n", " 0\n", - " 1.080334e-07\n", + " 1.061708e-07\n", " 0\n", " 0\n", " 0\n", - " -4.228204e-07\n", + " -4.265457e-07\n", " 0\n", - " -4.263256e-14\n", + " 4.263256e-14\n", " 0\n", - " -1.187939e-14\n", + " -1.221245e-14\n", " 0\n", " 0\n", " 0\n", @@ -2401,7 +2401,7 @@ " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -2416,27 +2416,27 @@ " 42\n", " 0\n", " 0\n", - " -1.454502e-04\n", + " -1.428127e-04\n", " 0\n", " 0\n", " 0\n", - " 1.835823e-05\n", + " 1.749396e-05\n", " 0\n", - " -1.421085e-14\n", + " -7.105427e-15\n", " 0\n", - " 3.043121e-13\n", + " 3.047562e-13\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -2444,34 +2444,34 @@ " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " 8.673617e-19\n", " 0\n", " \n", " \n", " 43\n", " 0\n", " 0\n", - " 9.957701e-06\n", + " 9.145588e-06\n", " 0\n", " 0\n", " 0\n", - " -2.288818e-05\n", + " -2.099574e-05\n", " 0\n", - " -2.131628e-14\n", + " -2.842171e-14\n", " 0\n", - " -9.281464e-14\n", + " -8.637535e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -2479,11 +2479,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 2.775558e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -2494,31 +2494,31 @@ " 44\n", " 0\n", " 0\n", - " 1.899153e-05\n", + " 2.032891e-05\n", " 0\n", " 0\n", " 0\n", - " -4.111230e-05\n", + " -3.559887e-05\n", " 0\n", - " 2.131628e-14\n", + " 7.105427e-15\n", " 0\n", - " -1.428857e-13\n", + " -1.499911e-13\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -2526,26 +2526,26 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 6.505213e-19\n", " 0\n", " \n", " \n", " 45\n", " 0\n", " 0\n", - " -3.332272e-06\n", + " -3.321096e-06\n", " 0\n", " 0\n", " 0\n", - " 6.817281e-07\n", + " 7.413328e-07\n", " 0\n", - " -2.842171e-14\n", + " -7.105427e-15\n", " 0\n", - " 6.161738e-14\n", + " 6.206147e-14\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -2553,15 +2553,15 @@ " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -8.326673e-17\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -2572,15 +2572,15 @@ " 46\n", " 0\n", " 0\n", - " 1.317635e-05\n", + " 1.274422e-05\n", " 0\n", " 0\n", " 0\n", - " 1.014024e-05\n", + " 9.723008e-06\n", " 0\n", - " 1.421085e-14\n", + " -2.131628e-14\n", " 0\n", - " -6.517009e-14\n", + " -6.450396e-14\n", " 0\n", " 0\n", " 0\n", @@ -2596,11 +2596,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -2611,19 +2611,19 @@ " 47\n", " 0\n", " 0\n", - " 1.613051e-06\n", + " 3.464520e-07\n", " 0\n", " 0\n", " 0\n", - " 8.359551e-06\n", + " 7.696450e-06\n", " 0\n", - " 4.973799e-14\n", + " -4.973799e-14\n", " 0\n", - " 7.993606e-15\n", + " 1.865175e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -2631,38 +2631,38 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 2.168404e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 48\n", " 0\n", " 0\n", - " 1.262128e-05\n", + " 1.247600e-05\n", " 0\n", " 0\n", " 0\n", - " 4.671514e-06\n", + " 4.783273e-06\n", " 0\n", - " 3.552714e-14\n", + " -4.263256e-14\n", " 0\n", " -8.926193e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -2674,30 +2674,30 @@ " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 49\n", " 0\n", " 0\n", - " 2.615899e-05\n", + " 2.466887e-05\n", " 0\n", " 0\n", " 0\n", - " 1.065433e-05\n", + " 1.028925e-05\n", " 0\n", - " -2.131628e-14\n", + " 4.973799e-14\n", " 0\n", - " -1.190159e-13\n", + " -1.163514e-13\n", " 0\n", " 0\n", " 0\n", @@ -2709,11 +2709,11 @@ " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -2721,26 +2721,26 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.734723e-18\n", " 0\n", " \n", " \n", " 50\n", " 0\n", " 0\n", - " 1.981854e-06\n", + " 1.464039e-06\n", " 0\n", " 0\n", " 0\n", - " 5.200505e-06\n", + " 5.051494e-06\n", " 0\n", - " -2.842171e-14\n", + " 2.842171e-14\n", " 0\n", - " 7.327472e-15\n", + " 1.321165e-14\n", " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -2748,11 +2748,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -2770,84 +2770,84 @@ "text/plain": [ " ticket_count ticket_count_rank current_amount_due \\\n", "ward \n", - "1 0 0 2.923608e-05 \n", - "2 0 0 1.396239e-05 \n", - "3 21 0 1.334800e+03 \n", - "4 1935 0 7.209669e+04 \n", - "5 309 0 1.934395e+04 \n", - "6 0 0 3.892928e-05 \n", - "7 8 0 3.432000e+02 \n", - "8 395 0 2.151348e+04 \n", - "9 39 0 2.016200e+03 \n", - "10 199 0 1.239592e+04 \n", - "11 449 0 2.401794e+04 \n", - "12 802 0 2.340800e+04 \n", - "13 0 0 -2.371147e-06 \n", - "14 0 0 8.527189e-06 \n", - "15 0 0 2.465397e-05 \n", - "16 0 0 4.615635e-05 \n", - "17 349 0 1.988240e+04 \n", - "18 0 0 -3.006309e-06 \n", - "19 58 0 3.719090e+03 \n", - "20 0 0 4.819781e-05 \n", - "21 0 0 1.519173e-05 \n", - "22 0 0 2.104044e-05 \n", - "23 0 0 -2.320856e-06 \n", - "24 0 0 5.628914e-05 \n", - "25 4184 0 1.786686e+05 \n", - "26 0 0 3.063679e-05 \n", - "27 0 0 4.252046e-05 \n", - "28 0 0 3.261864e-05 \n", - "29 0 0 3.369898e-05 \n", - "30 0 0 6.780028e-06 \n", - "31 0 0 1.204759e-05 \n", - "32 0 0 1.393259e-06 \n", - "33 0 0 2.129748e-05 \n", - "34 65 0 3.658190e+03 \n", - "35 0 0 2.461672e-05 \n", - "36 0 0 -2.227724e-06 \n", - "37 0 0 4.132837e-05 \n", - "38 0 0 -1.652166e-06 \n", - "39 0 0 -2.626330e-06 \n", - "40 0 0 7.707626e-06 \n", - "41 0 0 1.080334e-07 \n", - "42 0 0 -1.454502e-04 \n", - "43 0 0 9.957701e-06 \n", - "44 0 0 1.899153e-05 \n", - "45 0 0 -3.332272e-06 \n", - "46 0 0 1.317635e-05 \n", - "47 0 0 1.613051e-06 \n", - "48 0 0 1.262128e-05 \n", - "49 0 0 2.615899e-05 \n", - "50 0 0 1.981854e-06 \n", + "1 0 0 2.673268e-05 \n", + "2 0 0 1.467764e-05 \n", + "3 0 0 2.803653e-05 \n", + "4 0 0 1.683086e-05 \n", + "5 0 0 2.440065e-05 \n", + "6 0 0 3.805012e-05 \n", + "7 0 0 1.917034e-05 \n", + "8 0 0 1.595169e-05 \n", + "9 0 0 -2.086163e-07 \n", + "10 0 0 -4.071742e-06 \n", + "11 0 0 -2.719462e-07 \n", + "12 0 0 2.012402e-05 \n", + "13 0 0 -2.341345e-06 \n", + "14 0 0 8.646399e-06 \n", + "15 0 0 2.058595e-05 \n", + "16 0 0 4.453212e-05 \n", + "17 0 0 3.380328e-05 \n", + "18 0 0 -2.985820e-06 \n", + "19 0 0 -8.447096e-07 \n", + "20 0 0 4.573911e-05 \n", + "21 0 0 1.335517e-05 \n", + "22 0 0 2.045929e-05 \n", + "23 0 0 -2.488494e-06 \n", + "24 0 0 5.733967e-05 \n", + "25 0 0 2.098829e-05 \n", + "26 0 0 2.988428e-05 \n", + "27 0 0 4.594773e-05 \n", + "28 0 0 3.819168e-05 \n", + "29 0 0 2.997369e-05 \n", + "30 0 0 6.757677e-06 \n", + "31 0 0 1.183897e-05 \n", + "32 0 0 7.860363e-07 \n", + "33 0 0 2.105534e-05 \n", + "34 0 0 1.076609e-05 \n", + "35 0 0 2.440810e-05 \n", + "36 0 0 -2.786517e-06 \n", + "37 0 0 4.176795e-05 \n", + "38 0 0 -1.637265e-06 \n", + "39 0 0 -2.622604e-06 \n", + "40 0 0 7.059425e-06 \n", + "41 0 0 1.061708e-07 \n", + "42 0 0 -1.428127e-04 \n", + "43 0 0 9.145588e-06 \n", + "44 0 0 2.032891e-05 \n", + "45 0 0 -3.321096e-06 \n", + "46 0 0 1.274422e-05 \n", + "47 0 0 3.464520e-07 \n", + "48 0 0 1.247600e-05 \n", + "49 0 0 2.466887e-05 \n", + "50 0 0 1.464039e-06 \n", "\n", " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", "ward \n", "1 0 0 0 \n", "2 0 0 0 \n", - "3 0 2755 0 \n", - "4 0 109620 0 \n", - "5 0 22740 0 \n", + "3 0 0 0 \n", + "4 0 0 0 \n", + "5 0 0 0 \n", "6 0 0 0 \n", - "7 0 435 0 \n", - "8 0 24900 0 \n", - "9 0 2145 0 \n", - "10 0 12110 0 \n", - "11 0 29670 0 \n", - "12 0 47275 0 \n", + "7 0 0 0 \n", + "8 0 0 0 \n", + "9 0 0 0 \n", + "10 0 0 0 \n", + "11 0 0 0 \n", + "12 0 0 0 \n", "13 0 0 0 \n", "14 0 0 0 \n", "15 0 0 0 \n", "16 0 0 0 \n", - "17 0 23890 0 \n", + "17 0 0 0 \n", "18 0 0 0 \n", - "19 0 4450 0 \n", + "19 0 0 0 \n", "20 0 0 0 \n", "21 0 0 0 \n", "22 0 0 0 \n", "23 0 0 0 \n", "24 0 0 0 \n", - "25 0 243795 0 \n", + "25 0 0 0 \n", "26 0 0 0 \n", "27 0 0 0 \n", "28 0 0 0 \n", @@ -2856,7 +2856,7 @@ "31 0 0 0 \n", "32 0 0 0 \n", "33 0 0 0 \n", - "34 0 4725 0 \n", + "34 0 0 0 \n", "35 0 0 0 \n", "36 0 0 0 \n", "37 0 0 0 \n", @@ -2876,190 +2876,190 @@ "\n", " total_payments total_payments_rank avg_per_ticket \\\n", "ward \n", - "1 -1.730025e-05 0 0.000000e+00 \n", - "2 -1.676381e-05 0 -3.552714e-14 \n", - "3 1.791000e+03 0 1.229440e-03 \n", - "4 8.887544e+04 0 -5.277124e-04 \n", - "5 1.616363e+04 0 2.868258e-03 \n", - "6 1.294911e-05 0 -2.842171e-14 \n", - "7 1.720000e+02 0 -2.007704e-04 \n", - "8 1.981637e+04 0 -3.733468e-03 \n", - "9 1.295180e+03 0 -1.554128e-03 \n", - "10 8.037420e+03 0 -2.594843e-03 \n", - "11 1.795969e+04 0 1.804341e-03 \n", - "12 4.188098e+04 0 -3.416550e-03 \n", - "13 -1.069158e-06 0 1.421085e-14 \n", - "14 4.045665e-06 0 2.842171e-14 \n", - "15 6.839633e-06 0 -2.842171e-14 \n", - "16 1.048297e-05 0 -4.263256e-14 \n", - "17 1.713653e+04 0 -2.038958e-03 \n", - "18 -1.689419e-06 0 -2.842171e-14 \n", - "19 2.402500e+03 0 1.403785e-03 \n", - "20 1.245737e-05 0 -1.421085e-14 \n", - "21 5.085021e-06 0 2.842171e-14 \n", - "22 5.036592e-06 0 -2.842171e-14 \n", - "23 3.222376e-06 0 1.421085e-14 \n", - "24 1.132488e-05 0 0.000000e+00 \n", - "25 1.801621e+05 0 -2.850664e-03 \n", - "26 1.303107e-05 0 7.105427e-15 \n", - "27 -2.898276e-05 0 -2.842171e-14 \n", - "28 1.764297e-05 0 -4.263256e-14 \n", - "29 1.019239e-05 0 -2.842171e-14 \n", - "30 5.848706e-06 0 -4.973799e-14 \n", - "31 8.247793e-06 0 3.552714e-14 \n", - "32 1.023710e-05 0 -4.263256e-14 \n", - "33 8.389354e-06 0 0.000000e+00 \n", - "34 4.025210e+03 0 -5.805493e-04 \n", - "35 1.065433e-05 0 -2.842171e-14 \n", - "36 1.765788e-06 0 -2.842171e-14 \n", - "37 8.724630e-06 0 2.842171e-14 \n", - "38 -9.313226e-07 0 7.105427e-15 \n", - "39 1.177192e-06 0 -3.552714e-14 \n", - "40 9.134412e-06 0 0.000000e+00 \n", - "41 -4.228204e-07 0 -4.263256e-14 \n", - "42 1.835823e-05 0 -1.421085e-14 \n", - "43 -2.288818e-05 0 -2.131628e-14 \n", - "44 -4.111230e-05 0 2.131628e-14 \n", - "45 6.817281e-07 0 -2.842171e-14 \n", - "46 1.014024e-05 0 1.421085e-14 \n", - "47 8.359551e-06 0 4.973799e-14 \n", - "48 4.671514e-06 0 3.552714e-14 \n", - "49 1.065433e-05 0 -2.131628e-14 \n", - "50 5.200505e-06 0 -2.842171e-14 \n", + "1 -1.412630e-05 0 0.000000e+00 \n", + "2 -1.725554e-05 0 -7.105427e-15 \n", + "3 1.446903e-05 0 -2.131628e-14 \n", + "4 -8.404255e-06 0 2.842171e-14 \n", + "5 1.393259e-05 0 7.105427e-15 \n", + "6 1.320988e-05 0 5.684342e-14 \n", + "7 4.161149e-06 0 4.263256e-14 \n", + "8 6.012619e-06 0 1.421085e-14 \n", + "9 -5.885959e-07 0 -5.684342e-14 \n", + "10 -6.705523e-07 0 4.263256e-14 \n", + "11 4.224479e-06 0 -1.421085e-14 \n", + "12 8.136034e-06 0 1.421085e-14 \n", + "13 -1.017004e-06 0 -4.263256e-14 \n", + "14 4.008412e-06 0 4.263256e-14 \n", + "15 6.116927e-06 0 1.421085e-14 \n", + "16 1.034886e-05 0 2.842171e-14 \n", + "17 9.424984e-06 0 0.000000e+00 \n", + "18 -1.687557e-06 0 -4.263256e-14 \n", + "19 -1.123175e-06 0 2.842171e-14 \n", + "20 1.161546e-05 0 -4.263256e-14 \n", + "21 4.656613e-06 0 2.842171e-14 \n", + "22 4.962087e-06 0 0.000000e+00 \n", + "23 2.749264e-06 0 1.421085e-14 \n", + "24 1.144409e-05 0 4.263256e-14 \n", + "25 -1.239777e-05 0 2.842171e-14 \n", + "26 1.304597e-05 0 -2.842171e-14 \n", + "27 -2.536178e-05 0 1.421085e-14 \n", + "28 1.865625e-05 0 -4.263256e-14 \n", + "29 9.767711e-06 0 4.263256e-14 \n", + "30 5.699694e-06 0 -2.842171e-14 \n", + "31 8.016825e-06 0 -1.421085e-14 \n", + "32 9.573996e-06 0 -1.421085e-14 \n", + "33 8.106232e-06 0 1.421085e-14 \n", + "34 1.370907e-06 0 -4.263256e-14 \n", + "35 1.051277e-05 0 -3.552714e-14 \n", + "36 1.545995e-06 0 1.421085e-14 \n", + "37 9.037554e-06 0 2.842171e-14 \n", + "38 -9.834766e-07 0 3.552714e-14 \n", + "39 1.262873e-06 0 0.000000e+00 \n", + "40 8.523464e-06 0 -1.421085e-14 \n", + "41 -4.265457e-07 0 4.263256e-14 \n", + "42 1.749396e-05 0 -7.105427e-15 \n", + "43 -2.099574e-05 0 -2.842171e-14 \n", + "44 -3.559887e-05 0 7.105427e-15 \n", + "45 7.413328e-07 0 -7.105427e-15 \n", + "46 9.723008e-06 0 -2.131628e-14 \n", + "47 7.696450e-06 0 -4.973799e-14 \n", + "48 4.783273e-06 0 -4.263256e-14 \n", + "49 1.028925e-05 0 4.973799e-14 \n", + "50 5.051494e-06 0 2.842171e-14 \n", "\n", " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", "ward \n", - "1 0 -1.950662e-13 0 0 \n", - "2 0 -1.012523e-13 0 0 \n", - "3 0 -4.827330e-07 0 19 \n", - "4 0 -1.300631e-04 0 1512 \n", - "5 0 -5.181380e-05 0 262 \n", - "6 0 -1.255662e-13 0 0 \n", - "7 0 -9.814407e-07 0 6 \n", - "8 0 -1.549615e-05 0 310 \n", - "9 0 -6.946400e-06 0 20 \n", - "10 0 -7.186215e-05 0 152 \n", - "11 0 -1.814144e-04 0 232 \n", - "12 0 8.415202e-05 0 473 \n", - "13 0 3.419487e-14 0 0 \n", - "14 0 -4.807266e-14 0 0 \n", - "15 0 -1.169065e-13 0 0 \n", - "16 0 -1.605382e-13 0 0 \n", - "17 0 -2.418054e-06 0 283 \n", + "1 0 -1.787459e-13 0 0 \n", + "2 0 -1.065814e-13 0 0 \n", + "3 0 -1.096900e-13 0 0 \n", + "4 0 -1.062483e-13 0 0 \n", + "5 0 -9.259260e-14 0 0 \n", + "6 0 -1.217915e-13 0 0 \n", + "7 0 -1.054157e-13 0 0 \n", + "8 0 -7.327472e-14 0 0 \n", + "9 0 -5.773160e-15 0 0 \n", + "10 0 4.884981e-14 0 0 \n", + "11 0 2.664535e-14 0 0 \n", + "12 0 -9.769963e-14 0 0 \n", + "13 0 3.486100e-14 0 0 \n", + "14 0 -4.984901e-14 0 0 \n", + "15 0 -9.903189e-14 0 0 \n", + "16 0 -1.578737e-13 0 0 \n", + "17 0 -1.332823e-13 0 0 \n", "18 0 3.130829e-14 0 0 \n", - "19 0 -7.172784e-05 0 37 \n", - "20 0 -1.604272e-13 0 0 \n", - "21 0 -7.693846e-14 0 0 \n", - "22 0 -1.024736e-13 0 0 \n", - "23 0 5.329071e-14 0 0 \n", - "24 0 -1.875167e-13 0 0 \n", - "25 0 -4.757110e-04 1 2724 \n", - "26 0 -1.302292e-13 0 0 \n", - "27 0 -2.271516e-13 0 0 \n", - "28 0 -5.156986e-14 0 0 \n", - "29 0 -1.268430e-13 0 0 \n", - "30 0 -2.764455e-14 0 0 \n", - "31 0 -5.384582e-14 0 0 \n", - "32 0 1.831868e-14 0 0 \n", - "33 0 -1.181277e-13 0 0 \n", - "34 0 9.934775e-06 0 59 \n", - "35 0 -1.119105e-13 0 0 \n", - "36 0 4.574119e-14 0 0 \n", - "37 0 -1.619260e-13 0 0 \n", - "38 0 2.753353e-14 0 0 \n", - "39 0 5.595524e-14 0 0 \n", - "40 0 -2.997602e-14 -1 0 \n", - "41 0 -1.187939e-14 0 0 \n", - "42 0 3.043121e-13 0 0 \n", - "43 0 -9.281464e-14 0 0 \n", - "44 0 -1.428857e-13 0 0 \n", - "45 0 6.161738e-14 0 0 \n", - "46 0 -6.517009e-14 0 0 \n", - "47 0 7.993606e-15 0 0 \n", + "19 0 6.994405e-15 0 0 \n", + "20 0 -1.582623e-13 0 0 \n", + "21 0 -6.855627e-14 0 0 \n", + "22 0 -9.903189e-14 0 0 \n", + "23 0 5.229150e-14 0 0 \n", + "24 0 -1.910139e-13 0 0 \n", + "25 0 -1.372236e-13 0 0 \n", + "26 0 -1.265654e-13 0 0 \n", + "27 0 -2.364775e-13 0 0 \n", + "28 0 -6.927792e-14 0 0 \n", + "29 0 -1.141864e-13 0 0 \n", + "30 0 -2.897682e-14 0 0 \n", + "31 0 -5.462297e-14 0 0 \n", + "32 0 2.220446e-14 0 0 \n", + "33 0 -1.180167e-13 0 0 \n", + "34 0 -7.854828e-14 0 0 \n", + "35 0 -1.123546e-13 0 0 \n", + "36 0 5.284662e-14 0 0 \n", + "37 0 -1.627587e-13 0 0 \n", + "38 0 2.731149e-14 0 0 \n", + "39 0 5.706546e-14 0 0 \n", + "40 0 -2.819966e-14 0 0 \n", + "41 0 -1.221245e-14 0 0 \n", + "42 0 3.047562e-13 0 0 \n", + "43 0 -8.637535e-14 0 0 \n", + "44 0 -1.499911e-13 0 0 \n", + "45 0 6.206147e-14 0 0 \n", + "46 0 -6.450396e-14 0 0 \n", + "47 0 1.865175e-14 0 0 \n", "48 0 -8.926193e-14 0 0 \n", - "49 0 -1.190159e-13 0 0 \n", - "50 0 7.327472e-15 0 0 \n", + "49 0 -1.163514e-13 0 0 \n", + "50 0 1.321165e-14 0 0 \n", "\n", " police_ticket_count_rank police_ticket_count_pct \\\n", "ward \n", - "1 0 0.000000e+00 \n", - "2 0 0.000000e+00 \n", - "3 0 4.620670e-06 \n", - "4 0 2.060519e-04 \n", - "5 0 1.124420e-04 \n", + "1 0 5.551115e-17 \n", + "2 0 5.551115e-17 \n", + "3 0 1.110223e-16 \n", + "4 0 0.000000e+00 \n", + "5 0 -1.110223e-16 \n", "6 0 0.000000e+00 \n", - "7 0 2.792238e-06 \n", - "8 0 1.642837e-04 \n", - "9 0 -8.856891e-06 \n", - "10 0 9.518341e-05 \n", - "11 0 5.287497e-05 \n", - "12 0 8.713349e-05 \n", - "13 0 0.000000e+00 \n", - "14 0 1.665335e-16 \n", - "15 0 1.110223e-16 \n", + "7 0 -1.110223e-16 \n", + "8 0 0.000000e+00 \n", + "9 0 1.110223e-16 \n", + "10 0 1.110223e-16 \n", + "11 0 -5.551115e-17 \n", + "12 0 -1.110223e-16 \n", + "13 0 5.551115e-17 \n", + "14 0 -1.110223e-16 \n", + "15 0 -2.220446e-16 \n", "16 0 0.000000e+00 \n", - "17 0 7.803109e-05 \n", + "17 0 0.000000e+00 \n", "18 0 1.110223e-16 \n", - "19 0 1.100951e-05 \n", - "20 0 0.000000e+00 \n", - "21 0 0.000000e+00 \n", - "22 0 5.551115e-17 \n", - "23 0 0.000000e+00 \n", + "19 0 -1.110223e-16 \n", + "20 0 1.110223e-16 \n", + "21 0 2.220446e-16 \n", + "22 0 0.000000e+00 \n", + "23 0 1.110223e-16 \n", "24 0 0.000000e+00 \n", - "25 0 5.345568e-04 \n", - "26 0 0.000000e+00 \n", - "27 0 -1.110223e-16 \n", - "28 0 -2.220446e-16 \n", + "25 0 -1.110223e-16 \n", + "26 0 1.110223e-16 \n", + "27 0 0.000000e+00 \n", + "28 0 1.110223e-16 \n", "29 0 0.000000e+00 \n", - "30 0 -1.110223e-16 \n", - "31 0 -1.665335e-16 \n", - "32 0 0.000000e+00 \n", - "33 0 0.000000e+00 \n", - "34 0 2.247954e-05 \n", - "35 0 0.000000e+00 \n", + "30 0 1.110223e-16 \n", + "31 0 0.000000e+00 \n", + "32 0 -1.110223e-16 \n", + "33 0 -5.551115e-17 \n", + "34 0 0.000000e+00 \n", + "35 0 5.551115e-17 \n", "36 0 -1.110223e-16 \n", - "37 0 0.000000e+00 \n", + "37 0 1.110223e-16 \n", "38 0 0.000000e+00 \n", - "39 0 1.110223e-16 \n", - "40 0 -1.110223e-16 \n", + "39 0 0.000000e+00 \n", + "40 0 0.000000e+00 \n", "41 0 0.000000e+00 \n", - "42 0 1.110223e-16 \n", - "43 0 0.000000e+00 \n", - "44 0 -5.551115e-17 \n", - "45 0 1.110223e-16 \n", + "42 0 0.000000e+00 \n", + "43 0 5.551115e-17 \n", + "44 0 0.000000e+00 \n", + "45 0 0.000000e+00 \n", "46 0 0.000000e+00 \n", - "47 0 0.000000e+00 \n", - "48 0 0.000000e+00 \n", + "47 0 -1.110223e-16 \n", + "48 0 1.110223e-16 \n", "49 0 0.000000e+00 \n", - "50 0 -1.110223e-16 \n", + "50 0 0.000000e+00 \n", "\n", " police_ticket_count_pct_rank contested_ticket_count \\\n", "ward \n", "1 0 0 \n", "2 0 0 \n", - "3 0 3 \n", - "4 0 82 \n", - "5 0 24 \n", + "3 0 0 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", "7 0 0 \n", - "8 0 26 \n", - "9 0 3 \n", - "10 0 11 \n", - "11 0 20 \n", - "12 0 38 \n", + "8 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 25 \n", + "17 0 0 \n", "18 0 0 \n", - "19 0 7 \n", + "19 0 0 \n", "20 0 0 \n", "21 0 0 \n", "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 213 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -3068,7 +3068,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 2 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -3089,49 +3089,49 @@ " contested_ticket_count_rank contested_ticket_count_pct \\\n", "ward \n", "1 0 0.000000e+00 \n", - "2 0 -1.387779e-17 \n", - "3 0 9.711912e-07 \n", - "4 0 -5.821705e-05 \n", - "5 0 -1.553925e-06 \n", + "2 0 0.000000e+00 \n", + "3 0 -1.387779e-17 \n", + "4 0 -1.387779e-17 \n", + "5 0 -1.387779e-17 \n", "6 0 0.000000e+00 \n", - "7 0 -1.041613e-06 \n", - "8 0 -1.101439e-05 \n", - "9 0 -6.244180e-07 \n", - "10 0 -8.034173e-06 \n", - "11 0 -3.159800e-05 \n", - "12 0 7.057821e-09 \n", - "13 0 -1.387779e-17 \n", - "14 0 0.000000e+00 \n", + "7 0 1.387779e-17 \n", + "8 0 1.387779e-17 \n", + "9 0 -1.387779e-17 \n", + "10 0 0.000000e+00 \n", + "11 0 -1.387779e-17 \n", + "12 0 0.000000e+00 \n", + "13 0 0.000000e+00 \n", + "14 0 -6.938894e-18 \n", "15 0 0.000000e+00 \n", - "16 0 -1.387779e-17 \n", - "17 -1 -8.725616e-07 \n", - "18 0 -1.387779e-17 \n", - "19 0 2.670217e-06 \n", + "16 0 -6.938894e-18 \n", + "17 0 -1.387779e-17 \n", + "18 0 0.000000e+00 \n", + "19 0 -1.387779e-17 \n", "20 0 0.000000e+00 \n", "21 0 -1.387779e-17 \n", - "22 0 0.000000e+00 \n", - "23 0 -1.387779e-17 \n", + "22 0 6.938894e-18 \n", + "23 0 0.000000e+00 \n", "24 0 0.000000e+00 \n", - "25 0 -5.570114e-05 \n", - "26 0 0.000000e+00 \n", + "25 0 -2.775558e-17 \n", + "26 0 1.387779e-17 \n", "27 0 0.000000e+00 \n", - "28 0 1.387779e-17 \n", - "29 1 0.000000e+00 \n", + "28 0 0.000000e+00 \n", + "29 0 0.000000e+00 \n", "30 0 0.000000e+00 \n", "31 0 0.000000e+00 \n", - "32 0 -1.387779e-17 \n", - "33 0 1.387779e-17 \n", - "34 0 -7.906166e-06 \n", - "35 0 6.938894e-18 \n", + "32 0 0.000000e+00 \n", + "33 0 -6.938894e-18 \n", + "34 0 0.000000e+00 \n", + "35 0 0.000000e+00 \n", "36 0 -1.387779e-17 \n", "37 0 0.000000e+00 \n", - "38 0 -1.387779e-17 \n", - "39 0 0.000000e+00 \n", - "40 0 -2.775558e-17 \n", + "38 0 0.000000e+00 \n", + "39 0 1.387779e-17 \n", + "40 0 -1.387779e-17 \n", "41 0 0.000000e+00 \n", - "42 0 1.387779e-17 \n", - "43 0 -1.387779e-17 \n", - "44 0 0.000000e+00 \n", + "42 0 -1.387779e-17 \n", + "43 0 1.387779e-17 \n", + "44 0 -1.387779e-17 \n", "45 0 1.387779e-17 \n", "46 0 0.000000e+00 \n", "47 0 0.000000e+00 \n", @@ -3143,29 +3143,29 @@ "ward \n", "1 0 0 \n", "2 0 0 \n", - "3 0 8 \n", - "4 0 1071 \n", - "5 0 146 \n", + "3 0 0 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", - "7 0 3 \n", - "8 0 210 \n", - "9 0 16 \n", - "10 0 74 \n", - "11 0 208 \n", - "12 0 495 \n", + "7 0 0 \n", + "8 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 168 \n", + "17 0 0 \n", "18 0 0 \n", - "19 0 19 \n", + "19 0 0 \n", "20 0 0 \n", "21 0 0 \n", "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 2047 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -3174,7 +3174,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 29 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -3194,84 +3194,84 @@ "\n", " paid_ticket_count_rank paid_ticket_count_pct \\\n", "ward \n", - "1 0 0.000000e+00 \n", + "1 0 1.110223e-16 \n", "2 0 0.000000e+00 \n", - "3 0 -3.749177e-06 \n", - "4 0 -8.143196e-05 \n", - "5 0 -3.721707e-05 \n", - "6 0 0.000000e+00 \n", - "7 0 -1.347219e-06 \n", - "8 0 4.370182e-06 \n", - "9 0 -9.113263e-06 \n", - "10 0 -8.854411e-05 \n", - "11 0 -1.313374e-04 \n", - "12 0 4.439429e-05 \n", - "13 0 -1.110223e-16 \n", - "14 0 -1.110223e-16 \n", + "3 0 0.000000e+00 \n", + "4 0 -1.110223e-16 \n", + "5 0 0.000000e+00 \n", + "6 0 -1.110223e-16 \n", + "7 0 -5.551115e-17 \n", + "8 0 -1.110223e-16 \n", + "9 0 -1.110223e-16 \n", + "10 0 0.000000e+00 \n", + "11 0 -1.110223e-16 \n", + "12 0 -1.110223e-16 \n", + "13 0 1.110223e-16 \n", + "14 0 0.000000e+00 \n", "15 0 1.110223e-16 \n", - "16 0 5.551115e-17 \n", - "17 0 -7.195541e-06 \n", - "18 0 1.110223e-16 \n", - "19 0 -8.174453e-05 \n", + "16 0 0.000000e+00 \n", + "17 0 1.665335e-16 \n", + "18 0 0.000000e+00 \n", + "19 0 0.000000e+00 \n", "20 0 0.000000e+00 \n", - "21 0 0.000000e+00 \n", - "22 0 0.000000e+00 \n", - "23 0 -1.110223e-16 \n", - "24 0 -5.551115e-17 \n", - "25 0 -4.478696e-04 \n", + "21 0 2.220446e-16 \n", + "22 0 1.110223e-16 \n", + "23 0 1.110223e-16 \n", + "24 0 0.000000e+00 \n", + "25 0 0.000000e+00 \n", "26 0 0.000000e+00 \n", "27 0 0.000000e+00 \n", "28 0 1.110223e-16 \n", "29 0 0.000000e+00 \n", - "30 0 1.110223e-16 \n", - "31 0 0.000000e+00 \n", + "30 0 -1.110223e-16 \n", + "31 0 -1.110223e-16 \n", "32 0 0.000000e+00 \n", - "33 0 1.110223e-16 \n", - "34 0 -4.057160e-06 \n", - "35 0 0.000000e+00 \n", - "36 0 -1.110223e-16 \n", - "37 0 -5.551115e-17 \n", - "38 0 -2.220446e-16 \n", - "39 0 2.220446e-16 \n", + "33 0 -1.110223e-16 \n", + "34 0 1.110223e-16 \n", + "35 0 1.110223e-16 \n", + "36 0 1.110223e-16 \n", + "37 0 5.551115e-17 \n", + "38 0 0.000000e+00 \n", + "39 0 -1.110223e-16 \n", "40 0 0.000000e+00 \n", "41 0 0.000000e+00 \n", - "42 0 0.000000e+00 \n", + "42 0 1.110223e-16 \n", "43 0 0.000000e+00 \n", - "44 0 1.110223e-16 \n", - "45 0 -1.110223e-16 \n", + "44 0 -1.110223e-16 \n", + "45 0 0.000000e+00 \n", "46 0 0.000000e+00 \n", - "47 0 0.000000e+00 \n", + "47 0 1.110223e-16 \n", "48 0 0.000000e+00 \n", - "49 0 -1.110223e-16 \n", - "50 0 0.000000e+00 \n", + "49 0 0.000000e+00 \n", + "50 0 -1.110223e-16 \n", "\n", " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", "ward \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", - "4 0 115 \n", - "5 0 26 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", - "7 0 1 \n", - "8 0 29 \n", - "9 0 3 \n", - "10 0 11 \n", - "11 0 17 \n", - "12 0 42 \n", + "7 0 0 \n", + "8 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 35 \n", + "17 0 0 \n", "18 0 0 \n", - "19 0 5 \n", + "19 0 0 \n", "20 0 0 \n", "21 0 0 \n", "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 260 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -3280,7 +3280,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 5 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -3300,84 +3300,84 @@ "\n", " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", "ward \n", - "1 0 -1.387779e-17 \n", + "1 0 1.387779e-17 \n", "2 0 -1.387779e-17 \n", - "3 0 -1.519207e-06 \n", - "4 0 -4.440927e-05 \n", - "5 0 -7.339376e-07 \n", - "6 0 0.000000e+00 \n", - "7 0 5.219463e-07 \n", - "8 0 -9.171336e-06 \n", - "9 0 -6.428599e-07 \n", - "10 0 -1.075787e-05 \n", - "11 0 -2.932489e-05 \n", - "12 0 2.776381e-06 \n", + "3 0 -1.387779e-17 \n", + "4 0 -1.387779e-17 \n", + "5 0 -1.387779e-17 \n", + "6 0 -1.387779e-17 \n", + "7 0 -1.387779e-17 \n", + "8 0 -1.387779e-17 \n", + "9 0 -1.387779e-17 \n", + "10 0 -1.387779e-17 \n", + "11 0 1.387779e-17 \n", + "12 0 6.938894e-18 \n", "13 0 0.000000e+00 \n", - "14 0 0.000000e+00 \n", + "14 0 6.938894e-18 \n", "15 0 0.000000e+00 \n", - "16 0 -1.387779e-17 \n", - "17 0 1.142160e-05 \n", + "16 0 0.000000e+00 \n", + "17 0 -1.387779e-17 \n", "18 0 0.000000e+00 \n", - "19 0 -1.529432e-06 \n", + "19 0 1.387779e-17 \n", "20 0 -1.387779e-17 \n", - "21 0 0.000000e+00 \n", + "21 0 -2.775558e-17 \n", "22 0 0.000000e+00 \n", - "23 0 0.000000e+00 \n", + "23 0 -1.387779e-17 \n", "24 0 0.000000e+00 \n", - "25 0 -1.874044e-05 \n", - "26 0 -6.938894e-18 \n", - "27 0 0.000000e+00 \n", - "28 0 0.000000e+00 \n", - "29 0 0.000000e+00 \n", + "25 0 1.387779e-17 \n", + "26 0 6.938894e-18 \n", + "27 0 1.387779e-17 \n", + "28 0 1.387779e-17 \n", + "29 0 -1.387779e-17 \n", "30 0 -6.938894e-18 \n", "31 0 0.000000e+00 \n", - "32 0 -1.387779e-17 \n", + "32 0 0.000000e+00 \n", "33 0 6.938894e-18 \n", - "34 0 -1.614228e-06 \n", + "34 0 0.000000e+00 \n", "35 0 6.938894e-18 \n", "36 0 -1.387779e-17 \n", "37 0 1.387779e-17 \n", - "38 0 0.000000e+00 \n", + "38 0 -1.387779e-17 \n", "39 0 -1.387779e-17 \n", - "40 0 -1.387779e-17 \n", - "41 0 1.387779e-17 \n", + "40 0 1.387779e-17 \n", + "41 0 0.000000e+00 \n", "42 0 1.387779e-17 \n", - "43 0 0.000000e+00 \n", - "44 0 1.387779e-17 \n", - "45 0 0.000000e+00 \n", - "46 0 0.000000e+00 \n", - "47 0 0.000000e+00 \n", - "48 0 1.387779e-17 \n", - "49 0 0.000000e+00 \n", - "50 0 0.000000e+00 \n", + "43 0 1.387779e-17 \n", + "44 0 0.000000e+00 \n", + "45 0 1.387779e-17 \n", + "46 0 -1.387779e-17 \n", + "47 0 -1.387779e-17 \n", + "48 0 -1.387779e-17 \n", + "49 0 1.387779e-17 \n", + "50 0 -1.387779e-17 \n", "\n", " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", "ward \n", "1 0 0 \n", "2 0 0 \n", - "3 0 7 \n", - "4 0 652 \n", - "5 0 141 \n", + "3 0 0 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", - "7 0 4 \n", - "8 0 181 \n", - "9 0 16 \n", - "10 0 79 \n", - "11 0 130 \n", - "12 0 185 \n", + "7 0 0 \n", + "8 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 145 \n", + "17 0 0 \n", "18 0 0 \n", - "19 0 23 \n", + "19 0 0 \n", "20 0 0 \n", "21 0 0 \n", "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 1378 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -3386,7 +3386,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 26 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -3407,7 +3407,7 @@ " seized_or_suspended_ticket_count_rank \\\n", "ward \n", "1 0 \n", - "2 1 \n", + "2 0 \n", "3 0 \n", "4 0 \n", "5 0 \n", @@ -3422,7 +3422,7 @@ "14 0 \n", "15 0 \n", "16 0 \n", - "17 -1 \n", + "17 0 \n", "18 0 \n", "19 0 \n", "20 0 \n", @@ -3430,8 +3430,8 @@ "22 0 \n", "23 0 \n", "24 0 \n", - "25 -1 \n", - "26 1 \n", + "25 0 \n", + "26 0 \n", "27 0 \n", "28 0 \n", "29 0 \n", @@ -3461,52 +3461,52 @@ "ward \n", "1 -2.775558e-17 \n", "2 0.000000e+00 \n", - "3 -1.420337e-07 \n", - "4 5.511816e-05 \n", - "5 3.284334e-05 \n", - "6 -5.551115e-17 \n", - "7 3.939448e-07 \n", - "8 1.481744e-05 \n", - "9 -1.610630e-06 \n", - "10 3.678483e-05 \n", - "11 3.319619e-05 \n", - "12 -6.284368e-05 \n", + "3 -5.551115e-17 \n", + "4 0.000000e+00 \n", + "5 5.551115e-17 \n", + "6 0.000000e+00 \n", + "7 0.000000e+00 \n", + "8 -1.110223e-16 \n", + "9 5.551115e-17 \n", + "10 -5.551115e-17 \n", + "11 2.775558e-17 \n", + "12 5.551115e-17 \n", "13 2.775558e-17 \n", "14 0.000000e+00 \n", - "15 0.000000e+00 \n", - "16 -5.551115e-17 \n", - "17 -1.675568e-05 \n", - "18 -5.551115e-17 \n", - "19 2.922248e-05 \n", - "20 -5.551115e-17 \n", - "21 0.000000e+00 \n", - "22 -1.110223e-16 \n", - "23 2.775558e-17 \n", - "24 -1.665335e-16 \n", - "25 2.514976e-04 \n", - "26 -5.551115e-17 \n", + "15 -5.551115e-17 \n", + "16 5.551115e-17 \n", + "17 0.000000e+00 \n", + "18 0.000000e+00 \n", + "19 -5.551115e-17 \n", + "20 0.000000e+00 \n", + "21 5.551115e-17 \n", + "22 0.000000e+00 \n", + "23 -2.775558e-17 \n", + "24 0.000000e+00 \n", + "25 -2.775558e-17 \n", + "26 0.000000e+00 \n", "27 0.000000e+00 \n", - "28 0.000000e+00 \n", - "29 5.551115e-17 \n", - "30 0.000000e+00 \n", - "31 5.551115e-17 \n", - "32 -2.775558e-17 \n", - "33 -5.551115e-17 \n", - "34 -9.078800e-06 \n", - "35 5.551115e-17 \n", + "28 -5.551115e-17 \n", + "29 -5.551115e-17 \n", + "30 5.551115e-17 \n", + "31 0.000000e+00 \n", + "32 0.000000e+00 \n", + "33 0.000000e+00 \n", + "34 0.000000e+00 \n", + "35 0.000000e+00 \n", "36 0.000000e+00 \n", - "37 0.000000e+00 \n", - "38 5.551115e-17 \n", - "39 -5.551115e-17 \n", + "37 5.551115e-17 \n", + "38 -8.326673e-17 \n", + "39 5.551115e-17 \n", "40 0.000000e+00 \n", "41 2.775558e-17 \n", - "42 -2.775558e-17 \n", - "43 2.775558e-17 \n", + "42 0.000000e+00 \n", + "43 -2.775558e-17 \n", "44 0.000000e+00 \n", - "45 -8.326673e-17 \n", - "46 0.000000e+00 \n", - "47 0.000000e+00 \n", - "48 -5.551115e-17 \n", + "45 -5.551115e-17 \n", + "46 2.775558e-17 \n", + "47 2.775558e-17 \n", + "48 0.000000e+00 \n", "49 5.551115e-17 \n", "50 0.000000e+00 \n", "\n", @@ -3515,28 +3515,28 @@ "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", - "4 0 15 \n", - "5 0 7 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", "7 0 0 \n", - "8 0 11 \n", + "8 0 0 \n", "9 0 0 \n", "10 0 0 \n", - "11 0 3 \n", - "12 0 1 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 6 \n", + "17 0 0 \n", "18 0 0 \n", - "19 0 1 \n", + "19 0 0 \n", "20 0 0 \n", "21 0 0 \n", "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 37 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -3545,7 +3545,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 3 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -3565,55 +3565,55 @@ "\n", " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", "ward \n", - "1 0 0.000000e+00 \n", - "2 0 4.336809e-19 \n", - "3 0 -2.470379e-07 \n", - "4 0 -1.860863e-06 \n", - "5 0 1.981061e-06 \n", + "1 0 -4.336809e-19 \n", + "2 0 -4.336809e-19 \n", + "3 0 0.000000e+00 \n", + "4 0 -3.469447e-18 \n", + "5 0 -3.469447e-18 \n", "6 0 3.469447e-18 \n", - "7 0 -3.241942e-07 \n", - "8 0 2.944374e-06 \n", - "9 0 -2.085649e-06 \n", - "10 0 -5.751570e-06 \n", - "11 0 7.198188e-07 \n", - "12 0 -3.288856e-06 \n", - "13 0 8.673617e-19 \n", + "7 0 0.000000e+00 \n", + "8 0 0.000000e+00 \n", + "9 0 -3.469447e-18 \n", + "10 0 -1.734723e-18 \n", + "11 0 -8.673617e-19 \n", + "12 0 -8.673617e-19 \n", + "13 0 0.000000e+00 \n", "14 0 0.000000e+00 \n", - "15 0 1.734723e-18 \n", - "16 0 -3.469447e-18 \n", - "17 0 -4.137846e-06 \n", - "18 0 0.000000e+00 \n", - "19 0 1.674406e-06 \n", + "15 0 -8.673617e-19 \n", + "16 0 3.469447e-18 \n", + "17 0 0.000000e+00 \n", + "18 0 3.469447e-18 \n", + "19 0 1.734723e-18 \n", "20 0 0.000000e+00 \n", "21 0 0.000000e+00 \n", "22 0 0.000000e+00 \n", - "23 0 -4.336809e-19 \n", - "24 0 0.000000e+00 \n", - "25 0 1.003383e-05 \n", - "26 0 -8.673617e-19 \n", - "27 0 0.000000e+00 \n", - "28 0 3.469447e-18 \n", - "29 0 6.938894e-18 \n", - "30 0 0.000000e+00 \n", - "31 0 0.000000e+00 \n", - "32 1 0.000000e+00 \n", + "23 0 0.000000e+00 \n", + "24 0 -6.938894e-18 \n", + "25 0 0.000000e+00 \n", + "26 0 -1.734723e-18 \n", + "27 0 1.734723e-18 \n", + "28 0 0.000000e+00 \n", + "29 0 3.469447e-18 \n", + "30 0 -4.336809e-19 \n", + "31 0 -8.673617e-19 \n", + "32 0 4.336809e-19 \n", "33 0 4.336809e-19 \n", - "34 0 3.105567e-06 \n", + "34 0 3.469447e-18 \n", "35 0 8.673617e-19 \n", - "36 0 -8.673617e-19 \n", - "37 0 0.000000e+00 \n", - "38 0 4.336809e-19 \n", - "39 0 -4.336809e-19 \n", + "36 0 0.000000e+00 \n", + "37 0 -3.469447e-18 \n", + "38 0 0.000000e+00 \n", + "39 0 0.000000e+00 \n", "40 0 -4.336809e-19 \n", "41 0 0.000000e+00 \n", - "42 0 -8.673617e-19 \n", + "42 0 8.673617e-19 \n", "43 0 0.000000e+00 \n", - "44 0 0.000000e+00 \n", + "44 0 6.505213e-19 \n", "45 0 -4.336809e-19 \n", "46 0 0.000000e+00 \n", - "47 0 2.168404e-19 \n", - "48 0 -8.673617e-19 \n", - "49 0 0.000000e+00 \n", + "47 0 0.000000e+00 \n", + "48 0 0.000000e+00 \n", + "49 0 1.734723e-18 \n", "50 0 0.000000e+00 \n", "\n", " bankruptcy_ticket_count_pct_rank \n", @@ -3787,15 +3787,15 @@ " 1\n", " 0\n", " 0\n", - " -1.899898e-06\n", + " -1.803041e-06\n", " 0\n", " 0\n", " 0\n", - " 3.993511e-06\n", + " 3.647059e-06\n", " 0\n", - " 4.263256e-14\n", + " -1.421085e-14\n", " 0\n", - " 6.339373e-14\n", + " 6.117329e-14\n", " 0\n", " 0\n", " 0\n", @@ -3803,15 +3803,15 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -3819,38 +3819,38 @@ " 0\n", " 0\n", " 0\n", - " -4.336809e-19\n", + " 4.336809e-19\n", " 0\n", " \n", " \n", " 2\n", " 0\n", " 0\n", - " 3.501773e-07\n", + " 4.190952e-07\n", " 0\n", " 0\n", " 0\n", - " -2.421439e-07\n", + " -1.266599e-07\n", " 0\n", - " 0.000000e+00\n", + " -2.842171e-14\n", " 0\n", - " -8.326673e-15\n", + " -9.547918e-15\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -3865,23 +3865,23 @@ " 3\n", " 0\n", " 0\n", - " -4.464760e-06\n", + " -4.082918e-06\n", " 0\n", " 0\n", " 0\n", - " -4.358590e-07\n", + " -1.028180e-06\n", " 0\n", - " 4.263256e-14\n", + " 1.421085e-14\n", " 0\n", - " 6.961098e-14\n", + " 5.861978e-14\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -4.163336e-17\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -3889,11 +3889,11 @@ " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -3902,111 +3902,111 @@ " \n", " \n", " 4\n", - " 191\n", " 0\n", - " 1.157456e+04\n", " 0\n", - " 17630\n", + " -1.659617e-06\n", " 0\n", - " 1.091980e+04\n", " 0\n", - " 8.052898e-03\n", " 0\n", - " -1.014012e-04\n", + " 8.493662e-07\n", " 0\n", - " 169\n", + " 4.263256e-14\n", " 0\n", - " 3.577633e-04\n", + " 4.085621e-14\n", " 0\n", - " 25\n", " 0\n", - " 7.464996e-06\n", " 0\n", - " 100\n", + " -5.551115e-17\n", " 0\n", - " -8.651039e-05\n", " 0\n", - " 24\n", " 0\n", - " 1.940404e-05\n", + " 0.000000e+00\n", " 0\n", - " 55\n", " 0\n", - " 4.309093e-05\n", " 0\n", - " 3\n", + " -1.110223e-16\n", + " 0\n", + " 0\n", + " 0\n", + " -1.387779e-17\n", + " 0\n", " 0\n", - " 1.350616e-06\n", + " 0\n", + " -2.775558e-17\n", + " 0\n", + " 0\n", + " 0\n", + " -1.734723e-18\n", " 0\n", " \n", " \n", " 5\n", - " 74\n", " 0\n", - " 5.782750e+03\n", " 0\n", - " 6700\n", + " -4.494563e-06\n", " 0\n", - " 5.087310e+03\n", " 0\n", - " 1.476387e-03\n", " 0\n", - " -2.161579e-05\n", + " -2.194196e-06\n", " 0\n", - " 65\n", + " 5.684342e-14\n", " 0\n", - " 1.516915e-04\n", + " 4.318768e-14\n", " 0\n", - " 8\n", " 0\n", - " -1.613823e-06\n", " 0\n", - " 38\n", + " 0.000000e+00\n", " 0\n", - " -2.606575e-05\n", " 0\n", - " 7\n", " 0\n", - " 2.165708e-06\n", - " 1\n", - " 30\n", + " -1.387779e-17\n", + " 0\n", + " 0\n", + " 0\n", + " -1.110223e-16\n", + " 0\n", + " 0\n", + " 0\n", + " 1.387779e-17\n", + " 0\n", " 0\n", - " 3.373137e-05\n", " 0\n", - " 2\n", + " 0.000000e+00\n", + " 0\n", " 0\n", - " 9.448280e-07\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 6\n", " 0\n", " 0\n", - " 2.644956e-06\n", + " 1.996756e-06\n", " 0\n", " 0\n", " 0\n", - " -1.838431e-06\n", + " -1.819804e-06\n", " 0\n", - " -5.684342e-14\n", + " -4.263256e-14\n", " 0\n", - " -6.306067e-14\n", + " -5.645484e-14\n", " 0\n", " 0\n", " 0\n", - " -1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -4021,286 +4021,286 @@ " 7\n", " 0\n", " 0\n", - " -5.258247e-06\n", + " -4.813075e-06\n", " 0\n", " 0\n", " 0\n", - " -1.097098e-06\n", + " -9.145588e-07\n", " 0\n", - " 0.000000e+00\n", - " 0\n", - " 4.674039e-14\n", + " 2.842171e-14\n", " 0\n", + " 4.907186e-14\n", " 0\n", " 0\n", - " -1.110223e-16\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " -1.387779e-17\n", " 0\n", + " -2.775558e-17\n", " 0\n", " 0\n", - " -1.110223e-16\n", " 0\n", + " -5.551115e-17\n", " 0\n", " 0\n", + " -1\n", " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 6.938894e-18\n", " 0\n", " \n", " \n", " 8\n", - " 69\n", " 0\n", - " 9.443920e+03\n", " 0\n", - " 7150\n", + " -4.524365e-06\n", " 0\n", - " 3.961200e+03\n", " 0\n", - " 2.956866e-03\n", " 0\n", - " -4.897767e-05\n", + " -1.210719e-06\n", " 0\n", - " 45\n", + " 4.263256e-14\n", " 0\n", - " 2.201327e-05\n", + " 4.091172e-14\n", " 0\n", - " 4\n", " 0\n", - " -2.718727e-05\n", " 0\n", - " 29\n", + " -1.110223e-16\n", " 0\n", - " -1.163874e-05\n", " 0\n", - " 6\n", " 0\n", - " -4.036440e-06\n", + " -1.387779e-17\n", + " 0\n", " 0\n", - " 32\n", " 0\n", - " 2.176421e-05\n", + " 5.551115e-17\n", " 0\n", - " 5\n", " 0\n", - " 1.523846e-05\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 9\n", - " 3\n", " 0\n", - " 1.788000e+02\n", " 0\n", - " 180\n", + " -2.145767e-06\n", " 0\n", - " 8.518000e+01\n", " 0\n", - " -1.021634e-03\n", " 0\n", - " -8.265678e-07\n", + " -2.039596e-07\n", " 0\n", - " 1\n", + " -1.421085e-14\n", " 0\n", - " -9.803720e-06\n", + " 4.490852e-14\n", " 0\n", " 0\n", " 0\n", - " -3.072081e-06\n", + " -1.110223e-16\n", + " 0\n", " 0\n", - " 1\n", " 0\n", - " -2.817362e-06\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -2.497483e-06\n", + " 0.000000e+00\n", " 0\n", - " 1\n", " 0\n", - " -2.420732e-06\n", + " -1\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -1.046434e-06\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 10\n", - " 34\n", " 0\n", - " 2.813020e+03\n", " 0\n", - " 3000\n", + " -5.979091e-07\n", " 0\n", - " 2.056520e+03\n", " 0\n", - " -1.228466e-03\n", " 0\n", - " -2.048431e-05\n", + " -1.518056e-07\n", " 0\n", - " 29\n", + " 0.000000e+00\n", " 0\n", - " 1.221621e-04\n", + " 1.659783e-14\n", " 0\n", - " 4\n", " 0\n", - " 8.825259e-06\n", " 0\n", - " 16\n", + " 0.000000e+00\n", " 0\n", - " -3.546159e-05\n", " 0\n", - " 4\n", " 0\n", - " 1.489772e-05\n", + " 1.387779e-17\n", + " 0\n", + " 0\n", " 0\n", - " 10\n", + " -1.110223e-16\n", " 0\n", - " 3.568318e-06\n", " 0\n", + " -1\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " -8.025930e-06\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " -3.469447e-18\n", " 0\n", " \n", " \n", " 11\n", - " 117\n", " 0\n", - " 7.054940e+03\n", " 0\n", - " 9230\n", + " -2.831221e-07\n", " 0\n", - " 4.682460e+03\n", " 0\n", - " 1.006321e-03\n", " 0\n", - " -1.916813e-04\n", + " -9.983778e-07\n", " 0\n", - " 58\n", + " -4.263256e-14\n", " 0\n", - " 1.402044e-04\n", + " -5.218048e-15\n", " 0\n", - " 7\n", " 0\n", - " -3.193899e-05\n", " 0\n", - " 52\n", + " -5.551115e-17\n", " 0\n", - " -1.814281e-04\n", " 0\n", - " 6\n", " 0\n", - " -1.969436e-05\n", + " -1.387779e-17\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 1.387779e-17\n", " 0\n", - " 19\n", " 0\n", - " -9.706305e-07\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -3.785910e-06\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", " 12\n", - " 128\n", " 0\n", - " 4.067690e+03\n", " 0\n", - " 9565\n", + " -1.538545e-06\n", " 0\n", - " 8.529150e+03\n", " 0\n", - " -7.662542e-03\n", " 0\n", - " 7.198300e-05\n", + " -8.568168e-07\n", " 0\n", - " 46\n", + " 2.842171e-14\n", " 0\n", - " -1.043885e-05\n", + " 2.398082e-14\n", " 0\n", - " 12\n", " 0\n", - " 1.913957e-05\n", " 0\n", - " 85\n", + " 5.551115e-17\n", " 0\n", - " 1.151153e-05\n", " 0\n", - " 13\n", " 0\n", - " 3.664811e-05\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", " 0\n", - " 22\n", " 0\n", - " -5.351144e-05\n", + " -1\n", + " -6.938894e-18\n", + " 0\n", + " 0\n", + " 0\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " -5.334059e-06\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 13\n", " 0\n", " 0\n", - " 2.691522e-07\n", - " 0\n", + " 2.607703e-07\n", " 0\n", " 0\n", - " -1.713634e-07\n", " 0\n", - " -4.263256e-14\n", + " -1.695007e-07\n", " 0\n", - " -2.342571e-14\n", + " 0.000000e+00\n", " 0\n", + " -2.231548e-14\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " -5.551115e-17\n", " 0\n", " 0\n", - " 2.775558e-17\n", " 0\n", + " 1.387779e-17\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " 1.110223e-16\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " -1\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 8.673617e-19\n", " 0\n", " \n", " \n", " 14\n", " 0\n", " 0\n", - " -1.292676e-06\n", + " -1.294538e-06\n", " 0\n", " 0\n", " 0\n", - " -7.580966e-07\n", + " -7.636845e-07\n", " 0\n", - " 4.263256e-14\n", + " 1.421085e-14\n", " 0\n", " 2.009504e-14\n", " 0\n", @@ -4314,34 +4314,34 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", - " 0\n", + " -1.110223e-16\n", " 0\n", " 0\n", + " -1\n", " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " -4.336809e-19\n", " 0\n", " \n", " \n", " 15\n", " 0\n", " 0\n", - " -2.611428e-06\n", + " -2.356246e-06\n", " 0\n", " 0\n", " 0\n", - " -9.741634e-07\n", + " -9.275973e-07\n", " 0\n", - " 0.000000e+00\n", + " 1.421085e-14\n", " 0\n", - " 3.341771e-14\n", + " 3.202993e-14\n", " 0\n", " 0\n", " 0\n", @@ -4349,38 +4349,38 @@ " 0\n", " 0\n", " 0\n", - " -6.938894e-18\n", - " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " -1.110223e-16\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", + " -1\n", " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 3.469447e-18\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 16\n", " 0\n", " 0\n", - " -2.831221e-07\n", + " -1.281500e-06\n", " 0\n", " 0\n", " 0\n", - " -1.421198e-06\n", + " -1.367182e-06\n", " 0\n", " 2.842171e-14\n", " 0\n", - " -2.597922e-14\n", + " -1.265654e-14\n", " 0\n", " 0\n", " 0\n", @@ -4388,19 +4388,19 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", - " 0\n", + " -1.387779e-17\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " 5.551115e-17\n", " 0\n", " 0\n", + " -1\n", " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -4409,72 +4409,72 @@ " \n", " \n", " 17\n", - " 73\n", " 0\n", - " 7.599800e+03\n", " 0\n", - " 6615\n", + " -2.056360e-06\n", " 0\n", - " 3.967430e+03\n", " 0\n", - " -4.185085e-03\n", " 0\n", - " -5.723181e-06\n", + " -1.590699e-06\n", " 0\n", - " 61\n", + " -1.705303e-13\n", + " 0\n", + " -9.714451e-15\n", " 0\n", - " 4.847331e-05\n", " 0\n", - " 7\n", " 0\n", - " -4.570665e-06\n", + " 0.000000e+00\n", " 0\n", - " 32\n", " 0\n", - " 5.971855e-06\n", " 0\n", - " 10\n", + " 1.387779e-17\n", " 0\n", - " 2.081021e-05\n", - " -1\n", - " 33\n", " 0\n", - " 5.711644e-06\n", " 0\n", - " 2\n", + " -1.665335e-16\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", " 0\n", - " -6.011613e-06\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 18\n", " 0\n", " 0\n", - " -2.067536e-07\n", - " 0\n", + " -2.104789e-07\n", " 0\n", " 0\n", - " 7.264316e-08\n", " 0\n", - " 2.842171e-14\n", + " 7.357448e-08\n", " 0\n", - " 1.365574e-14\n", + " 4.263256e-14\n", " 0\n", + " 1.321165e-14\n", " 0\n", " 0\n", - " 5.551115e-17\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " -4.163336e-17\n", " 0\n", + " 1.387779e-17\n", " 0\n", " 0\n", - " -1.110223e-16\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " -1\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -4482,65 +4482,65 @@ " 0\n", " 0\n", " 0\n", - " -3.469447e-18\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 19\n", - " 3\n", " 0\n", - " 3.126900e+02\n", " 0\n", - " 180\n", + " 2.165325e-07\n", " 0\n", - " 1.037000e+02\n", " 0\n", - " -1.904244e-03\n", " 0\n", - " -1.906733e-05\n", + " 1.210719e-07\n", " 0\n", - " 3\n", + " -4.263256e-14\n", " 0\n", - " 2.323024e-05\n", + " -1.076916e-14\n", " 0\n", " 0\n", " 0\n", - " -6.848256e-06\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -3.528506e-05\n", + " 0.000000e+00\n", " 0\n", " 0\n", + " -1\n", + " 0.000000e+00\n", " 0\n", - " -5.107940e-06\n", " 0\n", - " 3\n", " 0\n", - " 4.163711e-05\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " -9.472085e-07\n", + " 3.469447e-18\n", " 0\n", " \n", " \n", " 20\n", " 0\n", " 0\n", - " 3.315508e-06\n", + " 2.473593e-06\n", " 0\n", " 0\n", " 0\n", - " -2.020970e-06\n", + " -1.963228e-06\n", " 0\n", " -1.421085e-14\n", " 0\n", - " -7.138734e-14\n", + " -6.322720e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -4548,11 +4548,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -4567,27 +4567,27 @@ " 21\n", " 0\n", " 0\n", - " -5.196780e-06\n", + " -4.949048e-06\n", " 0\n", " 0\n", " 0\n", - " -1.369044e-06\n", + " -1.294538e-06\n", " 0\n", - " -4.121148e-13\n", + " 1.989520e-13\n", " 0\n", - " 4.546363e-14\n", + " 4.513057e-14\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -4595,7 +4595,7 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -4606,7 +4606,7 @@ " 22\n", " 0\n", " 0\n", - " -2.030283e-06\n", + " -2.002344e-06\n", " 0\n", " 0\n", " 0\n", @@ -4618,7 +4618,7 @@ " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -4626,81 +4626,81 @@ " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", - " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", + " -1\n", " -6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 23\n", " 0\n", " 0\n", - " -2.533197e-07\n", + " -2.756715e-07\n", " 0\n", " 0\n", " 0\n", - " -6.966293e-07\n", + " -6.407499e-07\n", " 0\n", " 0.000000e+00\n", " 0\n", - " -5.884182e-15\n", + " -4.551914e-15\n", " 0\n", " 0\n", " 0\n", - " -2.220446e-16\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", " -1.110223e-16\n", " 0\n", " 0\n", - " 0\n", - " 0.000000e+00\n", + " -1\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 24\n", " 0\n", " 0\n", - " 5.520880e-06\n", + " 5.505979e-06\n", " 0\n", " 0\n", " 0\n", - " -1.644716e-06\n", + " -1.646578e-06\n", " 0\n", - " 1.421085e-14\n", + " -4.263256e-14\n", " 0\n", - " -8.443246e-14\n", + " -8.493206e-14\n", " 0\n", " 0\n", " 0\n", - " 2.220446e-16\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -4708,11 +4708,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -4721,60 +4721,60 @@ " \n", " \n", " 25\n", - " 580\n", " 0\n", - " 3.425613e+04\n", " 0\n", - " 49890\n", + " -1.287088e-06\n", " 0\n", - " 3.919083e+04\n", " 0\n", - " 1.628251e-02\n", " 0\n", - " -3.496490e-04\n", + " 2.779067e-06\n", " 0\n", - " 323\n", + " 0.000000e+00\n", " 0\n", - " 4.943151e-04\n", + " 4.274359e-14\n", " 0\n", - " 55\n", " 0\n", - " 1.406854e-06\n", " 0\n", - " 349\n", + " 2.775558e-17\n", " 0\n", - " -1.931641e-04\n", " 0\n", - " 50\n", " 0\n", - " 6.491482e-06\n", + " 0.000000e+00\n", " 0\n", - " 150\n", " 0\n", - " 1.417798e-04\n", " 0\n", - " 7\n", + " -2.220446e-16\n", + " 0\n", + " 0\n", + " 0\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " 0\n", + " -2.775558e-17\n", + " 0\n", " 0\n", - " 8.529681e-06\n", + " 0\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 26\n", " 0\n", " 0\n", - " -2.490357e-06\n", + " -2.427027e-06\n", " 0\n", " 0\n", " 0\n", - " -1.678243e-06\n", + " -1.659617e-06\n", " 0\n", - " 2.842171e-14\n", + " -1.421085e-14\n", " 0\n", " 3.286260e-14\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -4782,7 +4782,7 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", @@ -4794,22 +4794,22 @@ " 0\n", " 0\n", " 0\n", - " -1.734723e-18\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", " 27\n", " 0\n", " 0\n", - " -2.607703e-08\n", + " -4.060566e-07\n", " 0\n", " 0\n", " 0\n", - " 4.008412e-06\n", + " 3.803521e-06\n", " 0\n", " -1.421085e-14\n", " 0\n", - " 3.630429e-14\n", + " 4.030110e-14\n", " 0\n", " 0\n", " 0\n", @@ -4817,38 +4817,38 @@ " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 2.775558e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -3.469447e-18\n", + " 3.469447e-18\n", " 0\n", " \n", " \n", " 28\n", " 0\n", " 0\n", - " 1.326948e-05\n", + " 1.208484e-05\n", " 0\n", " 0\n", " 0\n", - " -7.003546e-07\n", + " -7.748604e-07\n", " 0\n", - " 1.421085e-14\n", + " -4.263256e-14\n", " 0\n", - " -1.186828e-13\n", + " -1.130762e-13\n", " 0\n", " 0\n", " 0\n", @@ -4864,34 +4864,34 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 6.938894e-18\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 29\n", " 0\n", " 0\n", - " -2.872199e-06\n", + " -3.859401e-06\n", " 0\n", " 0\n", " 0\n", - " -1.434237e-06\n", + " -1.342967e-06\n", " 0\n", " 1.421085e-14\n", " 0\n", - " 6.938894e-15\n", + " 2.448042e-14\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -4899,89 +4899,89 @@ " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -6.938894e-18\n", " 0\n", " \n", " \n", " 30\n", " 0\n", " 0\n", - " -6.789342e-07\n", - " 0\n", + " -6.696209e-07\n", " 0\n", " 0\n", - " -8.977950e-07\n", " 0\n", - " 0.000000e+00\n", + " -8.959323e-07\n", " 0\n", - " 6.994405e-15\n", + " -2.842171e-14\n", " 0\n", + " 6.106227e-15\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " -5.551115e-17\n", " 0\n", " 0\n", - " -1.387779e-17\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " 1.110223e-16\n", " 0\n", " 0\n", - " 6.938894e-18\n", + " -1\n", + " -6.938894e-18\n", " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " -8.673617e-19\n", + " 8.673617e-19\n", " 0\n", " \n", " \n", " 31\n", " 0\n", " 0\n", - " -1.354143e-06\n", + " -1.325272e-06\n", " 0\n", " 0\n", " 0\n", - " -1.236796e-06\n", + " -1.246110e-06\n", " 0\n", - " -1.421085e-14\n", + " -2.842171e-14\n", " 0\n", - " 1.809664e-14\n", + " 1.731948e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", " -1.110223e-16\n", " 0\n", " 0\n", - " 0\n", - " -6.938894e-18\n", + " -1\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -4989,26 +4989,26 @@ " 0\n", " 0\n", " 0\n", - " 1.734723e-18\n", + " 8.673617e-19\n", " 0\n", " \n", " \n", " 32\n", " 0\n", " 0\n", - " 3.464520e-07\n", + " 3.301539e-07\n", " 0\n", " 0\n", " 0\n", - " -1.098961e-06\n", + " -1.043081e-06\n", " 0\n", - " -4.263256e-14\n", + " 0.000000e+00\n", " 0\n", - " -2.442491e-14\n", + " -2.409184e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -5020,46 +5020,46 @@ " 0\n", " 0\n", " 0\n", - " 2.775558e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.168404e-19\n", " 0\n", " \n", " \n", " 33\n", " 0\n", " 0\n", - " -1.583248e-07\n", + " -1.136214e-07\n", " 0\n", " 0\n", " 0\n", - " -9.555370e-07\n", - " 0\n", - " 2.842171e-14\n", + " -9.313226e-07\n", " 0\n", - " -8.437695e-15\n", + " -4.263256e-14\n", " 0\n", + " -1.010303e-14\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " 5.551115e-17\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " 1.387779e-17\n", " 0\n", " 0\n", - " -1.110223e-16\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " 6.938894e-18\n", + " -1\n", + " -6.938894e-18\n", " 0\n", " 0\n", " 0\n", @@ -5067,61 +5067,61 @@ " 0\n", " 0\n", " 0\n", - " 8.673617e-19\n", + " -4.336809e-19\n", " 0\n", " \n", " \n", " 34\n", - " 23\n", " 0\n", - " 1.785390e+03\n", " 0\n", - " 2375\n", + " -4.349276e-06\n", " 0\n", - " 2.224810e+03\n", " 0\n", - " -2.623622e-04\n", " 0\n", - " 4.007616e-05\n", + " -6.938353e-07\n", " 0\n", - " 22\n", + " -3.268497e-13\n", " 0\n", - " 2.952115e-05\n", + " 4.857226e-14\n", " 0\n", - " 1\n", " 0\n", - " -1.323558e-05\n", " 0\n", - " 12\n", + " 0.000000e+00\n", + " 0\n", " 0\n", - " 2.568483e-05\n", " 0\n", - " 1\n", + " 0.000000e+00\n", " 0\n", - " -9.623747e-06\n", " 0\n", - " 8\n", " 0\n", - " -2.334788e-05\n", + " 0.000000e+00\n", + " 0\n", + " 0\n", + " -1\n", + " -1.387779e-17\n", + " 0\n", + " 0\n", + " 0\n", + " 5.551115e-17\n", " 0\n", - " 3\n", " 0\n", - " 1.698528e-05\n", + " 0\n", + " 6.938894e-18\n", " 0\n", " \n", " \n", " 35\n", " 0\n", " 0\n", - " -9.536743e-07\n", + " -9.266660e-07\n", " 0\n", " 0\n", " 0\n", - " -1.125038e-06\n", + " -1.111999e-06\n", " 0\n", " 1.421085e-14\n", " 0\n", - " 1.199041e-14\n", + " 1.187939e-14\n", " 0\n", " 0\n", " 0\n", @@ -5133,11 +5133,11 @@ " 0\n", " 0\n", " 0\n", - " -2.220446e-16\n", - " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " -6.938894e-18\n", + " -1\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -5152,35 +5152,35 @@ " 36\n", " 0\n", " 0\n", - " 1.396984e-08\n", + " 5.494803e-08\n", " 0\n", " 0\n", " 0\n", - " -4.721805e-07\n", + " -4.479662e-07\n", " 0\n", - " 4.263256e-14\n", - " 0\n", - " -1.521006e-14\n", + " 1.421085e-14\n", " 0\n", + " -1.709743e-14\n", " 0\n", " 0\n", - " 5.551115e-17\n", " 0\n", + " -5.551115e-17\n", " 0\n", " 0\n", - " -2.775558e-17\n", " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " 0.000000e+00\n", " 0\n", + " 1.110223e-16\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " -5.551115e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -5191,15 +5191,15 @@ " 37\n", " 0\n", " 0\n", - " -2.495944e-07\n", + " -3.464520e-07\n", " 0\n", " 0\n", " 0\n", - " -1.491979e-06\n", + " -1.506880e-06\n", " 0\n", - " 3.836931e-13\n", + " 2.842171e-14\n", " 0\n", - " -2.758904e-14\n", + " -2.703393e-14\n", " 0\n", " 0\n", " 0\n", @@ -5207,7 +5207,7 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -5215,30 +5215,30 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 5.551115e-17\n", " 0\n", " 0\n", " 0\n", - " 6.938894e-18\n", + " 0.000000e+00\n", " 0\n", " \n", " \n", " 38\n", " 0\n", " 0\n", - " 1.732260e-07\n", + " 1.708977e-07\n", " 0\n", " 0\n", " 0\n", - " -2.607703e-08\n", + " -2.328306e-08\n", " 0\n", " 2.842171e-14\n", " 0\n", - " -1.632028e-14\n", + " -1.654232e-14\n", " 0\n", " 0\n", " 0\n", @@ -5250,11 +5250,11 @@ " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", - " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", @@ -5273,11 +5273,11 @@ " 0\n", " 0\n", " 0\n", - " -2.691522e-07\n", + " -2.672896e-07\n", " 0\n", " 2.842171e-14\n", " 0\n", - " -2.220446e-14\n", + " -2.209344e-14\n", " 0\n", " 0\n", " 0\n", @@ -5292,7 +5292,7 @@ " 0.000000e+00\n", " 0\n", " 0\n", - " 0\n", + " -1\n", " -1.387779e-17\n", " 0\n", " 0\n", @@ -5308,19 +5308,19 @@ " 40\n", " 0\n", " 0\n", - " 6.426126e-08\n", + " 1.313165e-07\n", " 0\n", " 0\n", " 0\n", - " -1.031905e-06\n", + " -1.000240e-06\n", " 0\n", - " -4.263256e-14\n", + " 2.842171e-14\n", " 0\n", - " -1.576517e-14\n", + " -1.809664e-14\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -5328,11 +5328,11 @@ " 0\n", " 0\n", " 0\n", - " -2.220446e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -5340,14 +5340,14 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 4.336809e-19\n", " 0\n", " \n", " \n", " 41\n", " 0\n", " 0\n", - " 2.770685e-08\n", + " 2.724119e-08\n", " 0\n", " 0\n", " 0\n", @@ -5370,7 +5370,7 @@ " 0.000000e+00\n", " 0\n", " 0\n", - " 0\n", + " -1\n", " 1.387779e-17\n", " 0\n", " 0\n", @@ -5386,15 +5386,15 @@ " 42\n", " 0\n", " 0\n", - " -1.369789e-05\n", + " -1.125783e-05\n", " 0\n", " 0\n", " 0\n", - " -5.573034e-06\n", + " -4.917383e-06\n", " 0\n", " 4.263256e-14\n", " 0\n", - " 8.326673e-14\n", + " 6.827872e-14\n", " 0\n", " 0\n", " 0\n", @@ -5402,7 +5402,7 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -5410,34 +5410,34 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.734723e-18\n", " 0\n", " \n", " \n", " 43\n", " 0\n", " 0\n", - " -2.151355e-07\n", + " -1.518056e-07\n", " 0\n", " 0\n", " 0\n", - " 1.832843e-06\n", + " 1.687557e-06\n", " 0\n", - " -4.263256e-14\n", + " -1.421085e-14\n", " 0\n", - " 1.609823e-14\n", + " 1.343370e-14\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -5445,15 +5445,15 @@ " 0\n", " 0\n", " 0\n", - " -2.220446e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -5464,15 +5464,15 @@ " 44\n", " 0\n", " 0\n", - " -1.096167e-06\n", + " -9.415671e-07\n", " 0\n", " 0\n", " 0\n", - " 3.710389e-06\n", + " 3.311783e-06\n", " 0\n", - " 0.000000e+00\n", + " -4.263256e-14\n", " 0\n", - " 3.808065e-14\n", + " 3.530509e-14\n", " 0\n", " 0\n", " 0\n", @@ -5480,7 +5480,7 @@ " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -5488,11 +5488,11 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -5503,19 +5503,19 @@ " 45\n", " 0\n", " 0\n", - " 2.114102e-07\n", + " 2.095476e-07\n", " 0\n", " 0\n", " 0\n", - " -2.067536e-07\n", + " -2.039596e-07\n", " 0\n", - " 0.000000e+00\n", + " 2.842171e-14\n", " 0\n", - " -2.065015e-14\n", + " -1.987299e-14\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -5523,38 +5523,38 @@ " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", - " 0\n", + " 0.000000e+00\n", " 0\n", " 0\n", + " -1\n", " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " 4.336809e-19\n", " 0\n", " \n", " \n", " 46\n", " 0\n", " 0\n", - " -3.939494e-07\n", + " -3.511086e-07\n", " 0\n", " 0\n", " 0\n", - " -1.095235e-06\n", + " -1.082197e-06\n", " 0\n", - " 2.842171e-14\n", + " 1.421085e-14\n", " 0\n", - " 7.771561e-16\n", + " -8.881784e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -5562,34 +5562,34 @@ " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 8.673617e-19\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", " 47\n", " 0\n", " 0\n", - " 3.096648e-07\n", + " 2.821907e-07\n", " 0\n", " 0\n", " 0\n", - " -5.923212e-07\n", + " -9.927899e-07\n", " 0\n", - " -1.421085e-14\n", + " 1.421085e-14\n", " 0\n", - " -1.632028e-14\n", + " -1.931788e-14\n", " 0\n", " 0\n", " 0\n", @@ -5597,42 +5597,42 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", - " 1.110223e-16\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.168404e-19\n", " 0\n", " \n", " \n", " 48\n", " 0\n", " 0\n", - " 3.427267e-07\n", + " 3.408641e-07\n", " 0\n", " 0\n", " 0\n", - " -6.128103e-07\n", + " -6.090850e-07\n", " 0\n", - " -1.421085e-14\n", + " -2.842171e-14\n", " 0\n", - " -2.864375e-14\n", + " -2.875478e-14\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " -5.551115e-17\n", " 0\n", " 0\n", " 0\n", @@ -5659,15 +5659,15 @@ " 49\n", " 0\n", " 0\n", - " -1.073815e-06\n", + " -9.089708e-07\n", " 0\n", " 0\n", " 0\n", - " -1.320615e-06\n", + " -1.242384e-06\n", " 0\n", - " 4.263256e-14\n", + " 1.421085e-14\n", " 0\n", - " 1.321165e-14\n", + " 1.076916e-14\n", " 0\n", " 0\n", " 0\n", @@ -5675,7 +5675,7 @@ " 0\n", " 0\n", " 0\n", - " -1.387779e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", @@ -5687,34 +5687,34 @@ " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " 0.000000e+00\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -8.673617e-19\n", " 0\n", " \n", " \n", " 50\n", " 0\n", " 0\n", - " -1.415610e-07\n", + " -1.033768e-07\n", " 0\n", " 0\n", " 0\n", - " -8.046627e-07\n", + " -7.804483e-07\n", " 0\n", - " 1.421085e-14\n", + " 2.842171e-14\n", " 0\n", - " -8.770762e-15\n", + " -1.076916e-14\n", " 0\n", " 0\n", " 0\n", - " 5.551115e-17\n", + " -1.110223e-16\n", " 0\n", " 0\n", " 0\n", - " 0.000000e+00\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -5722,11 +5722,11 @@ " 0\n", " 0\n", " 0\n", - " -2.775558e-17\n", + " -1.387779e-17\n", " 0\n", " 0\n", " 0\n", - " 2.775558e-17\n", + " -2.775558e-17\n", " 0\n", " 0\n", " 0\n", @@ -5740,84 +5740,84 @@ "text/plain": [ " ticket_count ticket_count_rank current_amount_due \\\n", "ward \n", - "1 0 0 -1.899898e-06 \n", - "2 0 0 3.501773e-07 \n", - "3 0 0 -4.464760e-06 \n", - "4 191 0 1.157456e+04 \n", - "5 74 0 5.782750e+03 \n", - "6 0 0 2.644956e-06 \n", - "7 0 0 -5.258247e-06 \n", - "8 69 0 9.443920e+03 \n", - "9 3 0 1.788000e+02 \n", - "10 34 0 2.813020e+03 \n", - "11 117 0 7.054940e+03 \n", - "12 128 0 4.067690e+03 \n", - "13 0 0 2.691522e-07 \n", - "14 0 0 -1.292676e-06 \n", - "15 0 0 -2.611428e-06 \n", - "16 0 0 -2.831221e-07 \n", - "17 73 0 7.599800e+03 \n", - "18 0 0 -2.067536e-07 \n", - "19 3 0 3.126900e+02 \n", - "20 0 0 3.315508e-06 \n", - "21 0 0 -5.196780e-06 \n", - "22 0 0 -2.030283e-06 \n", - "23 0 0 -2.533197e-07 \n", - "24 0 0 5.520880e-06 \n", - "25 580 0 3.425613e+04 \n", - "26 0 0 -2.490357e-06 \n", - "27 0 0 -2.607703e-08 \n", - "28 0 0 1.326948e-05 \n", - "29 0 0 -2.872199e-06 \n", - "30 0 0 -6.789342e-07 \n", - "31 0 0 -1.354143e-06 \n", - "32 0 0 3.464520e-07 \n", - "33 0 0 -1.583248e-07 \n", - "34 23 0 1.785390e+03 \n", - "35 0 0 -9.536743e-07 \n", - "36 0 0 1.396984e-08 \n", - "37 0 0 -2.495944e-07 \n", - "38 0 0 1.732260e-07 \n", + "1 0 0 -1.803041e-06 \n", + "2 0 0 4.190952e-07 \n", + "3 0 0 -4.082918e-06 \n", + "4 0 0 -1.659617e-06 \n", + "5 0 0 -4.494563e-06 \n", + "6 0 0 1.996756e-06 \n", + "7 0 0 -4.813075e-06 \n", + "8 0 0 -4.524365e-06 \n", + "9 0 0 -2.145767e-06 \n", + "10 0 0 -5.979091e-07 \n", + "11 0 0 -2.831221e-07 \n", + "12 0 0 -1.538545e-06 \n", + "13 0 0 2.607703e-07 \n", + "14 0 0 -1.294538e-06 \n", + "15 0 0 -2.356246e-06 \n", + "16 0 0 -1.281500e-06 \n", + "17 0 0 -2.056360e-06 \n", + "18 0 0 -2.104789e-07 \n", + "19 0 0 2.165325e-07 \n", + "20 0 0 2.473593e-06 \n", + "21 0 0 -4.949048e-06 \n", + "22 0 0 -2.002344e-06 \n", + "23 0 0 -2.756715e-07 \n", + "24 0 0 5.505979e-06 \n", + "25 0 0 -1.287088e-06 \n", + "26 0 0 -2.427027e-06 \n", + "27 0 0 -4.060566e-07 \n", + "28 0 0 1.208484e-05 \n", + "29 0 0 -3.859401e-06 \n", + "30 0 0 -6.696209e-07 \n", + "31 0 0 -1.325272e-06 \n", + "32 0 0 3.301539e-07 \n", + "33 0 0 -1.136214e-07 \n", + "34 0 0 -4.349276e-06 \n", + "35 0 0 -9.266660e-07 \n", + "36 0 0 5.494803e-08 \n", + "37 0 0 -3.464520e-07 \n", + "38 0 0 1.708977e-07 \n", "39 0 0 2.207235e-07 \n", - "40 0 0 6.426126e-08 \n", - "41 0 0 2.770685e-08 \n", - "42 0 0 -1.369789e-05 \n", - "43 0 0 -2.151355e-07 \n", - "44 0 0 -1.096167e-06 \n", - "45 0 0 2.114102e-07 \n", - "46 0 0 -3.939494e-07 \n", - "47 0 0 3.096648e-07 \n", - "48 0 0 3.427267e-07 \n", - "49 0 0 -1.073815e-06 \n", - "50 0 0 -1.415610e-07 \n", + "40 0 0 1.313165e-07 \n", + "41 0 0 2.724119e-08 \n", + "42 0 0 -1.125783e-05 \n", + "43 0 0 -1.518056e-07 \n", + "44 0 0 -9.415671e-07 \n", + "45 0 0 2.095476e-07 \n", + "46 0 0 -3.511086e-07 \n", + "47 0 0 2.821907e-07 \n", + "48 0 0 3.408641e-07 \n", + "49 0 0 -9.089708e-07 \n", + "50 0 0 -1.033768e-07 \n", "\n", " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", "ward \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", - "4 0 17630 0 \n", - "5 0 6700 0 \n", + "4 0 0 0 \n", + "5 0 0 0 \n", "6 0 0 0 \n", "7 0 0 0 \n", - "8 0 7150 0 \n", - "9 0 180 0 \n", - "10 0 3000 0 \n", - "11 0 9230 0 \n", - "12 0 9565 0 \n", + "8 0 0 0 \n", + "9 0 0 0 \n", + "10 0 0 0 \n", + "11 0 0 0 \n", + "12 0 0 0 \n", "13 0 0 0 \n", "14 0 0 0 \n", "15 0 0 0 \n", "16 0 0 0 \n", - "17 0 6615 0 \n", + "17 0 0 0 \n", "18 0 0 0 \n", - "19 0 180 0 \n", + "19 0 0 0 \n", "20 0 0 0 \n", "21 0 0 0 \n", "22 0 0 0 \n", "23 0 0 0 \n", "24 0 0 0 \n", - "25 0 49890 0 \n", + "25 0 0 0 \n", "26 0 0 0 \n", "27 0 0 0 \n", "28 0 0 0 \n", @@ -5826,7 +5826,7 @@ "31 0 0 0 \n", "32 0 0 0 \n", "33 0 0 0 \n", - "34 0 2375 0 \n", + "34 0 0 0 \n", "35 0 0 0 \n", "36 0 0 0 \n", "37 0 0 0 \n", @@ -5846,182 +5846,182 @@ "\n", " total_payments total_payments_rank avg_per_ticket \\\n", "ward \n", - "1 3.993511e-06 0 4.263256e-14 \n", - "2 -2.421439e-07 0 0.000000e+00 \n", - "3 -4.358590e-07 0 4.263256e-14 \n", - "4 1.091980e+04 0 8.052898e-03 \n", - "5 5.087310e+03 0 1.476387e-03 \n", - "6 -1.838431e-06 0 -5.684342e-14 \n", - "7 -1.097098e-06 0 0.000000e+00 \n", - "8 3.961200e+03 0 2.956866e-03 \n", - "9 8.518000e+01 0 -1.021634e-03 \n", - "10 2.056520e+03 0 -1.228466e-03 \n", - "11 4.682460e+03 0 1.006321e-03 \n", - "12 8.529150e+03 0 -7.662542e-03 \n", - "13 -1.713634e-07 0 -4.263256e-14 \n", - "14 -7.580966e-07 0 4.263256e-14 \n", - "15 -9.741634e-07 0 0.000000e+00 \n", - "16 -1.421198e-06 0 2.842171e-14 \n", - "17 3.967430e+03 0 -4.185085e-03 \n", - "18 7.264316e-08 0 2.842171e-14 \n", - "19 1.037000e+02 0 -1.904244e-03 \n", - "20 -2.020970e-06 0 -1.421085e-14 \n", - "21 -1.369044e-06 0 -4.121148e-13 \n", + "1 3.647059e-06 0 -1.421085e-14 \n", + "2 -1.266599e-07 0 -2.842171e-14 \n", + "3 -1.028180e-06 0 1.421085e-14 \n", + "4 8.493662e-07 0 4.263256e-14 \n", + "5 -2.194196e-06 0 5.684342e-14 \n", + "6 -1.819804e-06 0 -4.263256e-14 \n", + "7 -9.145588e-07 0 2.842171e-14 \n", + "8 -1.210719e-06 0 4.263256e-14 \n", + "9 -2.039596e-07 0 -1.421085e-14 \n", + "10 -1.518056e-07 0 0.000000e+00 \n", + "11 -9.983778e-07 0 -4.263256e-14 \n", + "12 -8.568168e-07 0 2.842171e-14 \n", + "13 -1.695007e-07 0 0.000000e+00 \n", + "14 -7.636845e-07 0 1.421085e-14 \n", + "15 -9.275973e-07 0 1.421085e-14 \n", + "16 -1.367182e-06 0 2.842171e-14 \n", + "17 -1.590699e-06 0 -1.705303e-13 \n", + "18 7.357448e-08 0 4.263256e-14 \n", + "19 1.210719e-07 0 -4.263256e-14 \n", + "20 -1.963228e-06 0 -1.421085e-14 \n", + "21 -1.294538e-06 0 1.989520e-13 \n", "22 -7.245690e-07 0 -2.842171e-14 \n", - "23 -6.966293e-07 0 0.000000e+00 \n", - "24 -1.644716e-06 0 1.421085e-14 \n", - "25 3.919083e+04 0 1.628251e-02 \n", - "26 -1.678243e-06 0 2.842171e-14 \n", - "27 4.008412e-06 0 -1.421085e-14 \n", - "28 -7.003546e-07 0 1.421085e-14 \n", - "29 -1.434237e-06 0 1.421085e-14 \n", - "30 -8.977950e-07 0 0.000000e+00 \n", - "31 -1.236796e-06 0 -1.421085e-14 \n", - "32 -1.098961e-06 0 -4.263256e-14 \n", - "33 -9.555370e-07 0 2.842171e-14 \n", - "34 2.224810e+03 0 -2.623622e-04 \n", - "35 -1.125038e-06 0 1.421085e-14 \n", - "36 -4.721805e-07 0 4.263256e-14 \n", - "37 -1.491979e-06 0 3.836931e-13 \n", - "38 -2.607703e-08 0 2.842171e-14 \n", - "39 -2.691522e-07 0 2.842171e-14 \n", - "40 -1.031905e-06 0 -4.263256e-14 \n", + "23 -6.407499e-07 0 0.000000e+00 \n", + "24 -1.646578e-06 0 -4.263256e-14 \n", + "25 2.779067e-06 0 0.000000e+00 \n", + "26 -1.659617e-06 0 -1.421085e-14 \n", + "27 3.803521e-06 0 -1.421085e-14 \n", + "28 -7.748604e-07 0 -4.263256e-14 \n", + "29 -1.342967e-06 0 1.421085e-14 \n", + "30 -8.959323e-07 0 -2.842171e-14 \n", + "31 -1.246110e-06 0 -2.842171e-14 \n", + "32 -1.043081e-06 0 0.000000e+00 \n", + "33 -9.313226e-07 0 -4.263256e-14 \n", + "34 -6.938353e-07 0 -3.268497e-13 \n", + "35 -1.111999e-06 0 1.421085e-14 \n", + "36 -4.479662e-07 0 1.421085e-14 \n", + "37 -1.506880e-06 0 2.842171e-14 \n", + "38 -2.328306e-08 0 2.842171e-14 \n", + "39 -2.672896e-07 0 2.842171e-14 \n", + "40 -1.000240e-06 0 2.842171e-14 \n", "41 5.029142e-08 0 2.842171e-14 \n", - "42 -5.573034e-06 0 4.263256e-14 \n", - "43 1.832843e-06 0 -4.263256e-14 \n", - "44 3.710389e-06 0 0.000000e+00 \n", - "45 -2.067536e-07 0 0.000000e+00 \n", - "46 -1.095235e-06 0 2.842171e-14 \n", - "47 -5.923212e-07 0 -1.421085e-14 \n", - "48 -6.128103e-07 0 -1.421085e-14 \n", - "49 -1.320615e-06 0 4.263256e-14 \n", - "50 -8.046627e-07 0 1.421085e-14 \n", + "42 -4.917383e-06 0 4.263256e-14 \n", + "43 1.687557e-06 0 -1.421085e-14 \n", + "44 3.311783e-06 0 -4.263256e-14 \n", + "45 -2.039596e-07 0 2.842171e-14 \n", + "46 -1.082197e-06 0 1.421085e-14 \n", + "47 -9.927899e-07 0 1.421085e-14 \n", + "48 -6.090850e-07 0 -2.842171e-14 \n", + "49 -1.242384e-06 0 1.421085e-14 \n", + "50 -7.804483e-07 0 2.842171e-14 \n", "\n", " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", "ward \n", - "1 0 6.339373e-14 0 0 \n", - "2 0 -8.326673e-15 0 0 \n", - "3 0 6.961098e-14 0 0 \n", - "4 0 -1.014012e-04 0 169 \n", - "5 0 -2.161579e-05 0 65 \n", - "6 0 -6.306067e-14 0 0 \n", - "7 0 4.674039e-14 0 0 \n", - "8 0 -4.897767e-05 0 45 \n", - "9 0 -8.265678e-07 0 1 \n", - "10 0 -2.048431e-05 0 29 \n", - "11 0 -1.916813e-04 0 58 \n", - "12 0 7.198300e-05 0 46 \n", - "13 0 -2.342571e-14 0 0 \n", + "1 0 6.117329e-14 0 0 \n", + "2 0 -9.547918e-15 0 0 \n", + "3 0 5.861978e-14 0 0 \n", + "4 0 4.085621e-14 0 0 \n", + "5 0 4.318768e-14 0 0 \n", + "6 0 -5.645484e-14 0 0 \n", + "7 0 4.907186e-14 0 0 \n", + "8 0 4.091172e-14 0 0 \n", + "9 0 4.490852e-14 0 0 \n", + "10 0 1.659783e-14 0 0 \n", + "11 0 -5.218048e-15 0 0 \n", + "12 0 2.398082e-14 0 0 \n", + "13 0 -2.231548e-14 0 0 \n", "14 0 2.009504e-14 0 0 \n", - "15 0 3.341771e-14 0 0 \n", - "16 0 -2.597922e-14 0 0 \n", - "17 0 -5.723181e-06 0 61 \n", - "18 0 1.365574e-14 0 0 \n", - "19 0 -1.906733e-05 0 3 \n", - "20 0 -7.138734e-14 0 0 \n", - "21 0 4.546363e-14 0 0 \n", + "15 0 3.202993e-14 0 0 \n", + "16 0 -1.265654e-14 0 0 \n", + "17 0 -9.714451e-15 0 0 \n", + "18 0 1.321165e-14 0 0 \n", + "19 0 -1.076916e-14 0 0 \n", + "20 0 -6.322720e-14 0 0 \n", + "21 0 4.513057e-14 0 0 \n", "22 0 3.386180e-14 0 0 \n", - "23 0 -5.884182e-15 0 0 \n", - "24 0 -8.443246e-14 0 0 \n", - "25 0 -3.496490e-04 0 323 \n", + "23 0 -4.551914e-15 0 0 \n", + "24 0 -8.493206e-14 0 0 \n", + "25 0 4.274359e-14 0 0 \n", "26 0 3.286260e-14 0 0 \n", - "27 0 3.630429e-14 0 0 \n", - "28 0 -1.186828e-13 0 0 \n", - "29 0 6.938894e-15 0 0 \n", - "30 0 6.994405e-15 0 0 \n", - "31 0 1.809664e-14 0 0 \n", - "32 0 -2.442491e-14 0 0 \n", - "33 0 -8.437695e-15 0 0 \n", - "34 0 4.007616e-05 0 22 \n", - "35 0 1.199041e-14 0 0 \n", - "36 0 -1.521006e-14 0 0 \n", - "37 0 -2.758904e-14 0 0 \n", - "38 0 -1.632028e-14 0 0 \n", - "39 0 -2.220446e-14 0 0 \n", - "40 0 -1.576517e-14 0 0 \n", + "27 0 4.030110e-14 0 0 \n", + "28 0 -1.130762e-13 0 0 \n", + "29 0 2.448042e-14 0 0 \n", + "30 0 6.106227e-15 0 0 \n", + "31 0 1.731948e-14 0 0 \n", + "32 0 -2.409184e-14 0 0 \n", + "33 0 -1.010303e-14 0 0 \n", + "34 0 4.857226e-14 0 0 \n", + "35 0 1.187939e-14 0 0 \n", + "36 0 -1.709743e-14 0 0 \n", + "37 0 -2.703393e-14 0 0 \n", + "38 0 -1.654232e-14 0 0 \n", + "39 0 -2.209344e-14 0 0 \n", + "40 0 -1.809664e-14 0 0 \n", "41 0 -1.332268e-15 0 0 \n", - "42 0 8.326673e-14 0 0 \n", - "43 0 1.609823e-14 0 0 \n", - "44 0 3.808065e-14 0 0 \n", - "45 0 -2.065015e-14 0 0 \n", - "46 0 7.771561e-16 0 0 \n", - "47 0 -1.632028e-14 0 0 \n", - "48 0 -2.864375e-14 0 0 \n", - "49 0 1.321165e-14 0 0 \n", - "50 0 -8.770762e-15 0 0 \n", + "42 0 6.827872e-14 0 0 \n", + "43 0 1.343370e-14 0 0 \n", + "44 0 3.530509e-14 0 0 \n", + "45 0 -1.987299e-14 0 0 \n", + "46 0 -8.881784e-16 0 0 \n", + "47 0 -1.931788e-14 0 0 \n", + "48 0 -2.875478e-14 0 0 \n", + "49 0 1.076916e-14 0 0 \n", + "50 0 -1.076916e-14 0 0 \n", "\n", " police_ticket_count_rank police_ticket_count_pct \\\n", "ward \n", "1 0 0.000000e+00 \n", - "2 0 5.551115e-17 \n", - "3 0 1.110223e-16 \n", - "4 0 3.577633e-04 \n", - "5 0 1.516915e-04 \n", - "6 0 -1.110223e-16 \n", - "7 0 -1.110223e-16 \n", - "8 0 2.201327e-05 \n", - "9 0 -9.803720e-06 \n", - "10 0 1.221621e-04 \n", - "11 0 1.402044e-04 \n", - "12 0 -1.043885e-05 \n", - "13 0 0.000000e+00 \n", + "2 0 -2.775558e-17 \n", + "3 0 -1.110223e-16 \n", + "4 0 -5.551115e-17 \n", + "5 0 0.000000e+00 \n", + "6 0 0.000000e+00 \n", + "7 0 0.000000e+00 \n", + "8 0 -1.110223e-16 \n", + "9 0 -1.110223e-16 \n", + "10 0 0.000000e+00 \n", + "11 0 -5.551115e-17 \n", + "12 0 5.551115e-17 \n", + "13 0 -5.551115e-17 \n", "14 0 0.000000e+00 \n", "15 0 0.000000e+00 \n", "16 0 -1.110223e-16 \n", - "17 0 4.847331e-05 \n", - "18 0 5.551115e-17 \n", - "19 0 2.323024e-05 \n", - "20 0 0.000000e+00 \n", - "21 0 1.110223e-16 \n", - "22 0 -5.551115e-17 \n", - "23 0 -2.220446e-16 \n", - "24 0 2.220446e-16 \n", - "25 0 4.943151e-04 \n", - "26 0 5.551115e-17 \n", + "17 0 0.000000e+00 \n", + "18 0 0.000000e+00 \n", + "19 0 0.000000e+00 \n", + "20 0 -1.110223e-16 \n", + "21 0 -1.110223e-16 \n", + "22 0 5.551115e-17 \n", + "23 0 -1.110223e-16 \n", + "24 0 1.110223e-16 \n", + "25 0 2.775558e-17 \n", + "26 0 0.000000e+00 \n", "27 0 0.000000e+00 \n", "28 0 0.000000e+00 \n", - "29 0 1.110223e-16 \n", - "30 0 0.000000e+00 \n", - "31 0 0.000000e+00 \n", - "32 0 0.000000e+00 \n", - "33 0 0.000000e+00 \n", - "34 0 2.952115e-05 \n", + "29 0 0.000000e+00 \n", + "30 0 -5.551115e-17 \n", + "31 0 5.551115e-17 \n", + "32 0 2.775558e-17 \n", + "33 0 5.551115e-17 \n", + "34 0 0.000000e+00 \n", "35 0 0.000000e+00 \n", - "36 0 5.551115e-17 \n", + "36 0 -5.551115e-17 \n", "37 0 -1.110223e-16 \n", "38 0 -5.551115e-17 \n", "39 0 0.000000e+00 \n", - "40 0 5.551115e-17 \n", + "40 0 -5.551115e-17 \n", "41 0 -1.110223e-16 \n", "42 0 0.000000e+00 \n", - "43 0 0.000000e+00 \n", + "43 0 -2.775558e-17 \n", "44 0 -2.775558e-17 \n", - "45 0 5.551115e-17 \n", - "46 0 0.000000e+00 \n", + "45 0 0.000000e+00 \n", + "46 0 -5.551115e-17 \n", "47 0 -2.775558e-17 \n", - "48 0 5.551115e-17 \n", + "48 0 -5.551115e-17 \n", "49 0 0.000000e+00 \n", - "50 0 5.551115e-17 \n", + "50 0 -1.110223e-16 \n", "\n", " police_ticket_count_pct_rank contested_ticket_count \\\n", "ward \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", - "4 0 25 \n", - "5 0 8 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", "7 0 0 \n", - "8 0 4 \n", + "8 0 0 \n", "9 0 0 \n", - "10 0 4 \n", - "11 0 7 \n", - "12 0 12 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 7 \n", + "17 0 0 \n", "18 0 0 \n", "19 0 0 \n", "20 0 0 \n", @@ -6029,7 +6029,7 @@ "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 55 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -6038,7 +6038,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 1 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -6058,76 +6058,76 @@ "\n", " contested_ticket_count_rank contested_ticket_count_pct \\\n", "ward \n", - "1 0 -1.387779e-17 \n", - "2 0 0.000000e+00 \n", - "3 0 -4.163336e-17 \n", - "4 0 7.464996e-06 \n", - "5 0 -1.613823e-06 \n", - "6 0 -1.387779e-17 \n", - "7 0 -1.387779e-17 \n", - "8 0 -2.718727e-05 \n", - "9 0 -3.072081e-06 \n", - "10 0 8.825259e-06 \n", - "11 0 -3.193899e-05 \n", - "12 0 1.913957e-05 \n", - "13 0 2.775558e-17 \n", + "1 0 0.000000e+00 \n", + "2 0 1.387779e-17 \n", + "3 0 1.387779e-17 \n", + "4 0 0.000000e+00 \n", + "5 0 -1.387779e-17 \n", + "6 0 0.000000e+00 \n", + "7 0 -2.775558e-17 \n", + "8 0 -1.387779e-17 \n", + "9 0 -1.387779e-17 \n", + "10 0 1.387779e-17 \n", + "11 0 -1.387779e-17 \n", + "12 0 0.000000e+00 \n", + "13 0 1.387779e-17 \n", "14 0 0.000000e+00 \n", - "15 0 -6.938894e-18 \n", - "16 0 0.000000e+00 \n", - "17 0 -4.570665e-06 \n", - "18 0 -4.163336e-17 \n", - "19 0 -6.848256e-06 \n", + "15 0 0.000000e+00 \n", + "16 0 -1.387779e-17 \n", + "17 0 1.387779e-17 \n", + "18 0 1.387779e-17 \n", + "19 0 0.000000e+00 \n", "20 0 -1.387779e-17 \n", - "21 0 -1.387779e-17 \n", + "21 0 2.775558e-17 \n", "22 0 -6.938894e-18 \n", - "23 0 0.000000e+00 \n", - "24 0 -1.387779e-17 \n", - "25 0 1.406854e-06 \n", + "23 0 1.387779e-17 \n", + "24 0 1.387779e-17 \n", + "25 0 0.000000e+00 \n", "26 0 0.000000e+00 \n", - "27 0 -2.775558e-17 \n", + "27 0 0.000000e+00 \n", "28 0 0.000000e+00 \n", "29 0 0.000000e+00 \n", - "30 0 -1.387779e-17 \n", - "31 0 0.000000e+00 \n", + "30 0 0.000000e+00 \n", + "31 0 -1.387779e-17 \n", "32 0 -1.387779e-17 \n", - "33 0 0.000000e+00 \n", - "34 0 -1.323558e-05 \n", + "33 0 1.387779e-17 \n", + "34 0 0.000000e+00 \n", "35 0 -1.387779e-17 \n", - "36 0 -2.775558e-17 \n", - "37 0 0.000000e+00 \n", + "36 0 0.000000e+00 \n", + "37 0 1.387779e-17 \n", "38 0 -1.387779e-17 \n", "39 0 1.387779e-17 \n", "40 0 1.387779e-17 \n", "41 0 0.000000e+00 \n", - "42 0 0.000000e+00 \n", + "42 0 -5.551115e-17 \n", "43 0 0.000000e+00 \n", - "44 0 1.387779e-17 \n", + "44 0 0.000000e+00 \n", "45 0 -1.387779e-17 \n", "46 0 0.000000e+00 \n", - "47 0 -1.387779e-17 \n", + "47 0 -2.775558e-17 \n", "48 0 -1.387779e-17 \n", - "49 0 -1.387779e-17 \n", - "50 0 0.000000e+00 \n", + "49 0 0.000000e+00 \n", + "50 0 -2.775558e-17 \n", "\n", " contested_ticket_count_pct_rank paid_ticket_count \\\n", "ward \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", - "4 0 100 \n", - "5 0 38 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", "7 0 0 \n", - "8 0 29 \n", - "9 0 1 \n", - "10 0 16 \n", - "11 0 52 \n", - "12 0 85 \n", + "8 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 32 \n", + "17 0 0 \n", "18 0 0 \n", "19 0 0 \n", "20 0 0 \n", @@ -6135,7 +6135,7 @@ "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 349 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -6144,7 +6144,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 12 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -6164,53 +6164,53 @@ "\n", " paid_ticket_count_rank paid_ticket_count_pct \\\n", "ward \n", - "1 0 1.110223e-16 \n", - "2 0 1.110223e-16 \n", + "1 0 0.000000e+00 \n", + "2 0 -1.110223e-16 \n", "3 0 -1.110223e-16 \n", - "4 0 -8.651039e-05 \n", - "5 0 -2.606575e-05 \n", - "6 0 5.551115e-17 \n", - "7 0 -1.110223e-16 \n", - "8 0 -1.163874e-05 \n", - "9 0 -2.817362e-06 \n", - "10 0 -3.546159e-05 \n", - "11 0 -1.814281e-04 \n", - "12 0 1.151153e-05 \n", - "13 0 0.000000e+00 \n", - "14 0 0.000000e+00 \n", - "15 0 -1.110223e-16 \n", - "16 0 0.000000e+00 \n", - "17 0 5.971855e-06 \n", - "18 0 -1.110223e-16 \n", - "19 0 -3.528506e-05 \n", - "20 0 0.000000e+00 \n", - "21 0 5.551115e-17 \n", - "22 0 1.110223e-16 \n", + "4 0 -1.110223e-16 \n", + "5 0 -1.110223e-16 \n", + "6 0 1.110223e-16 \n", + "7 0 -5.551115e-17 \n", + "8 0 5.551115e-17 \n", + "9 0 0.000000e+00 \n", + "10 0 -1.110223e-16 \n", + "11 0 0.000000e+00 \n", + "12 0 0.000000e+00 \n", + "13 0 1.110223e-16 \n", + "14 0 -1.110223e-16 \n", + "15 0 0.000000e+00 \n", + "16 0 5.551115e-17 \n", + "17 0 -1.665335e-16 \n", + "18 0 0.000000e+00 \n", + "19 0 0.000000e+00 \n", + "20 0 5.551115e-17 \n", + "21 0 0.000000e+00 \n", + "22 0 0.000000e+00 \n", "23 0 -1.110223e-16 \n", "24 0 0.000000e+00 \n", - "25 0 -1.931641e-04 \n", - "26 0 0.000000e+00 \n", - "27 0 1.110223e-16 \n", + "25 0 -2.220446e-16 \n", + "26 0 -1.110223e-16 \n", + "27 0 0.000000e+00 \n", "28 0 0.000000e+00 \n", - "29 0 -5.551115e-17 \n", - "30 0 0.000000e+00 \n", + "29 0 0.000000e+00 \n", + "30 0 1.110223e-16 \n", "31 0 -1.110223e-16 \n", "32 0 0.000000e+00 \n", - "33 0 -1.110223e-16 \n", - "34 0 2.568483e-05 \n", - "35 0 -2.220446e-16 \n", - "36 0 0.000000e+00 \n", + "33 0 0.000000e+00 \n", + "34 0 0.000000e+00 \n", + "35 0 0.000000e+00 \n", + "36 0 1.110223e-16 \n", "37 0 5.551115e-17 \n", - "38 0 1.110223e-16 \n", + "38 0 0.000000e+00 \n", "39 0 0.000000e+00 \n", - "40 0 -2.220446e-16 \n", + "40 0 0.000000e+00 \n", "41 0 0.000000e+00 \n", "42 0 0.000000e+00 \n", - "43 0 -2.220446e-16 \n", + "43 0 0.000000e+00 \n", "44 0 0.000000e+00 \n", - "45 0 1.110223e-16 \n", - "46 0 0.000000e+00 \n", - "47 0 1.110223e-16 \n", + "45 0 0.000000e+00 \n", + "46 0 -1.110223e-16 \n", + "47 0 0.000000e+00 \n", "48 0 -1.110223e-16 \n", "49 0 0.000000e+00 \n", "50 0 0.000000e+00 \n", @@ -6220,20 +6220,20 @@ "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", - "4 0 24 \n", - "5 0 7 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", "7 0 0 \n", - "8 0 6 \n", + "8 0 0 \n", "9 0 0 \n", - "10 0 4 \n", - "11 0 6 \n", - "12 0 13 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 10 \n", + "17 0 0 \n", "18 0 0 \n", "19 0 0 \n", "20 0 0 \n", @@ -6241,7 +6241,7 @@ "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 50 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -6250,7 +6250,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 1 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -6270,84 +6270,84 @@ "\n", " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", "ward \n", - "1 0 0.000000e+00 \n", - "2 0 0.000000e+00 \n", - "3 0 1.387779e-17 \n", - "4 0 1.940404e-05 \n", - "5 0 2.165708e-06 \n", - "6 0 0.000000e+00 \n", - "7 0 0.000000e+00 \n", - "8 0 -4.036440e-06 \n", - "9 0 -2.497483e-06 \n", - "10 0 1.489772e-05 \n", - "11 0 -1.969436e-05 \n", - "12 0 3.664811e-05 \n", - "13 0 -1.387779e-17 \n", - "14 0 0.000000e+00 \n", - "15 0 -1.387779e-17 \n", - "16 0 1.387779e-17 \n", - "17 0 2.081021e-05 \n", - "18 0 1.387779e-17 \n", - "19 0 -5.107940e-06 \n", - "20 0 1.387779e-17 \n", + "1 0 -1.387779e-17 \n", + "2 0 1.387779e-17 \n", + "3 0 -2.775558e-17 \n", + "4 0 -1.387779e-17 \n", + "5 0 1.387779e-17 \n", + "6 0 -1.387779e-17 \n", + "7 -1 0.000000e+00 \n", + "8 0 0.000000e+00 \n", + "9 -1 1.387779e-17 \n", + "10 -1 0.000000e+00 \n", + "11 0 1.387779e-17 \n", + "12 -1 -6.938894e-18 \n", + "13 -1 1.387779e-17 \n", + "14 -1 0.000000e+00 \n", + "15 -1 -1.387779e-17 \n", + "16 -1 1.387779e-17 \n", + "17 0 0.000000e+00 \n", + "18 -1 0.000000e+00 \n", + "19 -1 0.000000e+00 \n", + "20 0 0.000000e+00 \n", "21 0 0.000000e+00 \n", - "22 0 -6.938894e-18 \n", - "23 0 0.000000e+00 \n", - "24 0 0.000000e+00 \n", - "25 0 6.491482e-06 \n", + "22 -1 -6.938894e-18 \n", + "23 -1 -1.387779e-17 \n", + "24 0 -1.387779e-17 \n", + "25 0 0.000000e+00 \n", "26 0 -6.938894e-18 \n", - "27 0 0.000000e+00 \n", - "28 0 -1.387779e-17 \n", - "29 0 1.387779e-17 \n", - "30 0 6.938894e-18 \n", - "31 0 -6.938894e-18 \n", - "32 0 2.775558e-17 \n", - "33 0 6.938894e-18 \n", - "34 0 -9.623747e-06 \n", - "35 0 -6.938894e-18 \n", - "36 0 0.000000e+00 \n", - "37 0 -1.387779e-17 \n", - "38 0 0.000000e+00 \n", - "39 0 -1.387779e-17 \n", - "40 0 -1.387779e-17 \n", - "41 0 1.387779e-17 \n", - "42 0 -1.387779e-17 \n", - "43 0 0.000000e+00 \n", - "44 0 0.000000e+00 \n", - "45 0 0.000000e+00 \n", - "46 0 -2.775558e-17 \n", - "47 0 -1.387779e-17 \n", + "27 0 -2.775558e-17 \n", + "28 0 -2.775558e-17 \n", + "29 0 0.000000e+00 \n", + "30 -1 -6.938894e-18 \n", + "31 -1 0.000000e+00 \n", + "32 0 0.000000e+00 \n", + "33 -1 -6.938894e-18 \n", + "34 -1 -1.387779e-17 \n", + "35 -1 -1.387779e-17 \n", + "36 -1 1.387779e-17 \n", + "37 0 0.000000e+00 \n", + "38 -1 -1.387779e-17 \n", + "39 -1 -1.387779e-17 \n", + "40 0 0.000000e+00 \n", + "41 -1 1.387779e-17 \n", + "42 0 -2.775558e-17 \n", + "43 0 1.387779e-17 \n", + "44 0 1.387779e-17 \n", + "45 -1 0.000000e+00 \n", + "46 0 0.000000e+00 \n", + "47 0 0.000000e+00 \n", "48 0 0.000000e+00 \n", "49 0 0.000000e+00 \n", - "50 0 -2.775558e-17 \n", + "50 0 -1.387779e-17 \n", "\n", " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", "ward \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", - "4 0 55 \n", - "5 1 30 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", "7 0 0 \n", - "8 0 32 \n", - "9 0 1 \n", - "10 0 10 \n", - "11 0 19 \n", - "12 0 22 \n", + "8 0 0 \n", + "9 0 0 \n", + "10 0 0 \n", + "11 0 0 \n", + "12 0 0 \n", "13 0 0 \n", "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 -1 33 \n", + "17 0 0 \n", "18 0 0 \n", - "19 0 3 \n", + "19 0 0 \n", "20 0 0 \n", "21 0 0 \n", "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 150 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -6356,7 +6356,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 8 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -6431,65 +6431,65 @@ "ward \n", "1 0.000000e+00 \n", "2 0.000000e+00 \n", - "3 -5.551115e-17 \n", - "4 4.309093e-05 \n", - "5 3.373137e-05 \n", + "3 2.775558e-17 \n", + "4 -2.775558e-17 \n", + "5 0.000000e+00 \n", "6 -5.551115e-17 \n", - "7 -5.551115e-17 \n", - "8 2.176421e-05 \n", - "9 -2.420732e-06 \n", - "10 3.568318e-06 \n", - "11 -9.706305e-07 \n", - "12 -5.351144e-05 \n", - "13 0.000000e+00 \n", - "14 0.000000e+00 \n", - "15 0.000000e+00 \n", - "16 0.000000e+00 \n", - "17 5.711644e-06 \n", + "7 0.000000e+00 \n", + "8 0.000000e+00 \n", + "9 0.000000e+00 \n", + "10 0.000000e+00 \n", + "11 0.000000e+00 \n", + "12 -2.775558e-17 \n", + "13 -5.551115e-17 \n", + "14 2.775558e-17 \n", + "15 5.551115e-17 \n", + "16 -5.551115e-17 \n", + "17 0.000000e+00 \n", "18 0.000000e+00 \n", - "19 4.163711e-05 \n", + "19 -2.775558e-17 \n", "20 0.000000e+00 \n", - "21 0.000000e+00 \n", - "22 0.000000e+00 \n", - "23 -5.551115e-17 \n", - "24 5.551115e-17 \n", - "25 1.417798e-04 \n", + "21 5.551115e-17 \n", + "22 -2.775558e-17 \n", + "23 0.000000e+00 \n", + "24 -5.551115e-17 \n", + "25 -2.775558e-17 \n", "26 -2.775558e-17 \n", - "27 2.775558e-17 \n", - "28 0.000000e+00 \n", - "29 0.000000e+00 \n", - "30 -2.775558e-17 \n", + "27 0.000000e+00 \n", + "28 1.110223e-16 \n", + "29 -5.551115e-17 \n", + "30 2.775558e-17 \n", "31 -2.775558e-17 \n", - "32 0.000000e+00 \n", + "32 -2.775558e-17 \n", "33 0.000000e+00 \n", - "34 -2.334788e-05 \n", + "34 5.551115e-17 \n", "35 0.000000e+00 \n", - "36 -5.551115e-17 \n", - "37 0.000000e+00 \n", + "36 -2.775558e-17 \n", + "37 5.551115e-17 \n", "38 -2.775558e-17 \n", "39 0.000000e+00 \n", "40 0.000000e+00 \n", "41 0.000000e+00 \n", - "42 0.000000e+00 \n", - "43 1.387779e-17 \n", - "44 1.387779e-17 \n", - "45 0.000000e+00 \n", - "46 -2.775558e-17 \n", - "47 -1.387779e-17 \n", + "42 -2.775558e-17 \n", + "43 0.000000e+00 \n", + "44 0.000000e+00 \n", + "45 -2.775558e-17 \n", + "46 0.000000e+00 \n", + "47 1.387779e-17 \n", "48 0.000000e+00 \n", - "49 -2.775558e-17 \n", - "50 2.775558e-17 \n", + "49 0.000000e+00 \n", + "50 -2.775558e-17 \n", "\n", " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", "ward \n", "1 0 0 \n", "2 0 0 \n", "3 0 0 \n", - "4 0 3 \n", - "5 0 2 \n", + "4 0 0 \n", + "5 0 0 \n", "6 0 0 \n", "7 0 0 \n", - "8 0 5 \n", + "8 0 0 \n", "9 0 0 \n", "10 0 0 \n", "11 0 0 \n", @@ -6498,7 +6498,7 @@ "14 0 0 \n", "15 0 0 \n", "16 0 0 \n", - "17 0 2 \n", + "17 0 0 \n", "18 0 0 \n", "19 0 0 \n", "20 0 0 \n", @@ -6506,7 +6506,7 @@ "22 0 0 \n", "23 0 0 \n", "24 0 0 \n", - "25 0 7 \n", + "25 0 0 \n", "26 0 0 \n", "27 0 0 \n", "28 0 0 \n", @@ -6515,7 +6515,7 @@ "31 0 0 \n", "32 0 0 \n", "33 0 0 \n", - "34 0 3 \n", + "34 0 0 \n", "35 0 0 \n", "36 0 0 \n", "37 0 0 \n", @@ -6535,55 +6535,55 @@ "\n", " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", "ward \n", - "1 0 -4.336809e-19 \n", + "1 0 4.336809e-19 \n", "2 0 0.000000e+00 \n", "3 0 0.000000e+00 \n", - "4 0 1.350616e-06 \n", - "5 0 9.448280e-07 \n", + "4 0 -1.734723e-18 \n", + "5 0 0.000000e+00 \n", "6 0 0.000000e+00 \n", - "7 0 -1.387779e-17 \n", - "8 0 1.523846e-05 \n", - "9 0 -1.046434e-06 \n", - "10 0 -8.025930e-06 \n", - "11 0 -3.785910e-06 \n", - "12 0 -5.334059e-06 \n", - "13 0 0.000000e+00 \n", - "14 0 -8.673617e-19 \n", - "15 0 3.469447e-18 \n", + "7 0 6.938894e-18 \n", + "8 0 0.000000e+00 \n", + "9 0 0.000000e+00 \n", + "10 0 -3.469447e-18 \n", + "11 0 -8.673617e-19 \n", + "12 0 0.000000e+00 \n", + "13 0 8.673617e-19 \n", + "14 0 -4.336809e-19 \n", + "15 0 0.000000e+00 \n", "16 0 0.000000e+00 \n", - "17 0 -6.011613e-06 \n", - "18 0 -3.469447e-18 \n", - "19 0 -9.472085e-07 \n", + "17 0 0.000000e+00 \n", + "18 0 0.000000e+00 \n", + "19 0 3.469447e-18 \n", "20 0 0.000000e+00 \n", "21 0 0.000000e+00 \n", - "22 0 -8.673617e-19 \n", - "23 0 -8.673617e-19 \n", + "22 0 0.000000e+00 \n", + "23 0 0.000000e+00 \n", "24 0 0.000000e+00 \n", - "25 0 8.529681e-06 \n", - "26 0 -1.734723e-18 \n", - "27 0 -3.469447e-18 \n", - "28 0 6.938894e-18 \n", - "29 0 0.000000e+00 \n", - "30 0 -8.673617e-19 \n", - "31 0 1.734723e-18 \n", - "32 0 0.000000e+00 \n", - "33 0 8.673617e-19 \n", - "34 0 1.698528e-05 \n", + "25 0 0.000000e+00 \n", + "26 0 -8.673617e-19 \n", + "27 0 3.469447e-18 \n", + "28 0 0.000000e+00 \n", + "29 0 -6.938894e-18 \n", + "30 0 8.673617e-19 \n", + "31 0 8.673617e-19 \n", + "32 0 -2.168404e-19 \n", + "33 0 -4.336809e-19 \n", + "34 0 6.938894e-18 \n", "35 0 0.000000e+00 \n", "36 0 0.000000e+00 \n", - "37 0 6.938894e-18 \n", + "37 0 0.000000e+00 \n", "38 0 0.000000e+00 \n", "39 0 0.000000e+00 \n", - "40 0 0.000000e+00 \n", + "40 0 4.336809e-19 \n", "41 0 8.673617e-19 \n", - "42 0 0.000000e+00 \n", + "42 0 -1.734723e-18 \n", "43 0 0.000000e+00 \n", "44 0 -4.336809e-19 \n", - "45 0 0.000000e+00 \n", - "46 0 8.673617e-19 \n", - "47 0 0.000000e+00 \n", + "45 0 4.336809e-19 \n", + "46 0 -8.673617e-19 \n", + "47 0 -2.168404e-19 \n", "48 0 0.000000e+00 \n", - "49 0 0.000000e+00 \n", + "49 0 -8.673617e-19 \n", "50 0 -8.673617e-19 \n", "\n", " bankruptcy_ticket_count_pct_rank \n", @@ -6698,17 +6698,17 @@ " \n", " 3\n", " True\n", - " False\n", + " True\n", " \n", " \n", " 4\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 5\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 6\n", @@ -6718,32 +6718,32 @@ " \n", " 7\n", " True\n", - " False\n", + " True\n", " \n", " \n", " 8\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 9\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 10\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 11\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 12\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 13\n", @@ -6767,8 +6767,8 @@ " \n", " \n", " 17\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 18\n", @@ -6777,8 +6777,8 @@ " \n", " \n", " 19\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 20\n", @@ -6807,8 +6807,8 @@ " \n", " \n", " 25\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 26\n", @@ -6852,8 +6852,8 @@ " \n", " \n", " 34\n", - " False\n", - " False\n", + " True\n", + " True\n", " \n", " \n", " 35\n", @@ -6944,29 +6944,29 @@ "ward \n", "1 True True\n", "2 True True\n", - "3 True False\n", - "4 False False\n", - "5 False False\n", + "3 True True\n", + "4 True True\n", + "5 True True\n", "6 True True\n", - "7 True False\n", - "8 False False\n", - "9 False False\n", - "10 False False\n", - "11 False False\n", - "12 False False\n", + "7 True True\n", + "8 True True\n", + "9 True True\n", + "10 True True\n", + "11 True True\n", + "12 True True\n", "13 True True\n", "14 True True\n", "15 True True\n", "16 True True\n", - "17 False False\n", + "17 True True\n", "18 True True\n", - "19 False False\n", + "19 True True\n", "20 True True\n", "21 True True\n", "22 True True\n", "23 True True\n", "24 True True\n", - "25 False False\n", + "25 True True\n", "26 True True\n", "27 True True\n", "28 True True\n", @@ -6975,7 +6975,7 @@ "31 True True\n", "32 True True\n", "33 True True\n", - "34 False False\n", + "34 True True\n", "35 True True\n", "36 True True\n", "37 True True\n", @@ -7014,8 +7014,7 @@ "source": [ "# df_full_compare = pd.DataFrame()\n", "# columns = df_1996to2018.columns.tolist()\n", - "# for column in columns:\n", - " " + "# for column in columns:" ] }, { @@ -7031,50 +7030,125 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "# Top five types of tickets and counts per ward, 2013-2017" + ] + }, + { + "cell_type": "code", + "execution_count": 44, "metadata": {}, "outputs": [ { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 11.6 s, sys: 16.7 s, total: 28.2 s\n", + "Wall time: 31.7 s\n" ] } ], "source": [ "%%time\n", - "# check out ward 7\n", - "df_filtered_check = df[\n", - " (df['year'] > 1995) & (df['year'] < 2019) & \n", + "\n", + "df_2013_2017 = df[\n", + " (df['year'] > 2012) & (df['year'] < 2018) & \n", " (df['geocode_accuracy_type'].isin(['rooftop', 'range_interpolation', 'intersection', 'point'])) & \n", " (df['geocoded_city'] == 'Chicago')\n", "]\n", - "df_filtered_check = df_filtered_check[df_filtered_check['ward'].notnull()]" + "df_2013_2017 = df_2013_2017[df_2013_2017['ward'].notnull()]\n", + "df_2013_2017 = df_2013_2017[['ticket_number','year','violation_code']]" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 79, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "679371" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 358 µs, sys: 26 µs, total: 384 µs\n", + "Wall time: 369 µs\n" + ] } ], "source": [ - "((df['geocoded_city'] != 'Chicago') & (df['ward'].notnull())).sum()" + "%%time\n", + "gb_2013_2017 = df_2013_2017.groupby(['year','violation_code'])" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [], + "source": [ + "top_5_list = []\n", + "for year, new_df in gb_2013_2017.count().groupby('year'):\n", + " top_5_list.append(new_df.nlargest(5, columns='ticket_number'))" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "df_top_five_2013_2017 = pd.concat(top_5_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [], + "source": [ + "df_top_five_2013_2017.to_csv('./top_five_violations_2013_2017.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# %%time\n", + "# # check out ward 7\n", + "# df_filtered_check = df[\n", + "# (df['year'] > 1995) & (df['year'] < 2019) & \n", + "# (df['geocode_accuracy_type'].isin(['rooftop', 'range_interpolation', 'intersection', 'point'])) & \n", + "# (df['geocoded_city'] == 'Chicago')\n", + "# ]\n", + "# df_filtered_check = df_filtered_check[df_filtered_check['ward'].notnull()]\n", + "# df_filtered_check = df_filtered_check[df_filtered_check['ward'] == '7']" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# df_filtered_check\n", + "# df_ward7check = read_in_csv('./ward7test.csv')\n", + "# df_ward7check" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# list_ward7sql = sorted(df_ward7check['ticket_number'].astype(int).tolist())\n", + "# list_ward7pandas = sorted(df_filtered_check['ticket_number'].astype(int).tolist())\n", + "# extra_rows = list(set(list_ward7sql) - set(list_ward7pandas))\n", + "# df_ward7check_out = df_ward7check.set_index('ticket_number')" ] }, { diff --git a/bulletproof/df_1996to2018.csv b/bulletproof/df_1996to2018.csv index a53fa50..f94817b 100644 --- a/bulletproof/df_1996to2018.csv +++ b/bulletproof/df_1996to2018.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,1720717,8,39402474.29997046,16,100835215,8,92243562.2200177,6,58.600696686323204,38,0.7006938048302891,7,598783,14,0.3479845901446897,48,120036,8,0.06975929220202974,35,1184804,6,0.6885525045664104,6,110457,8,0.06419242676163484,40,392455,7,0.22807643557888949,41,5904,25,0.0034311278379884663,38 -2,2081261,3,34313927.60998574,24,117298610,4,109396506.74001777,3,56.359394617013436,46,0.7612286973789604,4,825312,5,0.3965442104570258,46,179269,4,0.08613480000826422,15,1482622,4,0.7123671658672315,5,175963,4,0.08454633993526041,13,388546,8,0.18668778207058126,47,7169,21,0.003444546359154378,37 -3,1189111,12,43156139.909971036,12,73217160,10,61897168.84998397,12,61.57302388086562,30,0.5891977090547231,29,764735,7,0.6431148984409362,10,104479,11,0.08786311790909343,10,705441,13,0.5932507562372226,28,102294,10,0.08602561072936,11,405934,6,0.34137603638348313,15,16634,13,0.013988601568734962,16 -4,1783330,6,46194765.82997957,9,101895980,7,90883361.90001214,7,57.138039510354226,45,0.6630041087154965,14,1054462,2,0.5912882080153421,20,171359,5,0.09608933848474484,5,1121035,8,0.6286189319980038,19,179054,3,0.10040429982112116,2,510207,4,0.28609791794003353,26,16886,12,0.009468802745425692,20 -5,1082520,16,39552581.469974294,15,68784395,13,59158850.5799856,14,63.54099231422976,24,0.5993110357272913,25,491319,23,0.4538659793814433,39,89974,15,0.08311532350441563,21,652664,18,0.6029117244946975,26,93870,13,0.08671433322248087,10,369375,13,0.34121771422237,16,17008,11,0.015711488009459408,15 -6,842531,23,49857871.219960466,7,60035045,19,46647796.01998675,21,71.25559178237953,7,0.4833684627453415,42,554230,17,0.657815558121897,8,64166,21,0.0761586220566365,29,429791,27,0.5101189155057796,41,66988,19,0.07950805370959645,25,379870,11,0.45086768320690873,6,21722,5,0.025781840668177194,5 -7,605630,37,36191215.48997564,21,42136265,37,31078552.229994938,39,69.57426976867065,11,0.46199880397042836,45,326201,37,0.5386143354853623,26,47757,33,0.0788550765318759,28,288880,40,0.4769909020358965,47,51773,31,0.0854861879365289,12,284753,25,0.4701765104106468,2,14864,14,0.02454303782837706,8 -8,644121,36,34588724.14998378,23,44527970,34,35389518.18999399,35,69.12982188129249,14,0.5057217358798446,37,332850,36,0.5167507347222028,28,53974,25,0.08379481494936511,18,337851,37,0.5245148038955414,39,56929,26,0.0883824623013378,7,279581,26,0.43405043462330833,11,14843,15,0.023043806986575505,9 -9,426441,43,24561964.109995287,36,30701615,42,23855443.039998736,44,71.9949887557716,6,0.49270385268868494,41,259990,42,0.6096740229011751,16,35715,39,0.08375132785074606,19,217448,43,0.5099134464087647,42,35801,42,0.08395299701482738,15,182461,38,0.4278692714818697,12,9726,18,0.022807375463428703,11 -10,378418,45,17515544.920004107,43,24896580,45,19158495.50000064,45,65.7912150056287,19,0.5223993669797607,35,220513,45,0.5827233376847825,21,26702,46,0.07056218256002622,33,204468,45,0.5403231347346057,35,28663,45,0.07574428277724632,31,123742,43,0.32699818718982715,17,4141,30,0.010942925547939051,18 -11,691235,34,18569295.469999447,40,43755585,36,38527960.08999556,32,63.30059241791865,25,0.6747777929450963,12,300860,40,0.43524995117434734,41,64437,20,0.0932201060420841,6,460070,25,0.6655768298769593,10,57398,25,0.0830368832596729,19,164786,39,0.23839359986111813,36,3852,32,0.005572634487547651,25 -12,829417,25,34209373.24997883,25,51824585,30,40905144.81999117,26,62.4831478014075,26,0.544570422217015,34,414357,31,0.4995762083487558,34,39293,38,0.04737423997820155,47,473805,23,0.5712506495526376,32,41052,36,0.04949500673364544,47,245282,27,0.29572820426878155,23,3858,31,0.004651460001422686,29 -13,315842,47,11406965.550002372,47,22074815,46,18754217.11000107,46,69.89195547140659,10,0.6217997921835778,21,139329,47,0.44113512452428744,40,25600,47,0.08105318482025824,27,197213,47,0.6244039741389682,21,23633,47,0.07482538737723292,33,78192,47,0.24756682138537622,33,1280,48,0.004052659241012911,34 -14,654187,35,27332523.519991275,31,44167570,35,33849359.00999585,36,67.51520589678486,16,0.553257886326156,32,309904,39,0.47372387406047506,38,30127,43,0.04605258129556228,48,371205,33,0.5674294964589636,33,31640,43,0.04836537564947026,49,163766,40,0.25033514881830427,32,1830,45,0.002797365279346731,44 -15,792182,29,38148693.42997505,19,52100545,28,38410743.74999296,33,65.76840296800482,20,0.5017114174925419,38,447352,29,0.5647086149394962,23,34253,41,0.04323880118457627,49,425433,28,0.537039468203014,37,38860,38,0.04905438396732064,48,244233,29,0.30830415232863156,20,6185,24,0.0078075492752927985,22 -16,819022,26,51120763.21995334,5,57324405,22,41399119.65998942,24,69.99128839029964,9,0.4474618684257356,48,553810,18,0.6761845225158787,7,49500,32,0.06043793695407449,43,393370,30,0.48029234867927845,45,54103,30,0.06605805460659177,39,369270,14,0.45086700967739574,7,18066,10,0.02205801553560222,12 -17,716216,33,44384055.58996508,10,52025285,29,39102421.52999009,30,72.63909909859595,5,0.4683683259722037,44,466024,27,0.6506752152981782,9,52588,28,0.07342477688295151,32,355350,35,0.4961492063846661,44,55031,28,0.07683575904475745,30,322208,20,0.44987545656617556,8,18398,9,0.025687781339707574,6 -18,254129,48,12535716.680003105,46,18460130,48,15128928.51000179,48,72.64078479827174,4,0.5468686985173337,33,135763,48,0.5342286791353997,27,21021,49,0.08271783228202999,24,140768,49,0.5539234011073116,34,20948,48,0.08243057659692518,21,91415,46,0.3597188829295358,14,4445,29,0.017491116716313367,14 -19,226082,49,7715440.7200008575,49,16108530,49,14535591.68000123,49,71.25082934510488,8,0.6532547083073712,19,134520,49,0.5950053520404102,18,24932,48,0.11027857149175962,1,146118,48,0.6463053228474624,14,20838,49,0.09217009757521608,4,63894,49,0.2826142726975168,27,2422,40,0.010712927168018683,19 -20,807223,28,50466651.229951195,6,56077265,24,40496725.99998734,29,69.46935976799472,12,0.44519813614240744,49,565520,16,0.7005746863010593,3,56235,24,0.06966476425969031,36,386617,31,0.4789469576560628,46,60862,22,0.07539676148969987,32,362913,15,0.4495820857433448,9,18452,8,0.022858615277314944,10 -21,543507,39,32661825.159984704,26,41186675,38,32133231.12999481,37,75.77947478137357,2,0.4959210311692279,39,369404,32,0.6796674191868733,6,50068,30,0.09212024868124974,7,279188,42,0.5136787566673474,40,50308,32,0.09256182533067651,3,236714,32,0.4355307291350433,10,13619,16,0.025057634952263725,7 -22,876420,21,39580494.77997866,14,56151285,23,40966683.27999467,25,64.06892243444923,23,0.5086048234922885,36,422244,30,0.48178270692133907,37,32951,42,0.037597270714954015,50,473402,24,0.5401542639373816,36,38040,40,0.04340384747039091,50,238335,31,0.27194153488053674,30,3752,34,0.004281052463430775,33 -23,586017,38,18173351.940002423,42,38360925,39,31391524.139996577,38,65.46043032881299,21,0.6333421289973536,20,367245,33,0.626679772088523,13,49687,31,0.08478764267930794,17,366692,34,0.6257361134574594,20,48924,33,0.08348563266935942,16,116541,44,0.19886965736488874,45,1946,44,0.0033207227776668596,39 -24,850825,22,54016226.63994311,4,58368400,21,40711876.839988574,27,68.60212147033761,15,0.4297761207540005,50,582309,15,0.6844051361913437,5,53356,26,0.06271089824582024,40,393607,29,0.46261804718949256,50,57634,24,0.06773895924543825,38,386594,10,0.45437545911321364,5,22217,4,0.02611230276496342,3 -25,1721025,7,42756201.2899784,13,102304320,6,90569396.96001321,8,59.4438314376607,34,0.6793098860894773,10,741134,8,0.4306352319112157,42,127142,7,0.07387574265336064,31,1159828,7,0.6739169971383333,7,120246,7,0.0698688281692596,37,388347,9,0.225648668671286,42,8099,20,0.004705916532299066,28 -26,1026314,20,38879819.799968965,17,62721350,17,50899356.42998677,18,61.11321681278829,31,0.5669394459536562,31,496593,22,0.4838606898083822,36,59289,23,0.05776886995597839,45,588942,20,0.5738419236218155,31,60729,23,0.059171949325450106,44,322327,19,0.3140627527247996,19,6946,22,0.006767909236354566,23 -27,2018335,5,63993308.24995648,3,118210330,3,100223190.44002998,5,58.56824065380623,39,0.6103113343637582,22,1040898,3,0.5157211265721499,30,168212,6,0.08334196255824727,20,1230204,5,0.6095142778577392,24,170001,5,0.08422833672309106,14,620081,2,0.3072240237621604,21,24628,3,0.012202136909878687,17 -28,1354565,9,70656556.79996628,2,90610825,9,68833300.38998266,9,66.89293241741814,18,0.4934645556074346,40,828746,4,0.6118170778072666,15,101476,12,0.07491408681015677,30,718179,12,0.5301916113290983,38,106171,9,0.07838014417912761,29,539373,3,0.39818908653331514,13,29748,1,0.021961293847102208,13 -29,756302,30,44367030.999965906,11,52437515,27,40509148.70998941,28,69.33409537459903,13,0.4772734688156329,43,477311,26,0.6311116458769116,12,52596,27,0.06954364790784634,37,382014,32,0.5051077479631153,43,55847,27,0.07384219531351233,35,358012,16,0.47337174832275997,1,21505,6,0.02843440847703695,1 -30,724676,32,24805137.46999312,34,45268890,33,37949667.34999395,34,62.467764904591846,27,0.6047292706726287,24,362755,34,0.5005754295712843,33,45167,35,0.0623271641395603,41,446214,26,0.6157427595228764,22,43734,35,0.06034972870634601,43,194945,36,0.2690098747578228,31,2498,39,0.003447057719587788,36 -31,816381,27,28928912.72998785,28,50708720,31,42606133.019991554,22,62.11403744085176,29,0.5955980397203258,27,350487,35,0.4293179287612034,43,46398,34,0.05683375776751296,46,498632,22,0.6107834454746007,23,45477,34,0.05570560804330331,46,233921,33,0.28653410601177637,25,3635,35,0.004452577901739506,32 -32,1099169,15,20204816.649998605,39,65082795,16,60947934.38998967,13,59.21090842263565,36,0.7510273355977467,5,453655,28,0.4127254316670139,45,91317,14,0.08307821636163319,22,784444,11,0.7136700543774434,4,87672,14,0.07976207480378358,24,215369,34,0.1959380222695509,46,2422,40,0.002203482812925037,47 -33,1050654,17,32177662.129978403,27,60318910,18,49939312.25999141,19,57.4108222116891,44,0.6081484690708631,23,523115,19,0.4978946446689395,35,63967,22,0.06088303095024623,42,637366,19,0.6066373896639616,25,64088,21,0.06099819731329248,42,285781,24,0.27200296196464296,29,3457,36,0.0032903315458752357,40 -34,424789,44,28861919.01998868,29,32490795,40,24130178.39999829,43,76.48690290944445,1,0.45535428063462796,46,323163,38,0.7607612249846394,1,35022,40,0.08244563771660754,25,200786,46,0.4726723149610748,48,37158,41,0.087474016511727,8,195123,35,0.4593409904682089,4,10983,17,0.025855189282208344,4 -35,1141752,14,37529170.429975085,20,66358735,15,55296182.20998935,15,58.120095257113626,40,0.595701288897474,26,479322,25,0.4198127088894961,44,66862,19,0.058560878369383194,44,684875,14,0.5998456757684681,27,66751,20,0.05846365935859977,45,339313,18,0.29718625410772215,22,4585,28,0.004015758238216355,35 -36,473826,42,18551615.240002327,41,31978895,41,25698493.599998236,41,67.49079830992812,17,0.5807554890524402,30,238759,44,0.5038959449249303,31,29982,44,0.06327639259981513,39,280241,41,0.5914428503290238,29,29978,44,0.06326795068231798,41,131144,41,0.2767767070612419,28,2132,43,0.00449954202597578,31 -37,734715,31,47038882.29995837,8,53682425,26,38883133.95999117,31,73.06564450160947,3,0.45253982218426597,47,508031,21,0.6914667592195614,4,51339,29,0.06987607439619445,34,347111,36,0.47244305615102455,49,54353,29,0.07397834534479356,34,340339,17,0.4632258767004893,3,19850,7,0.0270172788087898,2 -38,338755,46,9475390.260001702,48,21045140,47,18162118.300001033,47,62.12495756520199,28,0.6571546874628714,16,193668,46,0.5717052146831781,22,27821,45,0.08212720107452288,26,216416,44,0.6388569910407227,16,26880,46,0.07934938229694026,26,78006,48,0.2302726159023483,40,1095,49,0.003232424613658839,42 -39,489431,41,12737420.350002725,45,29627010,44,25690237.87999872,42,60.53357878842983,32,0.6685350880929221,13,264550,41,0.5405256307835017,25,43295,36,0.08845986461830166,9,317324,39,0.6483528832460551,13,38707,39,0.07908571381869968,27,113241,45,0.2313727573447534,38,1369,47,0.002797125641816722,45 -40,1035475,19,24739246.769992094,35,60002300,20,52325994.639990866,17,57.9466428450711,43,0.6789830756724601,11,629109,12,0.6075559525821483,17,93797,13,0.09058354861295541,8,682688,15,0.6592993553683092,11,85430,16,0.08250319901494484,20,244927,28,0.23653588932615466,37,3172,38,0.0030633284241531663,43 -41,190452,50,4843758.249999882,50,12343790,50,10815886.390000423,50,64.81312876735345,22,0.690685302166615,9,120622,50,0.6333459349337366,11,19435,50,0.10204670993216139,3,126909,50,0.6663568773234201,9,17291,50,0.0907892802385903,5,40192,50,0.21103480141978032,43,531,50,0.0027881040892193307,46 -42,5077427,1,101966164.24014544,1,294340445,1,258115422.80998263,1,57.97039425677612,42,0.7168248310737687,6,2619523,1,0.5159154429989835,29,510645,1,0.10057160841504958,4,3299829,1,0.6499018105036272,12,543810,1,0.10710346007928818,1,1046913,1,0.2061896704767986,44,27439,2,0.005404115115786008,26 -43,2070786,4,26186850.899989843,32,114324850,5,108623925.9600239,4,55.20843293319542,48,0.8057510570747469,1,649644,11,0.3137185590399008,49,181143,3,0.08747548032486216,11,1551715,3,0.7493362423736687,1,168445,6,0.0813435091796062,22,317188,21,0.1531727566247792,50,3422,37,0.0016525126208116144,50 -44,2557809,2,35163836.03998071,22,139465885,2,130911821.00004211,2,54.52552751202298,49,0.7882661633456219,2,650191,10,0.25419841747370503,50,222787,2,0.08710071784093339,13,1889004,2,0.7385242604119385,2,221904,2,0.08675550050844297,9,417234,5,0.16312164043523186,49,4767,27,0.0018637044439205586,48 -45,506116,40,13315767.51000343,44,29975170,43,26014386.30999912,40,59.225888926649226,35,0.6614361700454044,15,254672,43,0.5031889922468367,32,43204,37,0.08536382963589374,16,324662,38,0.6414774478578034,15,40439,37,0.0799006551857677,23,124336,42,0.24566700124082227,34,1664,46,0.003287783828213295,41 -46,1229482,11,28270492.499986622,30,72470365,11,64714135.51998986,11,58.943819429645984,37,0.6959659558576382,8,667016,9,0.5425179059148487,24,107025,10,0.08704885472093125,14,826936,10,0.672588943961766,8,102210,11,0.08313257127798536,17,298955,23,0.2431552474944733,35,6450,23,0.005246111777154932,27 -47,1285899,10,20694283.699998386,38,71657255,12,67405310.75999165,10,55.72541467098116,47,0.76510353053445,3,491125,24,0.38193124032291803,47,112251,9,0.08729379212519801,12,935361,9,0.7273984970825857,3,100829,12,0.07841129046682516,28,238421,30,0.18541191804333,48,2331,42,0.0018127395697484796,49 -48,1037712,18,25479218.03998718,33,55554350,25,48257687.71999503,20,53.535422159520174,50,0.6544577267328863,17,614124,13,0.5918058189555484,19,86069,16,0.0829411243196571,23,658627,17,0.6346915136376953,18,86192,15,0.08305965431641919,18,299783,22,0.2888884391815841,24,5903,26,0.005688476186070894,24 -49,1155988,13,38293233.87997334,18,67178040,14,55264687.87998925,16,58.11309459959792,41,0.5907002511425961,28,817081,6,0.7068248113302215,2,78215,18,0.06766073696266743,38,673486,16,0.5826063938379983,30,81890,17,0.0708398357076371,36,371212,12,0.3211209804946072,18,9235,19,0.007988837254365963,21 -50,834795,24,22067327.219997916,37,49743695,32,41646277.3499947,23,59.58791679394342,33,0.6536481122213726,18,512058,20,0.6133937074371553,14,85532,17,0.10245868746219132,2,532864,21,0.6383171916458532,17,75470,18,0.09040542887774843,6,192806,37,0.23096209248977295,39,3843,33,0.0046035254164196,30 +1,1681635,8,38422082.90997306,17,98467185,7,90108419.31001453,6,58.55443363155501,39,0.7010664220061057,7,584989,14,0.34786918683305235,48,117098,8,0.06963342223490829,37,1158544,6,0.6889390384952739,6,107759,8,0.06407989843218058,40,383301,9,0.22793352897626418,41,5791,26,0.0034436723783698602,38 +2,2076974,3,34255856.26998502,22,117031080,3,109131689.25001825,3,56.34691623486861,46,0.7610960132851556,4,818518,4,0.39409159671714716,46,179764,3,0.08655091493682636,15,1479128,4,0.7121552797483262,5,176272,3,0.08486962282628478,14,388287,6,0.1869484163017929,47,7167,21,0.003450693171893341,36 +3,1068060,15,39425365.93997126,14,66560465,13,56067856.839985326,14,62.31903170233882,28,0.5871396441314117,29,657643,9,0.6157360073404116,13,95109,12,0.0890483680692096,9,631895,18,0.5916287474486452,29,92175,13,0.0863013313858772,12,363786,12,0.34060446042357173,16,15058,13,0.01409845888807745,16 +4,1700508,7,44506653.92998267,9,97472810,8,87362649.68000881,8,57.319818548339676,45,0.6624942066759312,14,975703,3,0.5737714847563199,20,149170,6,0.0877208457707932,11,1081707,8,0.6361081512112851,18,155889,6,0.09167201800873621,4,486627,4,0.2861656634370435,26,16270,12,0.009567729172694278,20 +5,1066278,16,39099465.0999753,15,67806820,12,58263713.68998597,13,63.59206510872399,24,0.5984163049531955,25,476558,23,0.4469359772967275,39,88310,15,0.0828208028300312,22,642266,17,0.6023438540418165,26,92194,12,0.0864633800941218,11,364347,11,0.34169981937168353,15,16854,11,0.015806384451334456,15 +6,820002,23,48797879.24996135,7,58529480,20,45342141.20998659,21,71.37724054331575,7,0.48164575478584576,42,533677,18,0.6508240223804332,9,62398,22,0.07609493635381377,29,417217,27,0.5087999785366377,42,65168,20,0.07947297689517831,25,370083,10,0.4513196309277294,6,21228,5,0.025887741737215274,4 +7,573243,38,33950740.07998063,23,39749280,37,29397087.859995734,39,69.34106478404446,13,0.4640583397405544,45,308710,38,0.5385325246012599,26,45299,34,0.07902233433290944,28,274030,41,0.47803462057103185,47,49218,31,0.08585887660206928,13,268675,26,0.4686930324487172,2,13941,15,0.024319529414227475,8 +8,643480,36,34565979.549983844,21,44501805,34,35370949.35999388,35,69.15802355939579,14,0.5057549696745062,37,332494,36,0.5167122521290483,28,53949,25,0.08383943556909305,19,337603,37,0.5246518928327221,39,56866,26,0.0883725989929757,7,279222,25,0.4339249083110586,11,14835,14,0.02305432958289302,10 +9,351506,45,20666074.490000207,37,25841690,44,19914102.68000059,44,73.51706656500885,3,0.49073473968768777,41,194787,45,0.5541498580394075,23,31773,42,0.09039106018104955,8,179757,47,0.5113909862136066,41,30739,43,0.08744943187314015,8,149092,40,0.4241520770626959,12,7875,20,0.022403600507530454,11 +10,376393,44,17471412.870004173,43,24801125,45,19075018.440000672,45,65.89156812161757,19,0.5219392908215021,35,220190,44,0.5850002523957671,19,26572,46,0.07059642448185806,33,203191,44,0.5398373508540276,36,28487,45,0.0756841917889015,31,123138,43,0.3271527366343157,17,4113,30,0.010927408320558565,18 +11,689588,34,18544158.340000372,40,43645785,36,38421468.819995575,31,63.29255294465681,25,0.6744675822155612,12,299964,40,0.43499016804236734,41,64177,20,0.0930657146006021,5,458842,25,0.6653857085680145,10,57174,25,0.08291037547057083,19,164427,38,0.23844237428725557,36,3823,31,0.005543889974883554,25 +12,814004,24,33646405.659979574,24,50854160,27,40126227.00999166,27,62.474091036407685,27,0.5439175146358147,34,407841,31,0.501030707465811,33,38388,38,0.04715947341782104,47,464875,24,0.5710967022275075,32,40085,37,0.04924422975808473,47,241411,27,0.29657225271620286,23,3755,32,0.0046129994447201735,30 +13,313574,47,11322838.240002342,47,21911835,46,18617564.19000102,46,69.87771626474134,10,0.6218207732353092,21,138630,47,0.4420966023968824,40,25413,47,0.08104307117299266,27,195751,46,0.6242577509614955,21,23464,47,0.07482763239299177,33,77684,47,0.24773737618552558,33,1268,48,0.004043702602894373,34 +14,650744,35,27228959.829991154,31,43974630,35,33691456.77999589,36,67.57592847571395,16,0.5530404855188178,32,307629,39,0.4727342856791611,38,29887,43,0.045927430756180616,48,369175,32,0.5673121842076146,33,31310,42,0.048114158563121595,49,162745,39,0.25009066545369607,32,1824,45,0.002802945551553299,44 +15,765820,29,36671149.64997902,20,50372935,29,37186698.72999368,34,65.77646836071139,20,0.5034901441845581,38,429914,29,0.5613773471572955,22,32741,41,0.04275286620876968,49,412853,28,0.5390992661460917,37,37164,40,0.04852837481392494,48,233778,30,0.3052649447650884,21,5861,25,0.007653234441513671,22 +16,800289,27,49886840.679954864,5,55971585,23,40483740.789989546,25,69.93921570832536,9,0.44797477377584083,48,540506,17,0.6753885158986316,7,48078,32,0.06007579761811046,43,384809,30,0.4808375474359887,45,52500,30,0.06560130152982235,39,360954,13,0.451029565569438,7,17705,10,0.022123257973057232,12 +17,696249,33,43107760.5399658,10,50598085,28,38112539.88999047,32,72.67239881134479,5,0.4692489400831313,44,453854,27,0.6518558734016136,8,51157,28,0.07347515041314243,32,345903,36,0.49680933114446124,44,53365,29,0.07664642965375892,30,313484,20,0.45024696624339855,8,17944,9,0.025772388901097166,6 +18,253791,48,12524355.090003084,46,18443320,48,15116388.300001789,48,72.67129252022333,6,0.5468879069825597,33,135505,48,0.5339235827905638,27,21001,49,0.0827491912636776,24,140609,49,0.5540346190369241,34,20920,48,0.08243003100976788,20,91294,46,0.3597211879065845,14,4437,28,0.017482889464165395,14 +19,225980,49,7711649.120000864,49,16103920,49,14532412.880001225,49,71.26258960969997,8,0.6533165066704031,19,134445,49,0.5949420302681653,17,24925,48,0.11029737144880078,1,146071,48,0.6463890609788477,14,20830,49,0.09217629878750332,3,63855,49,0.2825692539162758,27,2422,40,0.010717762633861403,19 +20,783460,28,48950975.81995366,6,54397595,25,39324381.22998818,28,69.43251091312894,11,0.4454740546417772,49,548229,16,0.6997536568554872,3,54753,24,0.0698861460699972,35,375722,31,0.4795675592882853,46,59143,23,0.07548949531565109,32,352258,15,0.4496183595844076,9,18067,8,0.02306052638296786,9 +21,522735,39,31464206.69998654,27,39726600,38,30999790.85999524,37,75.99758960084938,2,0.49628253187329757,39,356256,34,0.6815231427013687,6,48115,31,0.09204472629535042,6,268770,42,0.5141610950098998,40,48388,33,0.09256697944465168,2,227058,33,0.43436540503314297,10,13122,16,0.02510258544004132,7 +22,875979,21,39562341.95997924,13,56127245,22,40949721.30999474,23,64.07373350274379,23,0.508615971903262,36,421928,30,0.4816645147885965,37,32935,40,0.03759793328378876,50,473188,23,0.5401818993377695,35,38017,39,0.043399442224071584,50,238197,28,0.2719209022134092,29,3745,34,0.004275216643321358,33 +23,579218,37,17914156.29000259,42,37898800,39,30985868.45999705,38,65.43097762845768,21,0.6336575210015057,20,364049,32,0.628518105445618,11,49282,30,0.08508368179165703,18,362433,34,0.6257281369018228,20,48496,32,0.08372667976478632,16,114503,44,0.1976855001053144,45,1913,44,0.0033027288516586156,40 +24,850459,22,54001654.63994206,4,58350565,21,40699653.659988455,24,68.61067376557835,15,0.4297686525204881,50,581979,15,0.6843116481805708,5,53340,26,0.06271907287711695,40,393461,29,0.4626454655662413,50,57604,24,0.06773283603324792,38,386452,7,0.4544040335865691,5,22211,4,0.026116485333214184,3 +25,1708139,6,42561865.83997851,11,101645805,6,89932712.3200131,7,59.50675267059648,34,0.6787652262375322,11,739371,7,0.432851776114239,42,126418,7,0.07400919948552197,31,1150029,7,0.6732642952359263,7,119584,7,0.07000835412106392,37,386191,8,0.22608874336339138,42,8056,19,0.004716243818565117,28 +26,1016631,19,38508771.06996972,16,62122490,17,50410010.22998675,18,61.106232251426526,31,0.5669219651125765,31,492345,21,0.48429076036438,36,58670,23,0.057710221309403315,45,583384,20,0.5738404593210319,31,60087,22,0.05910404069913272,44,319251,19,0.314028393782995,19,6877,22,0.006764499607035394,23 +27,1972334,5,62580044.09995315,3,115535225,4,97965748.28002577,5,58.57792087952649,38,0.6102043960651485,22,1007188,2,0.5106579311617606,29,163685,5,0.0829905076929161,20,1202518,5,0.6096928816316101,24,165555,4,0.08393862297156567,15,606518,2,0.30751282490693765,20,24138,3,0.012238292297349232,17 +28,1332828,9,69052415.2599608,2,89104805,9,67888439.48998144,9,66.85394139378825,18,0.49575007848423025,40,812695,5,0.6097523461391867,14,100240,11,0.07520850402302473,30,709708,12,0.5324828109853634,38,104260,9,0.07822464714126653,28,527276,3,0.39560693502837574,13,28959,1,0.021727484716707633,13 +29,726017,31,42500242.10996963,12,50345885,30,38950634.61998993,29,69.34532524720495,12,0.47821013331908024,43,456008,26,0.6280954853674225,12,50579,29,0.06966641276994891,36,367671,33,0.5064220259305223,43,53417,28,0.07357541214599658,35,342677,16,0.47199583480827584,1,20522,6,0.028266555741807697,1 +30,719914,32,24648877.24999314,34,44984440,33,37699795.409994096,33,62.485852476823624,26,0.6046607538156661,24,360266,33,0.5004292179343643,34,44868,35,0.06232411093547285,41,443290,26,0.6157541039624177,22,43438,35,0.06033776256608428,43,193485,35,0.26876126870709555,31,2482,39,0.0034476340229527415,37 +31,807602,26,28657564.329987958,28,50172855,31,42131375.519991785,22,62.12571910421222,30,0.5951689008096346,27,345059,35,0.4272636769101612,43,45897,33,0.05683121141354281,46,493075,22,0.6105420739423627,23,44956,34,0.05566603351650937,46,231408,31,0.2865371804428419,25,3602,35,0.004460117731258714,32 +32,1068694,14,19598432.649999212,39,63189680,16,59148208.17999033,12,59.12794494963011,36,0.7511203977283127,5,441090,28,0.4127374159488123,45,88492,14,0.08280387089288421,23,762741,11,0.7137131863751457,4,85258,15,0.07977774741881212,24,209019,34,0.19558358145549615,46,2355,41,0.00220362423668515,47 +33,1036429,17,31777242.389978647,26,59457040,18,49157095.149991594,19,57.367209910181984,44,0.607370081032848,23,516898,19,0.49872977309588984,35,62805,21,0.06059749389490259,42,628212,19,0.6061312448802572,25,62975,21,0.060761518637552595,42,281760,24,0.2718565381709697,30,3429,36,0.0033084755443932965,39 +34,419815,43,28493756.029989235,29,32033105,40,23775974.719998527,43,76.30290723294785,1,0.45487080914424055,46,318575,37,0.7588461584269262,1,34495,39,0.08216714505198719,25,198355,45,0.4724819265628908,49,36646,41,0.08729083048485642,9,192838,36,0.4593404237580839,4,10865,17,0.025880447339899717,5 +35,1132939,12,37116142.44997529,18,65792125,14,54854009.80998949,15,58.07208066806774,42,0.5964327389057483,26,475127,24,0.41937562393032635,44,66432,19,0.0586368727707317,44,680225,13,0.6004074358813669,27,66290,19,0.05851153504292817,45,336107,18,0.29666822309056357,22,4462,27,0.0039384291652065995,35 +36,463931,42,18154087.310002886,41,31334580,41,25196470.129998453,42,67.54146629563448,17,0.5812259776560251,30,234372,43,0.5051871937852828,31,29417,44,0.06340813612369081,39,274703,40,0.5921203799702973,28,29399,44,0.06336933725058252,41,128442,41,0.27685582554302257,28,2094,43,0.004513602238263879,31 +37,734376,30,47023834.419957936,8,53665820,26,38871568.76999086,30,73.07676176781376,4,0.4525453903980218,47,507803,20,0.6914754839482772,4,51324,27,0.06988790483349129,34,346983,35,0.47248684597535867,48,54317,27,0.07396347375186553,34,340153,17,0.46318643310783575,3,19845,7,0.027022941926206738,2 +38,336950,46,9431794.520001687,48,20935725,47,18066767.610000983,47,62.133031607063366,29,0.6570077200614427,16,192935,46,0.5725923727556017,21,27660,45,0.08208933076124054,26,215238,43,0.6387832022555275,17,26730,46,0.07932927734085175,26,77601,48,0.23030419943611813,39,1090,49,0.0032349013206707227,42 +39,489099,41,12726925.250002721,45,29612600,43,25679067.779998638,41,60.545206594166004,32,0.6686213727096989,13,264329,41,0.5404406878770964,25,43279,36,0.08848719788836207,10,317180,39,0.6484985657300465,13,38675,38,0.07907397070940649,27,113114,45,0.23127015185064784,38,1369,47,0.00279902432840795,45 +40,1009920,20,23965919.429992743,35,58530910,19,51168207.629991375,17,57.95598661280101,43,0.681024850254009,10,610205,12,0.6042112246514575,16,91310,13,0.0904131020278834,7,668314,14,0.6617494455006337,11,82983,16,0.08216789448669201,21,237868,29,0.23553152724968315,37,3055,38,0.0030249920785804818,43 +41,190154,50,4836566.249999884,50,12331580,50,10805857.090000426,50,64.85048960316375,22,0.6908045419259323,9,120404,50,0.6331920443430062,10,19425,50,0.10215404356468967,3,126758,50,0.6666070658518884,9,17257,50,0.09075275829064863,6,40092,50,0.21083963524301355,43,531,50,0.002792473468872598,46 +42,4951982,1,99440337.42014231,1,287918340,1,252538869.3699835,1,58.142040904025905,40,0.7174823526452361,6,2516001,1,0.5080795931810738,30,497960,1,0.1005577160821667,4,3224522,1,0.6511578596206529,12,528757,1,0.1067768420806053,1,1017358,1,0.205444607835812,44,26755,2,0.005402887167198911,26 +43,2036700,4,25676080.209990658,32,112285000,5,106714109.980022,4,55.13084892227623,48,0.8060575321091454,1,635345,10,0.3119482496194825,49,177730,4,0.08726371090489517,12,1526750,3,0.7496194824961948,1,165434,5,0.08122649383807139,22,311464,21,0.15292581136151617,50,3366,37,0.001652673442333186,50 +44,2430393,2,33033504.38997947,25,132322695,2,124229639.13003659,2,54.44497865160079,49,0.7899475767138341,2,605543,13,0.24915435487182525,50,211538,2,0.0870385982843104,14,1797013,2,0.7393919419616498,2,211418,2,0.08698922355355698,10,392906,5,0.16166356634503143,49,4406,29,0.0018128755308297877,49 +45,504658,40,13275891.200003421,44,29902350,42,25947345.01999906,40,59.25270182975401,35,0.6615299378781708,15,253841,42,0.5029960884400921,32,43118,37,0.08544004058193866,17,323878,38,0.6417772035715277,15,40304,36,0.07986398709621169,23,123768,42,0.2452512394532535,34,1658,46,0.0032853932762385617,41 +46,1212505,11,27847989.079987053,30,71477200,10,63840303.72999027,11,58.95002494835073,37,0.6962754106710045,8,658028,8,0.5427012672112692,24,105551,9,0.0870520121566509,13,815974,10,0.6729654723073307,8,100616,10,0.08298192584772847,18,294739,23,0.24308270893728273,35,6336,23,0.005225545461668199,27 +47,1221504,10,19627561.349999655,38,67869860,11,63965646.9099922,10,55.56253602116735,47,0.7652014827693423,3,467466,25,0.3826970685319082,47,105301,10,0.08620602142931992,16,889342,9,0.728071295714136,3,94985,11,0.07776069501205071,29,228256,32,0.186864717594048,48,2232,42,0.0018272555800062874,48 +48,1035302,18,25413304.59998722,33,55437760,24,48160632.41999492,20,53.54742867298624,50,0.6545882192890513,18,612028,11,0.5911589082219487,18,85899,16,0.08296999329664195,21,657320,15,0.6349065296889217,19,85954,14,0.0830231178921706,17,298960,22,0.2887659832589911,24,5890,24,0.0056891612302497245,24 +49,1121939,13,36804001.39997483,19,65168225,15,53838427.99998961,16,58.08535490788715,41,0.5939649715523924,28,790720,6,0.7047798498848868,2,76076,18,0.06780760807851408,38,656347,16,0.5850113063187927,30,79763,17,0.0710938830007692,36,360088,14,0.32095149558041924,18,8971,18,0.007995978390982041,21 +50,808395,25,21244452.069998536,36,48262395,32,40432940.669994846,26,59.70150112259477,33,0.6555552832857828,17,490273,22,0.6064770316491319,15,83756,17,0.10360776600548,2,517685,21,0.6403861973416461,16,73674,18,0.09113614012951589,5,185057,37,0.2289190309192907,40,3754,33,0.004643769444392902,29 diff --git a/bulletproof/df_2013to2017.csv b/bulletproof/df_2013to2017.csv index 687411d..17561b2 100644 --- a/bulletproof/df_2013to2017.csv +++ b/bulletproof/df_2013to2017.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,423120,5,8875342.4300019,24,30520260,6,28610635.009996008,5,72.13145207033466,48,0.7632356674116806,6,74299,28,0.17559793911892607,47,36764,9,0.08688788050671205,39,330507,5,0.7811188315371526,4,27514,9,0.06502647003214218,41,56955,18,0.13460720363017584,44,1586,25,0.0037483456229911137,37 -2,455095,3,8484861.23999967,26,33039930,4,30311415.33000024,3,72.60007251233259,47,0.7812970215146683,5,99033,14,0.21760951010228632,44,47362,4,0.1040705786703875,30,346824,3,0.7620914314593656,6,40360,3,0.08868478010085806,17,55104,19,0.12108241136466012,46,1826,22,0.0040123490699744005,35 -3,302444,10,14677878.020004565,15,23925780,10,19120819.400000434,10,79.10813241459576,34,0.5657265178711613,30,121799,10,0.40271587467431985,24,37159,8,0.12286241419899221,6,189630,10,0.626992104323445,31,29240,8,0.09667905463490761,5,75971,11,0.251190302998241,18,5330,15,0.017623097168401422,17 -4,318959,8,12229403.350001939,17,25149195,9,21527035.139998876,8,78.84773591590141,35,0.6377164210132985,22,91546,18,0.287014945494562,38,37770,7,0.11841647359064958,9,213101,8,0.6681140836283034,23,29737,7,0.09323141845817173,8,68881,13,0.2159556557425876,23,4290,17,0.013450004546038832,20 -5,252692,12,14884609.94000457,14,21604550,11,16863534.67000217,12,85.49756224969528,22,0.5311659902382746,33,91029,19,0.36023696832507557,31,28711,11,0.1136205340889304,11,152259,15,0.6025477656593798,33,22034,11,0.08719706203599639,21,73328,12,0.2901872635461352,15,6014,11,0.02379972456587466,15 -6,203418,21,21274015.739997353,5,19595595,14,11971217.600001838,23,96.33166681414625,11,0.3600882411494041,45,145500,5,0.7152759342831018,6,21574,18,0.10605747770600439,23,86155,32,0.4235367568258463,47,17553,17,0.08629029879361709,24,90170,6,0.4432744398234178,3,8718,3,0.04285756422735451,4 -7,142450,39,15294881.310005259,12,13945980,35,8225866.560001107,39,97.9008775008775,7,0.3497281041174172,48,84193,22,0.5910354510354511,13,15958,31,0.11202527202527203,14,58594,42,0.4113302913302913,49,12883,30,0.09043875043875044,14,63034,17,0.4424991224991225,4,5610,14,0.039382239382239385,8 -8,152634,36,15048934.120004617,13,14817615,30,9418653.710001228,38,97.07938598215338,9,0.3849441054606394,39,92108,17,0.6034566348257924,11,18032,26,0.11813881572912982,10,68082,40,0.44604740752388067,40,14636,26,0.09588951347668279,7,63435,15,0.41560202838161875,12,5913,12,0.038739730335311924,9 -9,107925,42,10878459.890002616,20,10442210,41,6593760.710000367,44,96.75432012971972,10,0.377385385690428,42,74040,29,0.6860319666435024,8,11928,37,0.11052119527449618,17,46914,46,0.4346907574704656,44,9697,37,0.08984943247625667,15,45374,24,0.42042158906648136,11,4063,18,0.03764651378271948,10 -10,86795,45,6307718.490000606,32,7930680,45,5653688.850000168,46,91.37254450141137,16,0.4726608407602146,36,46953,41,0.5409643412638977,17,8255,45,0.09510916527449738,35,48705,45,0.5611498358200357,36,6909,45,0.07960135952531829,33,24737,40,0.285004896595426,16,1779,23,0.020496572383201798,16 -11,185986,22,5526754.570000289,35,14374525,32,12723034.400000973,21,77.28820986525868,38,0.6971606313319519,14,50721,40,0.27271407525297603,41,20576,19,0.11063198305248782,16,136333,20,0.7330282924521201,12,15364,21,0.08260836837181293,29,30490,34,0.1639370705321906,33,1120,32,0.006021958642048326,28 -12,168495,32,9062659.410001606,23,14291905,33,11509052.74000088,25,84.8209442416689,23,0.5594601293310186,31,62870,33,0.37312679901480755,30,11548,39,0.06853615834297754,47,109336,25,0.6488975934003977,27,8978,39,0.053283480221965045,47,40838,25,0.24236920976883586,20,1184,29,0.007026914745244666,25 -13,83126,46,4005094.079999731,42,7458395,46,6039951.6300001815,45,89.72397324543464,17,0.6012866247076774,26,28907,48,0.34774920000962395,32,7761,46,0.09336429035440175,37,53565,43,0.6443832254649569,28,5866,46,0.07056757211943315,40,15752,46,0.18949546471621395,28,369,45,0.004439044342323701,34 -14,163484,34,8711851.920001322,25,14477660,31,10923127.660000758,33,88.55704533777006,19,0.5563096012142428,32,64192,32,0.39265004526436836,27,9052,43,0.055369332778742876,49,98467,28,0.6023035893420763,34,7081,44,0.043313107093048864,49,30693,33,0.1877431430598713,29,524,42,0.0032052066257248417,41 -15,176710,30,11919359.480002612,18,15718650,26,11301877.840000974,28,88.95167223133949,18,0.48670437687078555,35,95557,15,0.5407560409710825,18,10953,40,0.06198290985230038,48,102375,27,0.5793390300492333,35,9094,38,0.051462848735215894,48,47093,23,0.26649878331729954,17,2054,20,0.01162356403146398,21 -16,180960,26,19329711.040000282,7,17894615,19,10959581.510001421,32,98.88712975243148,5,0.36183022406050896,44,137418,8,0.7593832891246685,3,16116,30,0.08905835543766578,38,79887,34,0.44146220159151195,41,12926,29,0.07143015030946065,39,77247,9,0.42687334217506634,9,5818,13,0.03215075154730327,13 -17,174634,31,19059889.2000015,9,17573835,20,10613442.410001637,34,100.63237971987127,3,0.35767612984932756,47,125668,9,0.7196078655931835,5,18656,23,0.10682913980095514,21,74056,36,0.4240640425117675,46,15225,23,0.08718233562765555,22,76557,10,0.4383854232280083,6,7297,8,0.041784532221675046,5 -18,67538,48,5366924.690000207,36,6557875,47,4658677.129999927,48,97.09904054014036,8,0.46467805261388934,37,33328,45,0.49347034262193135,20,7276,47,0.10773194349847494,20,35226,48,0.5215730403624627,37,5700,47,0.08439693209748586,27,21407,43,0.3169623027036631,14,1857,21,0.027495632088601972,14 -19,54037,49,3041397.5799997845,48,5095785,49,4256466.17999988,49,94.30177470992098,15,0.5832482381118164,28,31425,46,0.581545977755982,14,6666,49,0.12335992005477728,5,34346,49,0.6356015322834354,30,4972,49,0.09201102947980087,11,13508,48,0.2499768677017599,19,922,34,0.01706238318189389,18 -20,215139,16,22035401.829996683,4,20395455,12,12379069.660002021,22,94.80129125820982,12,0.3597053542896784,46,157945,4,0.7341532683520886,4,22614,16,0.10511343828873426,28,93815,30,0.43606691487828797,42,18968,16,0.08816625530470998,18,94286,5,0.43825619715625713,7,7474,6,0.03474033066993897,12 -21,146967,38,15494269.340005197,11,15166580,27,9605733.15000139,37,103.19718031939142,2,0.3826984939075545,40,103734,13,0.7058319214517544,7,18310,24,0.12458579136813026,4,63914,41,0.4348867432825056,43,14664,25,0.09977750107166915,3,63115,16,0.4294501486728313,8,6046,10,0.041138486871202376,6 -22,178028,28,10069360.79000203,21,14870870,29,11160900.090000724,29,83.53107376367763,25,0.5257071570191312,34,73718,30,0.41408093108949157,22,9324,42,0.05237378389916193,50,109144,26,0.6130721010178174,32,7397,43,0.041549643876244186,50,39126,27,0.2197744175073584,22,1273,27,0.00715056058597524,24 -23,147537,37,5661258.230000254,34,12086345,39,9709988.760000717,36,81.9207724164108,28,0.6316981807863139,23,84000,23,0.5693487057483886,15,14185,33,0.09614537370286776,34,98409,29,0.6670123426665854,24,12221,32,0.08283345872560781,28,20770,44,0.1407782454570718,43,437,43,0.0029619688620481643,44 -24,210131,18,23100283.559994478,3,19847895,13,11417340.850001644,26,94.45486387063308,13,0.3307684420685464,50,138921,7,0.6611161608710756,10,18255,25,0.08687437836397295,40,88325,31,0.42033303034773545,48,15085,24,0.07178855095154928,38,97201,4,0.46257334710252174,2,9018,2,0.042916085679885405,3 -25,442655,4,11062895.210001348,19,32567975,5,29388953.7499972,4,73.57417175904486,45,0.7265169455927448,11,79298,25,0.17914176954964928,46,41500,6,0.09375247088590437,36,331699,4,0.7493397792863516,8,35964,5,0.08124611717929313,30,66519,14,0.15027278580384273,37,2457,19,0.005550598095582338,31 -26,226812,14,9987974.60000251,22,18184610,17,14823534.400001679,15,80.17481438371867,32,0.5974459030282752,27,74488,27,0.32841295874997795,34,17125,28,0.0755030598028323,45,150550,17,0.6637655855951184,25,13273,27,0.05851983140221858,44,48617,22,0.21434932895966705,24,1729,24,0.007623053453961872,22 -27,417998,6,19636563.040000126,6,34127255,3,27227027.189995993,6,81.64454136144192,29,0.5809846632827698,29,163333,3,0.3907506734481983,28,49808,3,0.11915846487303768,8,269176,7,0.6439648036593476,29,38938,4,0.09315355575864,9,97251,3,0.23265900793783703,21,7043,9,0.016849362915612037,19 -28,316065,9,28884829.31998673,1,29826215,7,19156229.0200007,9,94.36734532453768,14,0.39874702352374763,38,187944,1,0.594637179061269,12,33385,10,0.10562700710296932,25,159462,13,0.5045228038536377,38,26798,10,0.08478635723664436,26,118635,2,0.37535000711878885,13,11204,1,0.035448404600319554,11 -29,178039,27,18032288.230002873,10,17479075,21,11117463.610001434,30,98.17554019063239,6,0.38139136384496203,41,118452,11,0.66531490291453,9,18725,22,0.10517358556271379,27,81025,33,0.45509691696763066,39,15668,20,0.08800319031223496,19,78182,7,0.4391285055521543,5,8099,4,0.0454900330826392,1 -30,165844,33,6473144.330000679,31,13645955,36,11751926.580000898,24,82.2818733267408,26,0.6448219948242649,21,51499,38,0.31052676008779334,35,13436,35,0.08101589445503003,42,115570,24,0.6968596994766166,20,10077,36,0.06076192084127252,43,31472,32,0.18976869829478304,27,665,38,0.0040097923349653895,36 -31,183242,25,7876282.990001364,28,15044270,28,12785113.270001236,20,82.10055554949193,27,0.6187923172816409,24,56659,35,0.30920313028672464,36,13718,34,0.07486274980626713,46,125857,21,0.6868348959299724,22,10352,35,0.05649359862913524,46,38705,28,0.2112234094803593,25,1242,28,0.00677792209209679,27 -32,226608,15,3888103.9699996435,43,17218205,22,16109878.360001098,13,75.98233513379934,41,0.8055751872444273,4,50958,39,0.22487290828214362,43,21886,17,0.0965808797571136,33,177439,12,0.7830217821083104,3,19925,14,0.0879271693850173,20,24806,39,0.10946656781755278,47,398,44,0.0017563369342653392,49 -33,183762,23,5262403.940000159,38,14178250,34,12846569.080000956,19,77.15550549079788,39,0.7094035131540644,12,51808,36,0.2819298875719681,40,14832,32,0.08071309628758938,43,137173,19,0.7464709787660125,10,10597,34,0.05766698229231288,45,28949,35,0.15753529021233986,34,570,40,0.0031018382472981355,42 -34,117784,40,14007075.480004488,16,12320760,38,7280552.390000789,41,104.60470012904979,1,0.3420086274741416,49,94853,16,0.805313115533519,1,13106,36,0.11127147999728317,15,45957,47,0.3901803300957685,50,10927,33,0.09277151395775318,10,55054,20,0.46741492902261766,1,5116,16,0.043435441146505466,2 -35,209988,19,7263938.160000984,29,16474535,23,14518241.800001126,16,78.45464978951178,36,0.666519229326931,19,51613,37,0.24579023563251234,42,17099,29,0.08142846257881403,41,151457,16,0.7212650246680763,14,12767,31,0.06079871230736995,42,39158,26,0.18647732251366744,31,727,36,0.0034621025963388384,39 -36,110165,41,4954107.829999986,40,9439130,42,7718598.140000472,40,85.68175010211955,21,0.6090726130845592,25,43913,42,0.3986111741478691,26,8720,44,0.07915399627830981,44,72668,38,0.6596287387101166,26,8148,41,0.07396178459583352,37,22366,42,0.20302273861934372,26,624,39,0.005664230926337766,29 -37,183310,24,19276442.75000025,8,18425175,16,11051917.320001492,31,100.51374720418963,4,0.3644086688001676,43,144035,6,0.7857454585129017,2,19395,21,0.10580437510228574,24,78223,35,0.42672521957340026,45,16729,19,0.09126070590802465,13,77607,8,0.42336479188260323,10,7416,7,0.04045605804375102,7 -38,69827,47,2476610.2099998267,49,5887125,48,5065106.010000026,47,84.31015223337677,24,0.6716118536213134,18,27999,49,0.4009766995574778,25,7271,48,0.10412877540206511,29,49354,44,0.7068039583542183,17,5661,48,0.08107179171380698,32,11690,49,0.16741375112778725,32,199,49,0.002849900468300228,45 -39,103665,43,3414796.9099997794,46,8459935,43,7036085.460000279,43,81.60840206434187,30,0.6732527657375441,17,34306,44,0.3309313654560363,33,10740,41,0.10360295181594559,31,71558,39,0.6902811942314185,21,7826,42,0.07549317513143299,35,15148,47,0.1461245357642406,41,314,48,0.00302898760430232,43 -40,211875,17,4676262.199999936,41,15788505,25,14070858.550001033,17,74.51801769911505,43,0.7505610454874947,7,90689,20,0.4280306784660767,21,25292,14,0.11937227138643068,7,159012,14,0.7504991150442478,7,19372,15,0.09143126843657817,12,26650,37,0.12578171091445428,45,528,41,0.0024920353982300883,46 -41,46107,50,1434324.9199999722,50,3950795,50,3337325.0699999495,50,85.68753117747848,20,0.6994069298867422,13,18986,50,0.41178129134404756,23,6028,50,0.13073936712429782,1,33403,50,0.7244670006723491,13,4553,50,0.09874856312490511,4,6777,50,0.14698418895178605,38,167,50,0.003622009673151582,38 -42,1097695,1,27697067.770013697,2,85304785,1,74254034.13000529,1,77.71264786666606,37,0.7283298831122438,10,184335,2,0.16792916065027172,48,137945,1,0.12566787677815786,3,780779,1,0.711289565863013,16,113221,1,0.10314431604407417,2,156202,1,0.1423000013664998,42,7547,5,0.0068753160030791795,26 -43,380718,7,5326002.8600002155,37,28088930,8,26066514.359998066,7,73.77883367742004,44,0.830341644071558,2,75425,26,0.19811251372406874,45,42972,5,0.1128709438482026,13,302105,6,0.7935138343866064,2,32625,6,0.0856933478322538,25,33807,31,0.08879800797440625,50,689,37,0.0018097384415761797,48 -44,520445,2,7965664.390001116,27,37281360,2,33878370.82999618,2,71.63362122798759,50,0.8096344114968549,3,80629,24,0.15492319073100905,50,57017,2,0.10955432370375352,19,397839,2,0.7644208321724678,5,56000,2,0.10760022672904918,1,52434,21,0.10074839800555294,48,1132,31,0.0021750617260229226,47 -45,102532,44,3190051.6599997785,47,8306840,44,7120980.720000217,42,81.0170483361292,31,0.6906176275629367,15,28943,47,0.2822826044551945,39,11586,38,0.11299886864588617,12,73302,37,0.7149182694183279,15,8877,40,0.08657784886669527,23,15796,45,0.15405922053602777,36,334,47,0.003257519603635938,40 -46,242468,13,5787010.110000394,33,18080795,18,16103422.920001095,14,74.56981952257617,42,0.7356374767886443,8,71665,31,0.2955647755580118,37,26585,13,0.10964333437814475,18,179242,11,0.739239817212993,11,21572,12,0.08896844119636406,16,35492,30,0.1463780787567844,40,1155,30,0.0047635151855090156,32 -47,260425,11,3589766.3899996905,45,18679115,15,17881785.86000059,11,71.72550638379572,49,0.8328129075996523,1,43198,43,0.16587501199961602,49,27457,12,0.10543150619180186,26,212050,9,0.8142459441297879,1,20125,13,0.07727752711913219,34,25577,38,0.09821253719880964,49,362,46,0.0013900355188633964,50 -48,161715,35,3843111.9599996475,44,11868930,40,10572939.570000613,35,73.39411928392542,46,0.7334143852079046,9,61529,34,0.3804780014222552,29,17207,27,0.10640324026837338,22,121081,23,0.7487307918251245,9,13127,28,0.08117366972760721,31,23758,41,0.14691277865380453,39,740,35,0.004575951519648765,33 -49,204934,20,7079900.960001084,30,16262345,24,13968025.51000132,18,79.35406033161895,33,0.6636295280634228,20,112258,12,0.5477763572662419,16,20050,20,0.09783637658953614,32,142865,18,0.6971268798735203,19,15304,22,0.07467770111352924,36,38241,29,0.18660154000800258,30,1536,26,0.007495095982121073,23 -50,177127,29,5262148.440000151,39,13604835,37,11382994.940000804,27,76.80836349060279,40,0.6838628349502478,16,87411,21,0.49349336916449776,19,22847,15,0.12898654637632884,2,123986,22,0.6999836275666612,18,17003,18,0.09599327036533109,6,27476,36,0.1551203373850401,35,994,33,0.005611792668537265,30 +1,413658,5,8675790.960001804,25,29805325,6,27938207.769996352,5,72.0530607409986,48,0.7630471606234679,6,72173,29,0.1744750494369745,47,35876,7,0.08672865023763592,40,323136,5,0.7811670510421652,4,26878,9,0.0649763814552118,41,55718,18,0.13469581151579324,44,1571,25,0.003797823322648178,37 +2,454049,3,8465230.239999602,26,32954155,4,30224978.070000127,3,72.57841114064782,47,0.7812048420061954,5,98498,14,0.2169325337133217,44,47381,4,0.10435217344383536,28,345898,3,0.7618076463113012,6,40419,3,0.08901902658083158,15,55052,19,0.12124682578312032,46,1825,22,0.00401938997773368,35 +3,288812,10,13842674.970004184,15,22750745,10,18236863.450001027,10,78.7735447280584,35,0.5684889605091165,30,109065,11,0.37763320083653035,29,35530,9,0.12302120410509258,6,181628,10,0.6288796864396217,31,27842,7,0.0964018115590765,5,71908,12,0.24897857429746686,19,4896,16,0.016952204202041465,18 +4,311832,8,11970293.620001659,17,24575955,9,21133826.47999915,8,78.81152351266066,34,0.638404718692361,22,84469,21,0.2708798327304446,41,35536,8,0.11395879832730445,11,209586,8,0.6721119064111445,23,27654,8,0.0886823674286154,17,67525,13,0.21654288206470151,23,4177,17,0.013395033223017522,20 +5,248972,11,14727556.390004495,13,21308210,11,16620649.630002195,12,85.58476455183715,22,0.5301946025043588,33,87460,19,0.35128448178911686,31,28243,11,0.11343845894317434,12,149978,16,0.6023890236653118,33,21554,11,0.0865719839982006,23,72362,11,0.2906431245280594,15,5966,10,0.02396253393955947,15 +6,198939,20,20892562.179998003,5,19179765,14,11660974.51000182,24,96.41028154358874,11,0.35820914394176945,47,141079,6,0.7091570783003835,6,21103,18,0.10607774242355697,23,83914,32,0.42180768979435906,47,17175,17,0.08633299654668014,24,88259,6,0.44364855558739114,3,8575,3,0.04310366494252007,3 +7,134197,39,14267365.300004814,14,13080905,37,7777808.260000935,39,97.47539065701916,8,0.35281229421170895,48,78747,24,0.5868014933269745,13,15070,31,0.1122975923455815,15,55681,42,0.4149198566286877,49,12117,32,0.09029262949246257,14,59152,17,0.4407848163520794,4,5244,14,0.03907687951295483,8 +8,152629,36,15048179.720004626,11,14817095,29,9418453.71000122,37,97.07915926855316,10,0.3849509470498071,39,92106,17,0.6034632998971362,11,18032,24,0.11814268585917487,9,68080,40,0.4460489159989255,40,14636,25,0.09589265473795937,7,63433,15,0.41560253949118453,12,5913,11,0.0387409994168867,9 +9,91600,44,9364043.370002177,22,8964050,42,5579514.4900002135,46,97.86080786026201,7,0.3733725624293411,42,57760,34,0.6305676855895197,10,10493,41,0.11455240174672489,10,39646,47,0.4328165938864629,44,8558,40,0.09342794759825328,8,38191,28,0.41693231441048034,11,3365,18,0.03673580786026201,10 +10,86078,45,6297504.330000598,32,7891920,45,5616550.790000162,45,91.6833569553196,16,0.4714222599634744,36,46946,41,0.5453890657310811,16,8183,45,0.09506494109993262,35,48139,45,0.5592485884895095,36,6855,45,0.07963707335207602,33,24655,38,0.2864262645507563,16,1768,23,0.0205395106763633,16 +11,185423,22,5522720.6900002835,35,14330390,32,12686951.910000999,20,77.28485678691425,38,0.6967149925584112,14,50650,39,0.2731592089438743,40,20467,19,0.11038004993986722,17,135913,19,0.7329888956601932,12,15273,20,0.08236842247186163,29,30496,34,0.16446719123301856,33,1117,30,0.006024063897143289,28 +12,165265,32,8909673.990001569,23,14021130,33,11286688.400000857,26,84.84028681208967,23,0.558847587602606,31,62176,32,0.37622001028650953,30,11315,38,0.06846579735576196,47,107222,26,0.6487883096844462,27,8793,38,0.05320545790094696,47,40155,24,0.2429734063473815,20,1159,29,0.007012979154690951,25 +13,82355,46,3964726.6199997393,42,7387005,46,5982541.7200001795,44,89.69710400097141,17,0.6014255889672953,26,28762,48,0.34924412603970617,32,7666,46,0.09308481573674944,37,53050,43,0.6441624673668872,29,5802,46,0.0704510958654605,40,15595,46,0.18936312306478054,28,365,45,0.004432032056341449,34 +14,162992,34,8691724.190001315,24,14437970,31,10894734.930000763,31,88.58085059389418,19,0.5562381062983889,32,63991,31,0.3926020909001669,26,8990,43,0.05515608128006282,49,98127,28,0.6020356827328949,34,7020,44,0.04306959850790223,49,30603,33,0.18775768135859427,29,523,41,0.0032087464415431434,41 +15,172100,29,11500258.250002455,18,15276780,26,11015543.150000928,30,88.7668797210924,18,0.48923611264395295,35,92397,16,0.5368797210923881,18,10558,40,0.06134805345729227,48,100030,27,0.5812318419523533,35,8759,39,0.05089482858803022,48,45463,23,0.26416618245206275,17,1963,20,0.011406159209761766,21 +16,176581,27,18833535.22000128,8,17442070,19,10715125.650001368,33,98.77659544345089,5,0.3626264383736997,44,133995,8,0.7588302252224192,3,15666,30,0.0887184917969657,38,78044,35,0.4419728056812454,41,12562,30,0.07114015664199433,39,75408,8,0.4270448122957736,9,5688,13,0.03221184612160991,13 +17,169970,31,18538535.160002057,9,17095260,20,10353183.77000159,35,100.57810201800318,3,0.35834433372013574,46,122623,9,0.721439077484262,5,18137,23,0.1067070659528152,21,72086,37,0.42411013708301465,46,14762,24,0.08685062069777019,20,74609,10,0.4389539330470083,5,7092,8,0.041725010295934575,5 +18,67500,48,5366658.2900002105,36,6555625,47,4656593.929999926,48,97.12037037037037,9,0.4645791433551158,37,33304,45,0.4933925925925926,19,7271,47,0.10771851851851852,20,35192,48,0.5213629629629629,37,5699,47,0.08442962962962963,27,21407,43,0.3171407407407407,14,1857,21,0.02751111111111111,14 +19,54036,49,3041397.5799997835,48,5095735,49,4256416.179999879,49,94.30259456658524,14,0.5832453827925688,28,31425,46,0.5815567399511437,14,6666,49,0.12336220297579392,5,34345,49,0.6355947886594122,30,4972,49,0.09201273225257237,11,13508,48,0.24998149381893553,18,922,34,0.017062698941446443,17 +20,210320,16,21517797.729997527,4,19904355,12,12078920.590001963,22,94.63843191327501,12,0.3595267988662932,45,154122,4,0.7327976416888551,4,22117,16,0.10515880562951693,26,91711,30,0.43605458349182197,42,18551,16,0.0882036896158235,19,92243,5,0.4385840623811335,6,7362,7,0.0350038037276531,11 +21,142107,38,14995774.850004949,12,14690635,30,9314422.330001315,38,103.3772790925148,2,0.38314877748757586,40,100545,13,0.7075302412970508,7,17691,26,0.12449070066921404,4,61875,41,0.4354113449724503,43,14162,26,0.09965730048484593,3,61019,16,0.42938771489089206,8,5869,12,0.04129986559423533,6 +22,178012,26,10068911.390002003,20,14869430,28,11160118.690000724,27,83.53049232636002,25,0.5257008279673271,34,73714,27,0.4140956789429926,22,9319,42,0.052350403343594816,50,109136,25,0.6130822641170258,32,7392,43,0.04152529042985866,50,39124,25,0.21978293598184392,22,1272,27,0.007145585690852302,24 +23,146006,37,5586622.5500002755,34,11946210,39,9583013.55000066,36,81.81999369888909,28,0.6317233641484695,23,83538,22,0.5721545689903155,15,14072,33,0.09637960083832171,34,97331,29,0.6666232894538581,24,12135,31,0.08311302275248962,28,20399,44,0.13971343643411915,43,415,43,0.002842348944563922,45 +24,210130,17,23099795.559994493,3,19847695,13,11417340.850001646,25,94.45436158568505,13,0.33077311844140095,50,138920,7,0.6611145481368677,8,18255,22,0.08687479179555513,39,88325,31,0.4203350306952839,48,15085,21,0.07178889259030125,38,97200,3,0.46257078951125497,2,9018,2,0.04291628991576643,4 +25,437064,4,10987440.640001288,19,32261020,5,29086249.159997117,4,73.81303424670071,44,0.7258190924060672,11,79287,23,0.18140821481522157,46,41119,6,0.09408004319733494,36,327143,4,0.7485013636446837,9,35677,5,0.08162877747881317,30,65814,14,0.15058206578441602,37,2443,19,0.005589570406164772,31 +26,224051,14,9882146.510002447,21,17981045,16,14649159.94000166,15,80.25425014840371,32,0.5971618335883292,27,73991,26,0.33024177531008564,34,16912,29,0.07548281418069994,45,148571,17,0.6631124163694873,25,13112,27,0.05852238999156442,44,48059,22,0.21450027002780617,24,1717,24,0.007663433771775176,22 +27,410439,6,19262541.780000508,7,33508485,3,26759502.969996195,6,81.6405970192891,29,0.5814496751580798,29,158291,3,0.3856626685085969,27,48868,3,0.11906275963054193,7,264505,7,0.6444441195890254,28,38162,4,0.09297849375912133,9,95398,4,0.232429179488304,21,6904,9,0.0168210135976357,19 +28,310576,9,28116296.229987916,1,29227215,7,18841919.140000775,9,94.10648279326155,15,0.4012486205351571,38,182640,1,0.5880686208850652,12,32860,10,0.10580341043738087,24,157536,13,0.5072381639276698,38,26373,10,0.08491641337386019,26,115714,2,0.3725786924939467,13,10864,1,0.03498016588532275,12 +29,171743,30,17331333.45000396,10,16820830,21,10729273.080001343,32,97.94186662629627,6,0.3823606973188015,41,113230,10,0.6592990689576868,9,18002,25,0.10481941039809482,27,78410,33,0.4565542700430294,39,14915,22,0.08684487868501191,21,75135,9,0.4374850794501086,7,7766,4,0.04521872798309101,1 +30,164963,33,6436175.20000067,31,13571685,35,11685772.220000897,23,82.27108503118882,26,0.6448408633557269,21,51215,36,0.31046355849493523,35,13380,35,0.08110909719149142,42,114947,24,0.6968047380321648,20,10037,36,0.06084394682443942,43,31267,32,0.18953947248776998,27,663,38,0.004019083067112019,36 +31,181986,24,7828466.840001335,27,14937895,27,12689902.170001246,19,82.08266020463113,27,0.6184654425415097,24,56196,35,0.3087929840756981,36,13606,34,0.07476399283461366,46,124965,21,0.6866737001747387,22,10261,35,0.05638345806820305,46,38438,27,0.21121404943237393,25,1240,28,0.006813710944797951,27 +32,219654,15,3752677.43999966,44,16665080,22,15583958.690001043,14,75.8696859606472,41,0.805929148442867,4,49655,40,0.22606007630182012,43,21226,17,0.09663379678949621,33,171993,12,0.7830178371438717,3,19465,13,0.08861664253780946,18,23967,39,0.10911251331639761,47,377,44,0.0017163356915876789,49 +33,181450,25,5204523.620000114,37,13985490,34,12661446.100000931,21,77.07627445577295,39,0.708690672738932,12,51208,37,0.28221548635987875,38,14595,32,0.08043538164783687,43,135389,20,0.7461504546707082,10,10426,34,0.0574593551942684,45,28592,35,0.1575750895563516,34,570,40,0.0031413612565445027,42 +34,115323,40,13764219.540004348,16,12050750,38,7084127.640000714,42,104.49563400189034,1,0.33979324973995345,49,92399,15,0.801219184377791,1,12793,36,0.11093190430356477,16,44740,46,0.38795383401403016,50,10690,33,0.0926961664195347,10,53987,20,0.46813731866149855,1,5046,15,0.043755365365104965,2 +35,208244,18,7173577.390000957,29,16320615,23,14387005.130001113,16,78.37255815293598,36,0.6672827655122061,20,50937,38,0.24460248554580205,42,16974,28,0.08151015155298592,41,150265,15,0.7215814141103706,14,12675,29,0.06086609938341561,42,38749,26,0.186074988955264,30,723,36,0.0034718887458942394,39 +36,108037,41,4862373.049999945,40,9252005,41,7574161.740000448,40,85.63737423290169,21,0.609025091626846,25,43223,42,0.4000758999231745,25,8500,44,0.0786767496320705,44,71358,39,0.6604959412053278,26,7944,41,0.07353036459731388,37,21961,42,0.20327295278469412,26,620,39,0.005738774679045142,29 +37,183307,23,19275808.350000348,6,18424855,15,11051857.320001507,29,100.51364650558898,4,0.36441503412289594,43,144034,5,0.7857528626839128,2,19394,21,0.10580065136628716,25,78222,34,0.42672674802380706,45,16729,18,0.09126219947956161,12,77605,7,0.42336081000725556,10,7415,6,0.0404512648180375,7 +38,69469,47,2470121.939999829,49,5857440,48,5036736.080000023,47,84.31732139515468,24,0.6709512910169736,18,27945,49,0.4022657588276785,24,7242,48,0.10424793792914826,29,49067,44,0.706315046999381,17,5635,48,0.08111531762368826,32,11650,49,0.16770070103211504,32,199,49,0.002864587082007802,44 +39,103665,42,3414796.9099997794,45,8459935,43,7036085.4600002775,43,81.60840206434187,30,0.673252765737544,17,34306,44,0.3309313654560363,33,10740,39,0.10360295181594559,31,71558,38,0.6902811942314185,21,7826,42,0.07549317513143299,35,15148,47,0.1461245357642406,40,314,48,0.00302898760430232,43 +40,207870,19,4554063.329999869,41,15469085,25,13789698.470001,17,74.41711165632367,43,0.7517377635158972,7,88597,18,0.42621349882137877,21,24733,14,0.11898301823254918,8,156192,14,0.7513926973589262,7,18961,14,0.0912156636359263,13,25987,37,0.12501563477173233,45,509,42,0.0024486457882330302,46 +41,46107,50,1434324.9199999727,50,3950795,50,3337325.0699999495,50,85.68753117747848,20,0.6994069298867422,13,18986,50,0.41178129134404756,23,6028,50,0.13073936712429782,1,33403,50,0.7244670006723491,13,4553,50,0.09874856312490511,4,6777,50,0.14698418895178605,38,167,50,0.003622009673151582,38 +42,1088623,1,27426712.51001126,2,84590300,1,73656207.00000462,1,77.70394342210297,37,0.7286711479747707,10,178778,2,0.1642239783653294,49,136808,1,0.12567068672993315,3,774611,1,0.7115511981650213,16,112267,1,0.10312752899764198,2,154892,1,0.14228249816511318,42,7496,5,0.0068857630235627946,26 +43,374662,7,5201360.370000152,38,27597355,8,25629328.369998213,7,73.65933828357292,45,0.8312927611230385,2,73588,28,0.1964116990781024,45,42207,5,0.1126535383892682,14,297527,6,0.7941211011525054,2,32104,6,0.08568790002722454,25,33182,31,0.08856516006427126,50,683,37,0.0018229764427670808,48 +44,499520,2,7544536.560000962,28,35690120,2,32453904.939996585,2,71.44883087764254,50,0.8113792368634807,3,76112,25,0.15237027546444587,50,54581,2,0.10926689622037156,19,382132,2,0.764998398462524,5,54015,2,0.10813380845611788,1,50010,21,0.10011611146700833,48,1079,32,0.002160073670723895,47 +45,102368,43,3185797.8899997803,47,8292415,44,7107147.750000214,41,81.00592958737106,31,0.6904872520049778,15,28881,47,0.28212918099406065,39,11568,37,0.11300406376992811,13,73178,36,0.7148522975929978,15,8865,37,0.08659932791497343,22,15769,45,0.15404227883713661,36,334,47,0.0032627383557361674,40 +46,237744,13,5639857.540000351,33,17738175,17,15808691.490001082,13,74.6104002624672,42,0.7370517916101679,8,69653,30,0.29297479641967833,37,26149,12,0.10998805437781815,18,176039,11,0.7404561208695067,11,21096,12,0.08873410054512416,16,34590,30,0.1454926307288512,41,1109,31,0.004664681337909684,32 +47,243828,12,3339098.219999718,46,17463555,18,16748067.730000993,11,71.62243466706039,49,0.8337695706646163,1,40609,43,0.1665477303673081,48,25372,13,0.10405695818363765,30,198879,9,0.8156528372459274,1,18572,15,0.07616844660990535,34,23965,40,0.09828649703889628,49,344,46,0.001410830585494693,50 +48,161512,35,3834153.679999649,43,11852865,40,10558535.63000061,34,73.38690004457874,46,0.7336040820852278,9,61338,33,0.3797736391104067,28,17186,27,0.10640695428203477,22,120951,23,0.7488669572539501,8,13112,27,0.08118282232899103,31,23698,41,0.1467259398682451,39,736,35,0.004556936945861608,33 +49,198181,21,6716489.270000929,30,15719280,24,13562476.610001242,18,79.3177953486964,33,0.6687952773457593,19,107872,12,0.544310504034191,17,19425,20,0.09801645970098041,32,138660,18,0.6996634389775004,19,14848,23,0.07492141022600551,36,36593,29,0.1846443402747993,31,1443,26,0.00728122272064426,23 +50,173308,28,5139240.400000104,39,13271730,36,11094340.210000781,28,76.57886537263138,40,0.6834191714405868,16,84736,20,0.488932997899693,20,22469,15,0.12964779467768367,2,121305,22,0.6999388372146699,18,16706,19,0.096394857709973,6,26914,36,0.15529577399773814,35,991,33,0.005718143420961525,30 diff --git a/bulletproof/ticket_count_identical.csv b/bulletproof/ticket_count_identical.csv index d060007..24c935d 100644 --- a/bulletproof/ticket_count_identical.csv +++ b/bulletproof/ticket_count_identical.csv @@ -1,29 +1,29 @@ ward,5yr_ticket_count_identical,all_yr_ticket_count_identical 1,True,True 2,True,True -3,True,False -4,False,False -5,False,False +3,True,True +4,True,True +5,True,True 6,True,True -7,True,False -8,False,False -9,False,False -10,False,False -11,False,False -12,False,False +7,True,True +8,True,True +9,True,True +10,True,True +11,True,True +12,True,True 13,True,True 14,True,True 15,True,True 16,True,True -17,False,False +17,True,True 18,True,True -19,False,False +19,True,True 20,True,True 21,True,True 22,True,True 23,True,True 24,True,True -25,False,False +25,True,True 26,True,True 27,True,True 28,True,True @@ -32,7 +32,7 @@ ward,5yr_ticket_count_identical,all_yr_ticket_count_identical 31,True,True 32,True,True 33,True,True -34,False,False +34,True,True 35,True,True 36,True,True 37,True,True diff --git a/bulletproof/top_five_violations_2013_2017.csv b/bulletproof/top_five_violations_2013_2017.csv new file mode 100644 index 0000000..056ba77 --- /dev/null +++ b/bulletproof/top_five_violations_2013_2017.csv @@ -0,0 +1,26 @@ +year,violation_code,ticket_number +2013,0976160F,354589.0 +2013,0964190A,309604.0 +2013,0964040B,276362.0 +2013,0964125B,233582.0 +2013,0964090E,169257.0 +2014,0976160F,375258.0 +2014,0964040B,273939.0 +2014,0964190A,232690.0 +2014,0964125B,183856.0 +2014,0964090E,167776.0 +2015,0976160F,378188.0 +2015,0964040B,284377.0 +2015,0964190A,262694.0 +2015,0964125B,232250.0 +2015,0964090E,177309.0 +2016,0976160F,391883.0 +2016,0964040B,261136.0 +2016,0964190A,237141.0 +2016,0964125B,207905.0 +2016,0964090E,177170.0 +2017,0964040B,241253.0 +2017,0964190A,234738.0 +2017,0964125B,208802.0 +2017,0964090E,194316.0 +2017,0976160F,175925.0 diff --git a/bulletproof/wardstotals5yr_sql_minus_pandas.csv b/bulletproof/wardstotals5yr_sql_minus_pandas.csv index a7a8975..08760f7 100644 --- a/bulletproof/wardstotals5yr_sql_minus_pandas.csv +++ b/bulletproof/wardstotals5yr_sql_minus_pandas.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,0,0,-1.8998980522155762e-06,0,0,0,3.993511199951172e-06,0,4.263256414560601e-14,0,6.339373470609644e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 -2,0,0,3.501772880554199e-07,0,0,0,-2.421438694000244e-07,0,0.0,0,-8.326672684688674e-15,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -3,0,0,-4.464760422706604e-06,0,0,0,-4.3585896492004395e-07,0,4.263256414560601e-14,0,6.961098364399732e-14,0,0,0,1.1102230246251565e-16,0,0,0,-4.163336342344337e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -4,191,0,11574.559998061508,0,17630,0,10919.800001125783,0,0.008052898135886721,0,-0.00010140115336843003,0,169,0,0.00035776326307546125,0,25,0,7.464996221770437e-06,0,100,0,-8.651038688090029e-05,0,24,0,1.9404039086609592e-05,0,55,0,4.309092825682814e-05,0,3,0,1.3506161106249803e-06,0 -5,74,0,5782.749995429069,0,6700,0,5087.30999783054,0,0.001476386830219667,0,-2.161578970760747e-05,0,65,0,0.0001516915421533871,0,8,0,-1.6138227553474938e-06,0,38,0,-2.606574720820376e-05,0,7,0,2.1657082413528705e-06,1,30,0,3.373136615519856e-05,0,2,0,9.448279520429814e-07,0 -6,0,0,2.644956111907959e-06,0,0,0,-1.8384307622909546e-06,0,-5.684341886080802e-14,0,-6.306066779870889e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -7,0,0,-5.258247256278992e-06,0,0,0,-1.0970979928970337e-06,0,0.0,0,4.674038933671909e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0 -8,69,0,9443.919995484874,0,7150,0,3961.199998781085,0,0.002956866382618273,0,-4.897766722233854e-05,0,45,0,2.2013268875076264e-05,0,4,0,-2.718727389319775e-05,0,29,0,-1.1638743961372988e-05,0,6,0,-4.036439558430249e-06,0,32,0,2.1764209227614906e-05,0,5,0,1.5238460324043523e-05,0 -9,3,0,178.79999738372862,0,180,0,85.17999964300543,0,-0.0010216344265217003,0,-8.265678130281451e-07,0,1,0,-9.80372007197694e-06,0,0,0,-3.072081256258463e-06,0,1,0,-2.817362245444155e-06,0,0,0,-2.4974825571510983e-06,0,1,0,-2.420732036267914e-06,0,0,0,-1.0464341167124025e-06,0 -10,34,0,2813.0199993941933,0,3000,0,2056.5199998421595,0,-0.001228466446065113,0,-2.0484305416623716e-05,0,29,0,0.0001221620932756462,0,4,0,8.825258619421517e-06,0,16,0,-3.5461590227714446e-05,0,4,0,1.4897715925998867e-05,0,10,0,3.568318370117396e-06,0,0,0,-8.025929827924771e-06,0 -11,117,0,7054.9399997107685,0,9230,0,4682.459999026731,0,0.0010063214766233841,0,-0.00019168130436397757,0,58,0,0.00014020436637451894,0,7,0,-3.193899086605112e-05,0,52,0,-0.00018142808131449417,0,6,0,-1.9694357960384212e-05,0,19,0,-9.70630523233762e-07,0,0,0,-3.785909744172429e-06,0 -12,128,0,4067.6899984143674,0,9565,0,8529.149999121204,0,-0.007662542256596794,0,7.198299761546068e-05,0,46,0,-1.043885041712711e-05,0,12,0,1.9139570118537064e-05,0,85,0,1.1511525976670711e-05,0,13,0,3.6648111654921656e-05,0,22,0,-5.351143586820872e-05,0,0,0,-5.334059335864415e-06,0 -13,0,0,2.691522240638733e-07,0,0,0,-1.7136335372924805e-07,0,-4.263256414560601e-14,0,-2.3425705819590803e-14,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -14,0,0,-1.2926757335662842e-06,0,0,0,-7.580965757369995e-07,0,4.263256414560601e-14,0,2.0095036745715333e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 -15,0,0,-2.6114284992218018e-06,0,0,0,-9.741634130477905e-07,0,0.0,0,3.341771304121721e-14,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 -16,0,0,-2.8312206268310547e-07,0,0,0,-1.4211982488632202e-06,0,2.842170943040401e-14,0,-2.5979218776228663e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -17,73,0,7599.799998499453,0,6615,0,3967.429998362437,0,-0.0041850854262719395,0,-5.72318136959904e-06,0,61,0,4.847330565860286e-05,0,7,0,-4.570665202152657e-06,0,32,0,5.971855143949156e-06,0,10,0,2.0810210805397023e-05,-1,33,0,5.711643519479281e-06,0,2,0,-6.011612884319895e-06,0 -18,0,0,-2.0675361156463623e-07,0,0,0,7.264316082000732e-08,0,2.842170943040401e-14,0,1.3655743202889425e-14,0,0,0,5.551115123125783e-17,0,0,0,-4.163336342344337e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-3.469446951953614e-18,0 -19,3,0,312.6900002155453,0,180,0,103.70000012032688,0,-0.0019042435997818075,0,-1.906733245138348e-05,0,3,0,2.3230238096361155e-05,0,0,0,-6.848256109623363e-06,0,0,0,-3.528505915717517e-05,0,0,0,-5.107940200588246e-06,0,3,0,4.163710949098287e-05,0,0,0,-9.472085408177011e-07,0 -20,0,0,3.3155083656311035e-06,0,0,0,-2.0209699869155884e-06,0,-1.4210854715202004e-14,0,-7.138734048339757e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -21,0,0,-5.19677996635437e-06,0,0,0,-1.3690441846847534e-06,0,-4.121147867408581e-13,0,4.546363285840016e-14,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -22,0,0,-2.030283212661743e-06,0,0,0,-7.245689630508423e-07,0,-2.842170943040401e-14,0,3.3861802251067274e-14,0,0,0,-5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0,0,0,1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 -23,0,0,-2.5331974029541016e-07,0,0,0,-6.966292858123779e-07,0,0.0,0,-5.88418203051333e-15,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 -24,0,0,5.520880222320557e-06,0,0,0,-1.644715666770935e-06,0,1.4210854715202004e-14,0,-8.443246102274315e-14,0,0,0,2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -25,580,0,34256.129998652264,0,49890,0,39190.83000279963,0,0.016282514647429025,0,-0.00034964904558687504,0,323,0,0.0004943151458282613,0,55,0,1.406853895061233e-06,0,349,0,-0.00019316405966618433,0,50,0,6.491482026485529e-06,0,150,0,0.000141779832896205,0,7,0,8.529680879357411e-06,0 -26,0,0,-2.4903565645217896e-06,0,0,0,-1.6782432794570923e-06,0,2.842170943040401e-14,0,3.2862601528904634e-14,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,-1.734723475976807e-18,0 -27,0,0,-2.60770320892334e-08,0,0,0,4.0084123611450195e-06,0,-1.4210854715202004e-14,0,3.630429290524262e-14,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,-3.469446951953614e-18,0 -28,0,0,1.3269484043121338e-05,0,0,0,-7.003545761108398e-07,0,1.4210854715202004e-14,0,-1.1868284133242923e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0 -29,0,0,-2.8721988201141357e-06,0,0,0,-1.434236764907837e-06,0,1.4210854715202004e-14,0,6.938893903907228e-15,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -30,0,0,-6.789341568946838e-07,0,0,0,-8.977949619293213e-07,0,0.0,0,6.994405055138486e-15,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 -31,0,0,-1.3541430234909058e-06,0,0,0,-1.2367963790893555e-06,0,-1.4210854715202004e-14,0,1.8096635301390052e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,1.734723475976807e-18,0 -32,0,0,3.46451997756958e-07,0,0,0,-1.0989606380462646e-06,0,-4.263256414560601e-14,0,-2.4424906541753444e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0 -33,0,0,-1.5832483768463135e-07,0,0,0,-9.55536961555481e-07,0,2.842170943040401e-14,0,-8.43769498715119e-15,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 -34,23,0,1785.3899955116212,0,2375,0,2224.8099992405623,0,-0.00026236219378006354,0,4.0076155734369845e-05,0,22,0,2.9521151907019316e-05,0,1,0,-1.3235580567677596e-05,0,12,0,2.5684826944094574e-05,0,1,0,-9.623747494011403e-06,0,8,0,-2.3347877184776156e-05,0,3,0,1.698527976801839e-05,0 -35,0,0,-9.5367431640625e-07,0,0,0,-1.125037670135498e-06,0,1.4210854715202004e-14,0,1.199040866595169e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.220446049250313e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0 -36,0,0,1.3969838619232178e-08,0,0,0,-4.721805453300476e-07,0,4.263256414560601e-14,0,-1.5210055437364645e-14,0,0,0,5.551115123125783e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -37,0,0,-2.4959444999694824e-07,0,0,0,-1.4919787645339966e-06,0,3.836930773104541e-13,0,-2.758904216193514e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0 -38,0,0,1.73225998878479e-07,0,0,0,-2.60770320892334e-08,0,2.842170943040401e-14,0,-1.63202784619898e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -39,0,0,2.207234501838684e-07,0,0,0,-2.691522240638733e-07,0,2.842170943040401e-14,0,-2.220446049250313e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -40,0,0,6.426125764846802e-08,0,0,0,-1.0319054126739502e-06,0,-4.263256414560601e-14,0,-1.5765166949677223e-14,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,-2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -41,0,0,2.7706846594810486e-08,0,0,0,5.029141902923584e-08,0,2.842170943040401e-14,0,-1.3322676295501878e-15,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 -42,0,0,-1.3697892427444458e-05,0,0,0,-5.5730342864990234e-06,0,4.263256414560601e-14,0,8.326672684688674e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -43,0,0,-2.1513551473617554e-07,0,0,0,1.8328428268432617e-06,0,-4.263256414560601e-14,0,1.609823385706477e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0 -44,0,0,-1.0961666703224182e-06,0,0,0,3.7103891372680664e-06,0,0.0,0,3.808064974464287e-14,0,0,0,-2.7755575615628914e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-4.336808689942018e-19,0 -45,0,0,2.1141022443771362e-07,0,0,0,-2.0675361156463623e-07,0,0.0,0,-2.0650148258027912e-14,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -46,0,0,-3.939494490623474e-07,0,0,0,-1.0952353477478027e-06,0,2.842170943040401e-14,0,7.771561172376096e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 -47,0,0,3.096647560596466e-07,0,0,0,-5.923211574554443e-07,0,-1.4210854715202004e-14,0,-1.63202784619898e-14,0,0,0,-2.7755575615628914e-17,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0 -48,0,0,3.427267074584961e-07,0,0,0,-6.128102540969849e-07,0,-1.4210854715202004e-14,0,-2.864375403532904e-14,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -49,0,0,-1.0738149285316467e-06,0,0,0,-1.3206154108047485e-06,0,4.263256414560601e-14,0,1.3211653993039363e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -50,0,0,-1.4156103134155273e-07,0,0,0,-8.046627044677734e-07,0,1.4210854715202004e-14,0,-8.770761894538737e-15,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 +1,0,0,-1.8030405044555664e-06,0,0,0,3.647059202194214e-06,0,-1.4210854715202004e-14,0,6.117328865684613e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 +2,0,0,4.1909515857696533e-07,0,0,0,-1.2665987014770508e-07,0,-2.842170943040401e-14,0,-9.547918011776346e-15,0,0,0,-2.7755575615628914e-17,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +3,0,0,-4.082918167114258e-06,0,0,0,-1.0281801223754883e-06,0,1.4210854715202004e-14,0,5.861977570020827e-14,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 +4,0,0,-1.6596168279647827e-06,0,0,0,8.493661880493164e-07,0,4.263256414560601e-14,0,4.085620730620576e-14,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-1.734723475976807e-18,0 +5,0,0,-4.494562745094299e-06,0,0,0,-2.1941959857940674e-06,0,5.684341886080802e-14,0,4.318767565791859e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +6,0,0,1.996755599975586e-06,0,0,0,-1.819804310798645e-06,0,-4.263256414560601e-14,0,-5.645484080218921e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +7,0,0,-4.813075065612793e-06,0,0,0,-9.145587682723999e-07,0,2.842170943040401e-14,0,4.907185768843192e-14,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-5.551115123125783e-17,0,0,-1,0.0,0,0,0,0.0,0,0,0,6.938893903907228e-18,0 +8,0,0,-4.524365067481995e-06,0,0,0,-1.210719347000122e-06,0,4.263256414560601e-14,0,4.091171845743702e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +9,0,0,-2.1457672119140625e-06,0,0,0,-2.039596438407898e-07,0,-1.4210854715202004e-14,0,4.490852134608758e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +10,0,0,-5.979090929031372e-07,0,0,0,-1.51805579662323e-07,0,0.0,0,1.659783421814609e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,-1,0.0,0,0,0,0.0,0,0,0,-3.469446951953614e-18,0 +11,0,0,-2.8312206268310547e-07,0,0,0,-9.98377799987793e-07,0,-4.263256414560601e-14,0,-5.218048215738236e-15,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 +12,0,0,-1.5385448932647705e-06,0,0,0,-8.568167686462402e-07,0,2.842170943040401e-14,0,2.398081733190338e-14,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,-1,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +13,0,0,2.60770320892334e-07,0,0,0,-1.695007085800171e-07,0,0.0,0,-2.2315482794965646e-14,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,-1,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,8.673617379884035e-19,0 +14,0,0,-1.2945383787155151e-06,0,0,0,-7.636845111846924e-07,0,1.4210854715202004e-14,0,2.0095036745715333e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,-1,0.0,0,0,0,2.7755575615628914e-17,0,0,0,-4.336808689942018e-19,0 +15,0,0,-2.3562461137771606e-06,0,0,0,-9.275972843170166e-07,0,1.4210854715202004e-14,0,3.2029934260435766e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +16,0,0,-1.2814998626708984e-06,0,0,0,-1.3671815395355225e-06,0,2.842170943040401e-14,0,-1.2656542480726785e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,-1,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +17,0,0,-2.0563602447509766e-06,0,0,0,-1.5906989574432373e-06,0,-1.7053025658242404e-13,0,-9.71445146547012e-15,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.6653345369377348e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +18,0,0,-2.1047890186309814e-07,0,0,0,7.35744833946228e-08,0,4.263256414560601e-14,0,1.3211653993039363e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,-1,0.0,0,0,0,0.0,0,0,0,0.0,0 +19,0,0,2.1653249859809875e-07,0,0,0,1.210719347000122e-07,0,-4.263256414560601e-14,0,-1.0769163338864018e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,-1,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,3.469446951953614e-18,0 +20,0,0,2.473592758178711e-06,0,0,0,-1.9632279872894287e-06,0,-1.4210854715202004e-14,0,-6.322720125240266e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +21,0,0,-4.949048161506653e-06,0,0,0,-1.2945383787155151e-06,0,1.9895196601282805e-13,0,4.5130565951012613e-14,0,0,0,-1.1102230246251565e-16,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +22,0,0,-2.002343535423279e-06,0,0,0,-7.245689630508423e-07,0,-2.842170943040401e-14,0,3.3861802251067274e-14,0,0,0,5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,-1,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +23,0,0,-2.7567148208618164e-07,0,0,0,-6.407499313354492e-07,0,0.0,0,-4.551914400963142e-15,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,-1,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +24,0,0,5.505979061126709e-06,0,0,0,-1.646578311920166e-06,0,-4.263256414560601e-14,0,-8.493206138382448e-14,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +25,0,0,-1.2870877981185913e-06,0,0,0,2.779066562652588e-06,0,0.0,0,4.2743586448068527e-14,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +26,0,0,-2.427026629447937e-06,0,0,0,-1.6596168279647827e-06,0,-1.4210854715202004e-14,0,3.2862601528904634e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 +27,0,0,-4.0605664253234863e-07,0,0,0,3.8035213947296143e-06,0,-1.4210854715202004e-14,0,4.030109579389318e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 +28,0,0,1.208484172821045e-05,0,0,0,-7.748603820800781e-07,0,-4.263256414560601e-14,0,-1.1307621505807219e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0 +29,0,0,-3.859400749206543e-06,0,0,0,-1.34296715259552e-06,0,1.4210854715202004e-14,0,2.4480417692984702e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0 +30,0,0,-6.69620931148529e-07,0,0,0,-8.959323167800903e-07,0,-2.842170943040401e-14,0,6.106226635438361e-15,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,-1,-6.938893903907228e-18,0,0,0,2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 +31,0,0,-1.325272023677826e-06,0,0,0,-1.2461096048355103e-06,0,-2.842170943040401e-14,0,1.7319479184152442e-14,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,-1,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 +32,0,0,3.3015385270118713e-07,0,0,0,-1.043081283569336e-06,0,0.0,0,-2.4091839634365897e-14,0,0,0,2.7755575615628914e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-2.168404344971009e-19,0 +33,0,0,-1.1362135410308838e-07,0,0,0,-9.313225746154785e-07,0,-4.263256414560601e-14,0,-1.0103029524088925e-14,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-6.938893903907228e-18,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 +34,0,0,-4.349276423454285e-06,0,0,0,-6.938353180885315e-07,0,-3.268496584496461e-13,0,4.85722573273506e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,6.938893903907228e-18,0 +35,0,0,-9.266659617424011e-07,0,0,0,-1.1119991540908813e-06,0,1.4210854715202004e-14,0,1.1879386363489175e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +36,0,0,5.494803190231323e-08,0,0,0,-4.4796615839004517e-07,0,1.4210854715202004e-14,0,-1.709743457922741e-14,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,-1,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +37,0,0,-3.46451997756958e-07,0,0,0,-1.5068799257278442e-06,0,2.842170943040401e-14,0,-2.7033930649622562e-14,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +38,0,0,1.708976924419403e-07,0,0,0,-2.3283064365386963e-08,0,2.842170943040401e-14,0,-1.6542323066914832e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +39,0,0,2.207234501838684e-07,0,0,0,-2.6728957891464233e-07,0,2.842170943040401e-14,0,-2.2093438190040615e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +40,0,0,1.3131648302078247e-07,0,0,0,-1.000240445137024e-06,0,2.842170943040401e-14,0,-1.8096635301390052e-14,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 +41,0,0,2.7241185307502747e-08,0,0,0,5.029141902923584e-08,0,2.842170943040401e-14,0,-1.3322676295501878e-15,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,-1,1.3877787807814457e-17,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 +42,0,0,-1.1257827281951904e-05,0,0,0,-4.9173831939697266e-06,0,4.263256414560601e-14,0,6.827871601444713e-14,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-1.734723475976807e-18,0 +43,0,0,-1.51805579662323e-07,0,0,0,1.687556505203247e-06,0,-1.4210854715202004e-14,0,1.3433698597964394e-14,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +44,0,0,-9.415671229362488e-07,0,0,0,3.3117830753326416e-06,0,-4.263256414560601e-14,0,3.530509218307998e-14,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 +45,0,0,2.0954757928848267e-07,0,0,0,-2.039596438407898e-07,0,2.842170943040401e-14,0,-1.9872992140790302e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,4.336808689942018e-19,0 +46,0,0,-3.511086106300354e-07,0,0,0,-1.082196831703186e-06,0,1.4210854715202004e-14,0,-8.881784197001252e-16,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 +47,0,0,2.8219074010849e-07,0,0,0,-9.927898645401e-07,0,1.4210854715202004e-14,0,-1.9317880628477724e-14,0,0,0,-2.7755575615628914e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.168404344971009e-19,0 +48,0,0,3.4086406230926514e-07,0,0,0,-6.09084963798523e-07,0,-2.842170943040401e-14,0,-2.8754776337791554e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +49,0,0,-9.08970832824707e-07,0,0,0,-1.2423843145370483e-06,0,1.4210854715202004e-14,0,1.0769163338864018e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 +50,0,0,-1.0337680578231812e-07,0,0,0,-7.80448317527771e-07,0,2.842170943040401e-14,0,-1.0769163338864018e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 diff --git a/bulletproof/wardstotals_sql_minus_pandas.csv b/bulletproof/wardstotals_sql_minus_pandas.csv index d803df1..98d4fa5 100644 --- a/bulletproof/wardstotals_sql_minus_pandas.csv +++ b/bulletproof/wardstotals_sql_minus_pandas.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,0,0,2.92360782623291e-05,0,0,0,-1.730024814605713e-05,0,0.0,0,-1.9506618542664e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -2,0,0,1.3962388038635254e-05,0,0,0,-1.6763806343078613e-05,0,-3.552713678800501e-14,0,-1.0125233984581428e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,1,0.0,0,0,0,4.336808689942018e-19,0 -3,21,0,1334.8000282645226,0,2755,0,1791.000015936792,0,0.0012294400440779896,0,-4.827330120082962e-07,0,19,0,4.620670482902156e-06,0,3,0,9.711911914817017e-07,0,8,0,-3.7491766103903146e-06,0,0,0,-1.5192071404629415e-06,0,7,0,-1.420336548374479e-07,0,0,0,-2.4703786707068465e-07,0 -4,1935,0,72096.69002003223,0,109620,0,88875.43998846412,0,-0.0005277123858249411,0,-0.00013006310602448057,0,1512,0,0.00020605194046285913,0,82,0,-5.8217054593009965e-05,0,1071,0,-8.143196299503774e-05,0,115,0,-4.44092726591544e-05,0,652,0,5.511816385023183e-05,0,15,0,-1.8608628480354383e-06,0 -5,309,0,19343.95002540946,0,22740,0,16163.630014188588,0,0.0028682583999355415,0,-5.1813803796263436e-05,0,262,0,0.00011244195747539543,0,24,0,-1.5539249160062552e-06,0,146,0,-3.7217070164241584e-05,0,26,0,-7.339376445897328e-07,0,141,0,3.284334489128682e-05,0,7,0,1.981060910892507e-06,0 -6,0,0,3.8929283618927e-05,0,0,0,1.2949109077453613e-05,0,-2.842170943040401e-14,0,-1.255662240851052e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,3.469446951953614e-18,0 -7,8,0,343.200024060905,0,435,0,172.00000486150384,0,-0.00020077035814836108,0,-9.814406813357657e-07,0,6,0,2.792237799087438e-06,0,0,0,-1.0416133272017625e-06,0,3,0,-1.3472193229890905e-06,0,1,0,5.219462723554669e-07,0,4,0,3.9394476031295866e-07,0,0,0,-3.241941599271825e-07,0 -8,395,0,21513.48001602292,0,24900,0,19816.37000590563,0,-0.0037334676611919804,0,-1.549614567664115e-05,0,310,0,0.0001642836792021818,0,26,0,-1.1014392047675736e-05,0,210,0,4.370182371316034e-06,0,29,0,-9.17133571398665e-06,0,181,0,1.4817441807146725e-05,0,11,0,2.9443741354773234e-06,0 -9,39,0,2016.2000046111643,0,2145,0,1295.1800011619925,0,-0.0015541281220095016,0,-6.946400127938457e-06,0,20,0,-8.856891045683213e-06,0,3,0,-6.24417994213311e-07,0,16,0,-9.113263013227346e-06,0,3,0,-6.428598845892308e-07,0,16,0,-1.610630247173006e-06,0,0,0,-2.085649134946077e-06,0 -10,199,0,12395.919995993376,0,12110,0,8037.419999361038,0,-0.0025948433010967165,0,-7.186215277965591e-05,0,152,0,9.518340645220391e-05,0,11,0,-8.03417260569761e-06,0,74,0,-8.854410608150065e-05,0,11,0,-1.0757869489924632e-05,0,79,0,3.678482674890349e-05,0,0,0,-5.751570014131402e-06,0 -11,449,0,24017.940000653267,0,29670,0,17959.69000414014,0,0.0018043412950561333,0,-0.00018141444931740747,0,232,0,5.287497169625954e-05,0,20,0,-3.1597995056878436e-05,0,208,0,-0.00013133742664961368,0,17,0,-2.932489487049439e-05,0,130,0,3.319619025796139e-05,0,3,0,7.198187540712053e-07,0 -12,802,0,23408.000020869076,0,47275,0,41880.980008624494,0,-0.0034165497738882777,0,8.41520194859724e-05,0,473,0,8.71334923728817e-05,0,38,0,7.0578214800276484e-09,0,495,0,4.439428519320554e-05,0,42,0,2.7763814121548047e-06,0,185,0,-6.284368320108591e-05,0,1,0,-3.28885621882994e-06,0 -13,0,0,-2.3711472749710083e-06,0,0,0,-1.0691583156585693e-06,0,1.4210854715202004e-14,0,3.419486915845482e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 -14,0,0,8.527189493179321e-06,0,0,0,4.045665264129639e-06,0,2.842170943040401e-14,0,-4.807265696626928e-14,0,0,0,1.6653345369377348e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -15,0,0,2.4653971195220947e-05,0,0,0,6.839632987976074e-06,0,-2.842170943040401e-14,0,-1.1690648449302898e-13,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,1.734723475976807e-18,0 -16,0,0,4.6156346797943115e-05,0,0,0,1.0482966899871826e-05,0,-4.263256414560601e-14,0,-1.6053824936079764e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 -17,349,0,19882.400034420192,0,23890,0,17136.530009806156,0,-0.0020389575061585674,0,-2.4180535276863147e-06,0,283,0,7.803109258897045e-05,0,25,-1,-8.725616408161718e-07,0,168,0,-7.195541267268624e-06,0,35,0,1.1421601799371794e-05,0,145,-1,-1.6755680701030506e-05,0,6,0,-4.1378460956913166e-06,0 -18,0,0,-3.0063092708587646e-06,0,0,0,-1.689419150352478e-06,0,-2.842170943040401e-14,0,3.1308289294429414e-14,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -19,58,0,3719.089999162592,0,4450,0,2402.4999988693744,0,0.001403784814627329,0,-7.172783593123455e-05,0,37,0,1.1009505534786967e-05,0,7,0,2.670216916411672e-06,0,19,0,-8.174453314380159e-05,0,5,0,-1.5294315882374843e-06,0,23,0,2.9222482460233845e-05,0,1,0,1.6744062273591626e-06,0 -20,0,0,4.8197805881500244e-05,0,0,0,1.245737075805664e-05,0,-1.4210854715202004e-14,0,-1.6042722705833512e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -21,0,0,1.5191733837127686e-05,0,0,0,5.085021257400513e-06,0,2.842170943040401e-14,0,-7.693845560652335e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -22,0,0,2.104043960571289e-05,0,0,0,5.036592483520508e-06,0,-2.842170943040401e-14,0,-1.0247358517290195e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0 -23,0,0,-2.3208558559417725e-06,0,0,0,3.2223761081695557e-06,0,1.4210854715202004e-14,0,5.3290705182007514e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,-4.336808689942018e-19,0 -24,0,0,5.628913640975952e-05,0,0,0,1.1324882507324219e-05,0,0.0,0,-1.8751666885918894e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-1.6653345369377348e-16,0,0,0,0.0,0 -25,4184,0,178668.59002109617,0,243795,0,180162.0599873811,0,-0.0028506637370995236,0,-0.00047571095989740186,1,2724,0,0.0005345567926455796,0,213,0,-5.570113954984912e-05,0,2047,0,-0.00044786962972420685,0,260,0,-1.8740440758294175e-05,0,1378,-1,0.00025149762740589443,0,37,0,1.0033825019959905e-05,0 -26,0,0,3.063678741455078e-05,0,0,0,1.3031065464019775e-05,0,7.105427357601002e-15,0,-1.3022916078853086e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,1,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 -27,0,0,4.252046346664429e-05,0,0,0,-2.898275852203369e-05,0,-2.842170943040401e-14,0,-2.2715163083830703e-13,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -28,0,0,3.261864185333252e-05,0,0,0,1.7642974853515625e-05,0,-4.263256414560601e-14,0,-5.156985949383852e-14,0,0,0,-2.220446049250313e-16,0,0,0,1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 -29,0,0,3.3698976039886475e-05,0,0,0,1.0192394256591797e-05,0,-2.842170943040401e-14,0,-1.2684298056342413e-13,0,0,0,0.0,0,0,1,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,6.938893903907228e-18,0 -30,0,0,6.780028343200684e-06,0,0,0,5.848705768585205e-06,0,-4.973799150320701e-14,0,-2.7644553313166398e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0 -31,0,0,1.204758882522583e-05,0,0,0,8.247792720794678e-06,0,3.552713678800501e-14,0,-5.384581669432009e-14,0,0,0,-1.6653345369377348e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -32,0,0,1.3932585716247559e-06,0,0,0,1.023709774017334e-05,0,-4.263256414560601e-14,0,1.8318679906315083e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,1,0.0,0 -33,0,0,2.1297484636306763e-05,0,0,0,8.38935375213623e-06,0,0.0,0,-1.1812772982011666e-13,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,-5.551115123125783e-17,0,0,0,4.336808689942018e-19,0 -34,65,0,3658.1900113224983,0,4725,0,4025.2100016102195,0,-0.0005805492924508826,0,9.93477534805276e-06,0,59,0,2.2479535030872633e-05,0,2,0,-7.906166475030174e-06,0,29,0,-4.057159571191349e-06,0,5,0,-1.6142276482444817e-06,0,26,0,-9.078799729833609e-06,0,3,0,3.1055673164331887e-06,0 -35,0,0,2.4616718292236328e-05,0,0,0,1.0654330253601074e-05,0,-2.842170943040401e-14,0,-1.1191048088221578e-13,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,5.551115123125783e-17,0,0,0,8.673617379884035e-19,0 -36,0,0,-2.2277235984802246e-06,0,0,0,1.7657876014709473e-06,0,-2.842170943040401e-14,0,4.574118861455645e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 -37,0,0,4.1328370571136475e-05,0,0,0,8.724629878997803e-06,0,2.842170943040401e-14,0,-1.6192602814157908e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -38,0,0,-1.6521662473678589e-06,0,0,0,-9.313225746154785e-07,0,7.105427357601002e-15,0,2.7533531010703882e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,4.336808689942018e-19,0 -39,0,0,-2.6263296604156494e-06,0,0,0,1.1771917343139648e-06,0,-3.552713678800501e-14,0,5.595524044110789e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-4.336808689942018e-19,0 -40,0,0,7.7076256275177e-06,0,0,0,9.134411811828613e-06,0,0.0,0,-2.9976021664879227e-14,-1,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 -41,0,0,1.0803341865539551e-07,0,0,0,-4.2282044887542725e-07,0,-4.263256414560601e-14,0,-1.1879386363489175e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 -42,0,0,-0.00014545023441314697,0,0,0,1.8358230590820312e-05,0,-1.4210854715202004e-14,0,3.043121310497554e-13,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 -43,0,0,9.957700967788696e-06,0,0,0,-2.288818359375e-05,0,-2.1316282072803006e-14,0,-9.281464485866309e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 -44,0,0,1.8991529941558838e-05,0,0,0,-4.1112303733825684e-05,0,2.1316282072803006e-14,0,-1.4288570326925765e-13,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -45,0,0,-3.332272171974182e-06,0,0,0,6.817281246185303e-07,0,-2.842170943040401e-14,0,6.161737786669619e-14,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-8.326672684688674e-17,0,0,0,-4.336808689942018e-19,0 -46,0,0,1.317635178565979e-05,0,0,0,1.014024019241333e-05,0,1.4210854715202004e-14,0,-6.517009154549669e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -47,0,0,1.6130506992340088e-06,0,0,0,8.359551429748535e-06,0,4.973799150320701e-14,0,7.993605777301127e-15,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,2.168404344971009e-19,0 -48,0,0,1.2621283531188965e-05,0,0,0,4.67151403427124e-06,0,3.552713678800501e-14,0,-8.926193117986259e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 -49,0,0,2.615898847579956e-05,0,0,0,1.0654330253601074e-05,0,-2.1316282072803006e-14,0,-1.1901590823981678e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -50,0,0,1.9818544387817383e-06,0,0,0,5.200505256652832e-06,0,-2.842170943040401e-14,0,7.327471962526033e-15,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +1,0,0,2.6732683181762695e-05,0,0,0,-1.4126300811767578e-05,0,0.0,0,-1.787459069646502e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-4.336808689942018e-19,0 +2,0,0,1.4677643775939941e-05,0,0,0,-1.7255544662475586e-05,0,-7.105427357601002e-15,0,-1.0658141036401503e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 +3,0,0,2.8036534786224365e-05,0,0,0,1.4469027519226074e-05,0,-2.1316282072803006e-14,0,-1.0969003483296547e-13,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +4,0,0,1.6830861568450928e-05,0,0,0,-8.404254913330078e-06,0,2.842170943040401e-14,0,-1.0624834345662748e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-3.469446951953614e-18,0 +5,0,0,2.4400651454925537e-05,0,0,0,1.3932585716247559e-05,0,7.105427357601002e-15,0,-9.259260025373806e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 +6,0,0,3.805011510848999e-05,0,0,0,1.3209879398345947e-05,0,5.684341886080802e-14,0,-1.2179146580137967e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 +7,0,0,1.917034387588501e-05,0,0,0,4.161149263381958e-06,0,4.263256414560601e-14,0,-1.0541567618815861e-13,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +8,0,0,1.5951693058013916e-05,0,0,0,6.012618541717529e-06,0,1.4210854715202004e-14,0,-7.327471962526033e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0 +9,0,0,-2.086162567138672e-07,0,0,0,-5.885958671569824e-07,0,-5.684341886080802e-14,0,-5.773159728050814e-15,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 +10,0,0,-4.071742296218872e-06,0,0,0,-6.705522537231445e-07,0,4.263256414560601e-14,0,4.884981308350689e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-1.734723475976807e-18,0 +11,0,0,-2.7194619178771973e-07,0,0,0,4.2244791984558105e-06,0,-1.4210854715202004e-14,0,2.6645352591003757e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 +12,0,0,2.012401819229126e-05,0,0,0,8.13603401184082e-06,0,1.4210854715202004e-14,0,-9.769962616701378e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 +13,0,0,-2.341344952583313e-06,0,0,0,-1.0170042514801025e-06,0,-4.263256414560601e-14,0,3.4861002973229915e-14,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 +14,0,0,8.646398782730103e-06,0,0,0,4.0084123611450195e-06,0,4.263256414560601e-14,0,-4.984901380566953e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0 +15,0,0,2.0585954189300537e-05,0,0,0,6.116926670074463e-06,0,1.4210854715202004e-14,0,-9.903189379656396e-14,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 +16,0,0,4.453212022781372e-05,0,0,0,1.0348856449127197e-05,0,2.842170943040401e-14,0,-1.5787371410169726e-13,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,3.469446951953614e-18,0 +17,0,0,3.380328416824341e-05,0,0,0,9.424984455108643e-06,0,0.0,0,-1.3328227410625004e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,1.6653345369377348e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +18,0,0,-2.985820174217224e-06,0,0,0,-1.687556505203247e-06,0,-4.263256414560601e-14,0,3.1308289294429414e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 +19,0,0,-8.44709575176239e-07,0,0,0,-1.123175024986267e-06,0,2.842170943040401e-14,0,6.994405055138486e-15,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,1.734723475976807e-18,0 +20,0,0,4.573911428451538e-05,0,0,0,1.1615455150604248e-05,0,-4.263256414560601e-14,0,-1.5826229216031606e-13,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +21,0,0,1.3355165719985962e-05,0,0,0,4.656612873077393e-06,0,2.842170943040401e-14,0,-6.855627177060342e-14,0,0,0,2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,2.220446049250313e-16,0,0,0,-2.7755575615628914e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +22,0,0,2.0459294319152832e-05,0,0,0,4.9620866775512695e-06,0,0.0,0,-9.903189379656396e-14,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 +23,0,0,-2.4884939193725586e-06,0,0,0,2.7492642402648926e-06,0,1.4210854715202004e-14,0,5.229150445984487e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +24,0,0,5.733966827392578e-05,0,0,0,1.1444091796875e-05,0,4.263256414560601e-14,0,-1.9101387138675818e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0 +25,0,0,2.0988285541534424e-05,0,0,0,-1.239776611328125e-05,0,2.842170943040401e-14,0,-1.3722356584366935e-13,0,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +26,0,0,2.9884278774261475e-05,0,0,0,1.3045966625213623e-05,0,-2.842170943040401e-14,0,-1.2656542480726785e-13,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,-1.734723475976807e-18,0 +27,0,0,4.594773054122925e-05,0,0,0,-2.536177635192871e-05,0,1.4210854715202004e-14,0,-2.3647750424515834e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.734723475976807e-18,0 +28,0,0,3.819167613983154e-05,0,0,0,1.8656253814697266e-05,0,-4.263256414560601e-14,0,-6.927791673660977e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 +29,0,0,2.997368574142456e-05,0,0,0,9.767711162567139e-06,0,4.263256414560601e-14,0,-1.1418643808269735e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,3.469446951953614e-18,0 +30,0,0,6.757676601409912e-06,0,0,0,5.6996941566467285e-06,0,-2.842170943040401e-14,0,-2.8976820942716586e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,5.551115123125783e-17,0,0,0,-4.336808689942018e-19,0 +31,0,0,1.1838972568511963e-05,0,0,0,8.016824722290039e-06,0,-1.4210854715202004e-14,0,-5.46229728115577e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 +32,0,0,7.860362529754639e-07,0,0,0,9.573996067047119e-06,0,-1.4210854715202004e-14,0,2.220446049250313e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 +33,0,0,2.1055340766906738e-05,0,0,0,8.106231689453125e-06,0,1.4210854715202004e-14,0,-1.1801670751765414e-13,0,0,0,-5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0,0,0,-1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 +34,0,0,1.0766088962554932e-05,0,0,0,1.3709068298339844e-06,0,-4.263256414560601e-14,0,-7.854827899222983e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 +35,0,0,2.440810203552246e-05,0,0,0,1.0512769222259521e-05,0,-3.552713678800501e-14,0,-1.1235457009206584e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 +36,0,0,-2.7865171432495117e-06,0,0,0,1.5459954738616943e-06,0,1.4210854715202004e-14,0,5.284661597215745e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +37,0,0,4.176795482635498e-05,0,0,0,9.037554264068604e-06,0,2.842170943040401e-14,0,-1.6275869541004795e-13,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 +38,0,0,-1.6372650861740112e-06,0,0,0,-9.834766387939453e-07,0,3.552713678800501e-14,0,2.731148640577885e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-8.326672684688674e-17,0,0,0,0.0,0 +39,0,0,-2.6226043701171875e-06,0,0,0,1.2628734111785889e-06,0,0.0,0,5.706546346573305e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 +40,0,0,7.059425115585327e-06,0,0,0,8.52346420288086e-06,0,-1.4210854715202004e-14,0,-2.8199664825478976e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 +41,0,0,1.0617077350616455e-07,0,0,0,-4.2654573917388916e-07,0,4.263256414560601e-14,0,-1.2212453270876722e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 +42,0,0,-0.00014281272888183594,0,0,0,1.749396324157715e-05,0,-7.105427357601002e-15,0,3.0475622025960547e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 +43,0,0,9.145587682723999e-06,0,0,0,-2.0995736122131348e-05,0,-2.842170943040401e-14,0,-8.637535131583718e-14,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 +44,0,0,2.0328909158706665e-05,0,0,0,-3.559887409210205e-05,0,7.105427357601002e-15,0,-1.4999113062685865e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,6.505213034913027e-19,0 +45,0,0,-3.3210963010787964e-06,0,0,0,7.413327693939209e-07,0,-7.105427357601002e-15,0,6.206146707654625e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-4.336808689942018e-19,0 +46,0,0,1.2744218111038208e-05,0,0,0,9.723007678985596e-06,0,-2.1316282072803006e-14,0,-6.45039577307216e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 +47,0,0,3.46451997756958e-07,0,0,0,7.696449756622314e-06,0,-4.973799150320701e-14,0,1.865174681370263e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 +48,0,0,1.247599720954895e-05,0,0,0,4.783272743225098e-06,0,-4.263256414560601e-14,0,-8.926193117986259e-14,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +49,0,0,2.4668872356414795e-05,0,0,0,1.0289251804351807e-05,0,4.973799150320701e-14,0,-1.163513729807164e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,1.734723475976807e-18,0 +50,0,0,1.4640390872955322e-06,0,0,0,5.0514936447143555e-06,0,2.842170943040401e-14,0,1.3211653993039363e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 From 8cb830c1b76a0ef6634871fe18435d5d87df38cc Mon Sep 17 00:00:00 2001 From: Jeff Kao Date: Tue, 18 Dec 2018 16:37:09 -0500 Subject: [PATCH 128/140] add top 5 and top level summaries --- bulletproof/bulletproof_sql_notebook.ipynb | 7003 +---------------- bulletproof/df_1996to2018.csv | 100 +- bulletproof/df_2013to2017.csv | 100 +- bulletproof/df_top_five_2013to2017 | 26 + bulletproof/df_top_level_summaries | 11 + .../wardstotals5yr_sql_minus_pandas.csv | 100 +- bulletproof/wardstotals_sql_minus_pandas.csv | 100 +- 7 files changed, 345 insertions(+), 7095 deletions(-) create mode 100644 bulletproof/df_top_five_2013to2017 create mode 100644 bulletproof/df_top_level_summaries diff --git a/bulletproof/bulletproof_sql_notebook.ipynb b/bulletproof/bulletproof_sql_notebook.ipynb index a8e83a6..41fe221 100644 --- a/bulletproof/bulletproof_sql_notebook.ipynb +++ b/bulletproof/bulletproof_sql_notebook.ipynb @@ -83,21 +83,36 @@ "metadata": {}, "outputs": [], "source": [ - "def calculate_summary_stats(df_raw, min_year = 1995, max_year = 2019):\n", - " \n", - " # private helper function\n", - " def rank_series(series):\n", - " out_series = series.rank(ascending=False)\n", - " return out_series\n", - " \n", + "def filter_data(df_raw, min_year = 1995, max_year = 2019):\n", " df_filtered = df_raw[\n", " (df_raw['year'] > min_year) & (df_raw['year'] < max_year) & \n", " (df_raw['geocode_accuracy_type'].isin(['rooftop', 'range_interpolation', 'intersection', 'point'])) & \n", + " (df_raw['geocode_accuracy'] > 0.7) &\n", " (df_raw['geocoded_city'] == 'Chicago')\n", " ]\n", " # not used\n", " # df_filtered_na = df_filtered[df_filtered['ward'].isnull()]\n", " df_filtered = df_filtered[df_filtered['ward'].notnull()]\n", + " return df_filtered" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_summary_stats(df_raw, min_year = 1995, max_year = 2019, filter_and_group_data=True):\n", + " \n", + " # private helper function\n", + " def rank_series(series):\n", + " out_series = series.rank(ascending=False)\n", + " return out_series\n", + " \n", + " if filter_and_group_data:\n", + " df_filtered = filter_data(df_raw, min_year, max_year)\n", + " else:\n", + " df_filtered = df_raw\n", "\n", " # calculate base dataframes\n", " df_dict = dict()\n", @@ -123,8 +138,12 @@ "\n", " # group dataframes by ward\n", " gb_dict = dict()\n", + " \n", " for key in df_dict:\n", - " gb_dict[key] = df_dict[key].groupby('ward')\n", + " if filter_and_group_data:\n", + " gb_dict[key] = df_dict[key].groupby('ward')\n", + " else:\n", + " gb_dict[key] = df_dict[key]\n", "\n", " # calculate the different stats\n", " out_dict = dict()\n", @@ -149,27 +168,61 @@ " out_dict['bankruptcy_ticket_count_pct'] = out_dict['bankruptcy_ticket_count'] / ticket_count\n", "\n", " # calculate ranks; combine and format output dataframe\n", - " df_out = pd.DataFrame()\n", - " for key in out_dict:\n", - " df_out[key] = out_dict[key]\n", - " df_out[key+'_rank'] = rank_series(out_dict[key]).astype(int)\n", - " df_out.index = df_out.index.astype(int)\n", - " df_out = df_out.sort_index()\n", - " \n", + " if filter_and_group_data:\n", + " df_out = pd.DataFrame()\n", + " for key in out_dict:\n", + " df_out[key] = out_dict[key]\n", + " df_out[key+'_rank'] = rank_series(out_dict[key]).astype(int)\n", + " df_out.index = df_out.index.astype(int)\n", + " df_out = df_out.sort_index()\n", + "\n", + " return df_out\n", + " else:\n", + " series_out = pd.Series()\n", + " for key in out_dict:\n", + " series_out[key] = out_dict[key]\n", + " return series_out" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_top_level_summaries(df_in, columns):\n", + " df_out = calculate_summary_stats(df_in, min_year=None, max_year=None, filter_and_group_data=False)\n", + " return df_out[columns]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_top_5_per_year(df_raw, min_year=1995, max_year=2019):\n", + " df_filtered = filter_data(df_raw, min_year, max_year)\n", + " gb_in = df_filtered[['ticket_number','year','violation_code']].groupby(['year','violation_code'])\n", + " top_5_list = []\n", + " for year, new_df in gb_in.count().groupby('year'):\n", + " top_5_list.append(new_df.nlargest(5, columns='ticket_number'))\n", + "\n", + " df_out = pd.concat(top_5_list)\n", " return df_out" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 9min 15s, sys: 2min 30s, total: 11min 46s\n", - "Wall time: 12min 12s\n" + "CPU times: user 9min 21s, sys: 2min 43s, total: 12min 5s\n", + "Wall time: 12min 49s\n" ] } ], @@ -181,15 +234,15 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1min 22s, sys: 2min 39s, total: 4min 2s\n", - "Wall time: 4min 42s\n" + "CPU times: user 1min 23s, sys: 3min 6s, total: 4min 29s\n", + "Wall time: 5min 29s\n" ] } ], @@ -200,15 +253,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 19.4 s, sys: 10.4 s, total: 29.9 s\n", - "Wall time: 24.4 s\n" + "CPU times: user 20.6 s, sys: 13.3 s, total: 33.9 s\n", + "Wall time: 29 s\n" ] } ], @@ -217,6938 +270,98 @@ "df_2013to2017 = calculate_summary_stats(df, min_year=2012, max_year=2018)" ] }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "df_1996to2018.to_csv('df_1996to2018.csv')\n", - "# df_1996to2018.to_csv()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "df_2013to2017.to_csv('df_2013to2017.csv')\n", - "# df_2013to2017.to_csv()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "df_check = pd.read_csv('./wardstotals (1).csv', index_col='ward').sort_index(ascending=True)\n", - "df_check5yr = pd.read_csv('./wardstotals5yr (1).csv', index_col='ward').sort_index(ascending=True)\n", - "df_1996to2018_check = df_check[df_1996to2018.columns.tolist()]\n", - "df_2013to2017_check = df_check5yr[df_2013to2017.columns.tolist()]" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "wardstotals_sql_minus_pandas = df_1996to2018_check - df_1996to2018\n", - "wardstotals5yr_sql_minus_pandas = df_2013to2017_check - df_2013to2017" - ] - }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ticket_countticket_count_rankcurrent_amount_duecurrent_amount_due_rankfine_level1_amountfine_level1_amount_ranktotal_paymentstotal_payments_rankavg_per_ticketavg_per_ticket_rankpaid_pctpaid_pct_rankpolice_ticket_countpolice_ticket_count_rankpolice_ticket_count_pctpolice_ticket_count_pct_rankcontested_ticket_countcontested_ticket_count_rankcontested_ticket_count_pctcontested_ticket_count_pct_rankpaid_ticket_countpaid_ticket_count_rankpaid_ticket_count_pctpaid_ticket_count_pct_rankdismissed_ticket_countdismissed_ticket_count_rankdismissed_ticket_count_pctdismissed_ticket_count_pct_rankseized_or_suspended_ticket_countseized_or_suspended_ticket_count_rankseized_or_suspended_ticket_count_pctseized_or_suspended_ticket_count_pct_rankbankruptcy_ticket_countbankruptcy_ticket_count_rankbankruptcy_ticket_count_pctbankruptcy_ticket_count_pct_rank
ward
1168163583.842208e+07179846718579.010842e+07658.554434390.7010667584989140.3478694811709880.06963337115854460.688939610775980.0640804038330190.227934415791260.00344438
2207697433.425586e+072211703108031.091317e+08356.346916460.761096481851840.3940924617976430.08655115147912840.712155517627230.0848701438828760.186948477167210.00345136
31068060153.942537e+071466560465135.606786e+071462.319032280.5871402965764390.6157361395109120.0890489631895180.5916292992175130.08630112363786120.3406041615058130.01409816
4170050874.450665e+0799747281088.736265e+07857.319819450.6624941497570330.5737712014917060.08772111108170780.6361081815588960.091672448662740.2861662616270120.00956820
51066278163.909947e+071567806820125.826371e+071363.592065240.59841625476558230.4469363988310150.08282122642266170.6023442692194120.08646311364347110.3417001516854110.01580615
\n", - "
" - ], - "text/plain": [ - " ticket_count ticket_count_rank current_amount_due \\\n", - "ward \n", - "1 1681635 8 3.842208e+07 \n", - "2 2076974 3 3.425586e+07 \n", - "3 1068060 15 3.942537e+07 \n", - "4 1700508 7 4.450665e+07 \n", - "5 1066278 16 3.909947e+07 \n", - "\n", - " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", - "ward \n", - "1 17 98467185 7 \n", - "2 22 117031080 3 \n", - "3 14 66560465 13 \n", - "4 9 97472810 8 \n", - "5 15 67806820 12 \n", - "\n", - " total_payments total_payments_rank avg_per_ticket \\\n", - "ward \n", - "1 9.010842e+07 6 58.554434 \n", - "2 1.091317e+08 3 56.346916 \n", - "3 5.606786e+07 14 62.319032 \n", - "4 8.736265e+07 8 57.319819 \n", - "5 5.826371e+07 13 63.592065 \n", - "\n", - " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", - "ward \n", - "1 39 0.701066 7 584989 \n", - "2 46 0.761096 4 818518 \n", - "3 28 0.587140 29 657643 \n", - "4 45 0.662494 14 975703 \n", - "5 24 0.598416 25 476558 \n", - "\n", - " police_ticket_count_rank police_ticket_count_pct \\\n", - "ward \n", - "1 14 0.347869 \n", - "2 4 0.394092 \n", - "3 9 0.615736 \n", - "4 3 0.573771 \n", - "5 23 0.446936 \n", - "\n", - " police_ticket_count_pct_rank contested_ticket_count \\\n", - "ward \n", - "1 48 117098 \n", - "2 46 179764 \n", - "3 13 95109 \n", - "4 20 149170 \n", - "5 39 88310 \n", - "\n", - " contested_ticket_count_rank contested_ticket_count_pct \\\n", - "ward \n", - "1 8 0.069633 \n", - "2 3 0.086551 \n", - "3 12 0.089048 \n", - "4 6 0.087721 \n", - "5 15 0.082821 \n", - "\n", - " contested_ticket_count_pct_rank paid_ticket_count \\\n", - "ward \n", - "1 37 1158544 \n", - "2 15 1479128 \n", - "3 9 631895 \n", - "4 11 1081707 \n", - "5 22 642266 \n", - "\n", - " paid_ticket_count_rank paid_ticket_count_pct \\\n", - "ward \n", - "1 6 0.688939 \n", - "2 4 0.712155 \n", - "3 18 0.591629 \n", - "4 8 0.636108 \n", - "5 17 0.602344 \n", - "\n", - " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", - "ward \n", - "1 6 107759 \n", - "2 5 176272 \n", - "3 29 92175 \n", - "4 18 155889 \n", - "5 26 92194 \n", - "\n", - " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", - "ward \n", - "1 8 0.064080 \n", - "2 3 0.084870 \n", - "3 13 0.086301 \n", - "4 6 0.091672 \n", - "5 12 0.086463 \n", - "\n", - " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", - "ward \n", - "1 40 383301 \n", - "2 14 388287 \n", - "3 12 363786 \n", - "4 4 486627 \n", - "5 11 364347 \n", - "\n", - " seized_or_suspended_ticket_count_rank \\\n", - "ward \n", - "1 9 \n", - "2 6 \n", - "3 12 \n", - "4 4 \n", - "5 11 \n", - "\n", - " seized_or_suspended_ticket_count_pct \\\n", - "ward \n", - "1 0.227934 \n", - "2 0.186948 \n", - "3 0.340604 \n", - "4 0.286166 \n", - "5 0.341700 \n", - "\n", - " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", - "ward \n", - "1 41 5791 \n", - "2 47 7167 \n", - "3 16 15058 \n", - "4 26 16270 \n", - "5 15 16854 \n", - "\n", - " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", - "ward \n", - "1 26 0.003444 \n", - "2 21 0.003451 \n", - "3 13 0.014098 \n", - "4 12 0.009568 \n", - "5 11 0.015806 \n", - "\n", - " bankruptcy_ticket_count_pct_rank \n", - "ward \n", - "1 38 \n", - "2 36 \n", - "3 16 \n", - "4 20 \n", - "5 15 " - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 9.94 s, sys: 2.66 s, total: 12.6 s\n", + "Wall time: 7.66 s\n" + ] } ], "source": [ - "df_1996to2018.head()" + "%%time\n", + "df_top_five_2013to2017 = calculate_top_5_per_year(df, min_year=2012, max_year=2018)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ticket_countticket_count_rankcurrent_amount_duecurrent_amount_due_rankfine_level1_amountfine_level1_amount_ranktotal_paymentstotal_payments_rankavg_per_ticketavg_per_ticket_rankpaid_pctpaid_pct_rankpolice_ticket_countpolice_ticket_count_rankpolice_ticket_count_pctpolice_ticket_count_pct_rankcontested_ticket_countcontested_ticket_count_rankcontested_ticket_count_pctcontested_ticket_count_pct_rankpaid_ticket_countpaid_ticket_count_rankpaid_ticket_count_pctpaid_ticket_count_pct_rankdismissed_ticket_countdismissed_ticket_count_rankdismissed_ticket_count_pctdismissed_ticket_count_pct_rankseized_or_suspended_ticket_countseized_or_suspended_ticket_count_rankseized_or_suspended_ticket_count_pctseized_or_suspended_ticket_count_pct_rankbankruptcy_ticket_countbankruptcy_ticket_count_rankbankruptcy_ticket_count_pctbankruptcy_ticket_count_pct_rank
ward
1002.673268e-05000-1.412630e-0500.000000e+000-1.787459e-130005.551115e-170000.000000e+000001.110223e-160001.387779e-17000-2.775558e-17000-4.336809e-190
2001.467764e-05000-1.725554e-050-7.105427e-150-1.065814e-130005.551115e-170000.000000e+000000.000000e+00000-1.387779e-170000.000000e+00000-4.336809e-190
3002.803653e-050001.446903e-050-2.131628e-140-1.096900e-130001.110223e-16000-1.387779e-170000.000000e+00000-1.387779e-17000-5.551115e-170000.000000e+000
4001.683086e-05000-8.404255e-0602.842171e-140-1.062483e-130000.000000e+00000-1.387779e-17000-1.110223e-16000-1.387779e-170000.000000e+00000-3.469447e-180
5002.440065e-050001.393259e-0507.105427e-150-9.259260e-14000-1.110223e-16000-1.387779e-170000.000000e+00000-1.387779e-170005.551115e-17000-3.469447e-180
6003.805012e-050001.320988e-0505.684342e-140-1.217915e-130000.000000e+000000.000000e+00000-1.110223e-16000-1.387779e-170000.000000e+000003.469447e-180
7001.917034e-050004.161149e-0604.263256e-140-1.054157e-13000-1.110223e-160001.387779e-17000-5.551115e-17000-1.387779e-170000.000000e+000000.000000e+000
8001.595169e-050006.012619e-0601.421085e-140-7.327472e-140000.000000e+000001.387779e-17000-1.110223e-16000-1.387779e-17000-1.110223e-160000.000000e+000
900-2.086163e-07000-5.885959e-070-5.684342e-140-5.773160e-150001.110223e-16000-1.387779e-17000-1.110223e-16000-1.387779e-170005.551115e-17000-3.469447e-180
1000-4.071742e-06000-6.705523e-0704.263256e-1404.884981e-140001.110223e-160000.000000e+000000.000000e+00000-1.387779e-17000-5.551115e-17000-1.734723e-180
1100-2.719462e-070004.224479e-060-1.421085e-1402.664535e-14000-5.551115e-17000-1.387779e-17000-1.110223e-160001.387779e-170002.775558e-17000-8.673617e-190
12002.012402e-050008.136034e-0601.421085e-140-9.769963e-14000-1.110223e-160000.000000e+00000-1.110223e-160006.938894e-180005.551115e-17000-8.673617e-190
1300-2.341345e-06000-1.017004e-060-4.263256e-1403.486100e-140005.551115e-170000.000000e+000001.110223e-160000.000000e+000002.775558e-170000.000000e+000
14008.646399e-060004.008412e-0604.263256e-140-4.984901e-14000-1.110223e-16000-6.938894e-180000.000000e+000006.938894e-180000.000000e+000000.000000e+000
15002.058595e-050006.116927e-0601.421085e-140-9.903189e-14000-2.220446e-160000.000000e+000001.110223e-160000.000000e+00000-5.551115e-17000-8.673617e-190
16004.453212e-050001.034886e-0502.842171e-140-1.578737e-130000.000000e+00000-6.938894e-180000.000000e+000000.000000e+000005.551115e-170003.469447e-180
17003.380328e-050009.424984e-0600.000000e+000-1.332823e-130000.000000e+00000-1.387779e-170001.665335e-16000-1.387779e-170000.000000e+000000.000000e+000
1800-2.985820e-06000-1.687557e-060-4.263256e-1403.130829e-140001.110223e-160000.000000e+000000.000000e+000000.000000e+000000.000000e+000003.469447e-180
1900-8.447096e-07000-1.123175e-0602.842171e-1406.994405e-15000-1.110223e-16000-1.387779e-170000.000000e+000001.387779e-17000-5.551115e-170001.734723e-180
20004.573911e-050001.161546e-050-4.263256e-140-1.582623e-130001.110223e-160000.000000e+000000.000000e+00000-1.387779e-170000.000000e+000000.000000e+000
21001.335517e-050004.656613e-0602.842171e-140-6.855627e-140002.220446e-16000-1.387779e-170002.220446e-16000-2.775558e-170005.551115e-170000.000000e+000
22002.045929e-050004.962087e-0600.000000e+000-9.903189e-140000.000000e+000006.938894e-180001.110223e-160000.000000e+000000.000000e+000000.000000e+000
2300-2.488494e-060002.749264e-0601.421085e-1405.229150e-140001.110223e-160000.000000e+000001.110223e-16000-1.387779e-17000-2.775558e-170000.000000e+000
24005.733967e-050001.144409e-0504.263256e-140-1.910139e-130000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+00000-6.938894e-180
25002.098829e-05000-1.239777e-0502.842171e-140-1.372236e-13000-1.110223e-16000-2.775558e-170000.000000e+000001.387779e-17000-2.775558e-170000.000000e+000
26002.988428e-050001.304597e-050-2.842171e-140-1.265654e-130001.110223e-160001.387779e-170000.000000e+000006.938894e-180000.000000e+00000-1.734723e-180
27004.594773e-05000-2.536178e-0501.421085e-140-2.364775e-130000.000000e+000000.000000e+000000.000000e+000001.387779e-170000.000000e+000001.734723e-180
28003.819168e-050001.865625e-050-4.263256e-140-6.927792e-140001.110223e-160000.000000e+000001.110223e-160001.387779e-17000-5.551115e-170000.000000e+000
29002.997369e-050009.767711e-0604.263256e-140-1.141864e-130000.000000e+000000.000000e+000000.000000e+00000-1.387779e-17000-5.551115e-170003.469447e-180
30006.757677e-060005.699694e-060-2.842171e-140-2.897682e-140001.110223e-160000.000000e+00000-1.110223e-16000-6.938894e-180005.551115e-17000-4.336809e-190
31001.183897e-050008.016825e-060-1.421085e-140-5.462297e-140000.000000e+000000.000000e+00000-1.110223e-160000.000000e+000000.000000e+00000-8.673617e-190
32007.860363e-070009.573996e-060-1.421085e-1402.220446e-14000-1.110223e-160000.000000e+000000.000000e+000000.000000e+000000.000000e+000004.336809e-190
33002.105534e-050008.106232e-0601.421085e-140-1.180167e-13000-5.551115e-17000-6.938894e-18000-1.110223e-160006.938894e-180000.000000e+000004.336809e-190
34001.076609e-050001.370907e-060-4.263256e-140-7.854828e-140000.000000e+000000.000000e+000001.110223e-160000.000000e+000000.000000e+000003.469447e-180
35002.440810e-050001.051277e-050-3.552714e-140-1.123546e-130005.551115e-170000.000000e+000001.110223e-160006.938894e-180000.000000e+000008.673617e-190
3600-2.786517e-060001.545995e-0601.421085e-1405.284662e-14000-1.110223e-16000-1.387779e-170001.110223e-16000-1.387779e-170000.000000e+000000.000000e+000
37004.176795e-050009.037554e-0602.842171e-140-1.627587e-130001.110223e-160000.000000e+000005.551115e-170001.387779e-170005.551115e-17000-3.469447e-180
3800-1.637265e-06000-9.834766e-0703.552714e-1402.731149e-140000.000000e+000000.000000e+000000.000000e+00000-1.387779e-17000-8.326673e-170000.000000e+000
3900-2.622604e-060001.262873e-0600.000000e+0005.706546e-140000.000000e+000001.387779e-17000-1.110223e-16000-1.387779e-170005.551115e-170000.000000e+000
40007.059425e-060008.523464e-060-1.421085e-140-2.819966e-140000.000000e+00000-1.387779e-170000.000000e+000001.387779e-170000.000000e+00000-4.336809e-190
41001.061708e-07000-4.265457e-0704.263256e-140-1.221245e-140000.000000e+000000.000000e+000000.000000e+000000.000000e+000002.775558e-170000.000000e+000
4200-1.428127e-040001.749396e-050-7.105427e-1503.047562e-130000.000000e+00000-1.387779e-170001.110223e-160001.387779e-170000.000000e+000008.673617e-190
43009.145588e-06000-2.099574e-050-2.842171e-140-8.637535e-140005.551115e-170001.387779e-170000.000000e+000001.387779e-17000-2.775558e-170000.000000e+000
44002.032891e-05000-3.559887e-0507.105427e-150-1.499911e-130000.000000e+00000-1.387779e-17000-1.110223e-160000.000000e+000000.000000e+000006.505213e-190
4500-3.321096e-060007.413328e-070-7.105427e-1506.206147e-140000.000000e+000001.387779e-170000.000000e+000001.387779e-17000-5.551115e-17000-4.336809e-190
46001.274422e-050009.723008e-060-2.131628e-140-6.450396e-140000.000000e+000000.000000e+000000.000000e+00000-1.387779e-170002.775558e-170000.000000e+000
47003.464520e-070007.696450e-060-4.973799e-1401.865175e-14000-1.110223e-160000.000000e+000001.110223e-16000-1.387779e-170002.775558e-170000.000000e+000
48001.247600e-050004.783273e-060-4.263256e-140-8.926193e-140001.110223e-16000-1.387779e-170000.000000e+00000-1.387779e-170000.000000e+000000.000000e+000
49002.466887e-050001.028925e-0504.973799e-140-1.163514e-130000.000000e+000000.000000e+000000.000000e+000001.387779e-170005.551115e-170001.734723e-180
50001.464039e-060005.051494e-0602.842171e-1401.321165e-140000.000000e+000000.000000e+00000-1.110223e-16000-1.387779e-170000.000000e+000000.000000e+000
\n", - "
" - ], - "text/plain": [ - " ticket_count ticket_count_rank current_amount_due \\\n", - "ward \n", - "1 0 0 2.673268e-05 \n", - "2 0 0 1.467764e-05 \n", - "3 0 0 2.803653e-05 \n", - "4 0 0 1.683086e-05 \n", - "5 0 0 2.440065e-05 \n", - "6 0 0 3.805012e-05 \n", - "7 0 0 1.917034e-05 \n", - "8 0 0 1.595169e-05 \n", - "9 0 0 -2.086163e-07 \n", - "10 0 0 -4.071742e-06 \n", - "11 0 0 -2.719462e-07 \n", - "12 0 0 2.012402e-05 \n", - "13 0 0 -2.341345e-06 \n", - "14 0 0 8.646399e-06 \n", - "15 0 0 2.058595e-05 \n", - "16 0 0 4.453212e-05 \n", - "17 0 0 3.380328e-05 \n", - "18 0 0 -2.985820e-06 \n", - "19 0 0 -8.447096e-07 \n", - "20 0 0 4.573911e-05 \n", - "21 0 0 1.335517e-05 \n", - "22 0 0 2.045929e-05 \n", - "23 0 0 -2.488494e-06 \n", - "24 0 0 5.733967e-05 \n", - "25 0 0 2.098829e-05 \n", - "26 0 0 2.988428e-05 \n", - "27 0 0 4.594773e-05 \n", - "28 0 0 3.819168e-05 \n", - "29 0 0 2.997369e-05 \n", - "30 0 0 6.757677e-06 \n", - "31 0 0 1.183897e-05 \n", - "32 0 0 7.860363e-07 \n", - "33 0 0 2.105534e-05 \n", - "34 0 0 1.076609e-05 \n", - "35 0 0 2.440810e-05 \n", - "36 0 0 -2.786517e-06 \n", - "37 0 0 4.176795e-05 \n", - "38 0 0 -1.637265e-06 \n", - "39 0 0 -2.622604e-06 \n", - "40 0 0 7.059425e-06 \n", - "41 0 0 1.061708e-07 \n", - "42 0 0 -1.428127e-04 \n", - "43 0 0 9.145588e-06 \n", - "44 0 0 2.032891e-05 \n", - "45 0 0 -3.321096e-06 \n", - "46 0 0 1.274422e-05 \n", - "47 0 0 3.464520e-07 \n", - "48 0 0 1.247600e-05 \n", - "49 0 0 2.466887e-05 \n", - "50 0 0 1.464039e-06 \n", - "\n", - " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", - "ward \n", - "1 0 0 0 \n", - "2 0 0 0 \n", - "3 0 0 0 \n", - "4 0 0 0 \n", - "5 0 0 0 \n", - "6 0 0 0 \n", - "7 0 0 0 \n", - "8 0 0 0 \n", - "9 0 0 0 \n", - "10 0 0 0 \n", - "11 0 0 0 \n", - "12 0 0 0 \n", - "13 0 0 0 \n", - "14 0 0 0 \n", - "15 0 0 0 \n", - "16 0 0 0 \n", - "17 0 0 0 \n", - "18 0 0 0 \n", - "19 0 0 0 \n", - "20 0 0 0 \n", - "21 0 0 0 \n", - "22 0 0 0 \n", - "23 0 0 0 \n", - "24 0 0 0 \n", - "25 0 0 0 \n", - "26 0 0 0 \n", - "27 0 0 0 \n", - "28 0 0 0 \n", - "29 0 0 0 \n", - "30 0 0 0 \n", - "31 0 0 0 \n", - "32 0 0 0 \n", - "33 0 0 0 \n", - "34 0 0 0 \n", - "35 0 0 0 \n", - "36 0 0 0 \n", - "37 0 0 0 \n", - "38 0 0 0 \n", - "39 0 0 0 \n", - "40 0 0 0 \n", - "41 0 0 0 \n", - "42 0 0 0 \n", - "43 0 0 0 \n", - "44 0 0 0 \n", - "45 0 0 0 \n", - "46 0 0 0 \n", - "47 0 0 0 \n", - "48 0 0 0 \n", - "49 0 0 0 \n", - "50 0 0 0 \n", - "\n", - " total_payments total_payments_rank avg_per_ticket \\\n", - "ward \n", - "1 -1.412630e-05 0 0.000000e+00 \n", - "2 -1.725554e-05 0 -7.105427e-15 \n", - "3 1.446903e-05 0 -2.131628e-14 \n", - "4 -8.404255e-06 0 2.842171e-14 \n", - "5 1.393259e-05 0 7.105427e-15 \n", - "6 1.320988e-05 0 5.684342e-14 \n", - "7 4.161149e-06 0 4.263256e-14 \n", - "8 6.012619e-06 0 1.421085e-14 \n", - "9 -5.885959e-07 0 -5.684342e-14 \n", - "10 -6.705523e-07 0 4.263256e-14 \n", - "11 4.224479e-06 0 -1.421085e-14 \n", - "12 8.136034e-06 0 1.421085e-14 \n", - "13 -1.017004e-06 0 -4.263256e-14 \n", - "14 4.008412e-06 0 4.263256e-14 \n", - "15 6.116927e-06 0 1.421085e-14 \n", - "16 1.034886e-05 0 2.842171e-14 \n", - "17 9.424984e-06 0 0.000000e+00 \n", - "18 -1.687557e-06 0 -4.263256e-14 \n", - "19 -1.123175e-06 0 2.842171e-14 \n", - "20 1.161546e-05 0 -4.263256e-14 \n", - "21 4.656613e-06 0 2.842171e-14 \n", - "22 4.962087e-06 0 0.000000e+00 \n", - "23 2.749264e-06 0 1.421085e-14 \n", - "24 1.144409e-05 0 4.263256e-14 \n", - "25 -1.239777e-05 0 2.842171e-14 \n", - "26 1.304597e-05 0 -2.842171e-14 \n", - "27 -2.536178e-05 0 1.421085e-14 \n", - "28 1.865625e-05 0 -4.263256e-14 \n", - "29 9.767711e-06 0 4.263256e-14 \n", - "30 5.699694e-06 0 -2.842171e-14 \n", - "31 8.016825e-06 0 -1.421085e-14 \n", - "32 9.573996e-06 0 -1.421085e-14 \n", - "33 8.106232e-06 0 1.421085e-14 \n", - "34 1.370907e-06 0 -4.263256e-14 \n", - "35 1.051277e-05 0 -3.552714e-14 \n", - "36 1.545995e-06 0 1.421085e-14 \n", - "37 9.037554e-06 0 2.842171e-14 \n", - "38 -9.834766e-07 0 3.552714e-14 \n", - "39 1.262873e-06 0 0.000000e+00 \n", - "40 8.523464e-06 0 -1.421085e-14 \n", - "41 -4.265457e-07 0 4.263256e-14 \n", - "42 1.749396e-05 0 -7.105427e-15 \n", - "43 -2.099574e-05 0 -2.842171e-14 \n", - "44 -3.559887e-05 0 7.105427e-15 \n", - "45 7.413328e-07 0 -7.105427e-15 \n", - "46 9.723008e-06 0 -2.131628e-14 \n", - "47 7.696450e-06 0 -4.973799e-14 \n", - "48 4.783273e-06 0 -4.263256e-14 \n", - "49 1.028925e-05 0 4.973799e-14 \n", - "50 5.051494e-06 0 2.842171e-14 \n", - "\n", - " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", - "ward \n", - "1 0 -1.787459e-13 0 0 \n", - "2 0 -1.065814e-13 0 0 \n", - "3 0 -1.096900e-13 0 0 \n", - "4 0 -1.062483e-13 0 0 \n", - "5 0 -9.259260e-14 0 0 \n", - "6 0 -1.217915e-13 0 0 \n", - "7 0 -1.054157e-13 0 0 \n", - "8 0 -7.327472e-14 0 0 \n", - "9 0 -5.773160e-15 0 0 \n", - "10 0 4.884981e-14 0 0 \n", - "11 0 2.664535e-14 0 0 \n", - "12 0 -9.769963e-14 0 0 \n", - "13 0 3.486100e-14 0 0 \n", - "14 0 -4.984901e-14 0 0 \n", - "15 0 -9.903189e-14 0 0 \n", - "16 0 -1.578737e-13 0 0 \n", - "17 0 -1.332823e-13 0 0 \n", - "18 0 3.130829e-14 0 0 \n", - "19 0 6.994405e-15 0 0 \n", - "20 0 -1.582623e-13 0 0 \n", - "21 0 -6.855627e-14 0 0 \n", - "22 0 -9.903189e-14 0 0 \n", - "23 0 5.229150e-14 0 0 \n", - "24 0 -1.910139e-13 0 0 \n", - "25 0 -1.372236e-13 0 0 \n", - "26 0 -1.265654e-13 0 0 \n", - "27 0 -2.364775e-13 0 0 \n", - "28 0 -6.927792e-14 0 0 \n", - "29 0 -1.141864e-13 0 0 \n", - "30 0 -2.897682e-14 0 0 \n", - "31 0 -5.462297e-14 0 0 \n", - "32 0 2.220446e-14 0 0 \n", - "33 0 -1.180167e-13 0 0 \n", - "34 0 -7.854828e-14 0 0 \n", - "35 0 -1.123546e-13 0 0 \n", - "36 0 5.284662e-14 0 0 \n", - "37 0 -1.627587e-13 0 0 \n", - "38 0 2.731149e-14 0 0 \n", - "39 0 5.706546e-14 0 0 \n", - "40 0 -2.819966e-14 0 0 \n", - "41 0 -1.221245e-14 0 0 \n", - "42 0 3.047562e-13 0 0 \n", - "43 0 -8.637535e-14 0 0 \n", - "44 0 -1.499911e-13 0 0 \n", - "45 0 6.206147e-14 0 0 \n", - "46 0 -6.450396e-14 0 0 \n", - "47 0 1.865175e-14 0 0 \n", - "48 0 -8.926193e-14 0 0 \n", - "49 0 -1.163514e-13 0 0 \n", - "50 0 1.321165e-14 0 0 \n", - "\n", - " police_ticket_count_rank police_ticket_count_pct \\\n", - "ward \n", - "1 0 5.551115e-17 \n", - "2 0 5.551115e-17 \n", - "3 0 1.110223e-16 \n", - "4 0 0.000000e+00 \n", - "5 0 -1.110223e-16 \n", - "6 0 0.000000e+00 \n", - "7 0 -1.110223e-16 \n", - "8 0 0.000000e+00 \n", - "9 0 1.110223e-16 \n", - "10 0 1.110223e-16 \n", - "11 0 -5.551115e-17 \n", - "12 0 -1.110223e-16 \n", - "13 0 5.551115e-17 \n", - "14 0 -1.110223e-16 \n", - "15 0 -2.220446e-16 \n", - "16 0 0.000000e+00 \n", - "17 0 0.000000e+00 \n", - "18 0 1.110223e-16 \n", - "19 0 -1.110223e-16 \n", - "20 0 1.110223e-16 \n", - "21 0 2.220446e-16 \n", - "22 0 0.000000e+00 \n", - "23 0 1.110223e-16 \n", - "24 0 0.000000e+00 \n", - "25 0 -1.110223e-16 \n", - "26 0 1.110223e-16 \n", - "27 0 0.000000e+00 \n", - "28 0 1.110223e-16 \n", - "29 0 0.000000e+00 \n", - "30 0 1.110223e-16 \n", - "31 0 0.000000e+00 \n", - "32 0 -1.110223e-16 \n", - "33 0 -5.551115e-17 \n", - "34 0 0.000000e+00 \n", - "35 0 5.551115e-17 \n", - "36 0 -1.110223e-16 \n", - "37 0 1.110223e-16 \n", - "38 0 0.000000e+00 \n", - "39 0 0.000000e+00 \n", - "40 0 0.000000e+00 \n", - "41 0 0.000000e+00 \n", - "42 0 0.000000e+00 \n", - "43 0 5.551115e-17 \n", - "44 0 0.000000e+00 \n", - "45 0 0.000000e+00 \n", - "46 0 0.000000e+00 \n", - "47 0 -1.110223e-16 \n", - "48 0 1.110223e-16 \n", - "49 0 0.000000e+00 \n", - "50 0 0.000000e+00 \n", - "\n", - " police_ticket_count_pct_rank contested_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " contested_ticket_count_rank contested_ticket_count_pct \\\n", - "ward \n", - "1 0 0.000000e+00 \n", - "2 0 0.000000e+00 \n", - "3 0 -1.387779e-17 \n", - "4 0 -1.387779e-17 \n", - "5 0 -1.387779e-17 \n", - "6 0 0.000000e+00 \n", - "7 0 1.387779e-17 \n", - "8 0 1.387779e-17 \n", - "9 0 -1.387779e-17 \n", - "10 0 0.000000e+00 \n", - "11 0 -1.387779e-17 \n", - "12 0 0.000000e+00 \n", - "13 0 0.000000e+00 \n", - "14 0 -6.938894e-18 \n", - "15 0 0.000000e+00 \n", - "16 0 -6.938894e-18 \n", - "17 0 -1.387779e-17 \n", - "18 0 0.000000e+00 \n", - "19 0 -1.387779e-17 \n", - "20 0 0.000000e+00 \n", - "21 0 -1.387779e-17 \n", - "22 0 6.938894e-18 \n", - "23 0 0.000000e+00 \n", - "24 0 0.000000e+00 \n", - "25 0 -2.775558e-17 \n", - "26 0 1.387779e-17 \n", - "27 0 0.000000e+00 \n", - "28 0 0.000000e+00 \n", - "29 0 0.000000e+00 \n", - "30 0 0.000000e+00 \n", - "31 0 0.000000e+00 \n", - "32 0 0.000000e+00 \n", - "33 0 -6.938894e-18 \n", - "34 0 0.000000e+00 \n", - "35 0 0.000000e+00 \n", - "36 0 -1.387779e-17 \n", - "37 0 0.000000e+00 \n", - "38 0 0.000000e+00 \n", - "39 0 1.387779e-17 \n", - "40 0 -1.387779e-17 \n", - "41 0 0.000000e+00 \n", - "42 0 -1.387779e-17 \n", - "43 0 1.387779e-17 \n", - "44 0 -1.387779e-17 \n", - "45 0 1.387779e-17 \n", - "46 0 0.000000e+00 \n", - "47 0 0.000000e+00 \n", - "48 0 -1.387779e-17 \n", - "49 0 0.000000e+00 \n", - "50 0 0.000000e+00 \n", - "\n", - " contested_ticket_count_pct_rank paid_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " paid_ticket_count_rank paid_ticket_count_pct \\\n", - "ward \n", - "1 0 1.110223e-16 \n", - "2 0 0.000000e+00 \n", - "3 0 0.000000e+00 \n", - "4 0 -1.110223e-16 \n", - "5 0 0.000000e+00 \n", - "6 0 -1.110223e-16 \n", - "7 0 -5.551115e-17 \n", - "8 0 -1.110223e-16 \n", - "9 0 -1.110223e-16 \n", - "10 0 0.000000e+00 \n", - "11 0 -1.110223e-16 \n", - "12 0 -1.110223e-16 \n", - "13 0 1.110223e-16 \n", - "14 0 0.000000e+00 \n", - "15 0 1.110223e-16 \n", - "16 0 0.000000e+00 \n", - "17 0 1.665335e-16 \n", - "18 0 0.000000e+00 \n", - "19 0 0.000000e+00 \n", - "20 0 0.000000e+00 \n", - "21 0 2.220446e-16 \n", - "22 0 1.110223e-16 \n", - "23 0 1.110223e-16 \n", - "24 0 0.000000e+00 \n", - "25 0 0.000000e+00 \n", - "26 0 0.000000e+00 \n", - "27 0 0.000000e+00 \n", - "28 0 1.110223e-16 \n", - "29 0 0.000000e+00 \n", - "30 0 -1.110223e-16 \n", - "31 0 -1.110223e-16 \n", - "32 0 0.000000e+00 \n", - "33 0 -1.110223e-16 \n", - "34 0 1.110223e-16 \n", - "35 0 1.110223e-16 \n", - "36 0 1.110223e-16 \n", - "37 0 5.551115e-17 \n", - "38 0 0.000000e+00 \n", - "39 0 -1.110223e-16 \n", - "40 0 0.000000e+00 \n", - "41 0 0.000000e+00 \n", - "42 0 1.110223e-16 \n", - "43 0 0.000000e+00 \n", - "44 0 -1.110223e-16 \n", - "45 0 0.000000e+00 \n", - "46 0 0.000000e+00 \n", - "47 0 1.110223e-16 \n", - "48 0 0.000000e+00 \n", - "49 0 0.000000e+00 \n", - "50 0 -1.110223e-16 \n", - "\n", - " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", - "ward \n", - "1 0 1.387779e-17 \n", - "2 0 -1.387779e-17 \n", - "3 0 -1.387779e-17 \n", - "4 0 -1.387779e-17 \n", - "5 0 -1.387779e-17 \n", - "6 0 -1.387779e-17 \n", - "7 0 -1.387779e-17 \n", - "8 0 -1.387779e-17 \n", - "9 0 -1.387779e-17 \n", - "10 0 -1.387779e-17 \n", - "11 0 1.387779e-17 \n", - "12 0 6.938894e-18 \n", - "13 0 0.000000e+00 \n", - "14 0 6.938894e-18 \n", - "15 0 0.000000e+00 \n", - "16 0 0.000000e+00 \n", - "17 0 -1.387779e-17 \n", - "18 0 0.000000e+00 \n", - "19 0 1.387779e-17 \n", - "20 0 -1.387779e-17 \n", - "21 0 -2.775558e-17 \n", - "22 0 0.000000e+00 \n", - "23 0 -1.387779e-17 \n", - "24 0 0.000000e+00 \n", - "25 0 1.387779e-17 \n", - "26 0 6.938894e-18 \n", - "27 0 1.387779e-17 \n", - "28 0 1.387779e-17 \n", - "29 0 -1.387779e-17 \n", - "30 0 -6.938894e-18 \n", - "31 0 0.000000e+00 \n", - "32 0 0.000000e+00 \n", - "33 0 6.938894e-18 \n", - "34 0 0.000000e+00 \n", - "35 0 6.938894e-18 \n", - "36 0 -1.387779e-17 \n", - "37 0 1.387779e-17 \n", - "38 0 -1.387779e-17 \n", - "39 0 -1.387779e-17 \n", - "40 0 1.387779e-17 \n", - "41 0 0.000000e+00 \n", - "42 0 1.387779e-17 \n", - "43 0 1.387779e-17 \n", - "44 0 0.000000e+00 \n", - "45 0 1.387779e-17 \n", - "46 0 -1.387779e-17 \n", - "47 0 -1.387779e-17 \n", - "48 0 -1.387779e-17 \n", - "49 0 1.387779e-17 \n", - "50 0 -1.387779e-17 \n", - "\n", - " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " seized_or_suspended_ticket_count_rank \\\n", - "ward \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "5 0 \n", - "6 0 \n", - "7 0 \n", - "8 0 \n", - "9 0 \n", - "10 0 \n", - "11 0 \n", - "12 0 \n", - "13 0 \n", - "14 0 \n", - "15 0 \n", - "16 0 \n", - "17 0 \n", - "18 0 \n", - "19 0 \n", - "20 0 \n", - "21 0 \n", - "22 0 \n", - "23 0 \n", - "24 0 \n", - "25 0 \n", - "26 0 \n", - "27 0 \n", - "28 0 \n", - "29 0 \n", - "30 0 \n", - "31 0 \n", - "32 0 \n", - "33 0 \n", - "34 0 \n", - "35 0 \n", - "36 0 \n", - "37 0 \n", - "38 0 \n", - "39 0 \n", - "40 0 \n", - "41 0 \n", - "42 0 \n", - "43 0 \n", - "44 0 \n", - "45 0 \n", - "46 0 \n", - "47 0 \n", - "48 0 \n", - "49 0 \n", - "50 0 \n", - "\n", - " seized_or_suspended_ticket_count_pct \\\n", - "ward \n", - "1 -2.775558e-17 \n", - "2 0.000000e+00 \n", - "3 -5.551115e-17 \n", - "4 0.000000e+00 \n", - "5 5.551115e-17 \n", - "6 0.000000e+00 \n", - "7 0.000000e+00 \n", - "8 -1.110223e-16 \n", - "9 5.551115e-17 \n", - "10 -5.551115e-17 \n", - "11 2.775558e-17 \n", - "12 5.551115e-17 \n", - "13 2.775558e-17 \n", - "14 0.000000e+00 \n", - "15 -5.551115e-17 \n", - "16 5.551115e-17 \n", - "17 0.000000e+00 \n", - "18 0.000000e+00 \n", - "19 -5.551115e-17 \n", - "20 0.000000e+00 \n", - "21 5.551115e-17 \n", - "22 0.000000e+00 \n", - "23 -2.775558e-17 \n", - "24 0.000000e+00 \n", - "25 -2.775558e-17 \n", - "26 0.000000e+00 \n", - "27 0.000000e+00 \n", - "28 -5.551115e-17 \n", - "29 -5.551115e-17 \n", - "30 5.551115e-17 \n", - "31 0.000000e+00 \n", - "32 0.000000e+00 \n", - "33 0.000000e+00 \n", - "34 0.000000e+00 \n", - "35 0.000000e+00 \n", - "36 0.000000e+00 \n", - "37 5.551115e-17 \n", - "38 -8.326673e-17 \n", - "39 5.551115e-17 \n", - "40 0.000000e+00 \n", - "41 2.775558e-17 \n", - "42 0.000000e+00 \n", - "43 -2.775558e-17 \n", - "44 0.000000e+00 \n", - "45 -5.551115e-17 \n", - "46 2.775558e-17 \n", - "47 2.775558e-17 \n", - "48 0.000000e+00 \n", - "49 5.551115e-17 \n", - "50 0.000000e+00 \n", - "\n", - " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", - "ward \n", - "1 0 -4.336809e-19 \n", - "2 0 -4.336809e-19 \n", - "3 0 0.000000e+00 \n", - "4 0 -3.469447e-18 \n", - "5 0 -3.469447e-18 \n", - "6 0 3.469447e-18 \n", - "7 0 0.000000e+00 \n", - "8 0 0.000000e+00 \n", - "9 0 -3.469447e-18 \n", - "10 0 -1.734723e-18 \n", - "11 0 -8.673617e-19 \n", - "12 0 -8.673617e-19 \n", - "13 0 0.000000e+00 \n", - "14 0 0.000000e+00 \n", - "15 0 -8.673617e-19 \n", - "16 0 3.469447e-18 \n", - "17 0 0.000000e+00 \n", - "18 0 3.469447e-18 \n", - "19 0 1.734723e-18 \n", - "20 0 0.000000e+00 \n", - "21 0 0.000000e+00 \n", - "22 0 0.000000e+00 \n", - "23 0 0.000000e+00 \n", - "24 0 -6.938894e-18 \n", - "25 0 0.000000e+00 \n", - "26 0 -1.734723e-18 \n", - "27 0 1.734723e-18 \n", - "28 0 0.000000e+00 \n", - "29 0 3.469447e-18 \n", - "30 0 -4.336809e-19 \n", - "31 0 -8.673617e-19 \n", - "32 0 4.336809e-19 \n", - "33 0 4.336809e-19 \n", - "34 0 3.469447e-18 \n", - "35 0 8.673617e-19 \n", - "36 0 0.000000e+00 \n", - "37 0 -3.469447e-18 \n", - "38 0 0.000000e+00 \n", - "39 0 0.000000e+00 \n", - "40 0 -4.336809e-19 \n", - "41 0 0.000000e+00 \n", - "42 0 8.673617e-19 \n", - "43 0 0.000000e+00 \n", - "44 0 6.505213e-19 \n", - "45 0 -4.336809e-19 \n", - "46 0 0.000000e+00 \n", - "47 0 0.000000e+00 \n", - "48 0 0.000000e+00 \n", - "49 0 1.734723e-18 \n", - "50 0 0.000000e+00 \n", - "\n", - " bankruptcy_ticket_count_pct_rank \n", - "ward \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "5 0 \n", - "6 0 \n", - "7 0 \n", - "8 0 \n", - "9 0 \n", - "10 0 \n", - "11 0 \n", - "12 0 \n", - "13 0 \n", - "14 0 \n", - "15 0 \n", - "16 0 \n", - "17 0 \n", - "18 0 \n", - "19 0 \n", - "20 0 \n", - "21 0 \n", - "22 0 \n", - "23 0 \n", - "24 0 \n", - "25 0 \n", - "26 0 \n", - "27 0 \n", - "28 0 \n", - "29 0 \n", - "30 0 \n", - "31 0 \n", - "32 0 \n", - "33 0 \n", - "34 0 \n", - "35 0 \n", - "36 0 \n", - "37 0 \n", - "38 0 \n", - "39 0 \n", - "40 0 \n", - "41 0 \n", - "42 0 \n", - "43 0 \n", - "44 0 \n", - "45 0 \n", - "46 0 \n", - "47 0 \n", - "48 0 \n", - "49 0 \n", - "50 0 " - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wardstotals_sql_minus_pandas" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ticket_countticket_count_rankcurrent_amount_duecurrent_amount_due_rankfine_level1_amountfine_level1_amount_ranktotal_paymentstotal_payments_rankavg_per_ticketavg_per_ticket_rankpaid_pctpaid_pct_rankpolice_ticket_countpolice_ticket_count_rankpolice_ticket_count_pctpolice_ticket_count_pct_rankcontested_ticket_countcontested_ticket_count_rankcontested_ticket_count_pctcontested_ticket_count_pct_rankpaid_ticket_countpaid_ticket_count_rankpaid_ticket_count_pctpaid_ticket_count_pct_rankdismissed_ticket_countdismissed_ticket_count_rankdismissed_ticket_count_pctdismissed_ticket_count_pct_rankseized_or_suspended_ticket_countseized_or_suspended_ticket_count_rankseized_or_suspended_ticket_count_pctseized_or_suspended_ticket_count_pct_rankbankruptcy_ticket_countbankruptcy_ticket_count_rankbankruptcy_ticket_count_pctbankruptcy_ticket_count_pct_rank
ward
100-1.803041e-060003.647059e-060-1.421085e-1406.117329e-140000.000000e+000000.000000e+000000.000000e+00000-1.387779e-170000.000000e+000004.336809e-190
2004.190952e-07000-1.266599e-070-2.842171e-140-9.547918e-15000-2.775558e-170001.387779e-17000-1.110223e-160001.387779e-170000.000000e+000000.000000e+000
300-4.082918e-06000-1.028180e-0601.421085e-1405.861978e-14000-1.110223e-160001.387779e-17000-1.110223e-16000-2.775558e-170002.775558e-170000.000000e+000
400-1.659617e-060008.493662e-0704.263256e-1404.085621e-14000-5.551115e-170000.000000e+00000-1.110223e-16000-1.387779e-17000-2.775558e-17000-1.734723e-180
500-4.494563e-06000-2.194196e-0605.684342e-1404.318768e-140000.000000e+00000-1.387779e-17000-1.110223e-160001.387779e-170000.000000e+000000.000000e+000
6001.996756e-06000-1.819804e-060-4.263256e-140-5.645484e-140000.000000e+000000.000000e+000001.110223e-16000-1.387779e-17000-5.551115e-170000.000000e+000
700-4.813075e-06000-9.145588e-0702.842171e-1404.907186e-140000.000000e+00000-2.775558e-17000-5.551115e-1700-10.000000e+000000.000000e+000006.938894e-180
800-4.524365e-06000-1.210719e-0604.263256e-1404.091172e-14000-1.110223e-16000-1.387779e-170005.551115e-170000.000000e+000000.000000e+000000.000000e+000
900-2.145767e-06000-2.039596e-070-1.421085e-1404.490852e-14000-1.110223e-16000-1.387779e-170000.000000e+0000-11.387779e-170000.000000e+000000.000000e+000
1000-5.979091e-07000-1.518056e-0700.000000e+0001.659783e-140000.000000e+000001.387779e-17000-1.110223e-1600-10.000000e+000000.000000e+00000-3.469447e-180
1100-2.831221e-07000-9.983778e-070-4.263256e-140-5.218048e-15000-5.551115e-17000-1.387779e-170000.000000e+000001.387779e-170000.000000e+00000-8.673617e-190
1200-1.538545e-06000-8.568168e-0702.842171e-1402.398082e-140005.551115e-170000.000000e+000000.000000e+0000-1-6.938894e-18000-2.775558e-170000.000000e+000
13002.607703e-07000-1.695007e-0700.000000e+000-2.231548e-14000-5.551115e-170001.387779e-170001.110223e-1600-11.387779e-17000-5.551115e-170008.673617e-190
1400-1.294538e-06000-7.636845e-0701.421085e-1402.009504e-140000.000000e+000000.000000e+00000-1.110223e-1600-10.000000e+000002.775558e-17000-4.336809e-190
1500-2.356246e-06000-9.275973e-0701.421085e-1403.202993e-140000.000000e+000000.000000e+000000.000000e+0000-1-1.387779e-170005.551115e-170000.000000e+000
1600-1.281500e-06000-1.367182e-0602.842171e-140-1.265654e-14000-1.110223e-16000-1.387779e-170005.551115e-1700-11.387779e-17000-5.551115e-170000.000000e+000
1700-2.056360e-06000-1.590699e-060-1.705303e-130-9.714451e-150000.000000e+000001.387779e-17000-1.665335e-160000.000000e+000000.000000e+000000.000000e+000
1800-2.104789e-070007.357448e-0804.263256e-1401.321165e-140000.000000e+000001.387779e-170000.000000e+0000-10.000000e+000000.000000e+000000.000000e+000
19002.165325e-070001.210719e-070-4.263256e-140-1.076916e-140000.000000e+000000.000000e+000000.000000e+0000-10.000000e+00000-2.775558e-170003.469447e-180
20002.473593e-06000-1.963228e-060-1.421085e-140-6.322720e-14000-1.110223e-16000-1.387779e-170005.551115e-170000.000000e+000000.000000e+000000.000000e+000
2100-4.949048e-06000-1.294538e-0601.989520e-1304.513057e-14000-1.110223e-160002.775558e-170000.000000e+000000.000000e+000005.551115e-170000.000000e+000
2200-2.002344e-06000-7.245690e-070-2.842171e-1403.386180e-140005.551115e-17000-6.938894e-180000.000000e+0000-1-6.938894e-18000-2.775558e-170000.000000e+000
2300-2.756715e-07000-6.407499e-0700.000000e+000-4.551914e-15000-1.110223e-160001.387779e-17000-1.110223e-1600-1-1.387779e-170000.000000e+000000.000000e+000
24005.505979e-06000-1.646578e-060-4.263256e-140-8.493206e-140001.110223e-160001.387779e-170000.000000e+00000-1.387779e-17000-5.551115e-170000.000000e+000
2500-1.287088e-060002.779067e-0600.000000e+0004.274359e-140002.775558e-170000.000000e+00000-2.220446e-160000.000000e+00000-2.775558e-170000.000000e+000
2600-2.427027e-06000-1.659617e-060-1.421085e-1403.286260e-140000.000000e+000000.000000e+00000-1.110223e-16000-6.938894e-18000-2.775558e-17000-8.673617e-190
2700-4.060566e-070003.803521e-060-1.421085e-1404.030110e-140000.000000e+000000.000000e+000000.000000e+00000-2.775558e-170000.000000e+000003.469447e-180
28001.208484e-05000-7.748604e-070-4.263256e-140-1.130762e-130000.000000e+000000.000000e+000000.000000e+00000-2.775558e-170001.110223e-160000.000000e+000
2900-3.859401e-06000-1.342967e-0601.421085e-1402.448042e-140000.000000e+000000.000000e+000000.000000e+000000.000000e+00000-5.551115e-17000-6.938894e-180
3000-6.696209e-07000-8.959323e-070-2.842171e-1406.106227e-15000-5.551115e-170000.000000e+000001.110223e-1600-1-6.938894e-180002.775558e-170008.673617e-190
3100-1.325272e-06000-1.246110e-060-2.842171e-1401.731948e-140005.551115e-17000-1.387779e-17000-1.110223e-1600-10.000000e+00000-2.775558e-170008.673617e-190
32003.301539e-07000-1.043081e-0600.000000e+000-2.409184e-140002.775558e-17000-1.387779e-170000.000000e+000000.000000e+00000-2.775558e-17000-2.168404e-190
3300-1.136214e-07000-9.313226e-070-4.263256e-140-1.010303e-140005.551115e-170001.387779e-170000.000000e+0000-1-6.938894e-180000.000000e+00000-4.336809e-190
3400-4.349276e-06000-6.938353e-070-3.268497e-1304.857226e-140000.000000e+000000.000000e+000000.000000e+0000-1-1.387779e-170005.551115e-170006.938894e-180
3500-9.266660e-07000-1.111999e-0601.421085e-1401.187939e-140000.000000e+00000-1.387779e-170000.000000e+0000-1-1.387779e-170000.000000e+000000.000000e+000
36005.494803e-08000-4.479662e-0701.421085e-140-1.709743e-14000-5.551115e-170000.000000e+000001.110223e-1600-11.387779e-17000-2.775558e-170000.000000e+000
3700-3.464520e-07000-1.506880e-0602.842171e-140-2.703393e-14000-1.110223e-160001.387779e-170005.551115e-170000.000000e+000005.551115e-170000.000000e+000
38001.708977e-07000-2.328306e-0802.842171e-140-1.654232e-14000-5.551115e-17000-1.387779e-170000.000000e+0000-1-1.387779e-17000-2.775558e-170000.000000e+000
39002.207235e-07000-2.672896e-0702.842171e-140-2.209344e-140000.000000e+000001.387779e-170000.000000e+0000-1-1.387779e-170000.000000e+000000.000000e+000
40001.313165e-07000-1.000240e-0602.842171e-140-1.809664e-14000-5.551115e-170001.387779e-170000.000000e+000000.000000e+000000.000000e+000004.336809e-190
41002.724119e-080005.029142e-0802.842171e-140-1.332268e-15000-1.110223e-160000.000000e+000000.000000e+0000-11.387779e-170000.000000e+000008.673617e-190
4200-1.125783e-05000-4.917383e-0604.263256e-1406.827872e-140000.000000e+00000-5.551115e-170000.000000e+00000-2.775558e-17000-2.775558e-17000-1.734723e-180
4300-1.518056e-070001.687557e-060-1.421085e-1401.343370e-14000-2.775558e-170000.000000e+000000.000000e+000001.387779e-170000.000000e+000000.000000e+000
4400-9.415671e-070003.311783e-060-4.263256e-1403.530509e-14000-2.775558e-170000.000000e+000000.000000e+000001.387779e-170000.000000e+00000-4.336809e-190
45002.095476e-07000-2.039596e-0702.842171e-140-1.987299e-140000.000000e+00000-1.387779e-170000.000000e+0000-10.000000e+00000-2.775558e-170004.336809e-190
4600-3.511086e-07000-1.082197e-0601.421085e-140-8.881784e-16000-5.551115e-170000.000000e+00000-1.110223e-160000.000000e+000000.000000e+00000-8.673617e-190
47002.821907e-07000-9.927899e-0701.421085e-140-1.931788e-14000-2.775558e-17000-2.775558e-170000.000000e+000000.000000e+000001.387779e-17000-2.168404e-190
48003.408641e-07000-6.090850e-070-2.842171e-140-2.875478e-14000-5.551115e-17000-1.387779e-17000-1.110223e-160000.000000e+000000.000000e+000000.000000e+000
4900-9.089708e-07000-1.242384e-0601.421085e-1401.076916e-140000.000000e+000000.000000e+000000.000000e+000000.000000e+000000.000000e+00000-8.673617e-190
5000-1.033768e-07000-7.804483e-0702.842171e-140-1.076916e-14000-1.110223e-16000-2.775558e-170000.000000e+00000-1.387779e-17000-2.775558e-17000-8.673617e-190
\n", - "
" - ], - "text/plain": [ - " ticket_count ticket_count_rank current_amount_due \\\n", - "ward \n", - "1 0 0 -1.803041e-06 \n", - "2 0 0 4.190952e-07 \n", - "3 0 0 -4.082918e-06 \n", - "4 0 0 -1.659617e-06 \n", - "5 0 0 -4.494563e-06 \n", - "6 0 0 1.996756e-06 \n", - "7 0 0 -4.813075e-06 \n", - "8 0 0 -4.524365e-06 \n", - "9 0 0 -2.145767e-06 \n", - "10 0 0 -5.979091e-07 \n", - "11 0 0 -2.831221e-07 \n", - "12 0 0 -1.538545e-06 \n", - "13 0 0 2.607703e-07 \n", - "14 0 0 -1.294538e-06 \n", - "15 0 0 -2.356246e-06 \n", - "16 0 0 -1.281500e-06 \n", - "17 0 0 -2.056360e-06 \n", - "18 0 0 -2.104789e-07 \n", - "19 0 0 2.165325e-07 \n", - "20 0 0 2.473593e-06 \n", - "21 0 0 -4.949048e-06 \n", - "22 0 0 -2.002344e-06 \n", - "23 0 0 -2.756715e-07 \n", - "24 0 0 5.505979e-06 \n", - "25 0 0 -1.287088e-06 \n", - "26 0 0 -2.427027e-06 \n", - "27 0 0 -4.060566e-07 \n", - "28 0 0 1.208484e-05 \n", - "29 0 0 -3.859401e-06 \n", - "30 0 0 -6.696209e-07 \n", - "31 0 0 -1.325272e-06 \n", - "32 0 0 3.301539e-07 \n", - "33 0 0 -1.136214e-07 \n", - "34 0 0 -4.349276e-06 \n", - "35 0 0 -9.266660e-07 \n", - "36 0 0 5.494803e-08 \n", - "37 0 0 -3.464520e-07 \n", - "38 0 0 1.708977e-07 \n", - "39 0 0 2.207235e-07 \n", - "40 0 0 1.313165e-07 \n", - "41 0 0 2.724119e-08 \n", - "42 0 0 -1.125783e-05 \n", - "43 0 0 -1.518056e-07 \n", - "44 0 0 -9.415671e-07 \n", - "45 0 0 2.095476e-07 \n", - "46 0 0 -3.511086e-07 \n", - "47 0 0 2.821907e-07 \n", - "48 0 0 3.408641e-07 \n", - "49 0 0 -9.089708e-07 \n", - "50 0 0 -1.033768e-07 \n", - "\n", - " current_amount_due_rank fine_level1_amount fine_level1_amount_rank \\\n", - "ward \n", - "1 0 0 0 \n", - "2 0 0 0 \n", - "3 0 0 0 \n", - "4 0 0 0 \n", - "5 0 0 0 \n", - "6 0 0 0 \n", - "7 0 0 0 \n", - "8 0 0 0 \n", - "9 0 0 0 \n", - "10 0 0 0 \n", - "11 0 0 0 \n", - "12 0 0 0 \n", - "13 0 0 0 \n", - "14 0 0 0 \n", - "15 0 0 0 \n", - "16 0 0 0 \n", - "17 0 0 0 \n", - "18 0 0 0 \n", - "19 0 0 0 \n", - "20 0 0 0 \n", - "21 0 0 0 \n", - "22 0 0 0 \n", - "23 0 0 0 \n", - "24 0 0 0 \n", - "25 0 0 0 \n", - "26 0 0 0 \n", - "27 0 0 0 \n", - "28 0 0 0 \n", - "29 0 0 0 \n", - "30 0 0 0 \n", - "31 0 0 0 \n", - "32 0 0 0 \n", - "33 0 0 0 \n", - "34 0 0 0 \n", - "35 0 0 0 \n", - "36 0 0 0 \n", - "37 0 0 0 \n", - "38 0 0 0 \n", - "39 0 0 0 \n", - "40 0 0 0 \n", - "41 0 0 0 \n", - "42 0 0 0 \n", - "43 0 0 0 \n", - "44 0 0 0 \n", - "45 0 0 0 \n", - "46 0 0 0 \n", - "47 0 0 0 \n", - "48 0 0 0 \n", - "49 0 0 0 \n", - "50 0 0 0 \n", - "\n", - " total_payments total_payments_rank avg_per_ticket \\\n", - "ward \n", - "1 3.647059e-06 0 -1.421085e-14 \n", - "2 -1.266599e-07 0 -2.842171e-14 \n", - "3 -1.028180e-06 0 1.421085e-14 \n", - "4 8.493662e-07 0 4.263256e-14 \n", - "5 -2.194196e-06 0 5.684342e-14 \n", - "6 -1.819804e-06 0 -4.263256e-14 \n", - "7 -9.145588e-07 0 2.842171e-14 \n", - "8 -1.210719e-06 0 4.263256e-14 \n", - "9 -2.039596e-07 0 -1.421085e-14 \n", - "10 -1.518056e-07 0 0.000000e+00 \n", - "11 -9.983778e-07 0 -4.263256e-14 \n", - "12 -8.568168e-07 0 2.842171e-14 \n", - "13 -1.695007e-07 0 0.000000e+00 \n", - "14 -7.636845e-07 0 1.421085e-14 \n", - "15 -9.275973e-07 0 1.421085e-14 \n", - "16 -1.367182e-06 0 2.842171e-14 \n", - "17 -1.590699e-06 0 -1.705303e-13 \n", - "18 7.357448e-08 0 4.263256e-14 \n", - "19 1.210719e-07 0 -4.263256e-14 \n", - "20 -1.963228e-06 0 -1.421085e-14 \n", - "21 -1.294538e-06 0 1.989520e-13 \n", - "22 -7.245690e-07 0 -2.842171e-14 \n", - "23 -6.407499e-07 0 0.000000e+00 \n", - "24 -1.646578e-06 0 -4.263256e-14 \n", - "25 2.779067e-06 0 0.000000e+00 \n", - "26 -1.659617e-06 0 -1.421085e-14 \n", - "27 3.803521e-06 0 -1.421085e-14 \n", - "28 -7.748604e-07 0 -4.263256e-14 \n", - "29 -1.342967e-06 0 1.421085e-14 \n", - "30 -8.959323e-07 0 -2.842171e-14 \n", - "31 -1.246110e-06 0 -2.842171e-14 \n", - "32 -1.043081e-06 0 0.000000e+00 \n", - "33 -9.313226e-07 0 -4.263256e-14 \n", - "34 -6.938353e-07 0 -3.268497e-13 \n", - "35 -1.111999e-06 0 1.421085e-14 \n", - "36 -4.479662e-07 0 1.421085e-14 \n", - "37 -1.506880e-06 0 2.842171e-14 \n", - "38 -2.328306e-08 0 2.842171e-14 \n", - "39 -2.672896e-07 0 2.842171e-14 \n", - "40 -1.000240e-06 0 2.842171e-14 \n", - "41 5.029142e-08 0 2.842171e-14 \n", - "42 -4.917383e-06 0 4.263256e-14 \n", - "43 1.687557e-06 0 -1.421085e-14 \n", - "44 3.311783e-06 0 -4.263256e-14 \n", - "45 -2.039596e-07 0 2.842171e-14 \n", - "46 -1.082197e-06 0 1.421085e-14 \n", - "47 -9.927899e-07 0 1.421085e-14 \n", - "48 -6.090850e-07 0 -2.842171e-14 \n", - "49 -1.242384e-06 0 1.421085e-14 \n", - "50 -7.804483e-07 0 2.842171e-14 \n", - "\n", - " avg_per_ticket_rank paid_pct paid_pct_rank police_ticket_count \\\n", - "ward \n", - "1 0 6.117329e-14 0 0 \n", - "2 0 -9.547918e-15 0 0 \n", - "3 0 5.861978e-14 0 0 \n", - "4 0 4.085621e-14 0 0 \n", - "5 0 4.318768e-14 0 0 \n", - "6 0 -5.645484e-14 0 0 \n", - "7 0 4.907186e-14 0 0 \n", - "8 0 4.091172e-14 0 0 \n", - "9 0 4.490852e-14 0 0 \n", - "10 0 1.659783e-14 0 0 \n", - "11 0 -5.218048e-15 0 0 \n", - "12 0 2.398082e-14 0 0 \n", - "13 0 -2.231548e-14 0 0 \n", - "14 0 2.009504e-14 0 0 \n", - "15 0 3.202993e-14 0 0 \n", - "16 0 -1.265654e-14 0 0 \n", - "17 0 -9.714451e-15 0 0 \n", - "18 0 1.321165e-14 0 0 \n", - "19 0 -1.076916e-14 0 0 \n", - "20 0 -6.322720e-14 0 0 \n", - "21 0 4.513057e-14 0 0 \n", - "22 0 3.386180e-14 0 0 \n", - "23 0 -4.551914e-15 0 0 \n", - "24 0 -8.493206e-14 0 0 \n", - "25 0 4.274359e-14 0 0 \n", - "26 0 3.286260e-14 0 0 \n", - "27 0 4.030110e-14 0 0 \n", - "28 0 -1.130762e-13 0 0 \n", - "29 0 2.448042e-14 0 0 \n", - "30 0 6.106227e-15 0 0 \n", - "31 0 1.731948e-14 0 0 \n", - "32 0 -2.409184e-14 0 0 \n", - "33 0 -1.010303e-14 0 0 \n", - "34 0 4.857226e-14 0 0 \n", - "35 0 1.187939e-14 0 0 \n", - "36 0 -1.709743e-14 0 0 \n", - "37 0 -2.703393e-14 0 0 \n", - "38 0 -1.654232e-14 0 0 \n", - "39 0 -2.209344e-14 0 0 \n", - "40 0 -1.809664e-14 0 0 \n", - "41 0 -1.332268e-15 0 0 \n", - "42 0 6.827872e-14 0 0 \n", - "43 0 1.343370e-14 0 0 \n", - "44 0 3.530509e-14 0 0 \n", - "45 0 -1.987299e-14 0 0 \n", - "46 0 -8.881784e-16 0 0 \n", - "47 0 -1.931788e-14 0 0 \n", - "48 0 -2.875478e-14 0 0 \n", - "49 0 1.076916e-14 0 0 \n", - "50 0 -1.076916e-14 0 0 \n", - "\n", - " police_ticket_count_rank police_ticket_count_pct \\\n", - "ward \n", - "1 0 0.000000e+00 \n", - "2 0 -2.775558e-17 \n", - "3 0 -1.110223e-16 \n", - "4 0 -5.551115e-17 \n", - "5 0 0.000000e+00 \n", - "6 0 0.000000e+00 \n", - "7 0 0.000000e+00 \n", - "8 0 -1.110223e-16 \n", - "9 0 -1.110223e-16 \n", - "10 0 0.000000e+00 \n", - "11 0 -5.551115e-17 \n", - "12 0 5.551115e-17 \n", - "13 0 -5.551115e-17 \n", - "14 0 0.000000e+00 \n", - "15 0 0.000000e+00 \n", - "16 0 -1.110223e-16 \n", - "17 0 0.000000e+00 \n", - "18 0 0.000000e+00 \n", - "19 0 0.000000e+00 \n", - "20 0 -1.110223e-16 \n", - "21 0 -1.110223e-16 \n", - "22 0 5.551115e-17 \n", - "23 0 -1.110223e-16 \n", - "24 0 1.110223e-16 \n", - "25 0 2.775558e-17 \n", - "26 0 0.000000e+00 \n", - "27 0 0.000000e+00 \n", - "28 0 0.000000e+00 \n", - "29 0 0.000000e+00 \n", - "30 0 -5.551115e-17 \n", - "31 0 5.551115e-17 \n", - "32 0 2.775558e-17 \n", - "33 0 5.551115e-17 \n", - "34 0 0.000000e+00 \n", - "35 0 0.000000e+00 \n", - "36 0 -5.551115e-17 \n", - "37 0 -1.110223e-16 \n", - "38 0 -5.551115e-17 \n", - "39 0 0.000000e+00 \n", - "40 0 -5.551115e-17 \n", - "41 0 -1.110223e-16 \n", - "42 0 0.000000e+00 \n", - "43 0 -2.775558e-17 \n", - "44 0 -2.775558e-17 \n", - "45 0 0.000000e+00 \n", - "46 0 -5.551115e-17 \n", - "47 0 -2.775558e-17 \n", - "48 0 -5.551115e-17 \n", - "49 0 0.000000e+00 \n", - "50 0 -1.110223e-16 \n", - "\n", - " police_ticket_count_pct_rank contested_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " contested_ticket_count_rank contested_ticket_count_pct \\\n", - "ward \n", - "1 0 0.000000e+00 \n", - "2 0 1.387779e-17 \n", - "3 0 1.387779e-17 \n", - "4 0 0.000000e+00 \n", - "5 0 -1.387779e-17 \n", - "6 0 0.000000e+00 \n", - "7 0 -2.775558e-17 \n", - "8 0 -1.387779e-17 \n", - "9 0 -1.387779e-17 \n", - "10 0 1.387779e-17 \n", - "11 0 -1.387779e-17 \n", - "12 0 0.000000e+00 \n", - "13 0 1.387779e-17 \n", - "14 0 0.000000e+00 \n", - "15 0 0.000000e+00 \n", - "16 0 -1.387779e-17 \n", - "17 0 1.387779e-17 \n", - "18 0 1.387779e-17 \n", - "19 0 0.000000e+00 \n", - "20 0 -1.387779e-17 \n", - "21 0 2.775558e-17 \n", - "22 0 -6.938894e-18 \n", - "23 0 1.387779e-17 \n", - "24 0 1.387779e-17 \n", - "25 0 0.000000e+00 \n", - "26 0 0.000000e+00 \n", - "27 0 0.000000e+00 \n", - "28 0 0.000000e+00 \n", - "29 0 0.000000e+00 \n", - "30 0 0.000000e+00 \n", - "31 0 -1.387779e-17 \n", - "32 0 -1.387779e-17 \n", - "33 0 1.387779e-17 \n", - "34 0 0.000000e+00 \n", - "35 0 -1.387779e-17 \n", - "36 0 0.000000e+00 \n", - "37 0 1.387779e-17 \n", - "38 0 -1.387779e-17 \n", - "39 0 1.387779e-17 \n", - "40 0 1.387779e-17 \n", - "41 0 0.000000e+00 \n", - "42 0 -5.551115e-17 \n", - "43 0 0.000000e+00 \n", - "44 0 0.000000e+00 \n", - "45 0 -1.387779e-17 \n", - "46 0 0.000000e+00 \n", - "47 0 -2.775558e-17 \n", - "48 0 -1.387779e-17 \n", - "49 0 0.000000e+00 \n", - "50 0 -2.775558e-17 \n", - "\n", - " contested_ticket_count_pct_rank paid_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " paid_ticket_count_rank paid_ticket_count_pct \\\n", - "ward \n", - "1 0 0.000000e+00 \n", - "2 0 -1.110223e-16 \n", - "3 0 -1.110223e-16 \n", - "4 0 -1.110223e-16 \n", - "5 0 -1.110223e-16 \n", - "6 0 1.110223e-16 \n", - "7 0 -5.551115e-17 \n", - "8 0 5.551115e-17 \n", - "9 0 0.000000e+00 \n", - "10 0 -1.110223e-16 \n", - "11 0 0.000000e+00 \n", - "12 0 0.000000e+00 \n", - "13 0 1.110223e-16 \n", - "14 0 -1.110223e-16 \n", - "15 0 0.000000e+00 \n", - "16 0 5.551115e-17 \n", - "17 0 -1.665335e-16 \n", - "18 0 0.000000e+00 \n", - "19 0 0.000000e+00 \n", - "20 0 5.551115e-17 \n", - "21 0 0.000000e+00 \n", - "22 0 0.000000e+00 \n", - "23 0 -1.110223e-16 \n", - "24 0 0.000000e+00 \n", - "25 0 -2.220446e-16 \n", - "26 0 -1.110223e-16 \n", - "27 0 0.000000e+00 \n", - "28 0 0.000000e+00 \n", - "29 0 0.000000e+00 \n", - "30 0 1.110223e-16 \n", - "31 0 -1.110223e-16 \n", - "32 0 0.000000e+00 \n", - "33 0 0.000000e+00 \n", - "34 0 0.000000e+00 \n", - "35 0 0.000000e+00 \n", - "36 0 1.110223e-16 \n", - "37 0 5.551115e-17 \n", - "38 0 0.000000e+00 \n", - "39 0 0.000000e+00 \n", - "40 0 0.000000e+00 \n", - "41 0 0.000000e+00 \n", - "42 0 0.000000e+00 \n", - "43 0 0.000000e+00 \n", - "44 0 0.000000e+00 \n", - "45 0 0.000000e+00 \n", - "46 0 -1.110223e-16 \n", - "47 0 0.000000e+00 \n", - "48 0 -1.110223e-16 \n", - "49 0 0.000000e+00 \n", - "50 0 0.000000e+00 \n", - "\n", - " paid_ticket_count_pct_rank dismissed_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " dismissed_ticket_count_rank dismissed_ticket_count_pct \\\n", - "ward \n", - "1 0 -1.387779e-17 \n", - "2 0 1.387779e-17 \n", - "3 0 -2.775558e-17 \n", - "4 0 -1.387779e-17 \n", - "5 0 1.387779e-17 \n", - "6 0 -1.387779e-17 \n", - "7 -1 0.000000e+00 \n", - "8 0 0.000000e+00 \n", - "9 -1 1.387779e-17 \n", - "10 -1 0.000000e+00 \n", - "11 0 1.387779e-17 \n", - "12 -1 -6.938894e-18 \n", - "13 -1 1.387779e-17 \n", - "14 -1 0.000000e+00 \n", - "15 -1 -1.387779e-17 \n", - "16 -1 1.387779e-17 \n", - "17 0 0.000000e+00 \n", - "18 -1 0.000000e+00 \n", - "19 -1 0.000000e+00 \n", - "20 0 0.000000e+00 \n", - "21 0 0.000000e+00 \n", - "22 -1 -6.938894e-18 \n", - "23 -1 -1.387779e-17 \n", - "24 0 -1.387779e-17 \n", - "25 0 0.000000e+00 \n", - "26 0 -6.938894e-18 \n", - "27 0 -2.775558e-17 \n", - "28 0 -2.775558e-17 \n", - "29 0 0.000000e+00 \n", - "30 -1 -6.938894e-18 \n", - "31 -1 0.000000e+00 \n", - "32 0 0.000000e+00 \n", - "33 -1 -6.938894e-18 \n", - "34 -1 -1.387779e-17 \n", - "35 -1 -1.387779e-17 \n", - "36 -1 1.387779e-17 \n", - "37 0 0.000000e+00 \n", - "38 -1 -1.387779e-17 \n", - "39 -1 -1.387779e-17 \n", - "40 0 0.000000e+00 \n", - "41 -1 1.387779e-17 \n", - "42 0 -2.775558e-17 \n", - "43 0 1.387779e-17 \n", - "44 0 1.387779e-17 \n", - "45 -1 0.000000e+00 \n", - "46 0 0.000000e+00 \n", - "47 0 0.000000e+00 \n", - "48 0 0.000000e+00 \n", - "49 0 0.000000e+00 \n", - "50 0 -1.387779e-17 \n", - "\n", - " dismissed_ticket_count_pct_rank seized_or_suspended_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " seized_or_suspended_ticket_count_rank \\\n", - "ward \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "5 0 \n", - "6 0 \n", - "7 0 \n", - "8 0 \n", - "9 0 \n", - "10 0 \n", - "11 0 \n", - "12 0 \n", - "13 0 \n", - "14 0 \n", - "15 0 \n", - "16 0 \n", - "17 0 \n", - "18 0 \n", - "19 0 \n", - "20 0 \n", - "21 0 \n", - "22 0 \n", - "23 0 \n", - "24 0 \n", - "25 0 \n", - "26 0 \n", - "27 0 \n", - "28 0 \n", - "29 0 \n", - "30 0 \n", - "31 0 \n", - "32 0 \n", - "33 0 \n", - "34 0 \n", - "35 0 \n", - "36 0 \n", - "37 0 \n", - "38 0 \n", - "39 0 \n", - "40 0 \n", - "41 0 \n", - "42 0 \n", - "43 0 \n", - "44 0 \n", - "45 0 \n", - "46 0 \n", - "47 0 \n", - "48 0 \n", - "49 0 \n", - "50 0 \n", - "\n", - " seized_or_suspended_ticket_count_pct \\\n", - "ward \n", - "1 0.000000e+00 \n", - "2 0.000000e+00 \n", - "3 2.775558e-17 \n", - "4 -2.775558e-17 \n", - "5 0.000000e+00 \n", - "6 -5.551115e-17 \n", - "7 0.000000e+00 \n", - "8 0.000000e+00 \n", - "9 0.000000e+00 \n", - "10 0.000000e+00 \n", - "11 0.000000e+00 \n", - "12 -2.775558e-17 \n", - "13 -5.551115e-17 \n", - "14 2.775558e-17 \n", - "15 5.551115e-17 \n", - "16 -5.551115e-17 \n", - "17 0.000000e+00 \n", - "18 0.000000e+00 \n", - "19 -2.775558e-17 \n", - "20 0.000000e+00 \n", - "21 5.551115e-17 \n", - "22 -2.775558e-17 \n", - "23 0.000000e+00 \n", - "24 -5.551115e-17 \n", - "25 -2.775558e-17 \n", - "26 -2.775558e-17 \n", - "27 0.000000e+00 \n", - "28 1.110223e-16 \n", - "29 -5.551115e-17 \n", - "30 2.775558e-17 \n", - "31 -2.775558e-17 \n", - "32 -2.775558e-17 \n", - "33 0.000000e+00 \n", - "34 5.551115e-17 \n", - "35 0.000000e+00 \n", - "36 -2.775558e-17 \n", - "37 5.551115e-17 \n", - "38 -2.775558e-17 \n", - "39 0.000000e+00 \n", - "40 0.000000e+00 \n", - "41 0.000000e+00 \n", - "42 -2.775558e-17 \n", - "43 0.000000e+00 \n", - "44 0.000000e+00 \n", - "45 -2.775558e-17 \n", - "46 0.000000e+00 \n", - "47 1.387779e-17 \n", - "48 0.000000e+00 \n", - "49 0.000000e+00 \n", - "50 -2.775558e-17 \n", - "\n", - " seized_or_suspended_ticket_count_pct_rank bankruptcy_ticket_count \\\n", - "ward \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", - "5 0 0 \n", - "6 0 0 \n", - "7 0 0 \n", - "8 0 0 \n", - "9 0 0 \n", - "10 0 0 \n", - "11 0 0 \n", - "12 0 0 \n", - "13 0 0 \n", - "14 0 0 \n", - "15 0 0 \n", - "16 0 0 \n", - "17 0 0 \n", - "18 0 0 \n", - "19 0 0 \n", - "20 0 0 \n", - "21 0 0 \n", - "22 0 0 \n", - "23 0 0 \n", - "24 0 0 \n", - "25 0 0 \n", - "26 0 0 \n", - "27 0 0 \n", - "28 0 0 \n", - "29 0 0 \n", - "30 0 0 \n", - "31 0 0 \n", - "32 0 0 \n", - "33 0 0 \n", - "34 0 0 \n", - "35 0 0 \n", - "36 0 0 \n", - "37 0 0 \n", - "38 0 0 \n", - "39 0 0 \n", - "40 0 0 \n", - "41 0 0 \n", - "42 0 0 \n", - "43 0 0 \n", - "44 0 0 \n", - "45 0 0 \n", - "46 0 0 \n", - "47 0 0 \n", - "48 0 0 \n", - "49 0 0 \n", - "50 0 0 \n", - "\n", - " bankruptcy_ticket_count_rank bankruptcy_ticket_count_pct \\\n", - "ward \n", - "1 0 4.336809e-19 \n", - "2 0 0.000000e+00 \n", - "3 0 0.000000e+00 \n", - "4 0 -1.734723e-18 \n", - "5 0 0.000000e+00 \n", - "6 0 0.000000e+00 \n", - "7 0 6.938894e-18 \n", - "8 0 0.000000e+00 \n", - "9 0 0.000000e+00 \n", - "10 0 -3.469447e-18 \n", - "11 0 -8.673617e-19 \n", - "12 0 0.000000e+00 \n", - "13 0 8.673617e-19 \n", - "14 0 -4.336809e-19 \n", - "15 0 0.000000e+00 \n", - "16 0 0.000000e+00 \n", - "17 0 0.000000e+00 \n", - "18 0 0.000000e+00 \n", - "19 0 3.469447e-18 \n", - "20 0 0.000000e+00 \n", - "21 0 0.000000e+00 \n", - "22 0 0.000000e+00 \n", - "23 0 0.000000e+00 \n", - "24 0 0.000000e+00 \n", - "25 0 0.000000e+00 \n", - "26 0 -8.673617e-19 \n", - "27 0 3.469447e-18 \n", - "28 0 0.000000e+00 \n", - "29 0 -6.938894e-18 \n", - "30 0 8.673617e-19 \n", - "31 0 8.673617e-19 \n", - "32 0 -2.168404e-19 \n", - "33 0 -4.336809e-19 \n", - "34 0 6.938894e-18 \n", - "35 0 0.000000e+00 \n", - "36 0 0.000000e+00 \n", - "37 0 0.000000e+00 \n", - "38 0 0.000000e+00 \n", - "39 0 0.000000e+00 \n", - "40 0 4.336809e-19 \n", - "41 0 8.673617e-19 \n", - "42 0 -1.734723e-18 \n", - "43 0 0.000000e+00 \n", - "44 0 -4.336809e-19 \n", - "45 0 4.336809e-19 \n", - "46 0 -8.673617e-19 \n", - "47 0 -2.168404e-19 \n", - "48 0 0.000000e+00 \n", - "49 0 -8.673617e-19 \n", - "50 0 -8.673617e-19 \n", - "\n", - " bankruptcy_ticket_count_pct_rank \n", - "ward \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", - "5 0 \n", - "6 0 \n", - "7 0 \n", - "8 0 \n", - "9 0 \n", - "10 0 \n", - "11 0 \n", - "12 0 \n", - "13 0 \n", - "14 0 \n", - "15 0 \n", - "16 0 \n", - "17 0 \n", - "18 0 \n", - "19 0 \n", - "20 0 \n", - "21 0 \n", - "22 0 \n", - "23 0 \n", - "24 0 \n", - "25 0 \n", - "26 0 \n", - "27 0 \n", - "28 0 \n", - "29 0 \n", - "30 0 \n", - "31 0 \n", - "32 0 \n", - "33 0 \n", - "34 0 \n", - "35 0 \n", - "36 0 \n", - "37 0 \n", - "38 0 \n", - "39 0 \n", - "40 0 \n", - "41 0 \n", - "42 0 \n", - "43 0 \n", - "44 0 \n", - "45 0 \n", - "46 0 \n", - "47 0 \n", - "48 0 \n", - "49 0 \n", - "50 0 " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wardstotals5yr_sql_minus_pandas" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
5yr_ticket_count_identicalall_yr_ticket_count_identical
ward
1TrueTrue
2TrueTrue
3TrueTrue
4TrueTrue
5TrueTrue
6TrueTrue
7TrueTrue
8TrueTrue
9TrueTrue
10TrueTrue
11TrueTrue
12TrueTrue
13TrueTrue
14TrueTrue
15TrueTrue
16TrueTrue
17TrueTrue
18TrueTrue
19TrueTrue
20TrueTrue
21TrueTrue
22TrueTrue
23TrueTrue
24TrueTrue
25TrueTrue
26TrueTrue
27TrueTrue
28TrueTrue
29TrueTrue
30TrueTrue
31TrueTrue
32TrueTrue
33TrueTrue
34TrueTrue
35TrueTrue
36TrueTrue
37TrueTrue
38TrueTrue
39TrueTrue
40TrueTrue
41TrueTrue
42TrueTrue
43TrueTrue
44TrueTrue
45TrueTrue
46TrueTrue
47TrueTrue
48TrueTrue
49TrueTrue
50TrueTrue
\n", - "
" - ], - "text/plain": [ - " 5yr_ticket_count_identical all_yr_ticket_count_identical\n", - "ward \n", - "1 True True\n", - "2 True True\n", - "3 True True\n", - "4 True True\n", - "5 True True\n", - "6 True True\n", - "7 True True\n", - "8 True True\n", - "9 True True\n", - "10 True True\n", - "11 True True\n", - "12 True True\n", - "13 True True\n", - "14 True True\n", - "15 True True\n", - "16 True True\n", - "17 True True\n", - "18 True True\n", - "19 True True\n", - "20 True True\n", - "21 True True\n", - "22 True True\n", - "23 True True\n", - "24 True True\n", - "25 True True\n", - "26 True True\n", - "27 True True\n", - "28 True True\n", - "29 True True\n", - "30 True True\n", - "31 True True\n", - "32 True True\n", - "33 True True\n", - "34 True True\n", - "35 True True\n", - "36 True True\n", - "37 True True\n", - "38 True True\n", - "39 True True\n", - "40 True True\n", - "41 True True\n", - "42 True True\n", - "43 True True\n", - "44 True True\n", - "45 True True\n", - "46 True True\n", - "47 True True\n", - "48 True True\n", - "49 True True\n", - "50 True True" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_compare = pd.DataFrame()\n", - "df_compare['5yr_ticket_count_identical'] = ~wardstotals5yr_sql_minus_pandas['ticket_count'].astype(bool)\n", - "df_compare['all_yr_ticket_count_identical'] = ~wardstotals_sql_minus_pandas['ticket_count'].astype(bool)\n", - "df_compare" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "# df_full_compare = pd.DataFrame()\n", - "# columns = df_1996to2018.columns.tolist()\n", - "# for column in columns:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "wardstotals5yr_sql_minus_pandas.to_csv('./wardstotals5yr_sql_minus_pandas.csv')\n", - "wardstotals_sql_minus_pandas.to_csv('./wardstotals_sql_minus_pandas.csv')\n", - "df_compare.to_csv('./ticket_count_identical.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "# Top five types of tickets and counts per ward, 2013-2017" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 11.6 s, sys: 16.7 s, total: 28.2 s\n", - "Wall time: 31.7 s\n" + "CPU times: user 86 µs, sys: 1e+03 ns, total: 87 µs\n", + "Wall time: 90.8 µs\n" ] } ], "source": [ "%%time\n", - "\n", - "df_2013_2017 = df[\n", - " (df['year'] > 2012) & (df['year'] < 2018) & \n", - " (df['geocode_accuracy_type'].isin(['rooftop', 'range_interpolation', 'intersection', 'point'])) & \n", - " (df['geocoded_city'] == 'Chicago')\n", - "]\n", - "df_2013_2017 = df_2013_2017[df_2013_2017['ward'].notnull()]\n", - "df_2013_2017 = df_2013_2017[['ticket_number','year','violation_code']]" + "col_list = df_2013to2017.columns.tolist()\n", + "final_col_list = [x for x in col_list if x[-4:] != '_pct' and x[-5:] != '_rank']" ] }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 358 µs, sys: 26 µs, total: 384 µs\n", - "Wall time: 369 µs\n" + "CPU times: user 53 s, sys: 2min 22s, total: 3min 15s\n", + "Wall time: 3min 56s\n" ] } ], "source": [ "%%time\n", - "gb_2013_2017 = df_2013_2017.groupby(['year','violation_code'])" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": {}, - "outputs": [], - "source": [ - "top_5_list = []\n", - "for year, new_df in gb_2013_2017.count().groupby('year'):\n", - " top_5_list.append(new_df.nlargest(5, columns='ticket_number'))" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": {}, - "outputs": [], - "source": [ - "df_top_five_2013_2017 = pd.concat(top_5_list)" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [], - "source": [ - "df_top_five_2013_2017.to_csv('./top_five_violations_2013_2017.csv')" + "df_top_level_summaries = calculate_top_level_summaries(df, final_col_list)" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ - "# %%time\n", - "# # check out ward 7\n", - "# df_filtered_check = df[\n", - "# (df['year'] > 1995) & (df['year'] < 2019) & \n", - "# (df['geocode_accuracy_type'].isin(['rooftop', 'range_interpolation', 'intersection', 'point'])) & \n", - "# (df['geocoded_city'] == 'Chicago')\n", - "# ]\n", - "# df_filtered_check = df_filtered_check[df_filtered_check['ward'].notnull()]\n", - "# df_filtered_check = df_filtered_check[df_filtered_check['ward'] == '7']" + "df_1996to2018.to_csv('df_1996to2018.csv')\n", + "df_2013to2017.to_csv('df_2013to2017.csv')\n", + "df_top_five_2013to2017.to_csv('df_top_five_2013to2017')\n", + "df_top_level_summaries.to_csv('df_top_level_summaries')" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ - "# df_filtered_check\n", - "# df_ward7check = read_in_csv('./ward7test.csv')\n", - "# df_ward7check" + "df_check = pd.read_csv('./wardstotals.csv', index_col='ward').sort_index(ascending=True)\n", + "df_check5yr = pd.read_csv('./wardstotals5yr.csv', index_col='ward').sort_index(ascending=True)\n", + "df_1996to2018_check = df_check[col_list]\n", + "df_2013to2017_check = df_check5yr[col_list]\n", + "wardstotals_sql_minus_pandas = df_1996to2018_check - df_1996to2018\n", + "wardstotals5yr_sql_minus_pandas = df_2013to2017_check - df_2013to2017" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ - "# list_ward7sql = sorted(df_ward7check['ticket_number'].astype(int).tolist())\n", - "# list_ward7pandas = sorted(df_filtered_check['ticket_number'].astype(int).tolist())\n", - "# extra_rows = list(set(list_ward7sql) - set(list_ward7pandas))\n", - "# df_ward7check_out = df_ward7check.set_index('ticket_number')" + "wardstotals5yr_sql_minus_pandas.to_csv('./wardstotals5yr_sql_minus_pandas.csv')\n", + "wardstotals_sql_minus_pandas.to_csv('./wardstotals_sql_minus_pandas.csv')" ] }, { diff --git a/bulletproof/df_1996to2018.csv b/bulletproof/df_1996to2018.csv index f94817b..11ffb44 100644 --- a/bulletproof/df_1996to2018.csv +++ b/bulletproof/df_1996to2018.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,1681635,8,38422082.90997306,17,98467185,7,90108419.31001453,6,58.55443363155501,39,0.7010664220061057,7,584989,14,0.34786918683305235,48,117098,8,0.06963342223490829,37,1158544,6,0.6889390384952739,6,107759,8,0.06407989843218058,40,383301,9,0.22793352897626418,41,5791,26,0.0034436723783698602,38 -2,2076974,3,34255856.26998502,22,117031080,3,109131689.25001825,3,56.34691623486861,46,0.7610960132851556,4,818518,4,0.39409159671714716,46,179764,3,0.08655091493682636,15,1479128,4,0.7121552797483262,5,176272,3,0.08486962282628478,14,388287,6,0.1869484163017929,47,7167,21,0.003450693171893341,36 -3,1068060,15,39425365.93997126,14,66560465,13,56067856.839985326,14,62.31903170233882,28,0.5871396441314117,29,657643,9,0.6157360073404116,13,95109,12,0.0890483680692096,9,631895,18,0.5916287474486452,29,92175,13,0.0863013313858772,12,363786,12,0.34060446042357173,16,15058,13,0.01409845888807745,16 -4,1700508,7,44506653.92998267,9,97472810,8,87362649.68000881,8,57.319818548339676,45,0.6624942066759312,14,975703,3,0.5737714847563199,20,149170,6,0.0877208457707932,11,1081707,8,0.6361081512112851,18,155889,6,0.09167201800873621,4,486627,4,0.2861656634370435,26,16270,12,0.009567729172694278,20 -5,1066278,16,39099465.0999753,15,67806820,12,58263713.68998597,13,63.59206510872399,24,0.5984163049531955,25,476558,23,0.4469359772967275,39,88310,15,0.0828208028300312,22,642266,17,0.6023438540418165,26,92194,12,0.0864633800941218,11,364347,11,0.34169981937168353,15,16854,11,0.015806384451334456,15 -6,820002,23,48797879.24996135,7,58529480,20,45342141.20998659,21,71.37724054331575,7,0.48164575478584576,42,533677,18,0.6508240223804332,9,62398,22,0.07609493635381377,29,417217,27,0.5087999785366377,42,65168,20,0.07947297689517831,25,370083,10,0.4513196309277294,6,21228,5,0.025887741737215274,4 -7,573243,38,33950740.07998063,23,39749280,37,29397087.859995734,39,69.34106478404446,13,0.4640583397405544,45,308710,38,0.5385325246012599,26,45299,34,0.07902233433290944,28,274030,41,0.47803462057103185,47,49218,31,0.08585887660206928,13,268675,26,0.4686930324487172,2,13941,15,0.024319529414227475,8 -8,643480,36,34565979.549983844,21,44501805,34,35370949.35999388,35,69.15802355939579,14,0.5057549696745062,37,332494,36,0.5167122521290483,28,53949,25,0.08383943556909305,19,337603,37,0.5246518928327221,39,56866,26,0.0883725989929757,7,279222,25,0.4339249083110586,11,14835,14,0.02305432958289302,10 -9,351506,45,20666074.490000207,37,25841690,44,19914102.68000059,44,73.51706656500885,3,0.49073473968768777,41,194787,45,0.5541498580394075,23,31773,42,0.09039106018104955,8,179757,47,0.5113909862136066,41,30739,43,0.08744943187314015,8,149092,40,0.4241520770626959,12,7875,20,0.022403600507530454,11 -10,376393,44,17471412.870004173,43,24801125,45,19075018.440000672,45,65.89156812161757,19,0.5219392908215021,35,220190,44,0.5850002523957671,19,26572,46,0.07059642448185806,33,203191,44,0.5398373508540276,36,28487,45,0.0756841917889015,31,123138,43,0.3271527366343157,17,4113,30,0.010927408320558565,18 -11,689588,34,18544158.340000372,40,43645785,36,38421468.819995575,31,63.29255294465681,25,0.6744675822155612,12,299964,40,0.43499016804236734,41,64177,20,0.0930657146006021,5,458842,25,0.6653857085680145,10,57174,25,0.08291037547057083,19,164427,38,0.23844237428725557,36,3823,31,0.005543889974883554,25 -12,814004,24,33646405.659979574,24,50854160,27,40126227.00999166,27,62.474091036407685,27,0.5439175146358147,34,407841,31,0.501030707465811,33,38388,38,0.04715947341782104,47,464875,24,0.5710967022275075,32,40085,37,0.04924422975808473,47,241411,27,0.29657225271620286,23,3755,32,0.0046129994447201735,30 -13,313574,47,11322838.240002342,47,21911835,46,18617564.19000102,46,69.87771626474134,10,0.6218207732353092,21,138630,47,0.4420966023968824,40,25413,47,0.08104307117299266,27,195751,46,0.6242577509614955,21,23464,47,0.07482763239299177,33,77684,47,0.24773737618552558,33,1268,48,0.004043702602894373,34 -14,650744,35,27228959.829991154,31,43974630,35,33691456.77999589,36,67.57592847571395,16,0.5530404855188178,32,307629,39,0.4727342856791611,38,29887,43,0.045927430756180616,48,369175,32,0.5673121842076146,33,31310,42,0.048114158563121595,49,162745,39,0.25009066545369607,32,1824,45,0.002802945551553299,44 -15,765820,29,36671149.64997902,20,50372935,29,37186698.72999368,34,65.77646836071139,20,0.5034901441845581,38,429914,29,0.5613773471572955,22,32741,41,0.04275286620876968,49,412853,28,0.5390992661460917,37,37164,40,0.04852837481392494,48,233778,30,0.3052649447650884,21,5861,25,0.007653234441513671,22 -16,800289,27,49886840.679954864,5,55971585,23,40483740.789989546,25,69.93921570832536,9,0.44797477377584083,48,540506,17,0.6753885158986316,7,48078,32,0.06007579761811046,43,384809,30,0.4808375474359887,45,52500,30,0.06560130152982235,39,360954,13,0.451029565569438,7,17705,10,0.022123257973057232,12 -17,696249,33,43107760.5399658,10,50598085,28,38112539.88999047,32,72.67239881134479,5,0.4692489400831313,44,453854,27,0.6518558734016136,8,51157,28,0.07347515041314243,32,345903,36,0.49680933114446124,44,53365,29,0.07664642965375892,30,313484,20,0.45024696624339855,8,17944,9,0.025772388901097166,6 -18,253791,48,12524355.090003084,46,18443320,48,15116388.300001789,48,72.67129252022333,6,0.5468879069825597,33,135505,48,0.5339235827905638,27,21001,49,0.0827491912636776,24,140609,49,0.5540346190369241,34,20920,48,0.08243003100976788,20,91294,46,0.3597211879065845,14,4437,28,0.017482889464165395,14 -19,225980,49,7711649.120000864,49,16103920,49,14532412.880001225,49,71.26258960969997,8,0.6533165066704031,19,134445,49,0.5949420302681653,17,24925,48,0.11029737144880078,1,146071,48,0.6463890609788477,14,20830,49,0.09217629878750332,3,63855,49,0.2825692539162758,27,2422,40,0.010717762633861403,19 -20,783460,28,48950975.81995366,6,54397595,25,39324381.22998818,28,69.43251091312894,11,0.4454740546417772,49,548229,16,0.6997536568554872,3,54753,24,0.0698861460699972,35,375722,31,0.4795675592882853,46,59143,23,0.07548949531565109,32,352258,15,0.4496183595844076,9,18067,8,0.02306052638296786,9 -21,522735,39,31464206.69998654,27,39726600,38,30999790.85999524,37,75.99758960084938,2,0.49628253187329757,39,356256,34,0.6815231427013687,6,48115,31,0.09204472629535042,6,268770,42,0.5141610950098998,40,48388,33,0.09256697944465168,2,227058,33,0.43436540503314297,10,13122,16,0.02510258544004132,7 -22,875979,21,39562341.95997924,13,56127245,22,40949721.30999474,23,64.07373350274379,23,0.508615971903262,36,421928,30,0.4816645147885965,37,32935,40,0.03759793328378876,50,473188,23,0.5401818993377695,35,38017,39,0.043399442224071584,50,238197,28,0.2719209022134092,29,3745,34,0.004275216643321358,33 -23,579218,37,17914156.29000259,42,37898800,39,30985868.45999705,38,65.43097762845768,21,0.6336575210015057,20,364049,32,0.628518105445618,11,49282,30,0.08508368179165703,18,362433,34,0.6257281369018228,20,48496,32,0.08372667976478632,16,114503,44,0.1976855001053144,45,1913,44,0.0033027288516586156,40 -24,850459,22,54001654.63994206,4,58350565,21,40699653.659988455,24,68.61067376557835,15,0.4297686525204881,50,581979,15,0.6843116481805708,5,53340,26,0.06271907287711695,40,393461,29,0.4626454655662413,50,57604,24,0.06773283603324792,38,386452,7,0.4544040335865691,5,22211,4,0.026116485333214184,3 -25,1708139,6,42561865.83997851,11,101645805,6,89932712.3200131,7,59.50675267059648,34,0.6787652262375322,11,739371,7,0.432851776114239,42,126418,7,0.07400919948552197,31,1150029,7,0.6732642952359263,7,119584,7,0.07000835412106392,37,386191,8,0.22608874336339138,42,8056,19,0.004716243818565117,28 -26,1016631,19,38508771.06996972,16,62122490,17,50410010.22998675,18,61.106232251426526,31,0.5669219651125765,31,492345,21,0.48429076036438,36,58670,23,0.057710221309403315,45,583384,20,0.5738404593210319,31,60087,22,0.05910404069913272,44,319251,19,0.314028393782995,19,6877,22,0.006764499607035394,23 -27,1972334,5,62580044.09995315,3,115535225,4,97965748.28002577,5,58.57792087952649,38,0.6102043960651485,22,1007188,2,0.5106579311617606,29,163685,5,0.0829905076929161,20,1202518,5,0.6096928816316101,24,165555,4,0.08393862297156567,15,606518,2,0.30751282490693765,20,24138,3,0.012238292297349232,17 -28,1332828,9,69052415.2599608,2,89104805,9,67888439.48998144,9,66.85394139378825,18,0.49575007848423025,40,812695,5,0.6097523461391867,14,100240,11,0.07520850402302473,30,709708,12,0.5324828109853634,38,104260,9,0.07822464714126653,28,527276,3,0.39560693502837574,13,28959,1,0.021727484716707633,13 -29,726017,31,42500242.10996963,12,50345885,30,38950634.61998993,29,69.34532524720495,12,0.47821013331908024,43,456008,26,0.6280954853674225,12,50579,29,0.06966641276994891,36,367671,33,0.5064220259305223,43,53417,28,0.07357541214599658,35,342677,16,0.47199583480827584,1,20522,6,0.028266555741807697,1 -30,719914,32,24648877.24999314,34,44984440,33,37699795.409994096,33,62.485852476823624,26,0.6046607538156661,24,360266,33,0.5004292179343643,34,44868,35,0.06232411093547285,41,443290,26,0.6157541039624177,22,43438,35,0.06033776256608428,43,193485,35,0.26876126870709555,31,2482,39,0.0034476340229527415,37 -31,807602,26,28657564.329987958,28,50172855,31,42131375.519991785,22,62.12571910421222,30,0.5951689008096346,27,345059,35,0.4272636769101612,43,45897,33,0.05683121141354281,46,493075,22,0.6105420739423627,23,44956,34,0.05566603351650937,46,231408,31,0.2865371804428419,25,3602,35,0.004460117731258714,32 -32,1068694,14,19598432.649999212,39,63189680,16,59148208.17999033,12,59.12794494963011,36,0.7511203977283127,5,441090,28,0.4127374159488123,45,88492,14,0.08280387089288421,23,762741,11,0.7137131863751457,4,85258,15,0.07977774741881212,24,209019,34,0.19558358145549615,46,2355,41,0.00220362423668515,47 -33,1036429,17,31777242.389978647,26,59457040,18,49157095.149991594,19,57.367209910181984,44,0.607370081032848,23,516898,19,0.49872977309588984,35,62805,21,0.06059749389490259,42,628212,19,0.6061312448802572,25,62975,21,0.060761518637552595,42,281760,24,0.2718565381709697,30,3429,36,0.0033084755443932965,39 -34,419815,43,28493756.029989235,29,32033105,40,23775974.719998527,43,76.30290723294785,1,0.45487080914424055,46,318575,37,0.7588461584269262,1,34495,39,0.08216714505198719,25,198355,45,0.4724819265628908,49,36646,41,0.08729083048485642,9,192838,36,0.4593404237580839,4,10865,17,0.025880447339899717,5 -35,1132939,12,37116142.44997529,18,65792125,14,54854009.80998949,15,58.07208066806774,42,0.5964327389057483,26,475127,24,0.41937562393032635,44,66432,19,0.0586368727707317,44,680225,13,0.6004074358813669,27,66290,19,0.05851153504292817,45,336107,18,0.29666822309056357,22,4462,27,0.0039384291652065995,35 -36,463931,42,18154087.310002886,41,31334580,41,25196470.129998453,42,67.54146629563448,17,0.5812259776560251,30,234372,43,0.5051871937852828,31,29417,44,0.06340813612369081,39,274703,40,0.5921203799702973,28,29399,44,0.06336933725058252,41,128442,41,0.27685582554302257,28,2094,43,0.004513602238263879,31 -37,734376,30,47023834.419957936,8,53665820,26,38871568.76999086,30,73.07676176781376,4,0.4525453903980218,47,507803,20,0.6914754839482772,4,51324,27,0.06988790483349129,34,346983,35,0.47248684597535867,48,54317,27,0.07396347375186553,34,340153,17,0.46318643310783575,3,19845,7,0.027022941926206738,2 -38,336950,46,9431794.520001687,48,20935725,47,18066767.610000983,47,62.133031607063366,29,0.6570077200614427,16,192935,46,0.5725923727556017,21,27660,45,0.08208933076124054,26,215238,43,0.6387832022555275,17,26730,46,0.07932927734085175,26,77601,48,0.23030419943611813,39,1090,49,0.0032349013206707227,42 -39,489099,41,12726925.250002721,45,29612600,43,25679067.779998638,41,60.545206594166004,32,0.6686213727096989,13,264329,41,0.5404406878770964,25,43279,36,0.08848719788836207,10,317180,39,0.6484985657300465,13,38675,38,0.07907397070940649,27,113114,45,0.23127015185064784,38,1369,47,0.00279902432840795,45 -40,1009920,20,23965919.429992743,35,58530910,19,51168207.629991375,17,57.95598661280101,43,0.681024850254009,10,610205,12,0.6042112246514575,16,91310,13,0.0904131020278834,7,668314,14,0.6617494455006337,11,82983,16,0.08216789448669201,21,237868,29,0.23553152724968315,37,3055,38,0.0030249920785804818,43 -41,190154,50,4836566.249999884,50,12331580,50,10805857.090000426,50,64.85048960316375,22,0.6908045419259323,9,120404,50,0.6331920443430062,10,19425,50,0.10215404356468967,3,126758,50,0.6666070658518884,9,17257,50,0.09075275829064863,6,40092,50,0.21083963524301355,43,531,50,0.002792473468872598,46 -42,4951982,1,99440337.42014231,1,287918340,1,252538869.3699835,1,58.142040904025905,40,0.7174823526452361,6,2516001,1,0.5080795931810738,30,497960,1,0.1005577160821667,4,3224522,1,0.6511578596206529,12,528757,1,0.1067768420806053,1,1017358,1,0.205444607835812,44,26755,2,0.005402887167198911,26 -43,2036700,4,25676080.209990658,32,112285000,5,106714109.980022,4,55.13084892227623,48,0.8060575321091454,1,635345,10,0.3119482496194825,49,177730,4,0.08726371090489517,12,1526750,3,0.7496194824961948,1,165434,5,0.08122649383807139,22,311464,21,0.15292581136151617,50,3366,37,0.001652673442333186,50 -44,2430393,2,33033504.38997947,25,132322695,2,124229639.13003659,2,54.44497865160079,49,0.7899475767138341,2,605543,13,0.24915435487182525,50,211538,2,0.0870385982843104,14,1797013,2,0.7393919419616498,2,211418,2,0.08698922355355698,10,392906,5,0.16166356634503143,49,4406,29,0.0018128755308297877,49 -45,504658,40,13275891.200003421,44,29902350,42,25947345.01999906,40,59.25270182975401,35,0.6615299378781708,15,253841,42,0.5029960884400921,32,43118,37,0.08544004058193866,17,323878,38,0.6417772035715277,15,40304,36,0.07986398709621169,23,123768,42,0.2452512394532535,34,1658,46,0.0032853932762385617,41 -46,1212505,11,27847989.079987053,30,71477200,10,63840303.72999027,11,58.95002494835073,37,0.6962754106710045,8,658028,8,0.5427012672112692,24,105551,9,0.0870520121566509,13,815974,10,0.6729654723073307,8,100616,10,0.08298192584772847,18,294739,23,0.24308270893728273,35,6336,23,0.005225545461668199,27 -47,1221504,10,19627561.349999655,38,67869860,11,63965646.9099922,10,55.56253602116735,47,0.7652014827693423,3,467466,25,0.3826970685319082,47,105301,10,0.08620602142931992,16,889342,9,0.728071295714136,3,94985,11,0.07776069501205071,29,228256,32,0.186864717594048,48,2232,42,0.0018272555800062874,48 -48,1035302,18,25413304.59998722,33,55437760,24,48160632.41999492,20,53.54742867298624,50,0.6545882192890513,18,612028,11,0.5911589082219487,18,85899,16,0.08296999329664195,21,657320,15,0.6349065296889217,19,85954,14,0.0830231178921706,17,298960,22,0.2887659832589911,24,5890,24,0.0056891612302497245,24 -49,1121939,13,36804001.39997483,19,65168225,15,53838427.99998961,16,58.08535490788715,41,0.5939649715523924,28,790720,6,0.7047798498848868,2,76076,18,0.06780760807851408,38,656347,16,0.5850113063187927,30,79763,17,0.0710938830007692,36,360088,14,0.32095149558041924,18,8971,18,0.007995978390982041,21 -50,808395,25,21244452.069998536,36,48262395,32,40432940.669994846,26,59.70150112259477,33,0.6555552832857828,17,490273,22,0.6064770316491319,15,83756,17,0.10360776600548,2,517685,21,0.6403861973416461,16,73674,18,0.09113614012951589,5,185057,37,0.2289190309192907,40,3754,33,0.004643769444392902,29 +1,1569385,7,34790302.68997506,15,91903475,7,84581996.59000587,7,58.56018440344466,39,0.7085563158302214,7,527178,13,0.3359137496535267,48,110193,8,0.07021412846433475,34,1091114,6,0.6952494129866158,6,100646,8,0.06413085380579017,40,350556,9,0.22337157548976191,41,4923,26,0.0031368975745276017,41 +2,1926728,3,31381914.91998605,22,108368190,3,101113623.62001097,3,56.244674910002864,47,0.7631473839361568,3,705459,5,0.36614353453108067,47,167607,3,0.08699048334793494,15,1376108,3,0.7142201701537529,4,164144,3,0.08519313572024696,13,358293,7,0.1859593051017061,48,6585,20,0.003417711270091056,36 +3,748321,24,28499537.99998613,25,47248645,29,39724974.01999183,21,63.13954172073215,24,0.5822683496564885,30,431889,21,0.5771440331087861,18,66280,18,0.08857161565691729,11,443058,22,0.5920694461334106,29,63900,18,0.08539116234877814,12,254277,23,0.33979669152676456,15,10869,16,0.0145245155488086,16 +4,1331511,8,36826514.81997992,12,78036155,9,69605915.27999279,8,58.60721766474329,38,0.6539916002539027,18,702500,6,0.5275960919586845,26,118002,6,0.08862262497268142,10,842138,8,0.632467925537228,19,122208,6,0.09178144228624473,4,391509,4,0.29403362045075104,22,13836,12,0.010391202175573464,20 +5,935506,18,33189805.87998283,18,58465505,15,50596064.319988154,14,62.49613043636278,28,0.6038734717349236,25,387204,29,0.41389793331095687,43,77063,16,0.08237574104281534,25,569388,17,0.6086417404057269,26,80142,13,0.08566700801491385,11,312266,13,0.3337936902596028,16,14431,11,0.015425876477542635,15 +6,683441,29,40810920.059973724,8,48498665,23,37553684.20999126,24,70.96247518073982,7,0.47921742934628153,42,440159,20,0.6440336473814126,8,51054,23,0.07470140070613264,30,347752,30,0.5088251948595417,42,53617,22,0.07845154153760163,27,310040,15,0.4536455963279932,5,17921,7,0.02622172213841429,4 +7,533577,38,31757383.029984783,21,37203055,37,27603879.239996377,38,69.72387303050918,11,0.4650150314265738,45,281956,36,0.5284260753368305,25,42379,33,0.0794243380055737,28,257355,40,0.4823202649289606,46,45222,31,0.08475252868845547,14,247569,25,0.46397989418584384,3,13098,13,0.024547534845017684,8 +8,561773,36,30047355.529989634,23,38576980,36,30788514.579996083,35,68.6700500024031,14,0.5060914642025051,37,271700,38,0.4836473095004566,33,46942,29,0.08356044167306012,21,297042,39,0.5287580570799949,39,48973,28,0.08717578096490931,7,241784,26,0.43039448318092893,11,13033,14,0.023199762181521717,9 +9,289087,46,16948878.160004895,40,21414210,45,16569329.020002058,47,74.07531296806843,3,0.4943381646583229,41,158530,46,0.5483816290597641,22,26132,44,0.09039493301324515,8,149107,47,0.5157859052811091,40,25030,45,0.08658293178178196,9,121778,40,0.421250350240585,12,6394,22,0.022117909141538706,12 +10,359092,43,16605604.23000532,42,23610925,44,18196476.6300011,44,65.75174328584318,20,0.5228559953985965,35,208531,44,0.5807174763013379,17,25352,46,0.07060029184721464,33,194301,44,0.5410897485881055,36,26986,44,0.0751506577701536,32,117283,42,0.3266098938433605,17,3881,29,0.010807815267396655,18 +11,627373,33,16735076.19000245,41,39582325,34,34913677.449995615,30,63.09217164270697,25,0.6759829616286733,12,263262,40,0.4196259641393557,41,57229,21,0.09122005569254654,6,419185,24,0.6681591334022982,10,51053,26,0.0813758322401506,21,148783,38,0.2371523798442075,36,3444,32,0.005489557249036857,25 +12,715455,26,29383921.929985654,24,45020975,31,35607360.28999352,28,62.92635455758923,26,0.5478790242893123,34,341400,32,0.4771788582091117,34,34326,38,0.04797786024278256,47,412221,25,0.5761662159045642,32,35673,38,0.049860578233431874,47,208239,31,0.291058137828375,24,3059,35,0.004275600841422591,33 +13,279095,47,10051851.920001546,47,19528760,46,16600806.930001438,46,69.9717300560741,10,0.622857442607441,21,122538,47,0.43905480212830755,39,22852,47,0.08187893011340225,26,174444,45,0.6250344864651821,21,21060,47,0.0754581773231337,31,68886,47,0.24681918343216466,33,1156,48,0.004141958831222344,34 +14,582009,35,24272353.179994963,32,39440380,35,30219750.17999689,36,67.76592801829526,17,0.5545711821831465,32,272831,37,0.46877453785078926,36,26728,43,0.045923688465298644,48,331121,34,0.5689276282669168,33,27966,42,0.04805080333809271,49,144084,39,0.2475631820126493,32,1567,45,0.0026923982275188184,44 +15,721722,25,34771158.4699808,16,47544895,25,35041311.2799943,29,65.87702051482427,19,0.5019348463890551,38,398174,26,0.5516999620352435,21,31024,39,0.04298608051299531,49,389043,27,0.5390482762060738,37,35201,39,0.048773627518629056,48,221073,27,0.3063132341815824,20,5642,25,0.007817414461523967,22 +16,672031,31,42372946.56996952,7,47396830,26,34233862.70999377,33,70.52774351183204,8,0.446877543024726,48,443404,19,0.6597969438909812,7,41113,35,0.06117723735958609,43,324129,35,0.4823125718902848,47,44328,32,0.06596124285933239,39,303698,16,0.45191070054804017,7,15241,10,0.022679013319326043,11 +17,612963,34,38198598.01997395,11,44790040,32,33817123.65999361,34,73.07135993526526,6,0.46957973718953155,44,393427,27,0.6418446137858239,9,45547,30,0.07430627949811,31,304871,37,0.49737259834606656,44,46878,30,0.07647769930648343,30,277686,21,0.45302244996843205,6,16029,9,0.026150028631418208,5 +18,212856,48,10501729.260002064,46,15562045,48,12770202.590001239,48,73.11067106400571,5,0.5487383974957553,33,107867,50,0.5067604389822227,27,17821,50,0.08372326831285,19,119129,50,0.5596694478896531,34,17314,49,0.08134137632953733,22,75526,46,0.35482203931296274,14,3603,30,0.01692693652046454,14 +19,195508,49,6504194.730000477,49,13767945,49,12471568.260000968,49,70.42138940606011,9,0.6572367217366903,17,111581,48,0.5707234486568324,19,22047,48,0.11276776397896761,1,127285,48,0.6510475274669068,13,18126,48,0.09271231867749657,2,55331,49,0.28301143687214847,27,2104,41,0.010761707960799559,19 +20,695596,28,43255688.00996842,6,48208575,24,34905970.19999085,31,69.30542297540526,13,0.4465868687973047,49,477057,16,0.6858248178540417,4,48574,25,0.0698307638341796,36,335909,32,0.48290818233572363,45,52252,24,0.07511831580400118,33,310790,14,0.4467967038338346,9,16099,8,0.023144181392647456,10 +21,464846,40,28070870.82999093,27,35390015,39,27584894.37999676,39,76.13277300439286,2,0.4956340870693216,39,310271,35,0.6674705171174969,6,42756,32,0.09197884890910107,5,239289,42,0.5147704831277455,41,42900,33,0.09228862892226673,3,201174,33,0.4327755858929624,10,11688,15,0.02514381106861197,7 +22,796136,20,35692989.69998497,14,50986290,22,37288899.10999618,26,64.04218625963404,23,0.5109335989793742,36,374753,30,0.47071480249605596,35,30161,40,0.037884230834932725,50,432712,23,0.5435151783112433,35,34801,40,0.04371238079926043,50,214741,30,0.2697290412693309,30,3448,31,0.0043309183355607584,32 +23,561609,37,17241571.26000301,39,36751995,38,30071450.74999731,37,65.44053781189405,21,0.6355850772677606,20,355529,31,0.6330543135882793,10,48132,27,0.08570375474752007,17,352247,29,0.6272103901468815,20,47273,29,0.08417422085472277,15,109920,44,0.1957233591342019,45,1860,44,0.0033119127364411895,38 +24,780330,21,48928872.869953096,4,53207570,19,37290822.45999128,25,68.18598541642639,15,0.43250932768072614,50,524474,14,0.6721182063998564,5,48479,26,0.062126279907218744,41,363635,28,0.46600156344110827,50,52218,25,0.06691784245127061,38,351924,8,0.45099381031102226,8,20119,4,0.02578268168595338,6 +25,1607282,6,39991523.20997973,10,95793365,6,84883699.11000855,6,59.599600443481606,35,0.6797481320393338,11,671600,7,0.4178482680699467,42,117586,7,0.0731582883401917,32,1086525,7,0.6760014732946676,7,111075,7,0.06910735017252728,37,361563,6,0.22495305739751953,40,7601,19,0.004729101675997118,28 +26,961961,15,36096893.34997309,13,58764925,14,47885041.339987956,16,61.088677191694885,31,0.5701826412640622,31,448393,18,0.466123886519308,37,55534,22,0.05772999113269665,45,556064,19,0.5780525405915624,31,56635,21,0.05887452817733775,45,299880,18,0.31173820976110256,19,6452,21,0.006707132617642503,23 +27,1819883,5,56335554.49996028,3,105850415,4,90314941.19001503,5,58.16330775110268,42,0.6158515916710178,22,893964,2,0.491220589455476,30,152329,5,0.0837026336308433,20,1117868,5,0.614252674485118,23,152507,4,0.08380044211633385,16,554805,2,0.30485751007070233,21,21642,3,0.011891973275205055,17 +28,1228195,9,63952910.939950585,2,82326650,8,62783869.979982585,10,67.0306018181152,18,0.49538791757419437,40,732385,4,0.596310032201727,14,91965,10,0.074878174882653,29,655832,12,0.5339803532826628,38,95536,10,0.0777856936398536,28,487096,3,0.39659500323645674,13,26958,1,0.021949283297847653,13 +29,679360,30,40001422.729973145,9,47280900,28,36658847.17999109,27,69.59623763542157,12,0.47819877523319554,43,427542,23,0.6293305463966086,11,47456,28,0.06985398021667452,35,344369,31,0.5069020843146491,43,50158,27,0.07383125294394724,34,322453,12,0.47464231040979743,1,19393,5,0.02854598445595855,1 +30,659128,32,22333667.789996624,34,41280865,33,34838310.999995366,32,62.629512021944144,27,0.6093598951326458,24,324566,33,0.49241725431175737,29,41952,34,0.06364772851403673,40,410319,26,0.6225179327839205,22,39805,35,0.060390394581932495,43,175295,35,0.26594986102851037,31,2227,39,0.0033787064121081184,37 +31,761096,23,26944058.66999095,29,47318905,27,39905210.46999257,20,62.17205845254738,30,0.5969431077313706,27,320255,34,0.42078134689973407,40,43465,31,0.057108433101737494,46,466411,21,0.6128149405594038,24,42283,34,0.055555409567255645,46,218644,29,0.2872751926169629,26,3381,33,0.004442277978073725,30 +32,948256,16,17521124.860002503,38,56604165,16,52963063.27999157,12,59.692915204333005,33,0.7514176537693469,5,388643,28,0.40985029359160396,44,79141,15,0.08345952991597205,22,676386,11,0.713294722100361,5,76402,15,0.08057106941585394,23,185133,34,0.1952352529274795,46,2134,40,0.0022504471366382073,46 +33,924665,19,28117496.589984752,26,53060735,20,44238618.249993026,19,57.38373897573716,45,0.6114012388286852,23,429004,22,0.4639561354652766,38,57386,20,0.062061395207994245,42,566211,18,0.6123417670183255,25,56722,20,0.061343297302266224,42,252280,24,0.27283394526666416,29,3044,36,0.003292003049753154,39 +34,358181,44,24591971.519994926,31,27424725,43,20340745.730000302,43,76.56666601522694,1,0.4526934264141896,46,269185,39,0.7515334425890821,1,29218,41,0.08157328278161041,27,168898,46,0.471543716724226,48,30778,41,0.08592862267959496,10,165101,37,0.4609429310879137,4,9569,17,0.02671554325885516,3 +35,1030112,13,33043025.209979188,19,59706255,13,50081624.86999104,15,57.960935315771486,43,0.6024882489347013,26,401107,25,0.3893819312851418,46,61343,19,0.05954983535770868,44,624310,14,0.606060311888416,27,60684,19,0.05891009909602063,44,301809,17,0.29298658786617376,23,3926,28,0.003811236059768258,35 +36,428966,42,16572782.110004688,43,29113670,40,23591444.60999891,42,67.86941156175547,16,0.587374550354515,29,209884,43,0.48927887058648006,31,27554,42,0.06423352899763618,39,257102,41,0.5993528624646243,28,27431,43,0.06394679298592429,41,117492,41,0.27389583323620054,28,1913,43,0.004459560897600276,29 +37,710368,27,45907780.149960205,5,52052630,21,37600688.56999203,23,73.27558392269923,4,0.4502619811660886,47,492108,15,0.692750799585567,3,49403,24,0.06954564394792558,37,333730,33,0.4697987521960449,49,52389,23,0.07374909905851615,35,331392,11,0.46650750033785304,2,19393,5,0.02729993468174242,2 +38,308830,45,8475433.430001194,48,19284905,47,16701094.340001335,45,62.44505067512871,29,0.6633597171370251,15,175480,45,0.568209047048538,20,25588,45,0.08285464495029628,24,199332,43,0.6454424764433507,17,24431,46,0.07910824725577179,25,68770,48,0.2226791438655571,42,872,49,0.0028235598873166466,43 +39,462466,41,11985210.850002514,45,28009010,42,24305420.8699991,41,60.56447392889423,32,0.6697436698684731,13,245100,41,0.5299849069985686,24,41031,36,0.08872219795617407,9,300506,38,0.6497904710832796,14,36531,37,0.07899175290724075,26,106513,45,0.23031530966600788,38,1205,47,0.0026055969519921465,45 +40,938239,17,22060700.869995967,35,54367365,17,47591348.089992344,17,57.94617895866618,44,0.6832727651318806,10,550239,12,0.5864593136716764,16,85528,12,0.09115800984610531,7,622499,15,0.6634759373677709,11,77757,14,0.08287547202791613,19,219367,28,0.2338071642726427,37,2720,38,0.002899048110342887,42 +41,177529,50,4268115.869999662,50,11500215,50,10164425.45000032,50,64.77935999188865,22,0.7042713562797777,8,111075,49,0.6256724253502245,12,18231,49,0.10269308113040686,3,120005,49,0.6759740662089011,8,16018,50,0.09022751212477961,6,35688,50,0.20102631119422743,44,338,50,0.0019039142900596521,48 +42,4496395,1,89484842.07011928,1,262711345,1,231087250.84998423,1,58.427105492288824,40,0.7208589142772897,6,2190415,1,0.4871491494853099,32,454838,1,0.10115614842557204,4,2949486,1,0.655966835653896,12,477374,1,0.10616816360662264,1,911779,1,0.20278000487056852,43,23902,2,0.005315814113306326,26 +43,1825180,4,23235843.32999427,33,101437190,5,96264271.16001388,4,55.57654039601574,48,0.8055579826918317,1,566827,11,0.31055950645963687,49,160494,4,0.08793324494022507,12,1366416,4,0.7486472567089273,1,149194,5,0.08174207475427081,20,277242,22,0.15189844289330368,50,2955,37,0.0016190183981853845,50 +44,2400022,2,32372164.879980434,20,130875625,2,122975822.32003547,2,54.53101054906997,49,0.7916151637143509,2,588517,9,0.24521316887928526,50,209493,2,0.08728794986045961,14,1778879,2,0.7411927890661002,2,208928,2,0.08705253535175927,8,384676,5,0.16028019743152355,49,4277,27,0.0017820669977191876,49 +45,474619,39,12422025.99000298,44,28277965,41,24619514.49999926,40,59.58034760513169,36,0.6646460750368692,14,236038,42,0.49732100906200555,28,40828,37,0.08602268345767869,16,306582,36,0.6459539125066632,15,37807,36,0.07965757797306892,24,115222,43,0.24276735655336176,34,1552,46,0.003269991298283465,40 +46,1195367,10,27399937.52998787,28,70548890,10,63030115.6399904,9,59.01860265508417,37,0.6970040758630857,9,643660,8,0.5384622463226775,23,104402,9,0.08733886747751946,13,805511,9,0.6738608310251162,9,99259,9,0.08303642312360973,18,289848,19,0.24247616004122582,35,6239,23,0.0052193175819643675,27 +47,1066890,11,17751297.740002062,37,60145680,12,56601725.159993626,11,56.374771532210445,46,0.7612565428055638,4,425333,24,0.3986662167608657,45,91424,11,0.08569205822530908,18,772590,10,0.7241515057784776,3,81815,12,0.0766855064720824,29,202988,32,0.1902614140164403,47,2037,42,0.0019092877428788348,47 +48,992995,14,24653671.419988375,30,53600070,18,46488084.09999521,18,53.97818720134543,50,0.6534570838210029,19,587045,10,0.5911862597495455,15,82599,13,0.08318168772249608,23,629530,13,0.6339709666211814,18,82623,11,0.08320585702848453,17,287240,20,0.28926631050508816,25,5698,24,0.005738196063424287,24 +49,1050799,12,34253665.679977536,17,61131780,11,50659206.559990406,13,58.17647333124603,41,0.5966022020409933,28,733944,3,0.6984627887921477,2,71258,17,0.06781315931971767,38,618742,16,0.588830023629638,30,74259,16,0.07066908133715392,36,333864,10,0.31772394149594735,18,8393,18,0.007987255412310061,21 +50,775570,22,19946954.12999971,36,46293070,30,38959929.21999501,22,59.68909318307825,34,0.6613816077913159,16,463141,17,0.5971620872390628,13,80894,14,0.1043026419278724,2,500694,20,0.6455819590752607,16,70763,17,0.09123999123225499,5,174728,36,0.22528978686643372,39,3359,34,0.004331008161739108,31 diff --git a/bulletproof/df_2013to2017.csv b/bulletproof/df_2013to2017.csv index 17561b2..5110ddf 100644 --- a/bulletproof/df_2013to2017.csv +++ b/bulletproof/df_2013to2017.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,413658,5,8675790.960001804,25,29805325,6,27938207.769996352,5,72.0530607409986,48,0.7630471606234679,6,72173,29,0.1744750494369745,47,35876,7,0.08672865023763592,40,323136,5,0.7811670510421652,4,26878,9,0.0649763814552118,41,55718,18,0.13469581151579324,44,1571,25,0.003797823322648178,37 -2,454049,3,8465230.239999602,26,32954155,4,30224978.070000127,3,72.57841114064782,47,0.7812048420061954,5,98498,14,0.2169325337133217,44,47381,4,0.10435217344383536,28,345898,3,0.7618076463113012,6,40419,3,0.08901902658083158,15,55052,19,0.12124682578312032,46,1825,22,0.00401938997773368,35 -3,288812,10,13842674.970004184,15,22750745,10,18236863.450001027,10,78.7735447280584,35,0.5684889605091165,30,109065,11,0.37763320083653035,29,35530,9,0.12302120410509258,6,181628,10,0.6288796864396217,31,27842,7,0.0964018115590765,5,71908,12,0.24897857429746686,19,4896,16,0.016952204202041465,18 -4,311832,8,11970293.620001659,17,24575955,9,21133826.47999915,8,78.81152351266066,34,0.638404718692361,22,84469,21,0.2708798327304446,41,35536,8,0.11395879832730445,11,209586,8,0.6721119064111445,23,27654,8,0.0886823674286154,17,67525,13,0.21654288206470151,23,4177,17,0.013395033223017522,20 -5,248972,11,14727556.390004495,13,21308210,11,16620649.630002195,12,85.58476455183715,22,0.5301946025043588,33,87460,19,0.35128448178911686,31,28243,11,0.11343845894317434,12,149978,16,0.6023890236653118,33,21554,11,0.0865719839982006,23,72362,11,0.2906431245280594,15,5966,10,0.02396253393955947,15 -6,198939,20,20892562.179998003,5,19179765,14,11660974.51000182,24,96.41028154358874,11,0.35820914394176945,47,141079,6,0.7091570783003835,6,21103,18,0.10607774242355697,23,83914,32,0.42180768979435906,47,17175,17,0.08633299654668014,24,88259,6,0.44364855558739114,3,8575,3,0.04310366494252007,3 -7,134197,39,14267365.300004814,14,13080905,37,7777808.260000935,39,97.47539065701916,8,0.35281229421170895,48,78747,24,0.5868014933269745,13,15070,31,0.1122975923455815,15,55681,42,0.4149198566286877,49,12117,32,0.09029262949246257,14,59152,17,0.4407848163520794,4,5244,14,0.03907687951295483,8 -8,152629,36,15048179.720004626,11,14817095,29,9418453.71000122,37,97.07915926855316,10,0.3849509470498071,39,92106,17,0.6034632998971362,11,18032,24,0.11814268585917487,9,68080,40,0.4460489159989255,40,14636,25,0.09589265473795937,7,63433,15,0.41560253949118453,12,5913,11,0.0387409994168867,9 -9,91600,44,9364043.370002177,22,8964050,42,5579514.4900002135,46,97.86080786026201,7,0.3733725624293411,42,57760,34,0.6305676855895197,10,10493,41,0.11455240174672489,10,39646,47,0.4328165938864629,44,8558,40,0.09342794759825328,8,38191,28,0.41693231441048034,11,3365,18,0.03673580786026201,10 -10,86078,45,6297504.330000598,32,7891920,45,5616550.790000162,45,91.6833569553196,16,0.4714222599634744,36,46946,41,0.5453890657310811,16,8183,45,0.09506494109993262,35,48139,45,0.5592485884895095,36,6855,45,0.07963707335207602,33,24655,38,0.2864262645507563,16,1768,23,0.0205395106763633,16 -11,185423,22,5522720.6900002835,35,14330390,32,12686951.910000999,20,77.28485678691425,38,0.6967149925584112,14,50650,39,0.2731592089438743,40,20467,19,0.11038004993986722,17,135913,19,0.7329888956601932,12,15273,20,0.08236842247186163,29,30496,34,0.16446719123301856,33,1117,30,0.006024063897143289,28 -12,165265,32,8909673.990001569,23,14021130,33,11286688.400000857,26,84.84028681208967,23,0.558847587602606,31,62176,32,0.37622001028650953,30,11315,38,0.06846579735576196,47,107222,26,0.6487883096844462,27,8793,38,0.05320545790094696,47,40155,24,0.2429734063473815,20,1159,29,0.007012979154690951,25 -13,82355,46,3964726.6199997393,42,7387005,46,5982541.7200001795,44,89.69710400097141,17,0.6014255889672953,26,28762,48,0.34924412603970617,32,7666,46,0.09308481573674944,37,53050,43,0.6441624673668872,29,5802,46,0.0704510958654605,40,15595,46,0.18936312306478054,28,365,45,0.004432032056341449,34 -14,162992,34,8691724.190001315,24,14437970,31,10894734.930000763,31,88.58085059389418,19,0.5562381062983889,32,63991,31,0.3926020909001669,26,8990,43,0.05515608128006282,49,98127,28,0.6020356827328949,34,7020,44,0.04306959850790223,49,30603,33,0.18775768135859427,29,523,41,0.0032087464415431434,41 -15,172100,29,11500258.250002455,18,15276780,26,11015543.150000928,30,88.7668797210924,18,0.48923611264395295,35,92397,16,0.5368797210923881,18,10558,40,0.06134805345729227,48,100030,27,0.5812318419523533,35,8759,39,0.05089482858803022,48,45463,23,0.26416618245206275,17,1963,20,0.011406159209761766,21 -16,176581,27,18833535.22000128,8,17442070,19,10715125.650001368,33,98.77659544345089,5,0.3626264383736997,44,133995,8,0.7588302252224192,3,15666,30,0.0887184917969657,38,78044,35,0.4419728056812454,41,12562,30,0.07114015664199433,39,75408,8,0.4270448122957736,9,5688,13,0.03221184612160991,13 -17,169970,31,18538535.160002057,9,17095260,20,10353183.77000159,35,100.57810201800318,3,0.35834433372013574,46,122623,9,0.721439077484262,5,18137,23,0.1067070659528152,21,72086,37,0.42411013708301465,46,14762,24,0.08685062069777019,20,74609,10,0.4389539330470083,5,7092,8,0.041725010295934575,5 -18,67500,48,5366658.2900002105,36,6555625,47,4656593.929999926,48,97.12037037037037,9,0.4645791433551158,37,33304,45,0.4933925925925926,19,7271,47,0.10771851851851852,20,35192,48,0.5213629629629629,37,5699,47,0.08442962962962963,27,21407,43,0.3171407407407407,14,1857,21,0.02751111111111111,14 -19,54036,49,3041397.5799997835,48,5095735,49,4256416.179999879,49,94.30259456658524,14,0.5832453827925688,28,31425,46,0.5815567399511437,14,6666,49,0.12336220297579392,5,34345,49,0.6355947886594122,30,4972,49,0.09201273225257237,11,13508,48,0.24998149381893553,18,922,34,0.017062698941446443,17 -20,210320,16,21517797.729997527,4,19904355,12,12078920.590001963,22,94.63843191327501,12,0.3595267988662932,45,154122,4,0.7327976416888551,4,22117,16,0.10515880562951693,26,91711,30,0.43605458349182197,42,18551,16,0.0882036896158235,19,92243,5,0.4385840623811335,6,7362,7,0.0350038037276531,11 -21,142107,38,14995774.850004949,12,14690635,30,9314422.330001315,38,103.3772790925148,2,0.38314877748757586,40,100545,13,0.7075302412970508,7,17691,26,0.12449070066921404,4,61875,41,0.4354113449724503,43,14162,26,0.09965730048484593,3,61019,16,0.42938771489089206,8,5869,12,0.04129986559423533,6 -22,178012,26,10068911.390002003,20,14869430,28,11160118.690000724,27,83.53049232636002,25,0.5257008279673271,34,73714,27,0.4140956789429926,22,9319,42,0.052350403343594816,50,109136,25,0.6130822641170258,32,7392,43,0.04152529042985866,50,39124,25,0.21978293598184392,22,1272,27,0.007145585690852302,24 -23,146006,37,5586622.5500002755,34,11946210,39,9583013.55000066,36,81.81999369888909,28,0.6317233641484695,23,83538,22,0.5721545689903155,15,14072,33,0.09637960083832171,34,97331,29,0.6666232894538581,24,12135,31,0.08311302275248962,28,20399,44,0.13971343643411915,43,415,43,0.002842348944563922,45 -24,210130,17,23099795.559994493,3,19847695,13,11417340.850001646,25,94.45436158568505,13,0.33077311844140095,50,138920,7,0.6611145481368677,8,18255,22,0.08687479179555513,39,88325,31,0.4203350306952839,48,15085,21,0.07178889259030125,38,97200,3,0.46257078951125497,2,9018,2,0.04291628991576643,4 -25,437064,4,10987440.640001288,19,32261020,5,29086249.159997117,4,73.81303424670071,44,0.7258190924060672,11,79287,23,0.18140821481522157,46,41119,6,0.09408004319733494,36,327143,4,0.7485013636446837,9,35677,5,0.08162877747881317,30,65814,14,0.15058206578441602,37,2443,19,0.005589570406164772,31 -26,224051,14,9882146.510002447,21,17981045,16,14649159.94000166,15,80.25425014840371,32,0.5971618335883292,27,73991,26,0.33024177531008564,34,16912,29,0.07548281418069994,45,148571,17,0.6631124163694873,25,13112,27,0.05852238999156442,44,48059,22,0.21450027002780617,24,1717,24,0.007663433771775176,22 -27,410439,6,19262541.780000508,7,33508485,3,26759502.969996195,6,81.6405970192891,29,0.5814496751580798,29,158291,3,0.3856626685085969,27,48868,3,0.11906275963054193,7,264505,7,0.6444441195890254,28,38162,4,0.09297849375912133,9,95398,4,0.232429179488304,21,6904,9,0.0168210135976357,19 -28,310576,9,28116296.229987916,1,29227215,7,18841919.140000775,9,94.10648279326155,15,0.4012486205351571,38,182640,1,0.5880686208850652,12,32860,10,0.10580341043738087,24,157536,13,0.5072381639276698,38,26373,10,0.08491641337386019,26,115714,2,0.3725786924939467,13,10864,1,0.03498016588532275,12 -29,171743,30,17331333.45000396,10,16820830,21,10729273.080001343,32,97.94186662629627,6,0.3823606973188015,41,113230,10,0.6592990689576868,9,18002,25,0.10481941039809482,27,78410,33,0.4565542700430294,39,14915,22,0.08684487868501191,21,75135,9,0.4374850794501086,7,7766,4,0.04521872798309101,1 -30,164963,33,6436175.20000067,31,13571685,35,11685772.220000897,23,82.27108503118882,26,0.6448408633557269,21,51215,36,0.31046355849493523,35,13380,35,0.08110909719149142,42,114947,24,0.6968047380321648,20,10037,36,0.06084394682443942,43,31267,32,0.18953947248776998,27,663,38,0.004019083067112019,36 -31,181986,24,7828466.840001335,27,14937895,27,12689902.170001246,19,82.08266020463113,27,0.6184654425415097,24,56196,35,0.3087929840756981,36,13606,34,0.07476399283461366,46,124965,21,0.6866737001747387,22,10261,35,0.05638345806820305,46,38438,27,0.21121404943237393,25,1240,28,0.006813710944797951,27 -32,219654,15,3752677.43999966,44,16665080,22,15583958.690001043,14,75.8696859606472,41,0.805929148442867,4,49655,40,0.22606007630182012,43,21226,17,0.09663379678949621,33,171993,12,0.7830178371438717,3,19465,13,0.08861664253780946,18,23967,39,0.10911251331639761,47,377,44,0.0017163356915876789,49 -33,181450,25,5204523.620000114,37,13985490,34,12661446.100000931,21,77.07627445577295,39,0.708690672738932,12,51208,37,0.28221548635987875,38,14595,32,0.08043538164783687,43,135389,20,0.7461504546707082,10,10426,34,0.0574593551942684,45,28592,35,0.1575750895563516,34,570,40,0.0031413612565445027,42 -34,115323,40,13764219.540004348,16,12050750,38,7084127.640000714,42,104.49563400189034,1,0.33979324973995345,49,92399,15,0.801219184377791,1,12793,36,0.11093190430356477,16,44740,46,0.38795383401403016,50,10690,33,0.0926961664195347,10,53987,20,0.46813731866149855,1,5046,15,0.043755365365104965,2 -35,208244,18,7173577.390000957,29,16320615,23,14387005.130001113,16,78.37255815293598,36,0.6672827655122061,20,50937,38,0.24460248554580205,42,16974,28,0.08151015155298592,41,150265,15,0.7215814141103706,14,12675,29,0.06086609938341561,42,38749,26,0.186074988955264,30,723,36,0.0034718887458942394,39 -36,108037,41,4862373.049999945,40,9252005,41,7574161.740000448,40,85.63737423290169,21,0.609025091626846,25,43223,42,0.4000758999231745,25,8500,44,0.0786767496320705,44,71358,39,0.6604959412053278,26,7944,41,0.07353036459731388,37,21961,42,0.20327295278469412,26,620,39,0.005738774679045142,29 -37,183307,23,19275808.350000348,6,18424855,15,11051857.320001507,29,100.51364650558898,4,0.36441503412289594,43,144034,5,0.7857528626839128,2,19394,21,0.10580065136628716,25,78222,34,0.42672674802380706,45,16729,18,0.09126219947956161,12,77605,7,0.42336081000725556,10,7415,6,0.0404512648180375,7 -38,69469,47,2470121.939999829,49,5857440,48,5036736.080000023,47,84.31732139515468,24,0.6709512910169736,18,27945,49,0.4022657588276785,24,7242,48,0.10424793792914826,29,49067,44,0.706315046999381,17,5635,48,0.08111531762368826,32,11650,49,0.16770070103211504,32,199,49,0.002864587082007802,44 -39,103665,42,3414796.9099997794,45,8459935,43,7036085.4600002775,43,81.60840206434187,30,0.673252765737544,17,34306,44,0.3309313654560363,33,10740,39,0.10360295181594559,31,71558,38,0.6902811942314185,21,7826,42,0.07549317513143299,35,15148,47,0.1461245357642406,40,314,48,0.00302898760430232,43 -40,207870,19,4554063.329999869,41,15469085,25,13789698.470001,17,74.41711165632367,43,0.7517377635158972,7,88597,18,0.42621349882137877,21,24733,14,0.11898301823254918,8,156192,14,0.7513926973589262,7,18961,14,0.0912156636359263,13,25987,37,0.12501563477173233,45,509,42,0.0024486457882330302,46 -41,46107,50,1434324.9199999727,50,3950795,50,3337325.0699999495,50,85.68753117747848,20,0.6994069298867422,13,18986,50,0.41178129134404756,23,6028,50,0.13073936712429782,1,33403,50,0.7244670006723491,13,4553,50,0.09874856312490511,4,6777,50,0.14698418895178605,38,167,50,0.003622009673151582,38 -42,1088623,1,27426712.51001126,2,84590300,1,73656207.00000462,1,77.70394342210297,37,0.7286711479747707,10,178778,2,0.1642239783653294,49,136808,1,0.12567068672993315,3,774611,1,0.7115511981650213,16,112267,1,0.10312752899764198,2,154892,1,0.14228249816511318,42,7496,5,0.0068857630235627946,26 -43,374662,7,5201360.370000152,38,27597355,8,25629328.369998213,7,73.65933828357292,45,0.8312927611230385,2,73588,28,0.1964116990781024,45,42207,5,0.1126535383892682,14,297527,6,0.7941211011525054,2,32104,6,0.08568790002722454,25,33182,31,0.08856516006427126,50,683,37,0.0018229764427670808,48 -44,499520,2,7544536.560000962,28,35690120,2,32453904.939996585,2,71.44883087764254,50,0.8113792368634807,3,76112,25,0.15237027546444587,50,54581,2,0.10926689622037156,19,382132,2,0.764998398462524,5,54015,2,0.10813380845611788,1,50010,21,0.10011611146700833,48,1079,32,0.002160073670723895,47 -45,102368,43,3185797.8899997803,47,8292415,44,7107147.750000214,41,81.00592958737106,31,0.6904872520049778,15,28881,47,0.28212918099406065,39,11568,37,0.11300406376992811,13,73178,36,0.7148522975929978,15,8865,37,0.08659932791497343,22,15769,45,0.15404227883713661,36,334,47,0.0032627383557361674,40 -46,237744,13,5639857.540000351,33,17738175,17,15808691.490001082,13,74.6104002624672,42,0.7370517916101679,8,69653,30,0.29297479641967833,37,26149,12,0.10998805437781815,18,176039,11,0.7404561208695067,11,21096,12,0.08873410054512416,16,34590,30,0.1454926307288512,41,1109,31,0.004664681337909684,32 -47,243828,12,3339098.219999718,46,17463555,18,16748067.730000993,11,71.62243466706039,49,0.8337695706646163,1,40609,43,0.1665477303673081,48,25372,13,0.10405695818363765,30,198879,9,0.8156528372459274,1,18572,15,0.07616844660990535,34,23965,40,0.09828649703889628,49,344,46,0.001410830585494693,50 -48,161512,35,3834153.679999649,43,11852865,40,10558535.63000061,34,73.38690004457874,46,0.7336040820852278,9,61338,33,0.3797736391104067,28,17186,27,0.10640695428203477,22,120951,23,0.7488669572539501,8,13112,27,0.08118282232899103,31,23698,41,0.1467259398682451,39,736,35,0.004556936945861608,33 -49,198181,21,6716489.270000929,30,15719280,24,13562476.610001242,18,79.3177953486964,33,0.6687952773457593,19,107872,12,0.544310504034191,17,19425,20,0.09801645970098041,32,138660,18,0.6996634389775004,19,14848,23,0.07492141022600551,36,36593,29,0.1846443402747993,31,1443,26,0.00728122272064426,23 -50,173308,28,5139240.400000104,39,13271730,36,11094340.210000781,28,76.57886537263138,40,0.6834191714405868,16,84736,20,0.488932997899693,20,22469,15,0.12964779467768367,2,121305,22,0.6999388372146699,18,16706,19,0.096394857709973,6,26914,36,0.15529577399773814,35,991,33,0.005718143420961525,30 +1,392017,5,7852556.210001444,24,28088460,6,26472369.239996877,5,71.65112737457814,48,0.771228746834705,6,64842,30,0.16540609208274132,47,34110,7,0.08701153266312431,39,307691,5,0.7848919817252823,3,25579,7,0.06524972131310632,41,51682,18,0.13183611935196687,44,1140,28,0.0029080371514500648,41 +2,429451,3,7821380.749999637,25,30891880,4,28344413.470000353,3,71.9334219736361,47,0.7837354074841706,5,81188,15,0.1890506716715062,45,44803,4,0.10432622115212213,28,327778,3,0.7632488921902615,6,38386,3,0.08938388780093655,15,51579,19,0.12010450551983812,46,1727,21,0.004021413385927614,36 +3,224935,11,10876544.880002815,17,17519490,15,14026336.94000151,15,77.88690066019072,35,0.5632415172421629,30,78779,19,0.3502300664636451,30,26971,10,0.11990575055015894,6,141542,15,0.629257341009625,31,21207,10,0.09428056994242781,7,56867,14,0.25281525774112523,18,3862,16,0.017169404494631783,17 +4,279552,9,10872491.72000157,18,21903170,9,18806158.289999947,8,78.35096869276556,34,0.633659492047731,22,69056,25,0.24702380952380953,41,31326,8,0.11205786401098901,13,187591,8,0.6710415235805861,23,24428,8,0.08738266941391941,20,61460,13,0.21985176282051283,22,3858,17,0.013800652472527472,20 +5,223596,13,12547344.440003814,14,18505295,10,14572482.890001884,12,82.76219163133509,25,0.5373368610602737,33,71531,24,0.3199118052201292,32,24771,12,0.11078462942091988,15,136307,17,0.6096128732177678,33,18803,12,0.08409363315980607,26,63688,11,0.284835149108213,16,5189,11,0.023207034115100448,15 +6,165361,27,17538998.540003713,6,15963080,18,9650379.360001344,33,96.53473309909833,10,0.3549319662808302,47,118216,7,0.7148964991745332,5,17333,21,0.10481915324653335,26,69239,35,0.41871420709840895,48,14125,21,0.08541917380760881,24,73948,7,0.44719129661770307,3,7130,5,0.04311778472553988,3 +7,128499,38,13613114.930004489,11,12490465,37,7430971.330000825,39,97.2028186989782,8,0.35311446827337556,48,73893,22,0.575047276632503,12,14392,30,0.11200087160211364,14,53416,42,0.41569195091012384,49,11514,31,0.08960381014638247,14,56527,15,0.4399022560486852,6,4976,14,0.038724036762932006,8 +8,135555,37,13210466.30000378,13,12994060,32,8302119.990000913,38,95.85821253365792,11,0.38591919530653057,39,77730,20,0.5734203828704216,13,15788,28,0.11646932979233521,9,60966,40,0.4497510235697687,40,12795,26,0.09438973110545534,6,56215,16,0.41470251927262,12,5173,12,0.038161631809966436,9 +9,75599,45,7691159.200001285,26,7398930,45,4645280.149999927,47,97.87073903093956,7,0.37654950656402086,42,46581,36,0.6161589439013744,10,8535,42,0.11289831876083017,10,33052,47,0.4372015502850567,43,6941,42,0.09181338377491766,11,31407,30,0.41544200320110053,11,2741,18,0.03625709334779561,10 +10,81184,44,5960095.900000429,32,7447360,44,5315883.480000094,45,91.73433188805676,15,0.4714343030307889,36,43404,39,0.5346373669688609,17,7667,45,0.09443979109184075,35,45461,45,0.5599748718959401,36,6326,44,0.07792175798186834,33,23370,38,0.28786460386283014,15,1657,22,0.02041042569964525,16 +11,170784,23,5024494.230000011,35,13124920,30,11674080.060000861,20,76.85099306726626,38,0.6991063941902702,14,45120,37,0.2641933670601461,39,18404,20,0.10776185122728124,19,125738,20,0.7362399287989507,13,13693,22,0.08017729998126288,32,27952,33,0.1636687277496721,32,1023,32,0.005990022484541877,28 +12,151827,32,8099302.100001263,22,12857935,33,10351194.52000072,29,84.68806602251246,22,0.5610252522297478,31,54786,33,0.36084490900827915,29,10457,38,0.068874442622195,47,98681,26,0.6499568587932317,28,8160,39,0.05374538125629829,47,36477,25,0.24025370981445987,20,1035,31,0.006816969313758422,25 +13,74151,46,3558137.969999777,43,6645180,46,5389755.720000103,44,89.61686288789093,17,0.602349100998335,26,25858,47,0.3487208533937506,31,6924,46,0.09337702795646721,36,47836,43,0.6451160469852059,29,5246,46,0.07074752869145393,39,14061,47,0.18962657280414288,28,333,45,0.004490836266537201,34 +14,147399,35,7889820.780001049,23,13082330,31,9820229.880000649,32,88.75453700500003,18,0.5545003833433251,32,57249,32,0.3883947652290721,24,8045,43,0.0545797461312492,49,88382,29,0.599610580804483,34,6265,45,0.04250368048629909,49,27437,34,0.18614101859578422,29,432,42,0.0029308204261901368,40 +15,163747,28,11047099.160002287,16,14513840,26,10394954.780000824,27,88.63576126585525,19,0.48479286588341247,35,86244,13,0.5266905653233341,18,10117,40,0.0617843380336739,48,94673,28,0.5781663175508559,35,8395,38,0.051268114835691644,48,43556,23,0.26599571289855695,17,1892,20,0.01155441015713265,21 +16,151480,33,16332753.830004834,10,14964825,24,9123910.350000996,35,98.7907644573541,5,0.35840950273316236,45,112344,8,0.7416424610509639,3,13389,33,0.08838790599419065,38,66277,38,0.43752970689199894,42,10738,32,0.07088724584103512,38,65120,10,0.4298917348824927,9,4989,13,0.032935040929495646,13 +17,149287,34,16433048.490005085,9,15068020,22,9081261.890001256,36,100.93323598169968,4,0.355928173434684,46,106045,10,0.710343164508631,6,16055,25,0.10754452832463644,20,62704,39,0.42002317683388374,47,13016,24,0.0871877658469927,21,65868,9,0.4412172526743789,5,6297,8,0.042180497967003155,5 +18,58355,48,4567679.859999827,39,5658255,47,4039402.039999828,48,96.96264244709108,9,0.46931144456752405,37,27237,46,0.46674663696341356,20,6271,48,0.10746294233570389,21,30849,49,0.5286436466455317,37,4878,48,0.08359180875674749,28,18113,44,0.31039328249507325,14,1500,24,0.025704738240082254,14 +19,45910,49,2458806.1399998455,48,4208715,49,3531194.789999897,49,91.673164887824,16,0.5895148984559588,29,24569,49,0.5351557394903071,16,5679,49,0.12369854062295796,5,29479,50,0.6421041167501633,30,4251,49,0.09259420605532563,9,11358,48,0.24739708124591592,19,774,34,0.016859072097582226,18 +20,190442,20,19413163.16000073,4,17927000,12,10870812.360001639,23,94.13364698963464,13,0.3589625263308491,44,138066,5,0.7249766333056784,4,19884,16,0.10440974154860798,27,83461,30,0.4382489156803646,41,16662,16,0.08749120467123848,19,83353,5,0.43768181388559246,7,6695,7,0.03515506033332983,12 +21,128302,39,13575584.57000431,12,13256395,29,8391212.800001075,37,103.32181103957849,2,0.38199527489878327,40,88787,12,0.6920157129273121,7,15898,27,0.12391077301990616,4,55694,41,0.43408520521893657,44,12735,27,0.0992580006547053,3,55242,17,0.43056226715094076,8,5285,10,0.04119187541893345,6 +22,165670,26,9284544.030001683,20,13748420,28,10302452.9800006,30,82.98678095008148,24,0.5259843035019383,34,67623,27,0.4081789098810889,21,8671,41,0.052338987143115835,50,101787,25,0.6143960886098871,32,6874,43,0.04149212289491157,50,36207,26,0.2185489225568902,23,1186,26,0.007158809681897749,24 +23,142160,36,5394605.290000218,34,11611225,39,9319446.450000618,34,81.67715953854811,28,0.6333705096785318,23,81954,14,0.5764912774338773,11,13785,31,0.09696820483961734,33,94902,27,0.6675717501406866,24,11896,29,0.08368036015756894,27,19653,43,0.13824563871693865,42,391,43,0.002750422059651097,42 +24,192627,18,20880807.45999817,3,18026910,11,10459991.790001398,26,93.58454422277251,14,0.3337500012863119,50,124534,6,0.6465033458445597,9,16517,24,0.08574602729627726,40,81876,31,0.4250494478967123,45,13543,23,0.07030686248552903,40,88491,3,0.45939042813312775,2,8224,2,0.04269391103012558,4 +25,421350,4,10536889.54000109,19,30985550,3,27980878.519997433,4,73.53874451168862,44,0.7264408071727327,11,71578,23,0.16987777382223804,46,39196,6,0.0930248012341284,37,316003,4,0.7499774534235196,9,34163,5,0.08107986234721727,30,63372,12,0.15040227839088643,36,2324,19,0.00551560460424825,30 +26,214825,14,9272606.180002214,21,17154565,16,14044829.47000155,14,79.85367159315722,32,0.6023316491922766,27,66631,28,0.3101640870475969,34,16044,26,0.07468404515303154,46,143346,14,0.667268707087164,25,12376,28,0.05760968229954614,44,45395,22,0.21131153264284883,25,1612,23,0.007503782148260212,22 +27,381512,6,17071861.470004197,7,30875575,5,24937916.909996968,6,80.92949894105558,30,0.5936217202676011,28,138475,4,0.3629636813520938,28,45637,3,0.11962140116169347,7,248863,7,0.6523071358174841,27,35553,4,0.09318972928767641,8,85863,4,0.2250597622093145,21,6005,9,0.015740002935687475,19 +28,289342,8,26312556.389990676,1,27238870,7,17565643.02000129,9,94.14074002391634,12,0.4003273437879776,38,165802,1,0.573031222567066,14,30446,9,0.1052249586993938,25,147309,13,0.5091172384237338,38,24335,9,0.08410462359422413,25,108083,2,0.3735475665475458,13,10178,1,0.03517636568489884,11 +29,161538,29,16469291.520004643,8,15892580,19,10117301.710001197,31,98.38291918929292,6,0.38054148654829273,41,107975,9,0.6684185764340279,8,17019,22,0.10535601530290087,24,73224,33,0.45329272369349627,39,14136,20,0.08750882145377559,18,71392,8,0.4419517389097302,4,7338,3,0.04542584407384021,1 +30,154452,31,5971485.380000517,31,12682370,36,10988606.870000785,22,82.11204775593713,26,0.6479096167652001,21,46718,35,0.30247585010229716,36,12636,35,0.08181182503301997,41,108417,24,0.70194623572372,19,9421,35,0.06099629658405201,42,29419,32,0.19047341568901666,27,636,36,0.004117784165954472,35 +31,173186,22,7395706.8600011645,28,14183280,27,12111903.780001158,19,81.89622717771644,27,0.6208809476217697,24,52717,34,0.30439527444481657,35,12947,34,0.07475777487787696,45,119451,21,0.689726652269814,22,9705,33,0.05603801692977493,46,36662,24,0.21169147621632234,24,1167,27,0.006738419964662271,27 +32,205598,15,3448423.699999698,44,15481995,20,14479241.700000934,13,75.302264613469,41,0.8076479216306895,4,44216,38,0.21506045778655433,43,19739,17,0.09600774326598507,34,161115,11,0.7836408914483604,4,18368,13,0.0893393904609967,16,22217,41,0.10806038969250674,47,349,44,0.0016974873296432844,49 +33,167208,25,4659510.829999893,38,12729825,35,11622206.97000081,21,76.13167432180279,40,0.7138194576741963,13,41859,41,0.25034089278024974,40,13522,32,0.08086933639538778,43,125813,19,0.7524340940624851,8,9620,34,0.05753313238601024,45,26391,35,0.1578333572556337,34,525,40,0.0031398019233529494,39 +34,100543,41,12034708.85000352,15,10525155,40,6200965.120000455,43,104.6831206548442,1,0.34004584257211873,49,79579,18,0.7914921973682901,2,11091,36,0.1103110112091344,16,39072,46,0.3886098485225227,50,9253,36,0.09203027560347314,10,47225,21,0.46969953154371763,1,4497,15,0.04472713167500472,2 +35,193693,17,6440588.300000618,29,15035270,23,13301917.150000976,16,77.62423009607988,36,0.6737704686818209,19,42027,40,0.21697738173294853,42,15769,29,0.08141233808139685,42,140617,16,0.725978739551765,14,11794,30,0.06089017156014931,43,35145,27,0.18144692890295466,31,618,38,0.0031906160780203726,38 +36,100661,40,4444009.849999788,40,8597205,41,7099467.3800003575,40,85.40750638280963,21,0.6150198279552779,25,38713,42,0.38458787415185625,26,7947,44,0.07894815271058304,44,67069,37,0.6662858505280098,26,7478,40,0.07428895004023406,37,20399,42,0.2026504803250514,26,577,39,0.005732110747956011,29 +37,176846,21,18850380.270001225,5,17867405,13,10647711.960001398,25,101.03369598407654,3,0.3609627319956498,43,140612,3,0.7951098696040623,1,18691,18,0.10569082704726146,23,74482,32,0.42116870045124005,46,16146,18,0.09129977494543275,12,75744,6,0.4283048528097893,10,7267,4,0.04109224975402327,7 +38,64677,47,2249549.0199998566,49,5456465,48,4698183.159999966,46,84.36484376207926,23,0.6762182303924221,17,25808,48,0.3990290211357979,23,6724,47,0.10396276883590766,29,45897,44,0.7096340275522983,17,5218,47,0.08067782983131562,31,10505,49,0.16242249949750298,33,154,49,0.0023810628198586824,45 +39,98536,42,3225423.899999801,45,8044680,42,6703789.320000243,42,81.64203945766015,29,0.6751581592081285,18,31341,44,0.3180664934643176,33,10203,39,0.10354591215393359,30,68134,36,0.6914630185921896,21,7413,41,0.07523138751319315,34,14316,46,0.14528700170496062,39,269,48,0.0027299667126735407,43 +40,197675,16,4239751.1399997,41,14662055,25,13103110.110000929,17,74.17253066902744,43,0.7555333529523828,7,80332,16,0.40638421651701023,22,23528,13,0.11902364993044139,8,149149,12,0.7545162514227899,7,18019,14,0.09115467307449096,13,24397,37,0.12341975464778045,45,440,41,0.0022258758062476285,46 +41,42618,50,1194861.4200000016,50,3642680,50,3115088.789999955,50,85.47280491810972,20,0.7227667695028863,12,16532,50,0.38791121122530386,25,5554,50,0.13032052184522971,1,31488,48,0.7388427425031677,12,4178,50,0.09803369468299779,4,5709,50,0.133957482753766,43,114,50,0.002674926087568633,44 +42,1033954,1,25657540.700009387,2,80070795,1,69787622.97001055,1,77.44135135605646,37,0.7311802954341978,10,157931,2,0.15274470624418496,49,129951,1,0.12568354104728063,3,737447,1,0.7132299889550212,16,106752,1,0.10324637266261362,2,145505,1,0.14072676347303653,41,7009,6,0.006778831553434679,26 +43,351072,7,4823992.639999994,36,25723215,8,23897013.86999873,7,73.27048297785069,46,0.8320395687274886,1,66569,29,0.1896163749886063,44,39471,5,0.1124299289034728,12,278951,6,0.7945692051772856,2,30059,6,0.08562061343542066,23,30914,31,0.08805601130252484,50,631,37,0.0017973521101084678,48 +44,497649,2,7504825.710000948,27,35556755,2,32337824.369996633,2,71.44946538624613,50,0.8116383901439167,3,75455,21,0.15162293102166385,50,54388,2,0.10928988102055867,18,380749,2,0.7650954789419853,5,53852,2,0.10821281666395391,1,49766,20,0.10000221039326915,48,1067,30,0.002144081471077004,47 +45,98137,43,3043217.969999802,47,7930535,43,6802776.650000169,41,80.81085625197429,31,0.690918176634164,16,27460,45,0.279812914598979,38,11038,37,0.11247541701906519,11,70192,34,0.7152450146224156,15,8446,37,0.08606336040433271,22,15098,45,0.15384615384615385,35,320,47,0.0032607477302138846,37 +46,236001,10,5585712.190000336,33,17614295,14,15701913.360001069,10,74.6365269638688,42,0.7376075515383176,8,68020,26,0.2882191177156029,37,25993,11,0.11013936381625501,17,174897,10,0.7410858428565981,11,20883,11,0.0884869131910458,17,34241,29,0.14508836826962598,40,1083,29,0.004588963606086415,32 +47,224276,12,3113597.839999752,46,16057985,17,15411250.400000874,11,71.59921257736003,49,0.831923166135495,2,36525,43,0.16285737216643778,48,22983,14,0.10247641299113593,31,182915,9,0.8155799104674597,1,16796,15,0.07488986784140969,35,22342,40,0.09961832741800282,49,325,46,0.0014491073498724785,50 +48,158751,30,3769018.519999662,42,11653700,38,10377383.60000059,28,73.40867144143974,45,0.7335705228772618,9,60149,31,0.37888895188061805,27,16887,23,0.10637413307632708,22,118904,22,0.7489968567127137,10,12901,25,0.08126562982280426,29,23282,39,0.14665734389074714,38,724,35,0.004560601193063351,33 +49,190501,19,6421946.380000775,30,15084645,21,13033118.91000116,18,79.18407252455367,33,0.6699087726371677,20,102491,11,0.5380076745003963,15,18577,19,0.09751654846956184,32,133530,18,0.7009412024083863,20,14206,19,0.07457178702474003,36,35024,28,0.18385205327006157,30,1380,25,0.00724405646164587,23 +50,167275,24,4730898.449999923,37,12738160,34,10702784.440000733,24,76.15100881781497,39,0.6934692462118015,15,79719,17,0.47657450306381705,19,21755,15,0.13005529816170977,2,117988,23,0.7053534598714691,18,16152,17,0.09655955761470632,5,25058,36,0.1498012255268271,37,863,33,0.005159169033029443,31 diff --git a/bulletproof/df_top_five_2013to2017 b/bulletproof/df_top_five_2013to2017 new file mode 100644 index 0000000..4c7628b --- /dev/null +++ b/bulletproof/df_top_five_2013to2017 @@ -0,0 +1,26 @@ +year,violation_code,ticket_number +2013,0976160F,323546.0 +2013,0964190A,303393.0 +2013,0964040B,261093.0 +2013,0964125B,213035.0 +2013,0964090E,157206.0 +2014,0976160F,342791.0 +2014,0964040B,257843.0 +2014,0964190A,229266.0 +2014,0964125B,167291.0 +2014,0964090E,154903.0 +2015,0976160F,346484.0 +2015,0964040B,267757.0 +2015,0964190A,259497.0 +2015,0964125B,211901.0 +2015,0964090E,164644.0 +2016,0976160F,361840.0 +2016,0964040B,247091.0 +2016,0964190A,234304.0 +2016,0964125B,191094.0 +2016,0964090E,165376.0 +2017,0964190A,231512.0 +2017,0964040B,226982.0 +2017,0964125B,192657.0 +2017,0964090E,180275.0 +2017,0976160F,161779.0 diff --git a/bulletproof/df_top_level_summaries b/bulletproof/df_top_level_summaries new file mode 100644 index 0000000..77a3473 --- /dev/null +++ b/bulletproof/df_top_level_summaries @@ -0,0 +1,11 @@ +ticket_count,49677922.0 +current_amount_due,1628078760.5799956 +fine_level1_amount,3051105460.0 +total_payments,2571050742.210005 +avg_per_ticket,61.41773522652578 +police_ticket_count,25153993.0 +contested_ticket_count,3916013.0 +paid_ticket_count,30779504.0 +dismissed_ticket_count,3916508.0 +seized_or_suspended_ticket_count,13984017.0 +bankruptcy_ticket_count,448412.0 diff --git a/bulletproof/wardstotals5yr_sql_minus_pandas.csv b/bulletproof/wardstotals5yr_sql_minus_pandas.csv index 08760f7..ffc19d7 100644 --- a/bulletproof/wardstotals5yr_sql_minus_pandas.csv +++ b/bulletproof/wardstotals5yr_sql_minus_pandas.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,0,0,-1.8030405044555664e-06,0,0,0,3.647059202194214e-06,0,-1.4210854715202004e-14,0,6.117328865684613e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 -2,0,0,4.1909515857696533e-07,0,0,0,-1.2665987014770508e-07,0,-2.842170943040401e-14,0,-9.547918011776346e-15,0,0,0,-2.7755575615628914e-17,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -3,0,0,-4.082918167114258e-06,0,0,0,-1.0281801223754883e-06,0,1.4210854715202004e-14,0,5.861977570020827e-14,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 -4,0,0,-1.6596168279647827e-06,0,0,0,8.493661880493164e-07,0,4.263256414560601e-14,0,4.085620730620576e-14,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-1.734723475976807e-18,0 -5,0,0,-4.494562745094299e-06,0,0,0,-2.1941959857940674e-06,0,5.684341886080802e-14,0,4.318767565791859e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -6,0,0,1.996755599975586e-06,0,0,0,-1.819804310798645e-06,0,-4.263256414560601e-14,0,-5.645484080218921e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -7,0,0,-4.813075065612793e-06,0,0,0,-9.145587682723999e-07,0,2.842170943040401e-14,0,4.907185768843192e-14,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-5.551115123125783e-17,0,0,-1,0.0,0,0,0,0.0,0,0,0,6.938893903907228e-18,0 -8,0,0,-4.524365067481995e-06,0,0,0,-1.210719347000122e-06,0,4.263256414560601e-14,0,4.091171845743702e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -9,0,0,-2.1457672119140625e-06,0,0,0,-2.039596438407898e-07,0,-1.4210854715202004e-14,0,4.490852134608758e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -10,0,0,-5.979090929031372e-07,0,0,0,-1.51805579662323e-07,0,0.0,0,1.659783421814609e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,-1,0.0,0,0,0,0.0,0,0,0,-3.469446951953614e-18,0 -11,0,0,-2.8312206268310547e-07,0,0,0,-9.98377799987793e-07,0,-4.263256414560601e-14,0,-5.218048215738236e-15,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 -12,0,0,-1.5385448932647705e-06,0,0,0,-8.568167686462402e-07,0,2.842170943040401e-14,0,2.398081733190338e-14,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,-1,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -13,0,0,2.60770320892334e-07,0,0,0,-1.695007085800171e-07,0,0.0,0,-2.2315482794965646e-14,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,-1,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,8.673617379884035e-19,0 -14,0,0,-1.2945383787155151e-06,0,0,0,-7.636845111846924e-07,0,1.4210854715202004e-14,0,2.0095036745715333e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,-1,0.0,0,0,0,2.7755575615628914e-17,0,0,0,-4.336808689942018e-19,0 -15,0,0,-2.3562461137771606e-06,0,0,0,-9.275972843170166e-07,0,1.4210854715202004e-14,0,3.2029934260435766e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -16,0,0,-1.2814998626708984e-06,0,0,0,-1.3671815395355225e-06,0,2.842170943040401e-14,0,-1.2656542480726785e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,-1,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -17,0,0,-2.0563602447509766e-06,0,0,0,-1.5906989574432373e-06,0,-1.7053025658242404e-13,0,-9.71445146547012e-15,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.6653345369377348e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -18,0,0,-2.1047890186309814e-07,0,0,0,7.35744833946228e-08,0,4.263256414560601e-14,0,1.3211653993039363e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,-1,0.0,0,0,0,0.0,0,0,0,0.0,0 -19,0,0,2.1653249859809875e-07,0,0,0,1.210719347000122e-07,0,-4.263256414560601e-14,0,-1.0769163338864018e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,-1,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,3.469446951953614e-18,0 -20,0,0,2.473592758178711e-06,0,0,0,-1.9632279872894287e-06,0,-1.4210854715202004e-14,0,-6.322720125240266e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -21,0,0,-4.949048161506653e-06,0,0,0,-1.2945383787155151e-06,0,1.9895196601282805e-13,0,4.5130565951012613e-14,0,0,0,-1.1102230246251565e-16,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -22,0,0,-2.002343535423279e-06,0,0,0,-7.245689630508423e-07,0,-2.842170943040401e-14,0,3.3861802251067274e-14,0,0,0,5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,-1,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -23,0,0,-2.7567148208618164e-07,0,0,0,-6.407499313354492e-07,0,0.0,0,-4.551914400963142e-15,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,-1,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -24,0,0,5.505979061126709e-06,0,0,0,-1.646578311920166e-06,0,-4.263256414560601e-14,0,-8.493206138382448e-14,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -25,0,0,-1.2870877981185913e-06,0,0,0,2.779066562652588e-06,0,0.0,0,4.2743586448068527e-14,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -26,0,0,-2.427026629447937e-06,0,0,0,-1.6596168279647827e-06,0,-1.4210854715202004e-14,0,3.2862601528904634e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 -27,0,0,-4.0605664253234863e-07,0,0,0,3.8035213947296143e-06,0,-1.4210854715202004e-14,0,4.030109579389318e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 -28,0,0,1.208484172821045e-05,0,0,0,-7.748603820800781e-07,0,-4.263256414560601e-14,0,-1.1307621505807219e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0 -29,0,0,-3.859400749206543e-06,0,0,0,-1.34296715259552e-06,0,1.4210854715202004e-14,0,2.4480417692984702e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0 -30,0,0,-6.69620931148529e-07,0,0,0,-8.959323167800903e-07,0,-2.842170943040401e-14,0,6.106226635438361e-15,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,-1,-6.938893903907228e-18,0,0,0,2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 -31,0,0,-1.325272023677826e-06,0,0,0,-1.2461096048355103e-06,0,-2.842170943040401e-14,0,1.7319479184152442e-14,0,0,0,5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,-1,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,8.673617379884035e-19,0 -32,0,0,3.3015385270118713e-07,0,0,0,-1.043081283569336e-06,0,0.0,0,-2.4091839634365897e-14,0,0,0,2.7755575615628914e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-2.168404344971009e-19,0 -33,0,0,-1.1362135410308838e-07,0,0,0,-9.313225746154785e-07,0,-4.263256414560601e-14,0,-1.0103029524088925e-14,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-6.938893903907228e-18,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 -34,0,0,-4.349276423454285e-06,0,0,0,-6.938353180885315e-07,0,-3.268496584496461e-13,0,4.85722573273506e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,6.938893903907228e-18,0 -35,0,0,-9.266659617424011e-07,0,0,0,-1.1119991540908813e-06,0,1.4210854715202004e-14,0,1.1879386363489175e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -36,0,0,5.494803190231323e-08,0,0,0,-4.4796615839004517e-07,0,1.4210854715202004e-14,0,-1.709743457922741e-14,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,-1,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -37,0,0,-3.46451997756958e-07,0,0,0,-1.5068799257278442e-06,0,2.842170943040401e-14,0,-2.7033930649622562e-14,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -38,0,0,1.708976924419403e-07,0,0,0,-2.3283064365386963e-08,0,2.842170943040401e-14,0,-1.6542323066914832e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -39,0,0,2.207234501838684e-07,0,0,0,-2.6728957891464233e-07,0,2.842170943040401e-14,0,-2.2093438190040615e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,-1,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -40,0,0,1.3131648302078247e-07,0,0,0,-1.000240445137024e-06,0,2.842170943040401e-14,0,-1.8096635301390052e-14,0,0,0,-5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 -41,0,0,2.7241185307502747e-08,0,0,0,5.029141902923584e-08,0,2.842170943040401e-14,0,-1.3322676295501878e-15,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,-1,1.3877787807814457e-17,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 -42,0,0,-1.1257827281951904e-05,0,0,0,-4.9173831939697266e-06,0,4.263256414560601e-14,0,6.827871601444713e-14,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-1.734723475976807e-18,0 -43,0,0,-1.51805579662323e-07,0,0,0,1.687556505203247e-06,0,-1.4210854715202004e-14,0,1.3433698597964394e-14,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -44,0,0,-9.415671229362488e-07,0,0,0,3.3117830753326416e-06,0,-4.263256414560601e-14,0,3.530509218307998e-14,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 -45,0,0,2.0954757928848267e-07,0,0,0,-2.039596438407898e-07,0,2.842170943040401e-14,0,-1.9872992140790302e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,-1,0.0,0,0,0,-2.7755575615628914e-17,0,0,0,4.336808689942018e-19,0 -46,0,0,-3.511086106300354e-07,0,0,0,-1.082196831703186e-06,0,1.4210854715202004e-14,0,-8.881784197001252e-16,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 -47,0,0,2.8219074010849e-07,0,0,0,-9.927898645401e-07,0,1.4210854715202004e-14,0,-1.9317880628477724e-14,0,0,0,-2.7755575615628914e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.168404344971009e-19,0 -48,0,0,3.4086406230926514e-07,0,0,0,-6.09084963798523e-07,0,-2.842170943040401e-14,0,-2.8754776337791554e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -49,0,0,-9.08970832824707e-07,0,0,0,-1.2423843145370483e-06,0,1.4210854715202004e-14,0,1.0769163338864018e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 -50,0,0,-1.0337680578231812e-07,0,0,0,-7.80448317527771e-07,0,2.842170943040401e-14,0,-1.0769163338864018e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 +1,21641,0,823234.7499985565,1,1716865,0,1465838.530003123,0,0.40193336642045097,0,-0.008181586211175929,0,7331,-1,0.009068957354233187,0,1766,0,-0.0002828824254883927,1,15445,0,-0.003724930683117078,1,1299,2,-0.00027333985789453064,0,4036,0,0.002859692163826366,0,431,-3,0.0008897861711981135,-4 +2,24598,0,643849.4900003839,1,2062275,0,1880564.5999996476,0,0.644989167011687,0,-0.002530565477984692,0,17310,-1,0.027881862041815475,-1,2578,0,2.5952291713246534e-05,0,18120,0,-0.0014412458789604399,0,2033,0,-0.00036486122010495614,0,3473,0,0.0011423202632822038,0,98,1,-2.0234081939338178e-06,-1 +3,63877,-1,2966130.089997286,-2,5231255,-5,4210526.509998489,-5,0.8866440678676923,0,0.005247443267012208,0,30286,-8,0.027403134372885163,-1,8559,-1,0.0031154535549336587,0,40086,-5,-0.0003776545700034939,0,6635,-3,0.0021212416166486586,-2,15041,-2,-0.0038366834436583397,1,1034,0,-0.00021720029259031728,1 +4,32280,-1,1097801.8999984283,-1,2672785,0,2327668.1900000535,0,0.4605548198951368,0,0.004745226644670919,0,15413,-4,0.02385602320663499,0,4210,0,0.001900934316315439,-2,21995,0,0.0010703828305582697,0,3226,0,0.0012996980146959825,-3,6065,0,-0.0033088807558113442,1,319,0,-0.00040561924950995205,0 +5,25376,-2,2180211.9499961864,-1,2802915,1,2048166.739998117,0,2.8225729205021253,-3,-0.0071422585558716944,0,15929,-5,0.03137267656898768,-1,3472,-1,0.0026538295222544445,-3,13671,-1,-0.007223849552456141,0,2751,-1,0.0024783508383945385,-3,8674,0,0.005807975419846401,-1,777,-1,0.0007554998244590216,0 +6,33578,-7,3353563.6399962865,-1,3216685,-4,2010595.1499986555,-9,-0.12445155550963705,1,0.003277177660882813,0,22863,-1,-0.005739420874149692,1,3770,-3,0.0012585891770236224,-3,14675,-3,0.0030934826959502226,-1,3050,-4,0.0009138227390713127,0,14311,-1,-0.003542741030311991,0,1445,-2,-1.4119783019808652e-05,0 +7,5698,1,654250.3699955121,3,590440,0,346836.92999919504,0,0.27257195804098444,0,-0.0003021740616175328,0,4854,2,0.01175421669447152,1,678,1,0.0002967207434678293,1,2265,0,-0.0007720942814362086,0,603,0,0.0006888193460801023,0,2625,2,0.0008825603033941753,-2,268,0,0.00035284275002283455,0 +8,17074,-1,1837713.4199963212,-2,1823035,-3,1116333.7199990973,-1,1.2209467348952785,-1,-0.000968248256682569,0,14376,-3,0.030042917026714466,-2,2244,-4,0.0016733560668396458,0,7114,0,-0.0037021075708431606,0,1841,-1,0.0015029236325040246,1,7218,-1,0.0009000202185645567,0,740,-1,0.0005793676069202613,0 +9,16001,-1,1672884.1699987454,-4,1565120,-3,934234.3400000827,-1,-0.009931170677560885,0,-0.0031769441346348737,0,11179,-2,0.01440874168814521,0,1958,-1,0.0016540829858947004,0,6594,0,-0.00438495639859382,1,1617,-3,0.0016145638233356352,-3,6784,-2,0.0014903112093798132,0,624,0,0.0004787145124664008,0 +10,4894,1,337408.4299995713,0,444560,1,300667.3099999167,0,-0.05097493273716225,1,-1.2043067297906607e-05,0,3542,2,0.010751698762220263,-1,516,0,0.0006251500080918793,0,2678,0,-0.0007262834064306611,0,529,0,0.001715315370207679,0,1285,0,-0.001438339312073822,1,111,1,0.00012908497671804478,0 +11,14639,-1,498226.4599999897,0,1205470,2,1012871.8499991391,0,0.43386371964794535,0,-0.002391401631864243,0,5530,2,0.00896584188372812,1,2063,-1,0.0026181987125859646,-2,10175,-1,-0.0032510331387575198,-1,1580,-2,0.0021911224905987597,-3,2544,1,0.0007984634833464732,1,94,-2,3.404141260141078e-05,0 +12,13438,0,810371.8899987666,1,1163195,0,935493.87999928,-3,0.1522207895772425,1,-0.00217766462711777,0,7390,-1,0.01537510127823044,1,858,0,-0.00040864526643304144,0,8541,0,-0.0011685491087854993,-1,633,-2,-0.0005399233553513363,0,3678,-1,0.0027196965329215894,0,124,-2,0.00019600984093252893,0 +13,8204,0,406588.65000022296,-1,741825,0,592785.9999999069,0,0.08024111308047566,0,-0.0009235120310621125,0,2904,1,0.0005232726459555304,1,742,0,-0.0002922122197177579,1,5214,0,-0.0009535796183185452,0,556,-1,-0.0002964328259934118,1,1534,-1,-0.00026344973936240357,0,32,0,-5.8804210195751404e-05,0 +14,15593,-1,801903.409998971,1,1355640,0,1074505.0499993507,-1,-0.17368641110583383,1,0.001737722955083898,0,6742,-1,0.004207325671094775,2,945,0,0.0005763351488136254,0,9745,-1,0.0024251019284117215,0,755,-2,0.0005659180216031345,0,3166,-1,0.0016166627628100838,0,91,-1,0.00027792601535300615,1 +15,8353,1,453159.08999781124,2,762940,0,620588.3699991759,3,0.13111845523715715,-1,0.004443246760572506,0,6153,3,0.010189155769053992,0,441,0,-0.00043628457638162504,0,5357,-1,0.0030655244014974325,0,364,0,-0.0003732862476614404,0,1907,0,-0.001829530446494143,0,71,0,-0.00014825094737088394,0 +16,25101,-6,2500781.389995165,-2,2477245,-5,1591215.2999990042,-2,-0.014169013903185146,0,0.004216935640524666,-1,21651,0,0.017187764171455178,0,2277,-3,0.00033058580277503524,0,11767,-3,0.004443098789246536,-1,1824,-3,0.0002529108009592246,1,10288,-2,-0.0028469225867191472,0,699,0,-0.0007231948078857339,0 +17,20683,-3,2105486.669994915,0,2027240,-2,1271921.8799987435,-1,-0.35513396369667305,-1,0.002416160285442004,0,16578,-1,0.01109591297563095,-1,2082,-2,-0.0008374623718212237,1,9382,-2,0.004086960249130744,-1,1746,0,-0.0003371451492225064,-1,8741,1,-0.002263319627370586,0,795,0,-0.0004554876710685801,0 +18,9145,0,798978.4300001729,-3,897370,0,617191.8900001715,0,0.1577279232793245,0,-0.00473230121239504,0,6067,-1,0.02664595562917904,-1,1000,-1,0.0002555761828146458,-1,4343,-1,-0.007280683682568734,0,821,-2,0.0008378208728821446,-1,3294,-1,0.00674745824566747,0,357,-3,0.0018063728710288572,0 +19,8126,0,582591.4400001545,0,887020,0,725221.3900001026,0,2.6294296787611984,-2,-0.0062695156634008375,-1,6856,-3,0.046401000460836506,-2,987,0,-0.0003363376471640367,0,4866,-1,-0.00650932809075111,0,721,-1,-0.0005814738027532657,2,2150,0,0.0025844125730195844,-1,148,0,0.00020362684386421998,-1 +20,19878,-4,2104634.56999927,0,1977355,0,1208108.2299983613,-1,0.5047849236403579,-1,0.0005642725353808831,1,16056,-1,0.007821008383176564,0,2233,0,0.0007490640809089399,-1,8250,0,-0.0021943321885425915,1,1889,0,0.0007124849445850207,0,8890,0,0.000902248495541047,-1,667,0,-0.00015125660567673338,-1 +21,13805,-1,1420190.2799956892,0,1434240,1,923209.5299989451,1,0.055468052936504364,0,0.0011535025888377293,0,11758,1,0.015514528369738545,0,1793,-1,0.000579927649307907,0,6181,0,0.0013261397535137553,-1,1427,-1,0.00039929983014062864,0,5777,-1,-0.0011745522600486447,0,584,2,0.00010799017530187943,0 +22,12342,0,784367.3599983174,0,1121010,0,857665.7099993993,-3,0.5437113762785089,1,-0.00028347553457730434,0,6091,0,0.005916769061903748,1,648,1,1.1416200478973904e-05,0,7349,0,-0.0013138244928613263,0,518,-1,3.316753494708724e-05,0,2917,-1,0.0012340134249536894,-1,86,1,-1.3223991045446803e-05,0 +23,3846,1,192017.25999978185,0,334985,0,263567.0999994017,2,0.14283416034098195,0,-0.0016471455300668403,0,1584,8,-0.004336708443561932,4,287,2,-0.000588604001295609,1,2429,2,-0.0009484606868286338,0,239,1,-0.0005673374050793323,1,746,1,0.0014677977171805023,1,24,0,9.192688491282486e-05,3 +24,17503,-1,2218988.100001827,0,1820785,2,957349.0599986017,-1,0.8698173629124994,-1,-0.002976882844995865,0,14386,1,0.014611202292308056,-1,1738,-2,0.0011287644992778872,-1,6449,0,-0.0047144172014284,3,1542,-2,0.0014820301047722,-2,8709,0,0.003180361378127161,0,794,0,0.00022237888564085456,0 +25,15714,0,450551.09999891,0,1275470,2,1105370.640002463,0,0.27428973501208986,0,-0.0006217147666227607,0,7709,0,0.01153044099298356,0,1923,0,0.0010552419632065407,-1,11140,0,-0.001476089778836176,0,1514,0,0.0005489151315958979,0,2442,2,0.00017978739352955686,1,119,0,7.396580191652239e-05,1 +26,9226,0,609540.3299978059,0,826480,0,604330.4699984491,1,0.4005785552464829,0,-0.005169815603914496,0,7360,-2,0.020077688262488735,0,868,3,0.0007987690276684001,-1,5225,3,-0.004156290717676869,0,736,-1,0.0009127076920182747,0,2664,0,0.003188737384957313,-1,105,1,0.000159651623514963,0 +27,28927,0,2190680.3099959046,0,2632910,-2,1821586.060003031,0,0.7110980782335048,-1,-0.012172045109481,1,19816,-1,0.022698987156503092,-1,3231,0,-0.000558641531151538,0,15642,0,-0.007863016228458752,1,2609,0,-0.00021123552855510652,1,9535,0,0.007369417278989487,0,899,0,0.0010810106619482292,0 +28,21234,1,1803739.8400093243,0,1988345,0,1276276.119998712,0,-0.03425723065483055,3,0.0009212767470664351,0,16838,0,0.015037398317999218,-2,2414,1,0.000578451737987068,-1,10227,0,-0.0018790744960639483,0,2038,1,0.0008117897796360296,1,7631,0,-0.0009688740535989671,0,686,0,-0.00019619979957608696,1 +29,10205,1,862041.9299954567,2,928250,2,611971.3699988034,1,-0.44105256299663154,0,0.0018192107705332639,0,5255,1,-0.00911950747634116,1,983,3,-0.0005366049048060456,3,5186,0,0.0032615463495331287,0,779,2,-0.0006639427687636784,3,3743,1,-0.004466659459621658,3,428,1,-0.000207116090749207,0 +30,10511,2,464689.8199994834,0,889315,-1,697165.3499992155,1,0.1590372752516629,0,-0.0030687534094671065,0,4497,1,0.007987708392638015,-1,744,0,-0.0007027278415285415,1,6530,0,-0.00514149769155503,1,616,0,-0.00015234975961259112,1,1848,0,-0.0009339432012466509,0,27,2,-9.87010988424521e-05,1 +31,8800,2,432759.9799988456,-1,754615,0,577998.389998842,0,0.18643302691465635,0,-0.002415505080242686,0,3479,1,0.004397709630881597,1,659,0,6.217956736678798e-06,1,5514,0,-0.0030529520950753897,0,556,1,0.000345441138428125,0,1776,3,-0.00047742678394843696,1,73,1,7.529098013568138e-05,0 +32,14056,0,304253.7400002922,0,1183085,2,1104716.9899990652,1,0.5674213471781968,0,-0.001718773187846634,0,5439,2,0.010999618515265819,0,1487,0,0.0006260535235111248,-1,10878,1,-0.0006230543044886128,-1,1097,0,-0.0007227479231872447,2,1750,-2,0.0010521236238908438,0,28,0,1.884836194439429e-05,0 +33,14242,0,545012.7900001071,-1,1255665,-1,1039239.1299991887,0,0.9446001339701127,-1,-0.005128784935274355,-1,9349,-4,0.031874593579629074,-2,1073,0,-0.00043395474755089647,0,9576,1,-0.006283639391776896,2,806,-1,-7.377719174184866e-05,0,2201,0,-0.00025826769928208315,0,45,0,1.5593331915528426e-06,3 +34,14780,-1,1729510.689996479,1,1525595,-2,883162.5199995656,-1,-0.18748665295419187,0,-0.0002525928321167048,0,12820,-3,0.00972698700950092,-1,1702,0,0.0006208930944303637,0,5668,0,-0.0006560145084925639,0,1437,-4,0.0006658908160615401,0,6762,-1,-0.0015622128822190273,0,549,0,-0.0009717663098997506,0 +35,14551,1,732989.0899994122,0,1285345,0,1085087.9799990244,0,0.7483280568561099,0,-0.006487703169602899,1,8910,-2,0.02762510381285352,0,1205,-1,9.781347158906162e-05,-1,9648,-1,-0.004397325441394373,0,881,-2,-2.407217673371098e-05,-1,3604,-1,0.004628060052309341,-1,105,-2,0.00028127266787386683,1 +36,7376,1,418363.2000002116,0,654800,0,474694.3599996427,0,0.22986785009207722,0,-0.005994736328448935,0,4510,0,0.015488025771318192,-1,553,0,-0.0002714030785125471,0,4289,2,-0.005789909322681863,0,466,0,-0.0007585854429201649,0,1562,0,0.0006224724596426978,0,43,0,6.663931089130777e-06,0 +37,6461,2,425428.0799987763,1,557450,2,404145.3599986024,4,-0.520049478487536,1,0.003452302127219087,0,3422,2,-0.009357006920149624,1,703,3,0.00010982431902571699,2,3740,2,0.00555804757256706,-1,583,0,-3.7575465871131364e-05,0,1861,1,-0.004944042802533688,0,148,2,-0.0006409849359857722,0 +38,4792,0,220572.92000014335,0,400975,0,338552.9200000344,1,-0.047522366924553694,1,-0.005266939375465074,1,2137,1,0.0032367376918805424,1,518,1,0.0002851690932405837,0,3170,0,-0.00331898055291735,0,417,0,0.00043748779237262614,1,1145,0,0.0052782015346120315,-1,45,0,0.0004835242621491196,-1 +39,5129,0,189373.01000019908,0,415255,1,332296.13999976683,1,-0.033637393318244335,1,-0.0019053934706065867,-1,2965,0,0.012864871991718707,0,537,0,5.7039662012009495e-05,1,3424,2,-0.0011818243607710777,0,413,0,0.0002617876182398199,1,832,1,0.0008375340592799707,1,45,0,0.00029902089162877916,0 +40,10195,3,314312.1900003003,0,807030,0,686588.3599990718,0,0.24458098729625988,0,-0.00379558943650371,0,8265,2,0.01982928230436848,-1,1205,1,-4.063169789218779e-05,0,7043,2,-0.003123554063863665,0,942,0,6.099056143533954e-05,0,1590,0,0.0015958801239518844,0,69,1,0.0002227699819854021,0 +41,3489,0,239463.49999999837,0,308115,0,222236.28000004496,0,0.21472625936878842,0,-0.023359839616145406,1,2454,0,0.023870080118743586,-2,474,0,0.000418845279068103,0,1915,2,-0.014375741830818578,1,375,-1,0.0007148684419073376,0,1068,0,0.013026706198020044,-5,53,0,0.0009470835855829498,-6 +42,54669,0,1769171.8099906147,0,4519505,0,3868584.029989153,0,0.26259206604655105,0,-0.002509147459358818,0,20847,0,0.01147927212114444,0,6857,0,-1.285431734754372e-05,0,37164,0,-0.0016787907899998844,0,5515,0,-0.00011884366497166843,0,9387,0,0.0015557346920766213,1,487,-1,0.00010693147012811374,0 +43,23590,0,377367.73000000603,2,1874140,0,1732314.5000011697,0,0.3888553057222168,-1,-0.0007468076044366834,1,7019,-1,0.006795324089496069,1,2736,0,0.00022360948579540352,2,18576,0,-0.0004481040247801271,0,2045,0,6.728659180389729e-05,2,2268,0,0.0005091487617464169,0,52,0,2.562433265861303e-05,0 +44,1871,0,39710.84999907203,1,133365,0,116080.57000326365,0,-0.0006345086036390057,0,-0.0002591532804007146,0,657,4,0.0007473444427819886,0,193,0,-2.2984800187114685e-05,1,1383,0,-9.708047946122011e-05,0,163,0,-7.90082078360177e-05,0,244,1,0.00011390107373918101,0,12,2,1.599219964689043e-05,0 +45,4231,0,142579.92000018805,0,361880,1,304371.0999998413,0,0.19507333539679905,0,-0.0004309246292060198,-1,1421,2,0.0023162663950816453,1,530,0,0.0005286467508629072,2,2986,2,-0.0003927170294177884,0,419,-1,0.0005359675106407225,0,671,0,0.00019612499098273228,1,14,0,1.9906255222831674e-06,3 +46,1743,3,54145.34999966435,0,123880,3,106778.12999893166,3,-0.026126701401594232,0,-0.0005557599281506009,0,1633,4,0.0047556787040753945,0,156,1,-0.0001513094384368585,1,1142,1,-0.0006297219870914361,0,213,1,0.0002471873540783598,-1,349,1,0.00040426245922522974,1,26,2,7.57177318232681e-05,0 +47,19552,0,225500.3800002481,0,1405570,1,1336817.3299991265,0,0.023222089700368542,0,0.0018464045291020081,-1,4084,0,0.0036903582008702973,0,2389,-1,0.0015805451925016978,-1,15964,0,7.29267784677079e-05,0,1776,0,0.0012785787684956584,-1,1623,0,-0.00133183037910653,0,19,0,-3.827676437778574e-05,0 +48,2761,5,65135.160000327975,1,199165,2,181152.02999941073,6,-0.021771396861026915,1,3.355920793723932e-05,0,1189,2,0.0008846872297885722,1,299,4,3.282120570767544e-05,0,2047,1,-0.00012989945876362707,-2,211,2,-8.28074938132306e-05,2,416,2,6.859597749794832e-05,1,12,0,-3.6642472017430275e-06,0 +49,7680,2,294542.8899992453,0,634635,3,529357.6999988388,0,0.13372282414273684,0,-0.0011134952913977036,-1,5381,1,0.006302829533794685,2,848,1,0.0004999112314185705,0,5130,0,-0.0012777634308859254,-1,642,4,0.00034962320126548374,0,1569,1,0.0007922870047377406,1,63,1,3.716625899838864e-05,0 +50,6033,4,408341.9500000775,2,533570,2,391555.76999926753,4,0.4278565548164437,1,-0.010050074771225437,1,5017,3,0.012358494835875866,1,714,0,-0.00040750348402612824,0,3317,-1,-0.005414622656799262,0,554,2,-0.00016469990473333418,1,1856,0,0.00549454847091102,-2,128,0,0.0005589743879320817,-1 diff --git a/bulletproof/wardstotals_sql_minus_pandas.csv b/bulletproof/wardstotals_sql_minus_pandas.csv index 98d4fa5..80a245f 100644 --- a/bulletproof/wardstotals_sql_minus_pandas.csv +++ b/bulletproof/wardstotals_sql_minus_pandas.csv @@ -1,51 +1,51 @@ ward,ticket_count,ticket_count_rank,current_amount_due,current_amount_due_rank,fine_level1_amount,fine_level1_amount_rank,total_payments,total_payments_rank,avg_per_ticket,avg_per_ticket_rank,paid_pct,paid_pct_rank,police_ticket_count,police_ticket_count_rank,police_ticket_count_pct,police_ticket_count_pct_rank,contested_ticket_count,contested_ticket_count_rank,contested_ticket_count_pct,contested_ticket_count_pct_rank,paid_ticket_count,paid_ticket_count_rank,paid_ticket_count_pct,paid_ticket_count_pct_rank,dismissed_ticket_count,dismissed_ticket_count_rank,dismissed_ticket_count_pct,dismissed_ticket_count_pct_rank,seized_or_suspended_ticket_count,seized_or_suspended_ticket_count_rank,seized_or_suspended_ticket_count_pct,seized_or_suspended_ticket_count_pct_rank,bankruptcy_ticket_count,bankruptcy_ticket_count_rank,bankruptcy_ticket_count_pct,bankruptcy_ticket_count_pct_rank -1,0,0,2.6732683181762695e-05,0,0,0,-1.4126300811767578e-05,0,0.0,0,-1.787459069646502e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,-4.336808689942018e-19,0 -2,0,0,1.4677643775939941e-05,0,0,0,-1.7255544662475586e-05,0,-7.105427357601002e-15,0,-1.0658141036401503e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 -3,0,0,2.8036534786224365e-05,0,0,0,1.4469027519226074e-05,0,-2.1316282072803006e-14,0,-1.0969003483296547e-13,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -4,0,0,1.6830861568450928e-05,0,0,0,-8.404254913330078e-06,0,2.842170943040401e-14,0,-1.0624834345662748e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-3.469446951953614e-18,0 -5,0,0,2.4400651454925537e-05,0,0,0,1.3932585716247559e-05,0,7.105427357601002e-15,0,-9.259260025373806e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 -6,0,0,3.805011510848999e-05,0,0,0,1.3209879398345947e-05,0,5.684341886080802e-14,0,-1.2179146580137967e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 -7,0,0,1.917034387588501e-05,0,0,0,4.161149263381958e-06,0,4.263256414560601e-14,0,-1.0541567618815861e-13,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -8,0,0,1.5951693058013916e-05,0,0,0,6.012618541717529e-06,0,1.4210854715202004e-14,0,-7.327471962526033e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0 -9,0,0,-2.086162567138672e-07,0,0,0,-5.885958671569824e-07,0,-5.684341886080802e-14,0,-5.773159728050814e-15,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 -10,0,0,-4.071742296218872e-06,0,0,0,-6.705522537231445e-07,0,4.263256414560601e-14,0,4.884981308350689e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-1.734723475976807e-18,0 -11,0,0,-2.7194619178771973e-07,0,0,0,4.2244791984558105e-06,0,-1.4210854715202004e-14,0,2.6645352591003757e-14,0,0,0,-5.551115123125783e-17,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,-8.673617379884035e-19,0 -12,0,0,2.012401819229126e-05,0,0,0,8.13603401184082e-06,0,1.4210854715202004e-14,0,-9.769962616701378e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 -13,0,0,-2.341344952583313e-06,0,0,0,-1.0170042514801025e-06,0,-4.263256414560601e-14,0,3.4861002973229915e-14,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 -14,0,0,8.646398782730103e-06,0,0,0,4.0084123611450195e-06,0,4.263256414560601e-14,0,-4.984901380566953e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0 -15,0,0,2.0585954189300537e-05,0,0,0,6.116926670074463e-06,0,1.4210854715202004e-14,0,-9.903189379656396e-14,0,0,0,-2.220446049250313e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-5.551115123125783e-17,0,0,0,-8.673617379884035e-19,0 -16,0,0,4.453212022781372e-05,0,0,0,1.0348856449127197e-05,0,2.842170943040401e-14,0,-1.5787371410169726e-13,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0,0,0,0.0,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,3.469446951953614e-18,0 -17,0,0,3.380328416824341e-05,0,0,0,9.424984455108643e-06,0,0.0,0,-1.3328227410625004e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,1.6653345369377348e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -18,0,0,-2.985820174217224e-06,0,0,0,-1.687556505203247e-06,0,-4.263256414560601e-14,0,3.1308289294429414e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 -19,0,0,-8.44709575176239e-07,0,0,0,-1.123175024986267e-06,0,2.842170943040401e-14,0,6.994405055138486e-15,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,1.734723475976807e-18,0 -20,0,0,4.573911428451538e-05,0,0,0,1.1615455150604248e-05,0,-4.263256414560601e-14,0,-1.5826229216031606e-13,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -21,0,0,1.3355165719985962e-05,0,0,0,4.656612873077393e-06,0,2.842170943040401e-14,0,-6.855627177060342e-14,0,0,0,2.220446049250313e-16,0,0,0,-1.3877787807814457e-17,0,0,0,2.220446049250313e-16,0,0,0,-2.7755575615628914e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -22,0,0,2.0459294319152832e-05,0,0,0,4.9620866775512695e-06,0,0.0,0,-9.903189379656396e-14,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0 -23,0,0,-2.4884939193725586e-06,0,0,0,2.7492642402648926e-06,0,1.4210854715202004e-14,0,5.229150445984487e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -24,0,0,5.733966827392578e-05,0,0,0,1.1444091796875e-05,0,4.263256414560601e-14,0,-1.9101387138675818e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-6.938893903907228e-18,0 -25,0,0,2.0988285541534424e-05,0,0,0,-1.239776611328125e-05,0,2.842170943040401e-14,0,-1.3722356584366935e-13,0,0,0,-1.1102230246251565e-16,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -26,0,0,2.9884278774261475e-05,0,0,0,1.3045966625213623e-05,0,-2.842170943040401e-14,0,-1.2656542480726785e-13,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,-1.734723475976807e-18,0 -27,0,0,4.594773054122925e-05,0,0,0,-2.536177635192871e-05,0,1.4210854715202004e-14,0,-2.3647750424515834e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.734723475976807e-18,0 -28,0,0,3.819167613983154e-05,0,0,0,1.8656253814697266e-05,0,-4.263256414560601e-14,0,-6.927791673660977e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,0.0,0 -29,0,0,2.997368574142456e-05,0,0,0,9.767711162567139e-06,0,4.263256414560601e-14,0,-1.1418643808269735e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,3.469446951953614e-18,0 -30,0,0,6.757676601409912e-06,0,0,0,5.6996941566467285e-06,0,-2.842170943040401e-14,0,-2.8976820942716586e-14,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-6.938893903907228e-18,0,0,0,5.551115123125783e-17,0,0,0,-4.336808689942018e-19,0 -31,0,0,1.1838972568511963e-05,0,0,0,8.016824722290039e-06,0,-1.4210854715202004e-14,0,-5.46229728115577e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,-8.673617379884035e-19,0 -32,0,0,7.860362529754639e-07,0,0,0,9.573996067047119e-06,0,-1.4210854715202004e-14,0,2.220446049250313e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 -33,0,0,2.1055340766906738e-05,0,0,0,8.106231689453125e-06,0,1.4210854715202004e-14,0,-1.1801670751765414e-13,0,0,0,-5.551115123125783e-17,0,0,0,-6.938893903907228e-18,0,0,0,-1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,4.336808689942018e-19,0 -34,0,0,1.0766088962554932e-05,0,0,0,1.3709068298339844e-06,0,-4.263256414560601e-14,0,-7.854827899222983e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,3.469446951953614e-18,0 -35,0,0,2.440810203552246e-05,0,0,0,1.0512769222259521e-05,0,-3.552713678800501e-14,0,-1.1235457009206584e-13,0,0,0,5.551115123125783e-17,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,6.938893903907228e-18,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 -36,0,0,-2.7865171432495117e-06,0,0,0,1.5459954738616943e-06,0,1.4210854715202004e-14,0,5.284661597215745e-14,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -37,0,0,4.176795482635498e-05,0,0,0,9.037554264068604e-06,0,2.842170943040401e-14,0,-1.6275869541004795e-13,0,0,0,1.1102230246251565e-16,0,0,0,0.0,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,-3.469446951953614e-18,0 -38,0,0,-1.6372650861740112e-06,0,0,0,-9.834766387939453e-07,0,3.552713678800501e-14,0,2.731148640577885e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-8.326672684688674e-17,0,0,0,0.0,0 -39,0,0,-2.6226043701171875e-06,0,0,0,1.2628734111785889e-06,0,0.0,0,5.706546346573305e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,0.0,0 -40,0,0,7.059425115585327e-06,0,0,0,8.52346420288086e-06,0,-1.4210854715202004e-14,0,-2.8199664825478976e-14,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,-4.336808689942018e-19,0 -41,0,0,1.0617077350616455e-07,0,0,0,-4.2654573917388916e-07,0,4.263256414560601e-14,0,-1.2212453270876722e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 -42,0,0,-0.00014281272888183594,0,0,0,1.749396324157715e-05,0,-7.105427357601002e-15,0,3.0475622025960547e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,1.1102230246251565e-16,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,8.673617379884035e-19,0 -43,0,0,9.145587682723999e-06,0,0,0,-2.0995736122131348e-05,0,-2.842170943040401e-14,0,-8.637535131583718e-14,0,0,0,5.551115123125783e-17,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-2.7755575615628914e-17,0,0,0,0.0,0 -44,0,0,2.0328909158706665e-05,0,0,0,-3.559887409210205e-05,0,7.105427357601002e-15,0,-1.4999113062685865e-13,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,0.0,0,0,0,6.505213034913027e-19,0 -45,0,0,-3.3210963010787964e-06,0,0,0,7.413327693939209e-07,0,-7.105427357601002e-15,0,6.206146707654625e-14,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,-5.551115123125783e-17,0,0,0,-4.336808689942018e-19,0 -46,0,0,1.2744218111038208e-05,0,0,0,9.723007678985596e-06,0,-2.1316282072803006e-14,0,-6.45039577307216e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 -47,0,0,3.46451997756958e-07,0,0,0,7.696449756622314e-06,0,-4.973799150320701e-14,0,1.865174681370263e-14,0,0,0,-1.1102230246251565e-16,0,0,0,0.0,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,2.7755575615628914e-17,0,0,0,0.0,0 -48,0,0,1.247599720954895e-05,0,0,0,4.783272743225098e-06,0,-4.263256414560601e-14,0,-8.926193117986259e-14,0,0,0,1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 -49,0,0,2.4668872356414795e-05,0,0,0,1.0289251804351807e-05,0,4.973799150320701e-14,0,-1.163513729807164e-13,0,0,0,0.0,0,0,0,0.0,0,0,0,0.0,0,0,0,1.3877787807814457e-17,0,0,0,5.551115123125783e-17,0,0,0,1.734723475976807e-18,0 -50,0,0,1.4640390872955322e-06,0,0,0,5.0514936447143555e-06,0,2.842170943040401e-14,0,1.3211653993039363e-14,0,0,0,0.0,0,0,0,0.0,0,0,0,-1.1102230246251565e-16,0,0,0,-1.3877787807814457e-17,0,0,0,0.0,0,0,0,0.0,0 +1,112250,1,3631780.2200247347,2,6563710,0,5526422.71999453,-1,-0.0057507718896516735,0,-0.007489893824294436,0,57811,1,0.011955437179525685,0,6905,0,-0.0005807062294264642,3,67430,0,-0.0063103744913417525,0,7113,0,-5.0955373609579135e-05,0,32745,0,0.004561953486502235,0,868,0,0.00030677480384225806,-3 +2,150246,0,2873941.350013647,0,8662890,0,8018065.629990026,0,0.10224132486573723,-1,-0.00205137065110772,1,113059,-1,0.027948062186066547,-1,12157,0,-0.000439568411108579,0,103020,1,-0.002064890405426789,1,12128,0,-0.00032351289396219396,1,29994,-1,0.0009891112000867952,-1,582,1,3.2981901802284826e-05,0 +3,319739,-9,10925827.940013167,-11,19311820,-16,16342882.820007965,-7,-0.8205100183933496,4,0.004871294474813492,-1,225754,-12,0.038591974231625525,-5,28829,-6,0.0004767524122922945,-2,188837,-4,-0.00044069868476537266,0,28275,-5,0.0009101690370990484,0,109509,-11,0.0008077688968071151,1,4189,-3,-0.00042605666073114966,0 +4,368997,-1,7680139.1100195795,-3,19436655,-1,17756734.40000762,0,-1.2873991164035843,7,0.008502606421922243,-4,273203,-3,0.046175392797635384,-6,31168,0,-0.0009017792018882337,1,239569,0,0.003640225674056974,-1,33681,0,-0.0001094242775085269,0,95118,0,-0.007867957013707516,4,2434,0,-0.0008234730028791899,0 +5,130772,-2,5909659.220016874,-3,9341315,-3,7667649.370011747,-1,1.095934672361217,-4,-0.0054571667818206215,0,89354,-6,0.03303804398577054,-4,11247,-1,0.00044506178721584466,-3,72878,0,-0.006297886363910488,0,12052,-1,0.0007963720792079354,0,52081,-2,0.007906129112080773,-1,2423,0,0.0003805079737918167,0 +6,136561,-6,7986959.190025672,-1,10030815,-3,7788457.000008538,-3,0.4147653625759915,0,0.002428325439442436,0,93518,-2,0.006790374999020687,1,11344,-1,0.0013935356476811323,-1,69465,-3,-2.521632290408693e-05,0,11551,-2,0.0010214353575766638,-2,60043,-5,-0.002325965400263752,1,3307,-2,-0.0003339804011990126,0 +7,39666,0,2193357.0500150137,2,2546225,0,1793208.6200035177,1,-0.3828082464646769,2,-0.0009566916861248331,0,26754,2,0.010106449264429274,1,2920,1,-0.00040200367266425563,0,16675,1,-0.004285644357928775,1,3996,0,0.0011063479136138032,-1,21106,1,0.00471313826287334,-1,843,2,-0.00022800543079020893,0 +8,81707,0,4518624.020010162,-2,5924825,-2,4582434.780003812,0,0.4879735569926993,0,-0.00033649452807216207,0,60794,-2,0.033064942628591665,-5,7007,-4,0.00027899389603294744,-2,40561,-2,-0.004106164247272948,0,7893,-2,0.001196818028066371,0,37438,-1,0.0035304251301295775,0,1802,0,-0.00014543259862869612,1 +9,62419,-1,3717196.329995103,-3,4427480,-1,3344773.659997942,-3,-0.5582464030596412,0,-0.0036034249706409227,0,36257,-1,0.005768228979643575,1,5641,-2,-3.872832195619957e-06,0,30650,0,-0.004394919067502667,1,5709,-2,0.0008665000913581772,-1,27314,0,0.0029017268221109838,0,1481,-2,0.00028569136599174497,-1 +10,17301,1,865808.6399947815,1,1190200,1,878541.8099988997,1,0.1398248357744336,-1,-0.0009167045770455129,0,11659,0,0.004282776094429397,2,1220,0,-3.867365356582941e-06,0,8890,0,-0.0012523977340779258,0,1501,1,0.0005335340187478804,-1,5855,1,0.0005428427909551781,0,232,1,0.00011959305316190834,0 +11,62215,1,1809082.1499976497,-1,4063460,2,3507791.3700041845,1,0.20038130194982529,0,-0.0015153794130854381,0,36702,0,0.015364203903011575,0,6948,-1,0.0018456589080555474,-1,39657,1,-0.0027734248342837775,0,6121,-1,0.0015345432304202378,-2,15644,0,0.001289994443048087,0,379,-1,5.4332725846695934e-05,0 +12,98549,-2,4262483.730014045,0,5833185,-4,4518866.72000628,-1,-0.45226352118152846,1,-0.003961509653595319,0,66441,-1,0.023851849256699198,-1,4062,0,-0.00081838682496152,0,52654,-1,-0.0050695136770567695,0,4412,-1,-0.0006163484753471393,0,33172,-4,0.005514114887827937,-1,696,-3,0.0003373986032975812,-3 +13,34479,0,1270986.3199984543,0,2383075,0,2016757.2599985637,0,-0.09401379133279875,0,-0.00103666937209701,0,16092,0,0.0030418002685749235,1,2561,0,-0.0008358589404095923,1,21307,1,-0.0007767355036865098,0,2404,0,-0.0006305449301419325,2,8798,0,0.0009181927533609413,0,112,0,-9.82562283279708e-05,0 +14,68735,0,2956606.6500048377,-1,4534250,0,3471706.600003008,0,-0.18999954258126195,-1,-0.0015306966643785502,0,34798,2,0.003959747828371718,2,3159,0,3.742290881965371e-06,0,38054,-2,-0.0016154440593021402,0,3344,0,6.33552250288924e-05,0,18661,0,0.0025274834410467795,0,257,0,0.00011054732403448057,0 +15,44098,4,1899991.180018805,4,2828040,4,2145387.450005494,5,-0.10055215411286156,1,0.001555297795403976,0,31740,3,0.00967738512205174,1,1717,2,-0.00023321430422562628,0,23810,1,5.098994001806467e-05,0,1963,1,-0.00024525270470411586,0,12705,3,-0.0010482894164940415,1,219,0,-0.00016418002001029625,0 +16,128258,-4,7513894.110029876,-2,8574755,-3,6249878.080006123,-8,-0.5885278035066506,1,0.0010972307509569679,0,97102,-2,0.015591572007650378,0,6965,-3,-0.0011014397414756405,0,60680,-5,-0.0014750244542960922,-2,8172,-2,-0.0003599413295100329,0,57256,-3,-0.0008811349786020939,0,2464,0,-0.0005557553462688068,1 +17,83286,-1,4909162.520025656,-1,5808045,-4,4295416.230006285,-2,-0.398961123920472,-1,-0.00033079710653355354,0,60427,0,0.010011259615789636,-1,5610,-2,-0.0008311290849675884,1,41032,-1,-0.0005632672016051554,0,6487,-1,0.0001687303472754781,0,35798,-1,-0.0027754837250335007,2,1915,0,-0.0003776397303210423,1 +18,40935,0,2022625.829998035,0,2881275,0,2346185.709998863,0,-0.4393785437824249,1,-0.0018504905131642158,0,27638,-2,0.027163143808341284,0,3180,-1,-0.000974077049172406,5,21480,-1,-0.005634828852729035,0,3606,-1,0.001088654680230547,-2,15768,0,0.004899148593621783,0,834,-2,0.000555952943700859,0 +19,30472,0,1207454.3899995424,0,2335975,0,2060844.619999133,0,0.841200203639886,-1,-0.003920215066280264,2,22864,1,0.024218581611332723,-2,2878,0,-0.002470392530166843,0,18786,0,-0.00465846648805901,1,2704,1,-0.0005360198899932445,1,8524,0,-0.0004421829558727275,0,318,-1,-4.394532693815373e-05,0 +20,87864,0,5695287.810030974,0,6189020,1,4418411.030008942,-3,0.1270879377236298,-2,-0.0011128141556857596,0,71172,0,0.013928839001445592,-1,6179,-1,5.538223581759427e-05,-1,39813,-1,-0.003340623047438318,1,6891,-1,0.00037117951164990226,-1,41468,1,0.0028216557505730266,0,1968,0,-8.365500967959585e-05,-1 +21,57889,-1,3393335.870008964,0,4336585,-1,3414896.4800031334,-2,-0.1351834035434507,0,0.0006484448039074109,0,45985,-1,0.014052625583871992,0,5359,-1,6.587738624933004e-05,1,29481,0,-0.0006093881178454996,-1,5488,0,0.00027835052238492364,-1,25884,0,0.0015898191401806372,0,1434,1,-4.122562857064929e-05,0 +22,79843,1,3869352.260014735,-1,5140955,0,3660822.200003527,-3,0.031547243109756096,0,-0.002317627076211193,0,47175,0,0.010949712292540548,2,2774,0,-0.0002862975511439547,0,40476,0,-0.0033332789734736856,0,3216,-1,-0.00031293857518884666,0,23456,-2,0.0021918609440783055,-1,297,3,-5.5701692239400365e-05,1 +23,17609,0,672585.029997088,3,1146805,1,914417.7100024894,1,-0.009560183436349234,0,-0.001927556266202557,0,8520,1,-0.004536208142661202,1,1150,3,-0.0006200729558630408,1,10186,5,-0.0014822532450585735,0,1223,3,-0.0004475410899364707,1,4583,0,0.0019621409711124693,0,53,0,-9.183884782573877e-06,2 +24,70129,1,5072781.770046301,0,5142995,2,3408831.200008616,-1,0.4246883491520066,0,-0.002740675160429029,0,57505,1,0.012193441780714354,0,4861,0,0.0005927929698982051,-1,29826,1,-0.003356097874866959,0,5386,-1,0.0008149935819773135,0,34528,-1,0.003410223275546853,-3,2092,0,0.0003338036472607976,-3 +25,100857,0,2570342.630019769,1,5852440,0,5049013.209992155,1,-0.09284777288510071,-1,-0.000982905801938827,0,67771,0,0.01500350804429218,0,8832,0,0.0008509111453302437,-1,63504,0,-0.0027371780587412964,0,8509,0,0.0009010039485366494,0,24628,2,0.0011356859658718244,2,455,0,-1.2857857432001067e-05,0 +26,54670,4,2411877.7200265154,3,3357565,3,2524968.8900118396,2,0.0175550597316132,0,-0.003260676151612185,0,43952,3,0.01816687384507215,-1,3136,1,-1.9769823293318278e-05,0,27320,1,-0.004212081270530521,0,3452,1,0.00022951252179497644,-1,19371,1,0.0022901840218924607,0,425,1,5.736698939288933e-05,0 +27,152451,0,6244489.600038819,0,9684810,0,7650807.089985371,0,0.4146131284238237,-4,-0.005647195606105715,0,113224,0,0.01943734170628464,-1,11356,0,-0.0007121259379272021,0,84650,0,-0.004559792853507938,1,13048,0,0.00013818085523183143,-1,51713,0,0.002655314836235323,-1,2496,0,0.0003463190221441783,0 +28,104633,0,5099504.320048407,0,6778155,1,5104569.510017514,-1,-0.1766604243269967,0,0.00036216090996660233,0,80310,1,0.013442313937459871,0,8275,1,0.00033032914037173233,1,53876,0,-0.0014975422972992591,0,8724,-1,0.00043895350141294476,0,40180,0,-0.000988068208081061,0,2001,0,-0.00022179858114002027,0 +29,46657,1,2498819.3800264597,3,3064985,2,2291787.4400086105,2,-0.2509123882165767,0,1.1358085770518667e-05,0,28466,3,-0.0012350610291860242,1,3123,1,-0.00018756744672561443,1,23302,2,-0.00048005838412679136,0,3259,1,-0.00025584079795067105,1,20224,4,-0.0026464756015216473,0,1129,1,-0.0002794287141508478,0 +30,60786,0,2315209.4600032754,0,3703575,0,2861484.4100044295,1,-0.14365954512054913,-1,-0.004699141317008659,0,35700,0,0.008011963622607088,5,2916,1,-0.0013236175785638835,1,32971,0,-0.0067638288215029485,0,3633,0,-5.263201584822241e-05,0,18190,0,0.0028114076785852316,0,255,0,6.892761084462259e-05,0 +31,46506,3,1713505.6600088477,-1,2853950,4,2226165.0500072315,2,-0.046339348335173725,0,-0.0017742069217906442,0,24804,1,0.00648233001042714,3,2432,2,-0.0002772216881946829,0,26664,1,-0.0022728666170411804,-1,2673,0,0.00011062394925372143,0,12764,2,-0.0007380121741210055,-1,221,2,1.7839753184987865e-05,2 +32,120438,-2,2077307.7899974957,1,6585515,0,6185144.900008336,0,-0.5649702547029065,3,-0.0002972560410119396,0,52447,0,0.002887122357208227,1,9351,-1,-0.0006556590230878401,1,86355,0,0.00041846427478464676,-1,8856,0,-0.0007933219970418237,1,23886,0,0.00034832852801663927,0,221,1,-4.6822899953056704e-05,1 +33,111764,-2,3659745.8000149503,0,6396305,-2,4918476.900006674,0,-0.016529065555161537,-1,-0.004031157795955309,0,87894,-3,0.0347736376306132,-3,5419,1,-0.0014639013130916603,0,62001,1,-0.006210522138068497,0,6253,1,-0.0005817786647136225,0,29480,0,-0.000977407095694438,1,385,0,1.6472494640143096e-05,0 +34,61634,-1,3901784.5100050755,-2,4608380,-3,3435228.989999596,0,-0.2637587822791403,0,0.0021773827299724213,0,49390,-2,0.007312715837844097,0,5277,-2,0.0005938622703767771,-2,29457,-1,0.0009382098386648829,1,5868,0,0.001362207805261459,-1,27737,-1,-0.0016025073298297499,0,1296,0,-0.0008350959189554405,2 +35,102827,-1,4073117.24002051,-1,6085870,1,4772384.940008961,0,0.11114535229621936,-1,-0.006055510029065347,0,74020,-1,0.02999369264518459,-2,5089,0,-0.0009129625869769772,0,55915,-1,-0.005652876007049001,0,5606,0,-0.00039856405309245113,1,34298,1,0.003681635224389801,-1,536,-1,0.00012719310543834236,0 +36,34965,0,1581305.1999954116,-2,2220910,1,1605025.5200010873,0,-0.3279452661209774,1,-0.006148572698437049,1,24488,0,0.015908323198802587,0,1863,2,-0.0008253928739453825,0,17601,-1,-0.007232482494326842,0,1968,1,-0.0005774557353417781,0,10950,0,0.0029599923068220346,0,181,0,5.404134066360356e-05,2 +37,24008,3,1116054.2700394988,3,1613190,5,1270880.2000078708,7,-0.1988221548854341,0,0.0022834092317703947,0,15695,5,-0.0012753156372896646,1,1921,3,0.000342260885565715,-3,13253,2,0.002688093779313838,-1,1928,4,0.00021437469334939507,-1,8761,6,-0.0033210672300172384,1,452,2,-0.0002769927555356863,0 +38,28120,1,956361.0899988562,0,1650820,0,1365673.269998664,2,-0.312019068065311,0,-0.006351997075555116,1,17455,1,0.004383325707063679,1,2072,0,-0.0007653141890557325,2,15906,0,-0.006659274187823194,0,2299,0,0.00022103008507995403,1,8831,0,0.007625055570560951,-3,218,0,0.0004113414333540761,-1 +39,26633,0,741714.3999975845,0,1603590,1,1373646.910000801,0,-0.019267334728226615,0,-0.0011222971587171449,0,19229,0,0.010455780878527832,1,2248,0,-0.00023500006781199123,1,16674,1,-0.0012919053532332025,-1,2144,1,8.221780216571828e-05,1,6601,0,0.000954842184640009,0,164,0,0.0001934273764158034,0 +40,71681,3,1905218.5600038357,0,4163545,2,3576859.540007554,0,0.009807654134817767,-1,-0.0022479148778997704,0,59966,0,0.017751910979781127,0,5782,1,-0.0007449078182219238,0,45815,-1,-0.0017264918671371365,0,5226,2,-0.0007075775412241081,2,18501,1,0.0017243629770404556,0,335,0,0.00012594396823759416,1 +41,12625,0,568450.3800003277,0,831365,0,641431.6399996802,0,0.07112961127513984,0,-0.013466814353857548,1,9329,1,0.007519618992781751,-2,1194,1,-0.0005390375657171875,0,6753,1,-0.009367000357012656,1,1239,0,0.00052524616586902,0,4404,0,0.009813324048786154,-1,193,0,0.0008885591788129459,-2 +42,455587,0,9955495.349880219,0,25206995,0,21451618.52001676,0,-0.2850645882629266,0,-0.00337656163174882,0,325586,0,0.020930443695763856,-2,43122,0,-0.0005984323434053557,0,275036,0,-0.00480897603324304,0,51383,0,0.0006086784739826739,0,105579,0,0.0026646029652434844,1,2853,0,8.707305389258572e-05,0 +43,211520,0,2440236.8800055347,-1,10847810,0,10449838.819987118,0,-0.44569147373953655,0,0.0004995494172274073,0,68518,-1,0.0013887431598456623,0,17236,0,-0.0006695340353298912,0,160334,-1,0.0009722257872675222,0,16240,0,-0.0005155809161994096,2,34222,-1,0.0010273684682124695,0,411,0,3.365504414780157e-05,0 +44,30371,0,661339.5100193657,5,1447070,0,1253816.809965521,0,-0.0860318974691694,0,-0.0016675870006668259,0,17026,4,0.003941185992539981,0,2045,0,-0.00024935157614922043,0,18134,0,-0.0018008471044504981,0,2490,0,-6.331179820229238e-05,2,8230,0,0.0013833689135078764,0,129,2,3.080853311060081e-05,0 +45,30039,1,853865.2099971194,0,1624385,1,1327830.5200005434,0,-0.3276457753776896,-1,-0.003116137158636345,1,17803,0,0.005675079378086589,4,2290,0,-0.0005826428757400165,1,17296,2,-0.0041767089351355535,0,2497,0,0.00020640912314277837,-1,8546,-1,0.0024838828998916818,0,106,0,1.54019779550962e-05,1 +46,17138,1,448051.5500119254,2,928310,0,810188.0900095999,2,-0.06857770673346408,0,-0.00072866519214565,-1,14368,0,0.004239020888591738,1,1149,0,-0.0002868553208685565,0,10463,1,-0.000895358717785455,-1,1357,1,-5.449727588127673e-05,0,4891,4,0.0006065488960569354,0,97,0,6.227879703831624e-06,0 +47,154614,-1,1876263.6099979393,1,7724180,-1,7363921.750006273,-1,-0.8122355110431485,1,0.003944939963797189,-1,42133,1,-0.01596914822895762,2,13877,-1,0.0005139632040108422,-2,116752,-1,0.0039197899356584465,0,13170,-1,0.001075188539968297,0,25268,0,-0.0033966964223922924,1,195,0,-8.203216287254738e-05,1 +48,42307,4,759633.1800113209,3,1837690,6,1672548.320004493,2,-0.43075852835922745,0,0.0011311354679591767,-1,24983,1,-2.7351527596697345e-05,3,3300,3,-0.000211694425854142,-2,27790,2,0.0009355630677403415,1,3331,3,-0.00018273913631394745,0,11720,2,-0.0005003272460970543,-1,192,0,-4.903483317456221e-05,0 +49,71140,1,2550335.720021963,2,4036445,4,3179221.4400094897,3,-0.09111842335882869,0,-0.002637230488717335,0,56776,3,0.006317061092739107,0,4818,1,-5.551241203591295e-06,0,37605,0,-0.0038187173108452654,0,5504,1,0.00042480166361529015,0,26224,4,0.003227554084471951,0,578,0,8.722978671981199e-06,0 +50,32825,3,1297497.940000292,0,1969325,2,1473011.4500048906,4,0.012407939516549504,-1,-0.0058263245055198976,1,27132,5,0.009314944410069081,2,2862,3,-0.00069487592239241,0,16991,1,-0.00519576173361469,0,2911,1,-0.00010385110273911091,0,10329,1,0.0036292440528569725,1,395,-1,0.00031276128265379354,-2 From d589fd9b4fc9c0d801c2c18aad31ab1ffcd13962 Mon Sep 17 00:00:00 2001 From: David Eads Date: Wed, 19 Dec 2018 21:34:47 -0600 Subject: [PATCH 129/140] many data fixes for production --- Makefile | 10 ++++--- data/test-results/test-data.csv | 22 ++++++--------- hasura/docker-run.sh | 2 +- hasura/metadata.json | 2 +- sql/exports/parking_geo.sql | 1 - sql/exports/topviolations.sql | 1 + sql/tables/citation_names.sql | 5 ++++ sql/tables/geocodes.sql | 1 - sql/tables/parking.sql | 1 + sql/transforms/ohare.sql | 23 ++++++++++++++++ sql/views/blocks.sql | 7 ++--- sql/views/blockstotals.sql | 18 ++++-------- sql/views/blocksyearlytotals.sql | 19 ------------- sql/views/citywideyearly.sql | 31 +++++++++++++++++++++ sql/views/geoblocks.sql | 12 ++++---- sql/views/test_data.sql | 47 ++++++++------------------------ sql/views/wardsyearly.sql | 4 ++- 17 files changed, 108 insertions(+), 98 deletions(-) create mode 100644 sql/exports/topviolations.sql create mode 100644 sql/tables/citation_names.sql create mode 100644 sql/transforms/ohare.sql delete mode 100644 sql/views/blocksyearlytotals.sql create mode 100644 sql/views/citywideyearly.sql diff --git a/Makefile b/Makefile index e6f1a82..a7caa99 100644 --- a/Makefile +++ b/Makefile @@ -5,14 +5,15 @@ DATATABLES = parking cameras CENSUSTABLES = acs_17_5yr_b03002 IMPORTS = wardmeta GEOJSONTABLES = communityareas wards2015 -SHPTABLES = tl_2016_17_bg tl_2016_17_tabblock10 -VIEWS = blocks blockstotals wards warddemographics wardsyearly wardsyearlytotals wardstotals wardstotals5yr wardscommunityareas violations +SHPTABLES = tl_2016_17_bg tl_2016_17_tabblock10 tl_2017_us_state +TRANSFORMS = ohare +VIEWS = blocks wards warddemographics wardsyearly wardsyearlytotals wardstotals wardstotals5yr wardscommunityareas blocksyearly blockstotals geoblocks violations wardsviolations5yr wardstop5violations5yr citywideyearly DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship sync geojson_tables shp_tables .INTERMEDIATE: processors/salt.txt -all: bootstrap geo census parking imports indexes views +all: bootstrap geo census parking imports transforms indexes views bootstrap : create_db tables schema geo: load_geocodes geojson_tables shp_tables @@ -23,6 +24,7 @@ census : $(patsubst %, load_census_%, $(CENSUSTABLES)) indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) imports : $(patsubst %, import_%, $(IMPORTS)) +transforms : $(patsubst %, transform_%, $(TRANSFORMS)) appgeo : bootstrap load_geodata_wards2015 parking : $(patsubst %, dupes/parking-%.csv, $(PARKINGYEARS)) @@ -98,7 +100,7 @@ drop_db : drop_view_% : - $(psql) -c "drop table $*;" + $(psql) -c "drop table if exists $*;" data/geodata/communityareas.json : diff --git a/data/test-results/test-data.csv b/data/test-results/test-data.csv index ddf1bc5..4d945be 100644 --- a/data/test-results/test-data.csv +++ b/data/test-results/test-data.csv @@ -1,14 +1,10 @@ metric,value -total_tickets,54430546 -wards_amount_due,1667989480.26 -total_tickets_5yr,11986700 -citywide_amount_due,1774000201.8858 -ward_amount_due_pct,0.940241990100614 -accurate_tickets_pct,0.93530176970850154617 -total_accurate_tickets,50908986 -accurate_tickets_5yr_pct,0.94484411889844577740 -very_accurate_tickets_pct,0.85017372414379234777 -total_accurate_tickets_5yr,11325563 -total_very_accurate_tickets,46275420 -very_accurate_tickets_5yr_pct,0.87755796007241359173 -total_very_accurate_tickets_5yr,10519024 +total_tickets,53168497 +wards_amount_due,1466547585.15 +total_tickets_5yr,11759338 +citywide_amount_due,1731836137.17131 +ward_amount_due_pct,0.846816597524858 +accurate_tickets_pct,0.84938735431998388068 +total_accurate_tickets,45160649 +accurate_tickets_5yr_pct,0.87752839488073223170 +total_accurate_tickets_5yr,10319153 diff --git a/hasura/docker-run.sh b/hasura/docker-run.sh index a3bca34..2e508e8 100644 --- a/hasura/docker-run.sh +++ b/hasura/docker-run.sh @@ -1,6 +1,6 @@ #! /bin/bash docker run -p 8080:8080 \ - hasura/graphql-engine:v1.0.0-alpha31 \ + hasura/graphql-engine:latest \ graphql-engine \ --database-url ${ILTICKETS_DB_URL} \ serve --enable-console diff --git a/hasura/metadata.json b/hasura/metadata.json index 70c39e9..9e23fc1 100644 --- a/hasura/metadata.json +++ b/hasura/metadata.json @@ -1 +1 @@ -{"remote_schemas":[],"tables":[{"table":"warddemographics","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wards","object_relationships":[{"using":{"manual_configuration":{"remote_table":"wardmeta","column_mapping":{"ward":"ward"}}},"name":"wardMeta","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals","column_mapping":{"ward":"ward"}}},"name":"wardTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals5yr","column_mapping":{"ward":"ward"}}},"name":"wardTotals5yr","comment":null},{"using":{"manual_configuration":{"remote_table":"warddemographics","column_mapping":{"ward":"ward"}}},"name":"wardDemographics","comment":null}],"array_relationships":[{"using":{"manual_configuration":{"remote_table":"wardsyearly","column_mapping":{"ward":"ward"}}},"name":"wardTicketsYearly","comment":null},{"using":{"manual_configuration":{"remote_table":"blocks","column_mapping":{"ward":"ward"}}},"name":"wardBlocks","comment":null},{"using":{"manual_configuration":{"remote_table":"wardscommunityareas","column_mapping":{"ward":"ward"}}},"name":"wardCommunityAreas","comment":null},{"using":{"manual_configuration":{"remote_table":"wardsyearlytotals","column_mapping":{"ward":"ward"}}},"name":"wardYearlyTotals","comment":null}],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardscommunityareas","object_relationships":[{"using":{"manual_configuration":{"remote_table":"communityareas","column_mapping":{"community":"community"}}},"name":"wardCommunityAreaDetails","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearly","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"communityareas","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearlytotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardmeta","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blockstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blocks","object_relationships":[{"using":{"manual_configuration":{"remote_table":"blockstotals","column_mapping":{"address":"address"}}},"name":"blockTotals","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} \ No newline at end of file +{"remote_schemas":[],"tables":[{"table":"warddemographics","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wards","object_relationships":[{"using":{"manual_configuration":{"remote_table":"wardmeta","column_mapping":{"ward":"ward"}}},"name":"wardMeta","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals","column_mapping":{"ward":"ward"}}},"name":"wardTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstotals5yr","column_mapping":{"ward":"ward"}}},"name":"wardTotals5yr","comment":null},{"using":{"manual_configuration":{"remote_table":"warddemographics","column_mapping":{"ward":"ward"}}},"name":"wardDemographics","comment":null}],"array_relationships":[{"using":{"manual_configuration":{"remote_table":"wardsyearly","column_mapping":{"ward":"ward"}}},"name":"wardTicketsYearly","comment":null},{"using":{"manual_configuration":{"remote_table":"blocks","column_mapping":{"ward":"ward"}}},"name":"wardBlocks","comment":null},{"using":{"manual_configuration":{"remote_table":"wardscommunityareas","column_mapping":{"ward":"ward"}}},"name":"wardCommunityAreas","comment":null},{"using":{"manual_configuration":{"remote_table":"wardsyearlytotals","column_mapping":{"ward":"ward"}}},"name":"wardYearlyTotals","comment":null},{"using":{"manual_configuration":{"remote_table":"wardstop5violations5yr","column_mapping":{"ward":"ward"}}},"name":"wardTopFiveViolations","comment":null}],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardscommunityareas","object_relationships":[{"using":{"manual_configuration":{"remote_table":"communityareas","column_mapping":{"community":"community"}}},"name":"wardCommunityAreaDetails","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearly","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"communityareas","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardsyearlytotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardmeta","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blockstotals","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstotals5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"wardstop5violations5yr","object_relationships":[],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]},{"table":"blocks","object_relationships":[{"using":{"manual_configuration":{"remote_table":"blockstotals","column_mapping":{"address":"address"}}},"name":"blockTotals","comment":null}],"array_relationships":[],"insert_permissions":[],"select_permissions":[],"update_permissions":[],"delete_permissions":[],"event_triggers":[]}],"query_templates":[]} \ No newline at end of file diff --git a/sql/exports/parking_geo.sql b/sql/exports/parking_geo.sql index 53425be..47e6e1d 100644 --- a/sql/exports/parking_geo.sql +++ b/sql/exports/parking_geo.sql @@ -14,4 +14,3 @@ join p.address = g.address join blocks b on g.geocoded_address = b.address -where b.ward is not null diff --git a/sql/exports/topviolations.sql b/sql/exports/topviolations.sql new file mode 100644 index 0000000..f3834cc --- /dev/null +++ b/sql/exports/topviolations.sql @@ -0,0 +1 @@ +select distinct(violation_description) from wardstop5violations5yr diff --git a/sql/tables/citation_names.sql b/sql/tables/citation_names.sql new file mode 100644 index 0000000..047c579 --- /dev/null +++ b/sql/tables/citation_names.sql @@ -0,0 +1,5 @@ +CREATE TABLE public.citation_names ( + violation_description character varying, + edited_violation_description character varying, + most_recent_cost int +) diff --git a/sql/tables/geocodes.sql b/sql/tables/geocodes.sql index 34e5459..a68929a 100644 --- a/sql/tables/geocodes.sql +++ b/sql/tables/geocodes.sql @@ -9,6 +9,5 @@ CREATE TABLE public.geocodes ( geocode_accuracy float, geocode_accuracy_type character varying, geocode_geojson jsonb, - smarty_geocode boolean, geom geometry(Geometry,4326) ) diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql index b662246..717856b 100644 --- a/sql/tables/parking.sql +++ b/sql/tables/parking.sql @@ -1,6 +1,7 @@ CREATE TABLE public.parking ( ticket_number bigint primary key, issue_date timestamp without time zone, + issue_date timestamp without time zone, violation_location character varying, license_plate_number character varying, license_plate_state character varying, diff --git a/sql/transforms/ohare.sql b/sql/transforms/ohare.sql new file mode 100644 index 0000000..886444a --- /dev/null +++ b/sql/transforms/ohare.sql @@ -0,0 +1,23 @@ +-- from map click +-- -87.89638770082189, 41.9813643497081 + +update geocodes + set + geocoded_address = 'O''hare International Airport', + geocoded_lat = 41.9818, + geocoded_lng = -87.8982, + geocode_accuracy = 1, + geocoded_city = 'Chicago', + geocoded_state = 'IL', + geocode_accuracy_type = 'ohare', + geocoded_zip = null, + geocode_geojson = null, + geom = ST_SetSRID(ST_MakePoint(-87.8982, 41.9818), 4326) + where + address like '%ohare%' or + address like '%o''hare' or + address like '%terminal%' or + address like '% ord,%' or + address like '% hare,%' +; + diff --git a/sql/views/blocks.sql b/sql/views/blocks.sql index 4968006..d0f6e80 100644 --- a/sql/views/blocks.sql +++ b/sql/views/blocks.sql @@ -17,18 +17,17 @@ create table if not exists blocks as join wards2015 w on st_within(g.geom, w.wkb_geometry) where + g.geocode_accuracy > 0.7 and g.geocoded_city = 'Chicago' and ( g.geocode_accuracy_type = 'range_interpolation' or g.geocode_accuracy_type = 'rooftop' or g.geocode_accuracy_type = 'intersection' or - g.geocode_accuracy_type = 'point' + g.geocode_accuracy_type = 'point' or + g.geocode_accuracy_type = 'ohare' ) order by geocoded_address, geocode_accuracy desc ; -alter table blocks - add column id serial primary key; - create index on blocks (address); create index on blocks (ward); create index on wards2015 (ward); diff --git a/sql/views/blockstotals.sql b/sql/views/blockstotals.sql index 3623895..0d95109 100644 --- a/sql/views/blockstotals.sql +++ b/sql/views/blockstotals.sql @@ -1,17 +1,11 @@ create table if not exists blockstotals as select b.address, - count(ticket_number) as ticket_count, - sum(p.total_payments) as total_payments, - sum(p.current_amount_due) as current_amount_due, - sum(p.fine_level1_amount) as fine_level1_amount + sum(ticket_count) as ticket_count, + sum(b.total_payments) as total_payments, + sum(b.current_amount_due) as current_amount_due, + sum(b.fine_level1_amount) as fine_level1_amount from - blocks b - join - geocodes g - on b.address = g.geocoded_address - join - parking p - on p.address = g.address - GROUP BY b.address + blocksyearly b + group by address ; diff --git a/sql/views/blocksyearlytotals.sql b/sql/views/blocksyearlytotals.sql deleted file mode 100644 index de83c75..0000000 --- a/sql/views/blocksyearlytotals.sql +++ /dev/null @@ -1,19 +0,0 @@ -create table if not exists blocksyearlytotals as - select - p.year, - b.address, - count(ticket_number) as ticket_count, - sum(p.total_payments) as total_payments, - sum(p.current_amount_due) as current_amount_due, - sum(p.fine_level1_amount) as fine_level1_amount - from - blocks b - join - geocodes g - on b.address = g.geocoded_address - join - parking p - on p.address = g.address - GROUP BY b.address, p.year -; - diff --git a/sql/views/citywideyearly.sql b/sql/views/citywideyearly.sql new file mode 100644 index 0000000..a7cb271 --- /dev/null +++ b/sql/views/citywideyearly.sql @@ -0,0 +1,31 @@ +create table citywideyearly as + +with current_amount_due_sum as ( + select + year, + sum(current_amount_due) as current_amount_due + from parking + group by year +), +other_sums as ( + select + year, + count(*) as ticket_count, + sum(total_payments) as total_payments, + sum(fine_level1_amount) as fine_level1_amount + from parking + group by year +) + +select + c.year, + c.current_amount_due, + o.ticket_count, + o.total_payments, + o.fine_level1_amount + +from current_amount_due_sum c +join other_sums o + on o.year = c.year + +; diff --git a/sql/views/geoblocks.sql b/sql/views/geoblocks.sql index 156a55e..514912d 100644 --- a/sql/views/geoblocks.sql +++ b/sql/views/geoblocks.sql @@ -3,14 +3,16 @@ create table if not exists geoblocks as b.geom, b.ward, b.address, - t.ticket_count, - t.total_payments, - t.current_amount_due, - t.fine_level1_amount + sum(t.ticket_count) as ticket_count, + sum(t.total_payments) as total_payments, + sum(t.current_amount_due) as current_amount_due, + sum(t.fine_level1_amount) as fine_level1_amount from - blockstotals t + blocksyearly t join blocks b on b.address = t.address + where t.year >= 2013 and t.year <= 2017 + group by b.geom, b.ward, b.address ; diff --git a/sql/views/test_data.sql b/sql/views/test_data.sql index 2e974d1..f35c87e 100644 --- a/sql/views/test_data.sql +++ b/sql/views/test_data.sql @@ -6,7 +6,6 @@ with g.geocoded_city, g.geocode_accuracy_type, g.geocode_accuracy, - g.smarty_geocode, p.* from parking p join geocodes g @@ -27,24 +26,14 @@ with count(*) as total_accurate_tickets from all_tickets where - smarty_geocode = true or ( + geocode_accuracy > 0.7 and geocoded_city = 'Chicago' and ( geocode_accuracy_type = 'range_interpolation' or geocode_accuracy_type = 'rooftop' or geocode_accuracy_type = 'intersection' or - geocode_accuracy_type = 'point' + geocode_accuracy_type = 'point' or + geocode_accuracy_type = 'ohare' ) - ) - ), - total_very_accurate_tickets as ( - select - count(*) as total_very_accurate_tickets - from all_tickets - where - geocoded_city = 'Chicago' - and geocode_accuracy_type != 'place' - and geocode_accuracy_type != 'street_center' - and geocode_accuracy >= 0.7 ), total_tickets_5yr as ( select @@ -56,25 +45,15 @@ with count(*) as total_accurate_tickets_5yr from all_tickets_5yr where - smarty_geocode = true or ( - geocoded_city = 'Chicago' and ( - geocode_accuracy_type = 'range_interpolation' or - geocode_accuracy_type = 'rooftop' or - geocode_accuracy_type = 'intersection' or - geocode_accuracy_type = 'point' - ) + geocode_accuracy > 0.7 and + geocoded_city = 'Chicago' and ( + geocode_accuracy_type = 'range_interpolation' or + geocode_accuracy_type = 'rooftop' or + geocode_accuracy_type = 'intersection' or + geocode_accuracy_type = 'point' or + geocode_accuracy_type = 'ohare' ) ), - total_very_accurate_tickets_5yr as ( - select - count(*) as total_very_accurate_tickets_5yr - from all_tickets_5yr - where - geocoded_city = 'Chicago' - and geocode_accuracy_type != 'place' - and geocode_accuracy_type != 'street_center' - and geocode_accuracy >= 0.7 - ), citywide_totals as ( select sum(current_amount_due) as citywide_amount_due @@ -88,18 +67,14 @@ with select total_tickets, total_accurate_tickets, - total_very_accurate_tickets, total_accurate_tickets::decimal / total_tickets::decimal as accurate_tickets_pct, - total_very_accurate_tickets::decimal / total_tickets::decimal as very_accurate_tickets_pct, total_tickets_5yr, total_accurate_tickets_5yr, - total_very_accurate_tickets_5yr, total_accurate_tickets_5yr::decimal / total_tickets_5yr::decimal as accurate_tickets_5yr_pct, - total_very_accurate_tickets_5yr::decimal / total_tickets_5yr::decimal as very_accurate_tickets_5yr_pct, citywide_amount_due, wards_amount_due, wards_amount_due / citywide_amount_due as ward_amount_due_pct -from total_accurate_tickets, total_very_accurate_tickets, total_tickets, total_accurate_tickets_5yr, total_very_accurate_tickets_5yr, total_tickets_5yr, citywide_totals, ward_totals; +from total_accurate_tickets, total_tickets, total_accurate_tickets_5yr, total_tickets_5yr, citywide_totals, ward_totals; diff --git a/sql/views/wardsyearly.sql b/sql/views/wardsyearly.sql index ef0c2b9..ee9ae4a 100644 --- a/sql/views/wardsyearly.sql +++ b/sql/views/wardsyearly.sql @@ -23,11 +23,13 @@ create table if not exists wardsyearly as parking p on p.address = g.address where + g.geocode_accuracy > 0.7 and g.geocoded_city = 'Chicago' and ( g.geocode_accuracy_type = 'range_interpolation' or g.geocode_accuracy_type = 'rooftop' or g.geocode_accuracy_type = 'intersection' or - g.geocode_accuracy_type = 'point' + g.geocode_accuracy_type = 'point' or + g.geocode_accuracy_type = 'ohare' ) GROUP BY w.ward, p.year, p.notice_level, p.unit_description, p.hearing_disposition, p.ticket_queue, p.violation_code ; From 2749c645799b2e2e79c00b64de2cb6cd2d9320aa Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 22:27:17 -0600 Subject: [PATCH 130/140] fix camera loader to accomodate older data --- Makefile | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a7caa99..227f1d1 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ PARKINGYEARS = 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 -#PARKINGYEARS = 2018 -CAMERAYEARS = 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 +CAMERAYEARS = 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 DATATABLES = parking cameras CENSUSTABLES = acs_17_5yr_b03002 IMPORTS = wardmeta @@ -167,6 +166,11 @@ data/processed/A50951_PARK_Year_%_clean.csv : data/parking/A50951_PARK_Year_%.tx python processors/clean_csv.py $^ > data/processed/A50951_PARK_Year_$*_clean.csv 2> data/processed/A50951_PARK_Year_$*_err.txt +.PRECIOUS: data/processed/A50951_AUCM_Year_%_clean.csv +data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.txt processors/salt.txt + python processors/clean_csv.py $^ > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.txt + + data/processed/parking_tickets.csv : $(psql) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" @@ -187,9 +191,9 @@ dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv touch $@ -dupes/cameras-%.csv : data/cameras/A50951_AUCM_Year_%.txt +dupes/cameras-%.csv : data/processed/A50951_AUCM_Year_%_clean.csv $(check_tmp_cameras_relation) || $(psql) -c "CREATE TABLE tmp.tmp_table_cameras_$* AS SELECT * FROM public.cameras WITH NO DATA;" - sed \$$d $< | $(psql) -c "\copy tmp.tmp_table_cameras_$* FROM STDIN with (delimiter '$$', format csv, header);" + sed \$$d $< | $(psql) -c "\copy tmp.tmp_table_cameras_$* FROM STDIN with (delimiter ',', format csv, header, force_null(penalty));" $(psql) -c "INSERT INTO public.cameras SELECT * FROM tmp.tmp_table_cameras_$* ON CONFLICT DO NOTHING;" $(psql) -c "DROP TABLE tmp.tmp_table_cameras_$*;" touch $@ From 69d3023f92ab824cc2b08c0184ef5a6c86962ecc Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 22:27:49 -0600 Subject: [PATCH 131/140] do the pipfile thing --- Pipfile | 96 ++++++ Pipfile.lock | 868 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 - 3 files changed, 964 insertions(+), 1 deletion(-) create mode 100644 Pipfile create mode 100644 Pipfile.lock diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..79b3e48 --- /dev/null +++ b/Pipfile @@ -0,0 +1,96 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +agate = "==1.6.1" +agate-dbf = "==0.2.0" +agate-excel = "==0.2.2" +agate-sql = "==0.5.3" +appnope = "==0.1.0" +asn1crypto = "==0.24.0" +atomicwrites = "==1.2.1" +attrs = "==18.2.0" +backcall = "==0.1.0" +certifi = "==2018.4.16" +cffi = "==1.11.5" +chardet = "==3.0.4" +click = "==6.7" +constantly = "==15.1.0" +cryptography = "==2.4.2" +cssselect = "==1.0.3" +csvkit = "==1.0.3" +dbfread = "==2.0.7" +decorator = "==4.3.0" +docopt = "==0.6.2" +future = "==0.16.0" +geocoder = "==1.38.1" +hyperlink = "==18.0.0" +idna = "==2.7" +incremental = "==17.5.0" +ipdb = "==0.11" +ipython = "==6.4.0" +isodate = "==0.6.0" +jdcal = "==1.4" +jedi = "==0.12.0" +leather = "==0.3.3" +lxml = "==4.2.5" +more-itertools = "==4.3.0" +numpy = "==1.14.5" +odfpy = "==1.3.6" +openpyxl = "==2.5.4" +pandas = "==0.23.3" +parsedatetime = "==2.4" +parsel = "==1.5.1" +parso = "==0.2.1" +pexpect = "==4.6.0" +pickleshare = "==0.7.4" +pluggy = "==0.7.1" +psycopg2-binary = "==2.7.5" +ptyprocess = "==0.5.2" +py = "==1.7.0" +pyasn1 = "==0.4.4" +pyasn1-modules = "==0.2.2" +pycparser = "==2.19" +pycrypto = "==2.6.1" +pytest = "==3.8.2" +python-dateutil = "==2.7.3" +python-slugify = "==1.2.5" +pytimeparse = "==1.1.8" +pytz = "==2018.4" +queuelib = "==1.5.0" +ratelim = "==0.1.6" +records = "==0.5.2" +requests = "==2.19.1" +simplegeneric = "==0.8.1" +six = "==1.11.0" +tablib = "==0.12.1" +traitlets = "==4.3.2" +unicodecsv = "==0.14.1" +urllib3 = "==1.23" +w3lib = "==1.19.0" +wcwidth = "==0.1.7" +xlrd = "==1.1.0" +xlwt = "==1.3.0" +Automat = "==0.7.0" +Babel = "==2.6.0" +et_xmlfile = "==1.0.1" +ipython_genutils = "==0.2.0" +prompt_toolkit = "==1.0.15" +PyDispatcher = "==2.0.5" +Pygments = "==2.2.0" +PyHamcrest = "==1.9.0" +pyOpenSSL = "==18.0.0" +PyYAML = "==3.13" +Scrapy = "==1.5.1" +service_identity = "==17.0.0" +SQLAlchemy = "==1.2.8" +Twisted = "==18.9.0" +Unidecode = "==1.0.22" +"zope.interface" = "==4.6.0" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..f91db4a --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,868 @@ +{ + "_meta": { + "hash": { + "sha256": "0d35db405d111781dac6ae024facc908fc5cf0005c43e5922a7cb1c5cb6be256" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "agate": { + "hashes": [ + "sha256:48d6f80b35611c1ba25a642cbc5b90fcbdeeb2a54711c4a8d062ee2809334d1c", + "sha256:c93aaa500b439d71e4a5cf088d0006d2ce2c76f1950960c8843114e5f361dfd3" + ], + "index": "pypi", + "version": "==1.6.1" + }, + "agate-dbf": { + "hashes": [ + "sha256:0666c1ad06cd4b2860351cebbd88bd4b05b2d1abd41b25cf91f8f6715035735e", + "sha256:e445f17ebd0ab31cd0c2d086d79e95d9924deb251f733ea283161e3c8181333c" + ], + "index": "pypi", + "version": "==0.2.0" + }, + "agate-excel": { + "hashes": [ + "sha256:8923f71ee2b5b7b21e52fb314a769b28fb902f647534f5cbbb41991d8710f4c7" + ], + "index": "pypi", + "version": "==0.2.2" + }, + "agate-sql": { + "hashes": [ + "sha256:877b7b85adb5f0325455bba8d50a1623fa32af33680b554feca7c756a15ad9b4" + ], + "index": "pypi", + "version": "==0.5.3" + }, + "appnope": { + "hashes": [ + "sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0", + "sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71" + ], + "index": "pypi", + "version": "==0.1.0" + }, + "asn1crypto": { + "hashes": [ + "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87", + "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49" + ], + "index": "pypi", + "version": "==0.24.0" + }, + "atomicwrites": { + "hashes": [ + "sha256:0312ad34fcad8fac3704d441f7b317e50af620823353ec657a53e981f92920c0", + "sha256:ec9ae8adaae229e4f8446952d204a3e4b5fdd2d099f9be3aaf556120135fb3ee" + ], + "index": "pypi", + "version": "==1.2.1" + }, + "attrs": { + "hashes": [ + "sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69", + "sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb" + ], + "index": "pypi", + "version": "==18.2.0" + }, + "automat": { + "hashes": [ + "sha256:cbd78b83fa2d81fe2a4d23d258e1661dd7493c9a50ee2f1a5b2cac61c1793b0e", + "sha256:fdccab66b68498af9ecfa1fa43693abe546014dd25cf28543cbe9d1334916a58" + ], + "index": "pypi", + "version": "==0.7.0" + }, + "babel": { + "hashes": [ + "sha256:6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669", + "sha256:8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23" + ], + "index": "pypi", + "version": "==2.6.0" + }, + "backcall": { + "hashes": [ + "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", + "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" + ], + "index": "pypi", + "version": "==0.1.0" + }, + "certifi": { + "hashes": [ + "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7", + "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0" + ], + "index": "pypi", + "version": "==2018.4.16" + }, + "cffi": { + "hashes": [ + "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743", + "sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef", + "sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50", + "sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f", + "sha256:3bb6bd7266598f318063e584378b8e27c67de998a43362e8fce664c54ee52d30", + "sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93", + "sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257", + "sha256:495c5c2d43bf6cebe0178eb3e88f9c4aa48d8934aa6e3cddb865c058da76756b", + "sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3", + "sha256:57b2533356cb2d8fac1555815929f7f5f14d68ac77b085d2326b571310f34f6e", + "sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc", + "sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04", + "sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6", + "sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359", + "sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596", + "sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b", + "sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd", + "sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95", + "sha256:a6a5cb8809091ec9ac03edde9304b3ad82ad4466333432b16d78ef40e0cce0d5", + "sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e", + "sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6", + "sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca", + "sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31", + "sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1", + "sha256:ca1bd81f40adc59011f58159e4aa6445fc585a32bb8ac9badf7a2c1aa23822f2", + "sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085", + "sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801", + "sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4", + "sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184", + "sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917", + "sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f", + "sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb" + ], + "index": "pypi", + "version": "==1.11.5" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "index": "pypi", + "version": "==3.0.4" + }, + "click": { + "hashes": [ + "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d", + "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b" + ], + "index": "pypi", + "version": "==6.7" + }, + "constantly": { + "hashes": [ + "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35", + "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d" + ], + "index": "pypi", + "version": "==15.1.0" + }, + "cryptography": { + "hashes": [ + "sha256:05a6052c6a9f17ff78ba78f8e6eb1d777d25db3b763343a1ae89a7a8670386dd", + "sha256:0eb83a24c650a36f68e31a6d0a70f7ad9c358fa2506dc7b683398b92e354a038", + "sha256:0ff4a3d6ea86aa0c9e06e92a9f986de7ee8231f36c4da1b31c61a7e692ef3378", + "sha256:1699f3e916981df32afdd014fb3164db28cdb61c757029f502cb0a8c29b2fdb3", + "sha256:1b1f136d74f411f587b07c076149c4436a169dc19532e587460d9ced24adcc13", + "sha256:21e63dd20f5e5455e8b34179ac43d95b3fb1ffa54d071fd2ed5d67da82cfe6dc", + "sha256:2454ada8209bbde97065453a6ca488884bbb263e623d35ba183821317a58b46f", + "sha256:3cdc5f7ca057b2214ce4569e01b0f368b3de9d8ee01887557755ccd1c15d9427", + "sha256:418e7a5ec02a7056d3a4f0c0e7ea81df374205f25f4720bb0e84189aa5fd2515", + "sha256:471a097076a7c4ab85561d7fa9a1239bd2ae1f9fd0047520f13d8b340bf3210b", + "sha256:5ecaf9e7db3ca582c6de6229525d35db8a4e59dc3e8a40a331674ed90e658cbf", + "sha256:63b064a074f8dc61be81449796e2c3f4e308b6eba04a241a5c9f2d05e882c681", + "sha256:6afe324dfe6074822ccd56d80420df750e19ac30a4e56c925746c735cf22ae8b", + "sha256:70596e90398574b77929cd87e1ac6e43edd0e29ba01e1365fed9c26bde295aa5", + "sha256:70c2b04e905d3f72e2ba12c58a590817128dfca08949173faa19a42c824efa0b", + "sha256:8908f1db90be48b060888e9c96a0dee9d842765ce9594ff6a23da61086116bb6", + "sha256:af12dfc9874ac27ebe57fc28c8df0e8afa11f2a1025566476b0d50cdb8884f70", + "sha256:b4fc04326b2d259ddd59ed8ea20405d2e695486ab4c5e1e49b025c484845206e", + "sha256:da5b5dda4aa0d5e2b758cc8dfc67f8d4212e88ea9caad5f61ba132f948bab859" + ], + "index": "pypi", + "version": "==2.4.2" + }, + "cssselect": { + "hashes": [ + "sha256:066d8bc5229af09617e24b3ca4d52f1f9092d9e061931f4184cd572885c23204", + "sha256:3b5103e8789da9e936a68d993b70df732d06b8bb9a337a05ed4eb52c17ef7206" + ], + "index": "pypi", + "version": "==1.0.3" + }, + "csvkit": { + "hashes": [ + "sha256:a6c859c1321d4697dc41252877249091681297f093e08d9c1e1828a6d52c260c" + ], + "index": "pypi", + "version": "==1.0.3" + }, + "dbfread": { + "hashes": [ + "sha256:07c8a9af06ffad3f6f03e8fe91ad7d2733e31a26d2b72c4dd4cfbae07ee3b73d", + "sha256:f604def58c59694fa0160d7be5d0b8d594467278d2bb6a47d46daf7162c84cec" + ], + "index": "pypi", + "version": "==2.0.7" + }, + "decorator": { + "hashes": [ + "sha256:2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82", + "sha256:c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c" + ], + "index": "pypi", + "version": "==4.3.0" + }, + "docopt": { + "hashes": [ + "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491" + ], + "index": "pypi", + "version": "==0.6.2" + }, + "et-xmlfile": { + "hashes": [ + "sha256:614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b" + ], + "index": "pypi", + "version": "==1.0.1" + }, + "future": { + "hashes": [ + "sha256:e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb" + ], + "index": "pypi", + "version": "==0.16.0" + }, + "geocoder": { + "hashes": [ + "sha256:a733e1dfbce3f4e1a526cac03aadcedb8ed1239cf55bd7f3a23c60075121a834", + "sha256:c9925374c961577d0aee403b09e6f8ea1971d913f011f00ca70c76beaf7a77e7" + ], + "index": "pypi", + "version": "==1.38.1" + }, + "hyperlink": { + "hashes": [ + "sha256:98da4218a56b448c7ec7d2655cb339af1f7d751cf541469bb4fc28c4a4245b34", + "sha256:f01b4ff744f14bc5d0a22a6b9f1525ab7d6312cb0ff967f59414bbac52f0a306" + ], + "index": "pypi", + "version": "==18.0.0" + }, + "idna": { + "hashes": [ + "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", + "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + ], + "index": "pypi", + "version": "==2.7" + }, + "incremental": { + "hashes": [ + "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f", + "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3" + ], + "index": "pypi", + "version": "==17.5.0" + }, + "ipdb": { + "hashes": [ + "sha256:7081c65ed7bfe7737f83fa4213ca8afd9617b42ff6b3f1daf9a3419839a2a00a" + ], + "index": "pypi", + "version": "==0.11" + }, + "ipython": { + "hashes": [ + "sha256:a0c96853549b246991046f32d19db7140f5b1a644cc31f0dc1edc86713b7676f", + "sha256:eca537aa61592aca2fef4adea12af8e42f5c335004dfa80c78caf80e8b525e5c" + ], + "index": "pypi", + "version": "==6.4.0" + }, + "ipython-genutils": { + "hashes": [ + "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", + "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" + ], + "index": "pypi", + "version": "==0.2.0" + }, + "isodate": { + "hashes": [ + "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8", + "sha256:aa4d33c06640f5352aca96e4b81afd8ab3b47337cc12089822d6f322ac772c81" + ], + "index": "pypi", + "version": "==0.6.0" + }, + "jdcal": { + "hashes": [ + "sha256:948fb8d079e63b4be7a69dd5f0cd618a0a57e80753de8248fd786a8a20658a07", + "sha256:ea0a5067c5f0f50ad4c7bdc80abad3d976604f6fb026b0b3a17a9d84bb9046c9" + ], + "index": "pypi", + "version": "==1.4" + }, + "jedi": { + "hashes": [ + "sha256:1972f694c6bc66a2fac8718299e2ab73011d653a6d8059790c3476d2353b99ad", + "sha256:5861f6dc0c16e024cbb0044999f9cf8013b292c05f287df06d3d991a87a4eb89" + ], + "index": "pypi", + "version": "==0.12.0" + }, + "leather": { + "hashes": [ + "sha256:076d1603b5281488285718ce1a5ce78cf1027fe1e76adf9c548caf83c519b988", + "sha256:e0bb36a6d5f59fbf3c1a6e75e7c8bee29e67f06f5b48c0134407dde612eba5e2" + ], + "index": "pypi", + "version": "==0.3.3" + }, + "lxml": { + "hashes": [ + "sha256:02bc220d61f46e9b9d5a53c361ef95e9f5e1d27171cd461dddb17677ae2289a5", + "sha256:22f253b542a342755f6cfc047fe4d3a296515cf9b542bc6e261af45a80b8caf6", + "sha256:2f31145c7ff665b330919bfa44aacd3a0211a76ca7e7b441039d2a0b0451e415", + "sha256:36720698c29e7a9626a0dc802ef8885f8f0239bfd1689628ecd459a061f2807f", + "sha256:438a1b0203545521f6616132bfe0f4bca86f8a401364008b30e2b26ec408ce85", + "sha256:4815892904c336bbaf73dafd54f45f69f4021c22b5bad7332176bbf4fb830568", + "sha256:5be031b0f15ad63910d8e5038b489d95a79929513b3634ad4babf77100602588", + "sha256:5c93ae37c3c588e829b037fdfbd64a6e40c901d3f93f7beed6d724c44829a3ad", + "sha256:60842230678674cdac4a1cf0f707ef12d75b9a4fc4a565add4f710b5fcf185d5", + "sha256:62939a8bb6758d1bf923aa1c13f0bcfa9bf5b2fc0f5fa917a6e25db5fe0cfa4e", + "sha256:75830c06a62fe7b8fe3bbb5f269f0b308f19f3949ac81cfd40062f47c1455faf", + "sha256:81992565b74332c7c1aff6a913a3e906771aa81c9d0c68c68113cffcae45bc53", + "sha256:8c892fb0ee52c594d9a7751c7d7356056a9682674b92cc1c4dc968ff0f30c52f", + "sha256:9d862e3cf4fc1f2837dedce9c42269c8c76d027e49820a548ac89fdcee1e361f", + "sha256:a623965c086a6e91bb703d4da62dabe59fe88888e82c4117d544e11fd74835d6", + "sha256:a7783ab7f6a508b0510490cef9f857b763d796ba7476d9703f89722928d1e113", + "sha256:aab09fbe8abfa3b9ce62aaf45aca2d28726b1b9ee44871dbe644050a2fff4940", + "sha256:abf181934ac3ef193832fb973fd7f6149b5c531903c2ec0f1220941d73eee601", + "sha256:ae07fa0c115733fce1e9da96a3ac3fa24801742ca17e917e0c79d63a01eeb843", + "sha256:b9c78242219f674ab645ec571c9a95d70f381319a23911941cd2358a8e0521cf", + "sha256:bccb267678b870d9782c3b44d0cefe3ba0e329f9af8c946d32bf3778e7a4f271", + "sha256:c4df4d27f4c93b2cef74579f00b1d3a31a929c7d8023f870c4b476f03a274db4", + "sha256:caf0e50b546bb60dfa99bb18dfa6748458a83131ecdceaf5c071d74907e7e78a", + "sha256:d3266bd3ac59ac4edcd5fa75165dee80b94a3e5c91049df5f7c057ccf097551c", + "sha256:db0d213987bcd4e6d41710fb4532b22315b0d8fb439ff901782234456556aed1", + "sha256:dbbd5cf7690a40a9f0a9325ab480d0fccf46d16b378eefc08e195d84299bfae1", + "sha256:e16e07a0ec3a75b5ee61f2b1003c35696738f937dc8148fbda9fe2147ccb6e61", + "sha256:e175a006725c7faadbe69e791877d09936c0ef2cf49d01b60a6c1efcb0e8be6f", + "sha256:edd9c13a97f6550f9da2236126bb51c092b3b1ce6187f2bd966533ad794bbb5e", + "sha256:fa39ea60d527fbdd94215b5e5552f1c6a912624521093f1384a491a8ad89ad8b" + ], + "index": "pypi", + "version": "==4.2.5" + }, + "more-itertools": { + "hashes": [ + "sha256:c187a73da93e7a8acc0001572aebc7e3c69daf7bf6881a2cea10650bd4420092", + "sha256:c476b5d3a34e12d40130bc2f935028b5f636df8f372dc2c1c01dc19681b2039e", + "sha256:fcbfeaea0be121980e15bc97b3817b5202ca73d0eae185b4550cbfce2a3ebb3d" + ], + "index": "pypi", + "version": "==4.3.0" + }, + "numpy": { + "hashes": [ + "sha256:07379fe0b450f6fd6e5934a9bc015025bb4ce1c8fbed3ca8bef29328b1bc9570", + "sha256:085afac75bbc97a096744fcfc97a4b321c5a87220286811e85089ae04885acdd", + "sha256:2d6481c6bdab1c75affc0fc71eb1bd4b3ecef620d06f2f60c3f00521d54be04f", + "sha256:2df854df882d322d5c23087a4959e145b953dfff2abe1774fec4f639ac2f3160", + "sha256:381ad13c30cd1d0b2f3da8a0c1a4aa697487e8bb0e9e0cbeb7439776bcb645f8", + "sha256:385f1ce46e08676505b692bfde918c1e0b350963a15ef52d77691c2cf0f5dbf6", + "sha256:4130e5ae16c656b7de654dc5e595cfeb85d3a4b0bb0734d19c0dce6dc7ee0e07", + "sha256:4d278c2261be6423c5e63d8f0ceb1b0c6db3ff83f2906f4b860db6ae99ca1bb5", + "sha256:51c5dcb51cf88b34b7d04c15f600b07c6ccbb73a089a38af2ab83c02862318da", + "sha256:589336ba5199c8061239cf446ee2f2f1fcc0c68e8531ee1382b6fc0c66b2d388", + "sha256:5ae3564cb630e155a650f4f9c054589848e97836bebae5637240a0d8099f817b", + "sha256:5edf1acc827ed139086af95ce4449b7b664f57a8c29eb755411a634be280d9f2", + "sha256:6b82b81c6b3b70ed40bc6d0b71222ebfcd6b6c04a6e7945a936e514b9113d5a3", + "sha256:6c57f973218b776195d0356e556ec932698f3a563e2f640cfca7020086383f50", + "sha256:758d1091a501fd2d75034e55e7e98bfd1370dc089160845c242db1c760d944d9", + "sha256:8622db292b766719810e0cb0f62ef6141e15fe32b04e4eb2959888319e59336b", + "sha256:8b8dcfcd630f1981f0f1e3846fae883376762a0c1b472baa35b145b911683b7b", + "sha256:91fdd510743ae4df862dbd51a4354519dd9fb8941347526cd9c2194b792b3da9", + "sha256:97fa8f1dceffab782069b291e38c4c2227f255cdac5f1e3346666931df87373e", + "sha256:9b705f18b26fb551366ab6347ba9941b62272bf71c6bbcadcd8af94d10535241", + "sha256:9d69967673ab7b028c2df09cae05ba56bf4e39e3cb04ebe452b6035c3b49848e", + "sha256:9e1f53afae865cc32459ad211493cf9e2a3651a7295b7a38654ef3d123808996", + "sha256:a4a433b3a264dbc9aa9c7c241e87c0358a503ea6394f8737df1683c7c9a102ac", + "sha256:baadc5f770917ada556afb7651a68176559f4dca5f4b2d0947cd15b9fb84fb51", + "sha256:c725d11990a9243e6ceffe0ab25a07c46c1cc2c5dc55e305717b5afe856c9608", + "sha256:d696a8c87315a83983fc59dd27efe034292b9e8ad667aeae51a68b4be14690d9", + "sha256:e1864a4e9f93ddb2dc6b62ccc2ec1f8250ff4ac0d3d7a15c8985dd4e1fbd6418", + "sha256:e1d18421a7e2ad4a655b76e65d549d4159f8874c18a417464c1d439ee7ccc7cd" + ], + "index": "pypi", + "version": "==1.14.5" + }, + "odfpy": { + "hashes": [ + "sha256:6bcaf3b23aa9e49ed8c8c177266539b211add4e02402748a994451482a10cb1b" + ], + "index": "pypi", + "version": "==1.3.6" + }, + "openpyxl": { + "hashes": [ + "sha256:9239b74faf175dc4276a5fc277655fc53c2f704ded39e680d35e6a39e1913f69" + ], + "index": "pypi", + "version": "==2.5.4" + }, + "pandas": { + "hashes": [ + "sha256:05ac350f8a35abe6a02054f8cf54e0c048f13423b2acb87d018845afd736f0b4", + "sha256:174543cd68eaee60620146b38faaed950071f5665e0a4fa4adfdcfc23d7f7936", + "sha256:1a62a237fb7223c11d09daaeaf7d15f234bb836bfaf3d4f85746cdf9b2582f99", + "sha256:2c1ed1de5308918a7c6833df6db75a19c416c122921824e306c64a0626b3606c", + "sha256:33825ad26ce411d6526f903b3d02c0edf627223af59cf4b5876aa925578eec74", + "sha256:4c5f76fce8a4851f65374ea1d95ca24e9439540550e41e556c0879379517a6f5", + "sha256:67504a96f72fb4d7f051cfe77b9a7bb0d094c4e2e5a6efb2769eb80f36e6b309", + "sha256:683e0cc8c7faececbbc06aa4735709a07abad106099f165730c1015da916adec", + "sha256:77cd1b485c6a860b950ab3a85be7b5683eaacbc51cadf096db967886607d2231", + "sha256:814f8785f1ab412a7e9b9a8abb81dfe8727ebdeef850ecfaa262c04b1664000f", + "sha256:894216edaf7dd0a92623cdad423bbec2a23fc06eb9c85483e21876d1ef8f47e9", + "sha256:9331e20a07360b81d8c7b4b50223da387d264151d533a5a5853325800e6631a4", + "sha256:9cd3614b4e31a0889388ff1bd19ae857ad52658b33f776065793c293a29cf612", + "sha256:9d79e958adcd037eba3debbb66222804171197c0f5cd462315d1356aa72a5a30", + "sha256:b90e5d5460f23607310cbd1688a7517c96ce7b284095a48340d249dfc429172e", + "sha256:bc80c13ffddc7e269b706ed58002cc4c98cc135c36d827c99fb5ca54ced0eb7a", + "sha256:cbb074efb2a5e4956b261a670bfc2126b0ccfbf5b96b6ed021bc8c8cb56cf4a8", + "sha256:e8c62ab16feeda84d4732c42b7b67d7a89ad89df7e99efed80ea017bdc472f26", + "sha256:ff5ef271805fe877fe0d1337b6b1861113c44c75b9badb595c713a72cd337371" + ], + "index": "pypi", + "version": "==0.23.3" + }, + "parsedatetime": { + "hashes": [ + "sha256:3d817c58fb9570d1eec1dd46fa9448cd644eeed4fb612684b02dfda3a79cb84b", + "sha256:9ee3529454bf35c40a77115f5a596771e59e1aee8c53306f346c461b8e913094" + ], + "index": "pypi", + "version": "==2.4" + }, + "parsel": { + "hashes": [ + "sha256:493a9214acbdcb4487a084d95344c25e85e90426a67311ea0425dc5df8dc24b9", + "sha256:9ccd82b8a122345601f6f9209e972c0e8c3518a188fcff2d37cb4d7bc570b4b8" + ], + "index": "pypi", + "version": "==1.5.1" + }, + "parso": { + "hashes": [ + "sha256:cdef26e8adc10d589f3ec4eb444bd0a29f3f1eb6d72a4292ab8afcb9d68976a6", + "sha256:f0604a40b96e062b0fd99cf134cc2d5cdf66939d0902f8267d938b0d5b26707f" + ], + "index": "pypi", + "version": "==0.2.1" + }, + "pexpect": { + "hashes": [ + "sha256:2a8e88259839571d1251d278476f3eec5db26deb73a70be5ed5dc5435e418aba", + "sha256:3fbd41d4caf27fa4a377bfd16fef87271099463e6fa73e92a52f92dfee5d425b" + ], + "index": "pypi", + "version": "==4.6.0" + }, + "pickleshare": { + "hashes": [ + "sha256:84a9257227dfdd6fe1b4be1319096c20eb85ff1e82c7932f36efccfe1b09737b", + "sha256:c9a2541f25aeabc070f12f452e1f2a8eae2abd51e1cd19e8430402bdf4c1d8b5" + ], + "index": "pypi", + "version": "==0.7.4" + }, + "pluggy": { + "hashes": [ + "sha256:6e3836e39f4d36ae72840833db137f7b7d35105079aee6ec4a62d9f80d594dd1", + "sha256:95eb8364a4708392bae89035f45341871286a333f749c3141c20573d2b3876e1" + ], + "index": "pypi", + "version": "==0.7.1" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:1df952620eccb399c53ebb359cc7d9a8d3a9538cb34c5a1344bdbeb29fbcc381", + "sha256:3f473ae040ddaa52b52f97f6b4a493cfa9f5920c255a12dc56a7d34397a398a4", + "sha256:858588f1983ca497f1cf4ffde01d978a3ea02b01c8a26a8bbc5cd2e66d816917" + ], + "index": "pypi", + "version": "==1.0.15" + }, + "psycopg2-binary": { + "hashes": [ + "sha256:04afb59bbbd2eab3148e6816beddc74348078b8c02a1113ea7f7822f5be4afe3", + "sha256:098b18f4d8857a8f9b206d1dc54db56c2255d5d26458917e7bcad61ebfe4338f", + "sha256:0bf855d4a7083e20ead961fda4923887094eaeace0ab2d76eb4aa300f4bbf5bd", + "sha256:197dda3ffd02057820be83fe4d84529ea70bf39a9a4daee1d20ffc74eb3d042e", + "sha256:278ef63afb4b3d842b4609f2c05ffbfb76795cf6a184deeb8707cd5ed3c981a5", + "sha256:3cbf8c4fc8f22f0817220891cf405831559f4d4c12c4f73913730a2ea6c47a47", + "sha256:4305aed922c4d9d6163ab3a41d80b5a1cfab54917467da8168552c42cad84d32", + "sha256:47ee296f704fb8b2a616dec691cdcfd5fa0f11943955e88faa98cbd1dc3b3e3d", + "sha256:4a0e38cb30457e70580903367161173d4a7d1381eb2f2cfe4e69b7806623f484", + "sha256:4d6c294c6638a71cafb82a37f182f24321f1163b08b5d5ca076e11fe838a3086", + "sha256:4f3233c366500730f839f92833194fd8f9a5c4529c8cd8040aa162c3740de8e5", + "sha256:5221f5a3f4ca2ddf0d58e8b8a32ca50948be9a43351fda797eb4e72d7a7aa34d", + "sha256:5c6ca0b507540a11eaf9e77dee4f07c131c2ec80ca0cffa146671bf690bc1c02", + "sha256:789bd89d71d704db2b3d5e67d6d518b158985d791d3b2dec5ab85457cfc9677b", + "sha256:7b94d29239efeaa6a967f3b5971bd0518d2a24edd1511edbf4a2c8b815220d07", + "sha256:89bc65ef3301c74cf32db25334421ea6adbe8f65601ea45dcaaf095abed910bb", + "sha256:89d6d3a549f405c20c9ae4dc94d7ed2de2fa77427a470674490a622070732e62", + "sha256:97521704ac7127d7d8ba22877da3c7bf4a40366587d238ec679ff38e33177498", + "sha256:a395b62d5f44ff6f633231abe568e2203b8fabf9797cd6386aa92497df912d9a", + "sha256:a6d32c37f714c3f34158f3fa659f3a8f2658d5f53c4297d45579b9677cc4d852", + "sha256:a89ee5c26f72f2d0d74b991ce49e42ddeb4ac0dc2d8c06a0f2770a1ab48f4fe0", + "sha256:b4c8b0ef3608e59317bfc501df84a61e48b5445d45f24d0391a24802de5f2d84", + "sha256:b5fcf07140219a1f71e18486b8dc28e2e1b76a441c19374805c617aa6d9a9d55", + "sha256:b86f527f00956ecebad6ab3bb30e3a75fedf1160a8716978dd8ce7adddedd86f", + "sha256:be4c4aa22ba22f70de36c98b06480e2f1697972d49eb20d525f400d204a6d272", + "sha256:c2ac7aa1a144d4e0e613ac7286dae85671e99fe7a1353954d4905629c36b811c", + "sha256:de26ef4787b5e778e8223913a3e50368b44e7480f83c76df1f51d23bd21cea16", + "sha256:e70ebcfc5372dc7b699c0110454fc4263967f30c55454397e5769eb72c0eb0ce", + "sha256:eadbd32b6bc48b67b0457fccc94c86f7ccc8178ab839f684eb285bb592dc143e", + "sha256:ecbc6dfff6db06b8b72ae8a2f25ff20fbdcb83cb543811a08f7cb555042aa729" + ], + "index": "pypi", + "version": "==2.7.5" + }, + "ptyprocess": { + "hashes": [ + "sha256:e64193f0047ad603b71f202332ab5527c5e52aa7c8b609704fc28c0dc20c4365", + "sha256:e8c43b5eee76b2083a9badde89fd1bbce6c8942d1045146e100b7b5e014f4f1a" + ], + "index": "pypi", + "version": "==0.5.2" + }, + "py": { + "hashes": [ + "sha256:bf92637198836372b520efcba9e020c330123be8ce527e535d185ed4b6f45694", + "sha256:e76826342cefe3c3d5f7e8ee4316b80d1dd8a300781612ddbc765c17ba25a6c6" + ], + "index": "pypi", + "version": "==1.7.0" + }, + "pyasn1": { + "hashes": [ + "sha256:b9d3abc5031e61927c82d4d96c1cec1e55676c1a991623cfed28faea73cdd7ca", + "sha256:f58f2a3d12fd754aa123e9fa74fb7345333000a035f3921dbdaa08597aa53137" + ], + "index": "pypi", + "version": "==0.4.4" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:a0cf3e1842e7c60fde97cb22d275eb6f9524f5c5250489e292529de841417547", + "sha256:a38a8811ea784c0136abfdba73963876328f66172db21a05a82f9515909bfb4e" + ], + "index": "pypi", + "version": "==0.2.2" + }, + "pycparser": { + "hashes": [ + "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" + ], + "index": "pypi", + "version": "==2.19" + }, + "pycrypto": { + "hashes": [ + "sha256:f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c" + ], + "index": "pypi", + "version": "==2.6.1" + }, + "pydispatcher": { + "hashes": [ + "sha256:5570069e1b1769af1fe481de6dd1d3a388492acddd2cdad7a3bde145615d5caf", + "sha256:5be4a8be12805ef7d712dd9a93284fb8bc53f309867e573f653a72e5fd10e433" + ], + "index": "pypi", + "version": "==2.0.5" + }, + "pygments": { + "hashes": [ + "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", + "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" + ], + "index": "pypi", + "version": "==2.2.0" + }, + "pyhamcrest": { + "hashes": [ + "sha256:6b672c02fdf7470df9674ab82263841ce8333fb143f32f021f6cb26f0e512420", + "sha256:8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd" + ], + "index": "pypi", + "version": "==1.9.0" + }, + "pyopenssl": { + "hashes": [ + "sha256:26ff56a6b5ecaf3a2a59f132681e2a80afcc76b4f902f612f518f92c2a1bf854", + "sha256:6488f1423b00f73b7ad5167885312bb0ce410d3312eb212393795b53c8caa580" + ], + "index": "pypi", + "version": "==18.0.0" + }, + "pytest": { + "hashes": [ + "sha256:7e258ee50338f4e46957f9e09a0f10fb1c2d05493fa901d113a8dafd0790de4e", + "sha256:9332147e9af2dcf46cd7ceb14d5acadb6564744ddff1fe8c17f0ce60ece7d9a2" + ], + "index": "pypi", + "version": "==3.8.2" + }, + "python-dateutil": { + "hashes": [ + "sha256:1adb80e7a782c12e52ef9a8182bebeb73f1d7e24e374397af06fb4956c8dc5c0", + "sha256:e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8" + ], + "index": "pypi", + "version": "==2.7.3" + }, + "python-slugify": { + "hashes": [ + "sha256:5dbb360b882b2dabe0471a1a92f604504d83c2a73c71f2098d004ab62e695534" + ], + "index": "pypi", + "version": "==1.2.5" + }, + "pytimeparse": { + "hashes": [ + "sha256:04b7be6cc8bd9f5647a6325444926c3ac34ee6bc7e69da4367ba282f076036bd", + "sha256:e86136477be924d7e670646a98561957e8ca7308d44841e21f5ddea757556a0a" + ], + "index": "pypi", + "version": "==1.1.8" + }, + "pytz": { + "hashes": [ + "sha256:65ae0c8101309c45772196b21b74c46b2e5d11b6275c45d251b150d5da334555", + "sha256:c06425302f2cf668f1bba7a0a03f3c1d34d4ebeef2c72003da308b3947c7f749" + ], + "index": "pypi", + "version": "==2018.4" + }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "index": "pypi", + "version": "==3.13" + }, + "queuelib": { + "hashes": [ + "sha256:42b413295551bdc24ed9376c1a2cd7d0b1b0fa4746b77b27ca2b797a276a1a17", + "sha256:ff43b5b74b9266f8df4232a8f768dc4d67281a271905e2ed4a3689d4d304cd02" + ], + "index": "pypi", + "version": "==1.5.0" + }, + "ratelim": { + "hashes": [ + "sha256:826d32177e11f9a12831901c9fda6679fd5bbea3605910820167088f5acbb11d", + "sha256:e1a7dd39e6b552b7cc7f52169cd66cdb826a1a30198e355d7016012987c9ad08" + ], + "index": "pypi", + "version": "==0.1.6" + }, + "records": { + "hashes": [ + "sha256:238cba35e8efbb724493bbb195bd027d9e78db4a978597969a7af0f722ac3686", + "sha256:6d060a2b44ecc198d4e86efd5dab8558a2581b4019970bd8839e1604a243f57e" + ], + "index": "pypi", + "version": "==0.5.2" + }, + "requests": { + "hashes": [ + "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1", + "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a" + ], + "index": "pypi", + "version": "==2.19.1" + }, + "scrapy": { + "hashes": [ + "sha256:5a398bf6818f87dcc817c919408a195f19ba46414ae12f259119336cfa862bb6", + "sha256:5b9621731e26b0d195ca3e25ab34d559f45b0b906c0a0cc359199f1b6b612184" + ], + "index": "pypi", + "version": "==1.5.1" + }, + "service-identity": { + "hashes": [ + "sha256:0e76f3c042cc0f5c7e6da002cf646f59dc4023962d1d1166343ce53bdad39e17", + "sha256:4001fbb3da19e0df22c47a06d29681a398473af4aa9d745eca525b3b2c2302ab" + ], + "index": "pypi", + "version": "==17.0.0" + }, + "simplegeneric": { + "hashes": [ + "sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173" + ], + "index": "pypi", + "version": "==0.8.1" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "index": "pypi", + "version": "==1.11.0" + }, + "sqlalchemy": { + "hashes": [ + "sha256:2d5f08f714a886a1382c18be501e614bce50d362384dc089474019ce0768151c" + ], + "index": "pypi", + "version": "==1.2.8" + }, + "tablib": { + "hashes": [ + "sha256:b8cf50a61d66655229993f2ee29220553fb2c80403479f8e6de77c0c24649d87" + ], + "index": "pypi", + "version": "==0.12.1" + }, + "traitlets": { + "hashes": [ + "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", + "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9" + ], + "index": "pypi", + "version": "==4.3.2" + }, + "twisted": { + "hashes": [ + "sha256:294be2c6bf84ae776df2fc98e7af7d6537e1c5e60a46d33c3ce2a197677da395" + ], + "index": "pypi", + "version": "==18.9.0" + }, + "unicodecsv": { + "hashes": [ + "sha256:018c08037d48649a0412063ff4eda26eaa81eff1546dbffa51fa5293276ff7fc" + ], + "index": "pypi", + "version": "==0.14.1" + }, + "unidecode": { + "hashes": [ + "sha256:72f49d3729f3d8f5799f710b97c1451c5163102e76d64d20e170aedbbd923582", + "sha256:8c33dd588e0c9bc22a76eaa0c715a5434851f726131bd44a6c26471746efabf5" + ], + "index": "pypi", + "version": "==1.0.22" + }, + "urllib3": { + "hashes": [ + "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf", + "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5" + ], + "index": "pypi", + "version": "==1.23" + }, + "w3lib": { + "hashes": [ + "sha256:55994787e93b411c2d659068b51b9998d9d0c05e0df188e6daf8f45836e1ea38", + "sha256:aaf7362464532b1036ab0092e2eee78e8fd7b56787baa9ed4967457b083d011b" + ], + "index": "pypi", + "version": "==1.19.0" + }, + "wcwidth": { + "hashes": [ + "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", + "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" + ], + "index": "pypi", + "version": "==0.1.7" + }, + "xlrd": { + "hashes": [ + "sha256:83a1d2f1091078fb3f65876753b5302c5cfb6a41de64b9587b74cefa75157148", + "sha256:8a21885513e6d915fe33a8ee5fdfa675433b61405ba13e2a69e62ee36828d7e2" + ], + "index": "pypi", + "version": "==1.1.0" + }, + "xlwt": { + "hashes": [ + "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", + "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88" + ], + "index": "pypi", + "version": "==1.3.0" + }, + "zope.interface": { + "hashes": [ + "sha256:086707e0f413ff8800d9c4bc26e174f7ee4c9c8b0302fbad68d083071822316c", + "sha256:1157b1ec2a1f5bf45668421e3955c60c610e31913cc695b407a574efdbae1f7b", + "sha256:11ebddf765bff3bbe8dbce10c86884d87f90ed66ee410a7e6c392086e2c63d02", + "sha256:14b242d53f6f35c2d07aa2c0e13ccb710392bcd203e1b82a1828d216f6f6b11f", + "sha256:1b3d0dcabc7c90b470e59e38a9acaa361be43b3a6ea644c0063951964717f0e5", + "sha256:20a12ab46a7e72b89ce0671e7d7a6c3c1ca2c2766ac98112f78c5bddaa6e4375", + "sha256:298f82c0ab1b182bd1f34f347ea97dde0fffb9ecf850ecf7f8904b8442a07487", + "sha256:2f6175722da6f23dbfc76c26c241b67b020e1e83ec7fe93c9e5d3dd18667ada2", + "sha256:3b877de633a0f6d81b600624ff9137312d8b1d0f517064dfc39999352ab659f0", + "sha256:4265681e77f5ac5bac0905812b828c9fe1ce80c6f3e3f8574acfb5643aeabc5b", + "sha256:550695c4e7313555549aa1cdb978dc9413d61307531f123558e438871a883d63", + "sha256:5f4d42baed3a14c290a078e2696c5f565501abde1b2f3f1a1c0a94fbf6fbcc39", + "sha256:62dd71dbed8cc6a18379700701d959307823b3b2451bdc018594c48956ace745", + "sha256:7040547e5b882349c0a2cc9b50674b1745db551f330746af434aad4f09fba2cc", + "sha256:7e099fde2cce8b29434684f82977db4e24f0efa8b0508179fce1602d103296a2", + "sha256:7e5c9a5012b2b33e87980cee7d1c82412b2ebabcb5862d53413ba1a2cfde23aa", + "sha256:81295629128f929e73be4ccfdd943a0906e5fe3cdb0d43ff1e5144d16fbb52b1", + "sha256:95cc574b0b83b85be9917d37cd2fad0ce5a0d21b024e1a5804d044aabea636fc", + "sha256:968d5c5702da15c5bf8e4a6e4b67a4d92164e334e9c0b6acf080106678230b98", + "sha256:9e998ba87df77a85c7bed53240a7257afe51a07ee6bc3445a0bf841886da0b97", + "sha256:a0c39e2535a7e9c195af956610dba5a1073071d2d85e9d2e5d789463f63e52ab", + "sha256:a15e75d284178afe529a536b0e8b28b7e107ef39626a7809b4ee64ff3abc9127", + "sha256:a6a6ff82f5f9b9702478035d8f6fb6903885653bff7ec3a1e011edc9b1a7168d", + "sha256:b639f72b95389620c1f881d94739c614d385406ab1d6926a9ffe1c8abbea23fe", + "sha256:bad44274b151d46619a7567010f7cde23a908c6faa84b97598fd2f474a0c6891", + "sha256:bbcef00d09a30948756c5968863316c949d9cedbc7aabac5e8f0ffbdb632e5f1", + "sha256:d788a3999014ddf416f2dc454efa4a5dbeda657c6aba031cf363741273804c6b", + "sha256:eed88ae03e1ef3a75a0e96a55a99d7937ed03e53d0cffc2451c208db445a2966", + "sha256:f99451f3a579e73b5dd58b1b08d1179791d49084371d9a47baad3b22417f0317" + ], + "index": "pypi", + "version": "==4.6.0" + } + }, + "develop": {} +} diff --git a/requirements.txt b/requirements.txt index f205b8d..825cc71 100644 --- a/requirements.txt +++ b/requirements.txt @@ -57,7 +57,6 @@ PyDispatcher==2.0.5 Pygments==2.2.0 PyHamcrest==1.9.0 pyOpenSSL==18.0.0 --e git+git@github.com:jezcope/pyrefine.git@44872592b1c0430d942d6901d7670e7b0ae77b11#egg=pyrefine pytest==3.8.2 python-dateutil==2.7.3 python-slugify==1.2.5 From 7aa10291c426fc325f3f2e624930596a47fe22dd Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 22:29:40 -0600 Subject: [PATCH 132/140] camera data now runs through python processor and needs new columns --- sql/tables/cameras.sql | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sql/tables/cameras.sql b/sql/tables/cameras.sql index 6e308e3..7b1d6c2 100644 --- a/sql/tables/cameras.sql +++ b/sql/tables/cameras.sql @@ -20,5 +20,12 @@ CREATE TABLE public.cameras ( notice_level character varying, hearing_disposition character varying, notice_number bigint, - officer character varying + dismissal_reason character varying(128), + officer character varying, + address character varying(80), + license_hash character varying, + year int, + month int, + hour int, + penalty double precision null ); From b80f5892955ac42463c29c758dac408dadc9ce49 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 22:29:59 -0600 Subject: [PATCH 133/140] remove duplicate issue date in table definition --- sql/tables/parking.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/sql/tables/parking.sql b/sql/tables/parking.sql index 717856b..b662246 100644 --- a/sql/tables/parking.sql +++ b/sql/tables/parking.sql @@ -1,7 +1,6 @@ CREATE TABLE public.parking ( ticket_number bigint primary key, issue_date timestamp without time zone, - issue_date timestamp without time zone, violation_location character varying, license_plate_number character varying, license_plate_state character varying, From 5694556e614092dc8e17afa5904102b6403e4fdb Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 22:30:22 -0600 Subject: [PATCH 134/140] add some exports for block club --- sql/exports/expired_meters_37th_ward.sql | 4 ++++ sql/exports/stickers_meters.sql | 28 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 sql/exports/expired_meters_37th_ward.sql create mode 100644 sql/exports/stickers_meters.sql diff --git a/sql/exports/expired_meters_37th_ward.sql b/sql/exports/expired_meters_37th_ward.sql new file mode 100644 index 0000000..f490f5f --- /dev/null +++ b/sql/exports/expired_meters_37th_ward.sql @@ -0,0 +1,4 @@ +select + sum(ticket_count) as meter_violations from wardsviolations5yr where + (violation_description = 'EXPIRED METER CENTRAL BUSINESS DISTRICT' or violation_description = 'EXP. METER NON-CENTRAL BUSINESS DISTRICT') + and ward='37' diff --git a/sql/exports/stickers_meters.sql b/sql/exports/stickers_meters.sql new file mode 100644 index 0000000..0f4d57e --- /dev/null +++ b/sql/exports/stickers_meters.sql @@ -0,0 +1,28 @@ +with sticker_counts as ( + select + count(*) as sticker_count + from parking + where + (violation_code = '0964125' or violation_code = '0976170' or violation_code = '0964125B') and year >= 2013 and year <= 2017 +), +meter_counts as ( +select +count(*) as meter_count + from parking + where + (violation_code = '0976160B' or violation_code = '0976160F') and year >= 2013 and year <= 2017 +), +counts as ( + select + count(*) + from parking + where + year >= 2013 and year <= 2017 +) +select + m.meter_count, + s.sticker_count, + c.count as total, + m.meter_count::float / c.count::float as meter_pct, + s.sticker_count::float / c.count::float as sticker_pct +from sticker_counts s, meter_counts m, counts c From fc588425fb9df81851d1c5d28b5714918f3ed17b Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 22:33:27 -0600 Subject: [PATCH 135/140] ignore bulletproofing stuff --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a437b7d..40bb6e2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ __pycache__/ il-ticket-loader/ processors/salt.txt env/mapbox.sh +bulletproof/*.csv +.ipynb_checkpoints/ From 27c31dcb88cb25fefd4e8979d018da869eb63143 Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 23:20:50 -0600 Subject: [PATCH 136/140] make datastore directory --- data/datastore/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/datastore/.gitkeep diff --git a/data/datastore/.gitkeep b/data/datastore/.gitkeep new file mode 100644 index 0000000..e69de29 From 7e69e02ec3fc8a2ace7b6bf88eefa63f94a212bc Mon Sep 17 00:00:00 2001 From: David Eads Date: Mon, 11 Feb 2019 23:21:26 -0600 Subject: [PATCH 137/140] use exports framework to zip-n-ship --- Makefile | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 227f1d1..bb1fdba 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ DATADIRS = analysis cameras geodata parking processed .PHONY: all clean bootstrap tables indexes views analysis parking cameras load download_parking download_cameras zip_n_ship sync geojson_tables shp_tables .INTERMEDIATE: processors/salt.txt -all: bootstrap geo census parking imports transforms indexes views +all: bootstrap geo census parking cameras imports transforms indexes views bootstrap : create_db tables schema geo: load_geocodes geojson_tables shp_tables @@ -24,7 +24,6 @@ indexes : $(patsubst %, index_%, $(DATATABLES)) views : $(patsubst %, view_%, $(VIEWS)) imports : $(patsubst %, import_%, $(IMPORTS)) transforms : $(patsubst %, transform_%, $(TRANSFORMS)) -appgeo : bootstrap load_geodata_wards2015 parking : $(patsubst %, dupes/parking-%.csv, $(PARKINGYEARS)) cameras : $(patsubst %, dupes/cameras-%.csv, $(CAMERAYEARS)) @@ -171,16 +170,12 @@ data/processed/A50951_AUCM_Year_%_clean.csv : data/cameras/A50951_AUCM_Year_%.tx python processors/clean_csv.py $^ > data/processed/A50951_AUCM_Year_$*_clean.csv 2> data/processed/A50951_AUCM_Year_$*_err.txt -data/processed/parking_tickets.csv : - $(psql) -c "\copy parking TO '$(CURDIR)/$@' with (delimiter ',', format csv, header);" - - -data/processed/parking_tickets.zip : data/data_dictionary.txt data/unit_key.csv data/processed/parking_tickets.csv +data/datastore/tickets.zip : data/data_dictionary.txt data/unit_key.csv data/exports/chicago_parking_tickets.csv data/exports/chicago_camera_tickets.csv zip $@ $^ -upload_zip : data/processed/parking_tickets.zip - aws s3 cp $^ s3://data-publica/il_parking_tickets_20180822.zip +upload_zip : data/datastore/tickets.zip + aws s3 cp $^ s3://data-publica/il_tickets_`git rev-parse HEAD | cut -c1-8`.zip dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv From 7c7087c3dcae9b6edbd8026f505af0bd447dea43 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 12 Feb 2019 13:24:12 -0600 Subject: [PATCH 138/140] add makefile download alias --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index bb1fdba..04fbc19 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ transforms : $(patsubst %, transform_%, $(TRANSFORMS)) parking : $(patsubst %, dupes/parking-%.csv, $(PARKINGYEARS)) cameras : $(patsubst %, dupes/cameras-%.csv, $(CAMERAYEARS)) +download: download_parking download_cameras download_parking : $(patsubst %, data/parking/A50951_PARK_Year_%.txt, $(PARKINGYEARS)) download_cameras : $(patsubst %, data/cameras/A50951_AUCM_Year_%.txt, $(CAMERAYEARS)) From 2452f3022e8719b0f4f56dfb844416c4e2431ddf Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 12 Feb 2019 13:27:23 -0600 Subject: [PATCH 139/140] update README for release --- README.md | 141 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 104 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index a31628b..5bb9281 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ # Illinois Ticket Data Loader +**Warning: This is currently for research and study purposes only. The code is not fully documented and it will not run without talking with ProPublica to gain access to the source data.** + ## Requirements * GNU make * Python 3 * GDAL * PostgreSQL + PostGIS -* ProPublica Illinois S3 bucket credentials +* ProPublica Illinois S3 bucket credentials or copies of the source data Run `pip install -r requirements.txt` to install Python dependencies. -## Configuration +## Configuration and setup A default configuration can be imported by running: @@ -29,6 +31,25 @@ export ILTICKETS_DB_STRING="dbname=iltickets" This variables are a bit repetitive. Of note is `ILTICKETS_DB_STRING`, which is the [`ogr2ogr`](http://www.gdal.org/drv_pg.html) connection string. +You'll also need the Python libraries defined in `requirements.txt`. We use [Pipenv](https://pipenv.readthedocs.io/) to manage our environment. If you do too, just run: + +``` +pipenv install +``` + +## Getting source data + +Currently, you must have access to the source data for this project, which is different from what's available in the [ProPublica Data Store](https://www.propublica.org/datastore/dataset/chicago-parking-ticket-data). Contact ProPublica by [creating an issue](https://github.com/propublica/il-ticket-loader/issues/new) in this repository and we'll be in touch. + +If you have access to our S3 bucket, you can run: + +``` +make download +``` + +If you have talked with us, follow our instructions to unzip the data files in the `data` directory. + + ## Running ### One shot @@ -42,7 +63,7 @@ make all Fast version: ``` -make bootstrap geo && make -j 8 parking && make indexes views +make bootstrap geo census && make -j8 parking && make -j8 cameras && make imports transforms indexes views ``` Set `-j N` to reflect the number of processors available on your system. @@ -55,8 +76,6 @@ make drop_db ### Download -**This is currently broken.** - ``` make download ``` @@ -71,48 +90,96 @@ make clean_ E.g. `make clean_processed` or `make clean_geodata`. +`make clean` will clean everything, but use with care as the files in `data/processed` used for database loading take a solid 10 minutes to generate on a 2.7GHz i7 MacBook Pro with 16GB RAM. Don't regenerate those files unless you really need to. + ### Error handling Bad CSV rows are written to `data/processed/_err.csv`. These should only ever be the final "total" line from each file. +### Rebuild views / regenerate analysis + +The data analysis relies heavily on SQL "views" (these aren't real views but simply tables derived from the source data due to a bug with Hasura's handling of materialized views). + +To regenerate the full data analysis: + +``` +make drop_views && make views +``` + +To regenerate one part of the analysis: + +``` +make drop_view_warddemographics && make view_warddemographics +``` + +### Export data + +For a SQL file in `sql/exports`, `make export_FILENAME` will export a CSV with the content of the query. + +For example, if you create a file called `penalities_2009_to_2011.sql` that queries for penalties from 2009 to 2011, then to export it, you can run: + +``` +make data/exports/penalities_2009_to_2011.csv +``` + +### Upload to ProPublica Data Store + +To package for the ProPublica Data Store, run: + +``` +make zip_n_ship +``` + ## Working with data -### Tables +### Tables and database structure + +Currently undocumented. See `sql/tables` for source table schema, see `sql/views` for transformations and analysis based on source data, and `sql/exports` for exports. In addition, there are SQL files to set up indexes and apply some simple data transformations. + -* `parking`: Raw parking ticket data -* `communityareas`: Chicago Community Area geographic data -* `wards2015`: Chicago Aldermanic Ward geographic data -* `geocodes`: Data from original geocoding run. **Use `blocks` for most queries.** -* `geocodes`: De-duplicated version of `geocodes` table, enhanced with additional fields: cardinal direction, zipcode, and geographies this block is part of (currently just wards). Join through this table (see below). - against this table. -* `wardsyearly`: Counts and sums of block tickets, fees, and debt, aggregated to the ward level. Grouped by year, violation code, ticket queue, hearing disposition, unit description, and notice level. -* `blocksyearly`: Counts and sums of block tickets, fees, and debt. Grouped by year, violation code, ticket queue, hearing disposition, unit description, and notice level. +### Bullet proofing + +Ask David Eads or Jeff Kao about this. ## Data dictionary The City of Chicago has told us that an official data dictionary does not exist. But through interviews with finance department officials and other reporting, this is how we can best describe the data contained in these records: -• `ticket_number`: a unique ID for each citation -* `issue_date`: date and time the ticket was issued -* `violation_location`: street address where the ticket was issued -* `license_plate_number`: contains a hash, making it possible to determine whether tickets were issued to the same vehicle, while anonymizing the actual license plate numbers. -* `license_plate_state`: what state the license plate is from, expressed as a two-letter abbreviation -* `license_plate_type`: the vast majority of license plates are for passenger vehicles. But also included are trucks, temporary plates and taxi cabs, among many others. -* `zipcode`: the ZIP code associated with the vehicle registration -* `violation_code`: municipal code associated with violation; these have changed slightly over time -* `violation_description`: name of violation -* `unit`: This number relates to subcategories within units, such as police precincts or private contractors. A file with a unit crosswalk obtained from the Department of Finance is included in the data download. -* `unit_description`: the agency that issued the ticket, typically “CPD” for Chicago Police Department or “DOF” for Department of Finance, which can include subcontractors. -* `vehicle_make`: vehicle make -* `fine_level1_amount`: original cost of citation -* `fine_level2_amount`: price of citation plus any late penalties or collections fees. Unpaid tickets can double in price and accrue a 22-percent collection charge. -* `current_amount_due`: total amount due for that citation and any related late penalties as of May 14, 2018, when data was last updated. -* `total_payments`: total amount paid for ticket and associated penalties as of May 14, 2018, when data was last updated. -* `ticket_queue`: This category describes the most recent status of the ticket. These are marked “Paid” if the ticket was paid; “Dismissed” if the ticket was dismissed, (either internally or as a result of an appeal); “Hearing Req” if the ticket was contested and awaiting a hearing at the time the data was pulled; “Notice” if the ticket was not yet paid and the city sent a notice to the address on file for that vehicle; “Court” if the ticket is involved in some sort of court case, not including bankruptcy; “Bankruptcy” if the ticket was unpaid and included as a debt in a consumer bankruptcy case; and “Define” if the city cannot identify the vehicle owner and collect on a debt. Current as of May 14, 2018, when the data was last updated. -* `ticket_queue_date`: when the “ticket_queue” was last updated. -* `notice_level`: This field describes the type of notice the city has sent a motorist. The types of notices include: “VIOL,” which means a notice of violation was sent; “SEIZ” indicates the vehicle is on the city’s boot list; “DETR” indicates a hearing officer found the vehicle owner was found liable for the citation; “FINL” indicates the unpaid ticket was sent to collections; and “DLS” means the city intends to seek a license suspension. If the field is blank, no notice was sent. -• `hearing_disposition`: outcome of a hearing, either “Liable” or “Not Liable.” If the ticket was not contested this field is blank. -• `notice_number`: a unique ID attached to the notice, if one was sent. -• `officer`: a unique ID for the specific police officer or parking enforcement aide who issued the ticket. -• `address`: full address of the form “, Chicago, IL ”. Addresses in this field are normalized to the block level (e.g. 1983 N. Ashland is transformed to 1900 N. Ashland) for more efficient geocoding and analysis. This field was computed by ProPublica and does not exist in the original data. + +* ticket_number: a unique ID for each citation +* issue_date: date and time the ticket was issued +* violation_location: street address where the ticket was issued +* license_plate_number: contains a hash, making it possible to determine whether tickets were issued to the same vehicle, while anonymizing the actual license plate numbers. +* license_plate_state: what state the license plate is from, expressed as a two-letter abbreviation +* license_plate_type: the vast majority of license plates are for passenger vehicles. But also included are trucks, temporary plates and taxi cabs, among many others. +* zipcode: the ZIP code associated with the vehicle registration +* violation_code: municipal code associated with violation; these have changed slightly over time +* violation_description: name of violation +* unit: This number relates to subcategories within units, such as police precincts or private contractors. A file with a unit crosswalk obtained from the Department of Finance is included in the data download. +* unit_description: the agency that issued the ticket, typically “CPD” for Chicago Police Department or “DOF” for Department of Finance, which can include subcontractors. +vehicle_make: vehicle make +* fine_level1_amount: original cost of citation +* fine_level2_amount: price of citation plus any late penalties or collections fees. Unpaid tickets can double in price and accrue a 22-percent collection charge. +current_amount_due: total amount due for that citation and any related late penalties as of May 14, 2018, when data was last updated. +* total_payments: total amount paid for ticket and associated penalties as of May 14, 2018, when data was last updated. +* ticket_queue: This category describes the most recent status of the ticket. These are marked “Paid” if the ticket was paid; “Dismissed” if the ticket was dismissed, (either internally or as a result of an appeal); “Hearing Req” if the ticket was contested and awaiting a hearing at the time the data was pulled; “Notice” if the ticket was not yet paid and the city sent a notice to the address on file for that vehicle; “Court” if the ticket is involved in some sort of court case, not including bankruptcy; “Bankruptcy” if the ticket was unpaid and included as a debt in a consumer bankruptcy case; and “Define” if the city cannot identify the vehicle owner and collect on a debt. Current as of May 14, 2018, when the data was last updated. +* ticket_queue_date: when the “ticket_queue” was last updated. +* notice_level: This field describes the type of notice the city has sent a motorist. The types of notices include: “VIOL,” which means a notice of violation was sent; “SEIZ” indicates the vehicle is on the city’s boot list; “DETR” indicates a hearing officer found the vehicle owner was found liable for the citation; “FINL” indicates the unpaid ticket was sent to collections; and “DLS” means the city intends to seek a license suspension. If the field is blank, no notice was sent. +hearing_disposition: outcome of a hearing, either “Liable” or “Not Liable.” If the ticket was not contested this field is blank. +* notice_number: a unique ID attached to the notice, if one was sent. +* hour: Hour of the day the ticket was issued. Derived from issue_date. +* month: Month the ticket was issued. Derived from issue_date. +* year: Year the ticket was issued. Derived from issue_date. +* officer: a unique ID for the specific police officer or parking enforcement aide who issued the ticket. In the camera data, speed camera violations are marked "SPEED;" red-light camera violations are marked "RDFX" or "XERX," which appear to be references to the company contracted to oversee the program. + +These fields are specific to the parking data. These fields were computed by ProPublica and do not exist in the original data: + + +* normalized_address: full address of the form “, Chicago, IL ”. Addresses in this field are normalized to the block level (e.g. 1983 N. Ashland is transformed to 1900 N. Ashland) for more efficient geocoding and analysis. This field was computed by ProPublica and does not exist in the original data. +* latitude: Latitude of geocoded results +* longitude: Longitude of geocoded results +* geocoded_address: The address the geocoder resolved from the input address, e.g. +* geocode_accuracy: Geocodio accuracy score associated with input address. +* geocode_accuracy_type: Geocodio accuracy type associated with input address. +* ward: The Chicago ward the ticket was issued in, derived from the geocoded result. From 7428b112d906e2a58bbd127dbd9c636a6dfd9ab3 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 12 Feb 2019 13:51:00 -0600 Subject: [PATCH 140/140] add exports and turn off s3 uploading for now --- Makefile | 2 +- sql/exports/chicago_camera_tickets.sql | 28 +++++++++++++++++ sql/exports/chicago_parking_tickets.sql | 40 +++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 sql/exports/chicago_camera_tickets.sql create mode 100644 sql/exports/chicago_parking_tickets.sql diff --git a/Makefile b/Makefile index 04fbc19..aff9e6c 100644 --- a/Makefile +++ b/Makefile @@ -176,7 +176,7 @@ data/datastore/tickets.zip : data/data_dictionary.txt data/unit_key.csv data/exp upload_zip : data/datastore/tickets.zip - aws s3 cp $^ s3://data-publica/il_tickets_`git rev-parse HEAD | cut -c1-8`.zip + aws s3 cp --dryrun $^ s3://data-publica/il_tickets_`git rev-parse HEAD | cut -c1-8`.zip dupes/parking-%.csv : data/processed/A50951_PARK_Year_%_clean.csv diff --git a/sql/exports/chicago_camera_tickets.sql b/sql/exports/chicago_camera_tickets.sql new file mode 100644 index 0000000..d11c359 --- /dev/null +++ b/sql/exports/chicago_camera_tickets.sql @@ -0,0 +1,28 @@ +select + c.ticket_number, + c.issue_date, + c.violation_location, + c.license_hash as license_plate_number, + c.license_plate_state, + c.license_plate_type, + c.zipcode, + c.violation_code, + c.violation_description, + c.unit, + c.unit_description, + c.vehicle_make, + c.fine_level1_amount, + c.fine_level2_amount, + c.current_amount_due, + c.total_payments, + c.ticket_queue, + c.ticket_queue_date, + c.notice_level, + c.notice_number, + c.dismissal_reason, + c.officer, + c.year, + c.month, + c.hour +from cameras c + diff --git a/sql/exports/chicago_parking_tickets.sql b/sql/exports/chicago_parking_tickets.sql new file mode 100644 index 0000000..3dc8722 --- /dev/null +++ b/sql/exports/chicago_parking_tickets.sql @@ -0,0 +1,40 @@ +select + p.ticket_number, + p.issue_date, + p.violation_location, + p.license_hash as license_plate_number, + p.license_plate_state, + p.license_plate_type, + p.zipcode, + p.violation_code, + p.violation_description, + p.unit, + p.unit_description, + p.vehicle_make, + p.fine_level1_amount, + p.fine_level2_amount, + p.current_amount_due, + p.total_payments, + p.ticket_queue, + p.ticket_queue_date, + p.notice_level, + p.notice_number, + p.dismissal_reason, + p.officer, + p.address as normalized_address, + p.year, + p.month, + p.hour, + b.ward, + g.geocode_accuracy, + g.geocode_accuracy_type, + g.geocoded_address, + g.geocoded_lng, + g.geocoded_lat +from parking p +left join + geocodes g on + p.address = g.address +left join blocks b on + g.geocoded_address = b.address +