Skip to main content

Redistricting analytics for scoring ensembles of redistricting plans

Project description

rdascore

Compute Dave's Redistricting (DRA) analytics for an ensemble of redistricting plans.

Installation

To clone the repository:

$ git clone https://github.com/alecramsay/rdascore
$ cd rdascore

To install the package:

$ pip install rdascore

As noted next, you probably also want to clone the companion rdabase repository.

Usage

There are both code and script examples of how to use this code in the sample directory. That directory also contains some sample results from the main scoring function analyze_plan(). The samples use data from the companion rdabase repo.

Notes

With four exceptions, analyze_plan() computes all the analytics that DRA does:

  • For a variety of reasons, DRA's production TypeScript package dra-analytics does not calculate a few minor things that show up in the UI. The Python port rdapy does not either. This repo uses the latter, so those few things also aren't in the "scorecard" output.
  • To keep the results simple, district-level results are suppressed. The scorecard is a simple flat dictionary of metric key/value pairs.
  • To maximize throughput KIWYSI compactness is not calculated. The simple naive approach to performing compactness calculations is to dissolve precinct shapes into district shapes, but dissolve is very expensive operation. Analyzing a congressional plan for North Carolina take ~60 seconds. A much faster approach is to convert precinct shapes into topologies using TopoJSON like DRA does and then merging precincts into district shapes. That approach takes ~5 seconds, virtually all of the time being calling TopoJSON merge() from Python and marshalling the result back from JavaScript. I could have chosen to implement a Python native version of merge(). Instead, I chose to skip KIWYSI compactness (which requires actual district shapes) and just calculate the two main compactness metrics in DRA: Reock and Polsby-Popper. Together these only depend on district area, perimeter, and diameter, and with some pre-processing once per state (analogous to converting shapes into a topology) these values can be imputed without ever creating the district shapes. The result is that analyzing a congressional plan for North Carolina — calculating all the analytics — takes a small fraction of a second.
  • Finally, we've already created the precinct contiguity graphs as part of finding root map candidates in my baseline GitHub repo, and we're also already using the graph in Todd's ensembles repo to support generating spanning trees. So, by definition, the plans in our ensembles are contiguous. Hence, we don't check that.

Testing

$ pytest --disable-warnings

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rdascore-2.4.0.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

rdascore-2.4.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file rdascore-2.4.0.tar.gz.

File metadata

  • Download URL: rdascore-2.4.0.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for rdascore-2.4.0.tar.gz
Algorithm Hash digest
SHA256 2f14af82c4753fbd0de667b7cd482383d0728cfd1cfe16c2d2cadf447cdaf208
MD5 6f0f833ac393291f0b9ce976c4ed9d0e
BLAKE2b-256 9c5eaa5a96fc5b6cd41b10dd55e4206b7fbd61d4c85bfa20dfa3351c81e79f3e

See more details on using hashes here.

File details

Details for the file rdascore-2.4.0-py3-none-any.whl.

File metadata

  • Download URL: rdascore-2.4.0-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for rdascore-2.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8174fdc54a8a85aab861e1d1786cdf6620e8ae81f5ed4efa128b95860822b7cc
MD5 8eba07649fbc53b1b58a73bfbf8e697f
BLAKE2b-256 880ad0f40a2ea61ea4d21d8c233c51f2474f572814b8e2bff73dac45c7e0f466

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page