Skip to content
/ rcvis Public

Easy-to-understand visualizations for Ranked-Choice Voting elections: sankey, bargraphs, and tables. Interactive and print-friendly options available. Supports most common tabulators.

License

Notifications You must be signed in to change notification settings

artoonie/rcvis

Repository files navigation

Build Status Sauce Test Status Documentation Status codecov Language grade: Python Language grade: JavaScript Total alerts

RCVIS.com

See the site in action at rcvis.com.

Ranked Choice Voting Visualization

Visualize the results of ranked-choice voting elections.

What is RCV? RCV allows you to have backup options. If your preferred candidate can't win, you still have a say: your vote gets transferred to your next-best pick.

Why RCV? In an RCV election, you can't spoil votes. Third-party candidates don't waste votes. Similar candidates help each other instead of hurting each other. They're less polarized and more fair. Multi-winner RCV elections mitigate the effects of gerrymandering. For more information, check out FairVote's guide to the benefits of RCV elections.

Why the visualizer? In a traditional election, the results are easy to understand: how many votes did each candidate get? In an RCV election, it can be a harder to understand how a candidate one, based on what happens in each round. Our goal is to create a series of visualizations which can work for a variety of audiences on a variety of mediums: print, web, and TV.

Learn more on our Medium post: An Illustrated Guide to Ranked-Choice Voting.

Installation

Install python3 and virtualenv, then

virtualenv venv
source venv/bin/activate
pip3 install -e .
pip3 install -r requirements.txt

Create a .env file with your secrets and configuration options:

export RCVIS_SECRET_KEY=''
export RCVIS_DEBUG=True
export RCVIS_HOST=localhost

# Either have OFFLINE_MODE=True
export OFFLINE_MODE=True

# Or set up an AWS bucket and enter your credentials
# export OFFLINE_MODE=False
# export AWS_STORAGE_BUCKET_NAME=''
# export AWS_S3_REGION_NAME=''
# export AWS_ACCESS_KEY_ID=''
# export AWS_SECRET_ACCESS_KEY=''

# To run the SauceLabs integration tests, you will need
export SAUCE_USERNAME=''
export SAUCE_ACCESS_KEY=''

# To generate videos, you need:
export SQS_QUEUE_NAME=''
export IMAGEIO_FFMPEG_EXE='/usr/bin/ffmpeg'
export MOVIE_FONT_NAME="Roboto"
export AWS_POLLY_STORAGE_BUCKET_NAME="bucket-name-on-s3"

To get moviepy working for Ubuntu 16.04 LTS users, comment out the following statement in /etc/ImageMagick-6/policy.xml:

<policy domain="path" rights="none" pattern="@*"/>

or, simply run sudo ./scripts/fix-moviepy-on-ubuntu-1604.sh

Running

To begin serving the website at localhost:8000:

source .env
source venv/bin/activate
python3 manage.py npminstall
python3 manage.py compress
python3 manage.py runserver

To run workers to generate movies (optional - only needed to use the movie generation flow):

source .env
source venv/bin/activate
export DISPLAY=":0" # if not already set
celery -A rcvis worker --loglevel info

Examples

Check out rcvis.com for live examples, including:

Barchart Round-by-Round
Barchart Round-by-Round
Sankey Tabular Summary
Sankey Tabular Summaries

Inpsiration

City of Minneapolis

Sohan Murthy's SF Mayoral Sankey

FairVote's 2018 Santa Fe Visualization

RESTful API

Addition documentation for the REST API is available at rcvis.com/api/visualizations/.

To get started with programmatic access to rcvis:

  1. Email team@rcvis.com to obtain an account.
  2. Submit a GET request to https://www.rcvis.com/api/auth/get-token to obtain an API Key, e.g. http GET https://www.rcvis.com/api/auth/get-token username='username' password="password".
  3. Submit a POST request to https://www.rcvis.com/api/visualizations/ to upload a file, including the file in the jsonFile field of the body.
  4. For any file uploaded via the API, you may modify it using PATCH requests.

You are limited to 1000 requests per hour as an authenticated user.

oembed

RCVIS implements the oembed protocol with discoverability, allowing you to embed files into your website with an iframe.

Testing

Cross-browser Testing Platform and Open Source ❤️ provided by Sauce Labs, and CI/CD testing via TravisCI.

About

Easy-to-understand visualizations for Ranked-Choice Voting elections: sankey, bargraphs, and tables. Interactive and print-friendly options available. Supports most common tabulators.

Topics

Resources

License

Stars

Watchers

Forks