├── .gitignore
├── 113_frame.csv
├── Blank_US_Map.svg
├── LICENSE.txt
├── NOTICE.txt
├── README.md
├── __init__.py
├── complete_frame.csv
├── config
├── __init__.py
└── settings.py
├── crawler
├── crawler
│ ├── __init__.py
│ ├── items.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ │ ├── __init__.py
│ │ └── scrape.py
└── scrapy.cfg
├── formatters
└── __init__.py
├── inputs
├── __init__.py
└── inputs.py
├── make_matrix.py
├── manage.py
├── most_radical.png
├── most_radical.svg
├── polarization.eps
├── polarization.png
├── polarization.svg
├── requirements.txt
├── senate.eps
├── senate.png
├── senate.svg
├── senate_analyzer.R
├── tasks
└── __init__.py
├── tests
├── __init__.py
└── test_runner.py
└── workflows
└── __init__.py
/.gitignore:
--------------------------------------------------------------------------------
1 | *.py[cod]
2 |
3 | # C extensions
4 | *.so
5 |
6 | # Packages
7 | *.egg
8 | *.egg-info
9 | dist
10 | build
11 | eggs
12 | parts
13 | bin
14 | !percept/bin
15 | var
16 | sdist
17 | develop-eggs
18 | .installed.cfg
19 | lib
20 | lib64
21 |
22 | # Installer logs
23 | pip-log.txt
24 |
25 | # Unit test / coverage reports
26 | .coverage
27 | .tox
28 | nosetests.xml
29 |
30 | # Translations
31 | *.mo
32 |
33 | # Mr Developer
34 | .mr.developer.cfg
35 | .project
36 | .pydevproject
37 |
38 | #pycharm
39 | .idea
40 |
41 | #percept
42 | percept.log
43 | stored_data
44 | data
45 | percept/docs/_build
46 |
47 | # R
48 | .Rhistory
49 | .Rapp.history
50 |
51 | .DS_Store
52 |
53 |
--------------------------------------------------------------------------------
/113_frame.csv:
--------------------------------------------------------------------------------
1 | "","X.113.1.1.","X.113.1.2.","X.113.1.3.","X.113.1.4.","X.113.1.5.","X.113.1.6.","X.113.1.7.","X.113.1.8.","X.113.1.9.","X.113.1.10.","X.113.1.11.","X.113.1.12.","X.113.1.13.","X.113.1.14.","X.113.1.15.","X.113.1.16.","X.113.1.17.","X.113.1.18.","X.113.1.21.","X.113.1.22.","X.113.1.23.","X.113.1.24.","X.113.1.25.","X.113.1.28.","X.113.1.29.","X.113.1.30.","X.113.1.31.","X.113.1.32.","X.113.1.33.","X.113.1.34.","X.113.1.35.","X.113.1.36.","X.113.1.37.","X.113.1.38.","X.113.1.39.","X.113.1.40.","X.113.1.41.","X.113.1.42.","X.113.1.43.","X.113.1.44.","X.113.1.45.","X.113.1.46.","X.113.1.47.","X.113.1.48.","X.113.1.49.","X.113.1.50.","X.113.1.51.","X.113.1.52.","X.113.1.53.","X.113.1.54.","X.113.1.55.","X.113.1.56.","X.113.1.57.","X.113.1.58.","X.113.1.59.","X.113.1.60.","X.113.1.61.","X.113.1.62.","X.113.1.63.","X.113.1.64.","X.113.1.65.","X.113.1.66.","X.113.1.67.","X.113.1.68.","X.113.1.69.","X.113.1.70.","X.113.1.71.","X.113.1.72.","X.113.1.73.","X.113.1.74.","X.113.1.75.","X.113.1.76.","X.113.1.77.","X.113.1.78.","X.113.1.79.","X.113.1.80.","X.113.1.81.","X.113.1.82.","X.113.1.83.","X.113.1.84.","X.113.1.85.","X.113.1.86.","X.113.1.87.","X.113.1.88.","X.113.1.89.","X.113.1.90.","X.113.1.91.","X.113.1.92.","X.113.1.93.","X.113.1.94.","X.113.1.95.","X.113.1.96.","X.113.1.97.","X.113.1.98.","X.113.1.99.","X.113.1.100.","X.113.1.101.","X.113.1.102.","X.113.1.103.","X.113.1.104.","X.113.1.105.","X.113.1.106.","X.113.1.107.","X.113.1.108.","X.113.1.109.","X.113.1.110.","X.113.1.111.","X.113.1.112.","X.113.1.113.","X.113.1.114.","X.113.1.115.","X.113.1.116.","X.113.1.117.","X.113.1.118.","X.113.1.119.","X.113.1.120.","X.113.1.121.","X.113.1.122.","X.113.1.123.","X.113.1.124.","X.113.1.125.","X.113.1.126.","X.113.1.127.","X.113.1.128.","X.113.1.129.","X.113.1.130.","X.113.1.131.","X.113.1.132.","X.113.1.133.","X.113.1.134.","X.113.1.135.","X.113.1.136.","X.113.1.137.","X.113.1.138.","X.113.1.139.","X.113.1.140.","X.113.1.141.","X.113.1.142.","X.113.1.143.","X.113.1.144.","X.113.1.145.","X.113.1.146.","X.113.1.147.","X.113.1.148.","X.113.1.150.","X.113.1.151.","X.113.1.152.","X.113.1.153.","X.113.1.154.","X.113.1.155.","X.113.1.156.","X.113.1.157.","X.113.1.158.","X.113.1.159.","X.113.1.160.","X.113.1.161.","X.113.1.162.","X.113.1.163.","X.113.1.164.","X.113.1.169.","X.113.1.170.","X.113.1.172.","X.113.1.176.","X.113.1.180.","X.113.1.181.","X.113.1.182.","X.113.1.183.","X.113.1.184.","X.113.1.185.","X.113.1.186.","X.113.1.187.","X.113.1.188.","name","party","state"
2 | "Coons (D-DE)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Coons","D","DE"
3 | "McCain (R-AZ)",1,1,0,0,1,0,0,0,1,0,1,1,1,1,2,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,2,0,1,0,2,2,2,2,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,0,0,1,1,0,1,"McCain","R","AZ"
4 | "Chambliss (R-GA)",2,2,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,2,1,1,1,0,1,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,"Chambliss","R","GA"
5 | "Franken (D-MN)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Franken","D","MN"
6 | "Inhofe (R-OK)",1,1,0,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,2,2,2,1,1,1,0,1,0,2,2,1,0,1,0,0,0,0,0,0,2,2,2,2,0,0,1,1,1,0,0,1,0,0,0,2,0,0,0,0,1,1,0,0,1,1,0,1,"Inhofe","R","OK"
7 | "Johnson (D-SD)",0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,2,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Johnson","D","SD"
8 | "Tester (D-MT)",1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Tester","D","MT"
9 | "Carper (D-DE)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,"Carper","D","DE"
10 | "Schumer (D-NY)",0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Schumer","D","NY"
11 | "Gillibrand (D-NY)",2,2,0,1,1,1,1,1,1,1,1,1,0,0,2,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Gillibrand","D","NY"
12 | "Fischer (R-NE)",0,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,"Fischer","R","NE"
13 | "Bennet (D-CO)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Bennet","D","CO"
14 | "Barrasso (R-WY)",1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,0,0,1,0,1,2,1,0,1,0,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,"Barrasso","R","WY"
15 | "Shaheen (D-NH)",0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,2,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,"Shaheen","D","NH"
16 | "Boozman (R-AR)",1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,"Boozman","R","AR"
17 | "Kirk (R-IL)",1,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,0,1,"Kirk","R","IL"
18 | "Nelson (D-FL)",0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Nelson","D","FL"
19 | "Cornyn (R-TX)",0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,2,2,2,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,"Cornyn","R","TX"
20 | "Klobuchar (D-MN)",2,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,2,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Klobuchar","D","MN"
21 | "Flake (R-AZ)",1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,2,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,2,0,0,0,1,0,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,2,2,1,0,1,1,1,0,0,1,1,0,1,"Flake","R","AZ"
22 | "Johanns (R-NE)",1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,2,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,"Johanns","R","NE"
23 | "Moran (R-KS)",1,1,1,0,1,0,0,0,0,0,0,2,0,2,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,2,1,1,1,1,1,2,2,0,1,0,1,1,1,0,1,1,0,1,0,1,2,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,0,2,1,0,0,1,2,2,1,"Moran","R","KS"
24 | "Grassley (R-IA)",1,1,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,"Grassley","R","IA"
25 | "Markey (D-MA)",3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,0,1,1,1,"Markey","D","MA"
26 | "Schatz (D-HI)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Schatz","D","HI"
27 | "Risch (R-ID)",1,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,1,0,1,1,1,0,1,2,0,1,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,2,2,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,"Risch","R","ID"
28 | "Casey (D-PA)",2,2,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,2,2,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Casey","D","PA"
29 | "Enzi (R-WY)",1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,2,1,1,1,0,1,1,0,1,0,2,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,1,"Enzi","R","WY"
30 | "Wicker (R-MS)",1,1,0,1,1,0,0,0,1,0,1,1,1,2,1,1,1,1,0,1,0,0,0,1,0,0,0,0,2,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,0,0,0,1,0,1,1,2,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,2,2,2,2,0,0,1,1,1,0,1,1,0,1,0,1,0,1,1,2,1,1,0,0,1,1,0,1,"Wicker","R","MS"
31 | "King (I-ME)",1,1,2,2,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,0,0,1,1,1,1,"King","I","ME"
32 | "Baldwin (D-WI)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Baldwin","D","WI"
33 | "Wyden (D-OR)",3,3,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,3,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,3,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,"Wyden","D","OR"
34 | "Begich (D-AK)",1,1,0,1,1,1,1,1,1,1,1,2,0,0,1,1,0,0,1,1,1,1,2,2,2,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,0,1,2,2,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,"Begich","D","AK"
35 | "Roberts (R-KS)",1,1,1,0,1,0,0,0,0,0,0,0,1,2,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,"Roberts","R","KS"
36 | "Burr (R-NC)",1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,2,1,1,1,1,0,2,1,0,1,0,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,"Burr","R","NC"
37 | "Heinrich (D-NM)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,2,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Heinrich","D","NM"
38 | "Hirono (D-HI)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,1,"Hirono","D","HI"
39 | "Pryor (D-AR)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,2,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,"Pryor","D","AR"
40 | "Leahy (D-VT)",0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Leahy","D","VT"
41 | "Ayotte (R-NH)",1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,"Ayotte","R","NH"
42 | "Stabenow (D-MI)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Stabenow","D","MI"
43 | "Mikulski (D-MD)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,2,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Mikulski","D","MD"
44 | "Heller (R-NV)",1,1,1,1,1,0,0,0,0,0,1,1,1,2,1,1,1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,2,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0,1,1,2,2,0,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,"Heller","R","NV"
45 | "Hagan (D-NC)",1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Hagan","D","NC"
46 | "Durbin (D-IL)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Durbin","D","IL"
47 | "Merkley (D-OR)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,2,1,1,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,NA,"Merkley","D","OR"
48 | "Udall (D-CO)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,2,2,1,2,2,2,2,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,1,2,2,1,1,1,1,0,0,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Udall","D","CO"
49 | "Manchin (D-WV)",1,1,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,0,1,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,0,0,2,2,1,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,"Manchin","D","WV"
50 | "Hoeven (R-ND)",1,1,1,1,2,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,2,0,1,0,1,0,1,0,1,1,1,1,2,1,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,2,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,0,1,0,0,1,1,0,1,"Hoeven","R","ND"
51 | "Blunt (R-MO)",1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,2,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,2,2,2,1,0,0,1,0,1,1,0,0,1,1,0,1,"Blunt","R","MO"
52 | "Collins (R-ME)",1,1,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,"Collins","R","ME"
53 | "Toomey (R-PA)",1,1,1,0,1,0,0,0,1,0,0,2,1,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,2,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,1,0,2,1,1,1,0,0,1,1,1,0,0,1,0,0,0,2,0,0,0,0,1,1,0,0,1,1,0,1,"Toomey","R","PA"
54 | "Alexander (R-TN)",3,3,1,1,1,0,0,0,1,0,0,1,1,2,1,1,2,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,3,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,2,1,1,0,1,3,1,0,1,0,1,2,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,"Alexander","R","TN"
55 | "Whitehouse (D-RI)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,2,2,2,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,2,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Whitehouse","D","RI"
56 | "Cantwell (D-WA)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,"Cantwell","D","WA"
57 | "Scott (R-SC)",0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,2,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,2,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,"Scott","R","SC"
58 | "Cochran (R-MS)",1,1,0,1,1,0,0,0,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0,2,2,2,2,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,"Cochran","R","MS"
59 | "Coats (R-IN)",2,2,1,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,0,0,1,2,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,2,2,2,0,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,1,0,0,0,2,2,1,1,0,0,1,0,0,1,1,0,1,"Coats","R","IN"
60 | "Cruz (R-TX)",1,1,1,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,2,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,2,0,0,0,0,0,1,0,0,1,1,0,1,"Cruz","R","TX"
61 | "Warren (D-MA)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,1,0,1,0,1,2,2,2,1,2,2,2,1,1,1,1,0,1,1,1,0,1,0,0,2,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Warren","D","MA"
62 | "Thune (R-SD)",0,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,"Thune","R","SD"
63 | "Shelby (R-AL)",1,1,0,1,1,0,0,0,0,0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,2,2,2,2,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,"Shelby","R","AL"
64 | "Coburn (R-OK)",1,1,1,0,1,0,0,0,1,0,0,1,2,1,0,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,2,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,2,1,2,2,2,1,1,1,0,1,0,1,1,0,0,1,0,0,0,2,1,0,2,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,"Coburn","R","OK"
65 | "Hatch (R-UT)",1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,NA,1,1,0,1,1,0,2,1,1,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,1,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,0,1,"Hatch","R","UT"
66 | "Portman (R-OH)",1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,2,1,1,0,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,0,1,1,0,1,"Portman","R","OH"
67 | "Lee (R-UT)",1,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,2,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,2,2,2,2,2,1,0,0,0,0,0,1,0,0,0,1,0,1,"Lee","R","UT"
68 | "Johnson (R-WI)",1,1,1,0,1,0,0,0,1,0,0,1,1,2,0,1,1,1,0,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,2,1,1,1,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,2,0,1,0,0,0,1,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,0,1,"Johnson","R","WI"
69 | "Blumenthal (D-CT)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,2,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Blumenthal","D","CT"
70 | "Cardin (D-MD)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,2,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Cardin","D","MD"
71 | "Reid (D-NV)",0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,2,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Reid","D","NV"
72 | "Baucus (D-MT)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Baucus","D","MT"
73 | "Landrieu (D-LA)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,2,0,1,1,0,1,0,0,0,1,1,1,2,0,0,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,2,1,0,0,0,2,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Landrieu","D","LA"
74 | "Reed (D-RI)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,2,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Reed","D","RI"
75 | "Murphy (D-CT)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,2,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Murphy","D","CT"
76 | "Udall (D-NM)",0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Udall","D","NM"
77 | "Menendez (D-NJ)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,"Menendez","D","NJ"
78 | "Corker (R-TN)",1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,0,1,2,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,"Corker","R","TN"
79 | "Brown (D-OH)",2,2,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,2,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,2,1,1,1,1,1,0,0,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Brown","D","OH"
80 | "Feinstein (D-CA)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Feinstein","D","CA"
81 | "Sessions (R-AL)",1,1,1,0,1,0,0,0,0,0,0,2,1,1,0,1,1,1,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,2,0,1,0,0,0,0,0,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,"Sessions","R","AL"
82 | "Heitkamp (D-ND)",0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1,2,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,2,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,2,"Heitkamp","D","ND"
83 | "Vitter (R-LA)",1,1,1,1,1,0,0,0,0,0,0,2,1,2,1,1,1,1,2,1,0,0,0,2,1,2,2,2,2,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,2,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,1,0,1,1,2,2,1,0,1,1,0,0,1,0,1,2,2,1,1,0,2,1,0,0,0,2,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,"Vitter","R","LA"
84 | "Donnelly (D-IN)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,"Donnelly","D","IN"
85 | "Isakson (R-GA)",1,1,1,0,1,0,0,0,1,0,0,2,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,1,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,0,1,"Isakson","R","GA"
86 | "McCaskill (D-MO)",1,1,0,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,1,1,1,2,2,2,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,"McCaskill","D","MO"
87 | "Warner (D-VA)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,0,1,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,1,2,2,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Warner","D","VA"
88 | "Harkin (D-IA)",0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,2,1,1,1,1,0,1,1,1,2,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,1,1,1,1,1,2,2,2,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,"Harkin","D","IA"
89 | "Graham (R-SC)",1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,1,1,1,0,0,1,2,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,1,1,2,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,0,1,1,1,1,1,0,2,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,2,2,1,1,0,0,1,0,0,1,1,0,1,"Graham","R","SC"
90 | "Rubio (R-FL)",0,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,2,0,2,0,0,0,1,0,0,1,1,0,2,"Rubio","R","FL"
91 | "Kaine (D-VA)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,2,2,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,"Kaine","D","VA"
92 | "Boxer (D-CA)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,2,2,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,2,2,1,1,1,2,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,2,2,2,2,2,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,NA,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Boxer","D","CA"
93 | "Murray (D-WA)",1,1,2,2,2,2,2,2,2,2,2,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,1,1,1,1,1,0,1,2,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,"Murray","D","WA"
94 | "Crapo (R-ID)",0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,0,2,0,0,0,1,1,2,0,0,1,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,2,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,"Crapo","R","ID"
95 | "Rockefeller (D-WV)",0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,2,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,0,2,1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,2,1,1,1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,"Rockefeller","D","WV"
96 | "Murkowski (R-AK)",1,1,0,1,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,1,0,1,2,1,1,1,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,2,1,1,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,0,2,0,1,0,1,1,1,1,1,2,1,1,0,2,2,2,1,1,2,0,0,1,1,1,0,1,1,0,1,1,1,1,1,2,0,1,1,0,1,1,0,0,1,1,1,2,"Murkowski","R","AK"
97 | "Sanders (I-VT)",1,1,2,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,0,1,1,0,1,2,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,"Sanders","I","VT"
98 | "Paul (R-KY)",1,1,1,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,2,0,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,1,2,0,1,0,1,1,1,0,1,0,1,1,0,0,0,0,2,2,1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0,"Paul","R","KY"
99 | "Chiesa (R-NJ)",3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,1,1,1,0,1,1,1,1,2,2,2,2,2,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,2,"Chiesa","R","NJ"
100 | "McConnell (R-KY)",1,1,1,0,1,0,0,0,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,1,"McConnell","R","KY"
101 | "Levin (D-MI)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,0,0,1,2,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,"Levin","D","MI"
102 | "Kerry (D-MA)",1,1,0,1,NA,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,"Kerry","D","MA"
103 | "Lautenberg (D-NJ)",1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,0,1,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,"Lautenberg","D","NJ"
104 | "Cowan (D-MA)",3,3,3,3,3,3,3,3,3,3,3,3,0,0,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,2,2,2,1,2,2,2,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,"Cowan","D","MA"
105 |
--------------------------------------------------------------------------------
/Blank_US_Map.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
70 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
--------------------------------------------------------------------------------
/NOTICE.txt:
--------------------------------------------------------------------------------
1 | Copyright 2013 Vik Paruchuri
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | Unless required by applicable law or agreed to in writing, software
10 | distributed under the License is distributed on an "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | See the License for the specific language governing permissions and
13 | limitations under the License.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Political Positions
2 | ====================
3 |
4 | Overview
5 | ---------------------
6 | This repository is used for analysis of senate and other vote data.
7 |
8 | This is licensed under the APACHE license, please see LICENSE.txt for details.
9 |
10 | Installation
11 | ---------------------
12 | You will need to have python 2.7 installed, and ideally a virtualenv installed.
13 |
14 | Then, you can do the following:
15 |
16 | ```
17 | git clone git@github.com:VikParuchuri/political-positions
18 | cd political-positions
19 | Activate virtualenv if you are using one
20 | pip install -r requirements.txt
21 | ```
22 |
23 | Usage
24 | ---------------------------
25 |
26 | After installing the requirements, you can do:
27 |
28 | ```
29 | cd political-positions/crawler
30 | scrapy crawl senate -o ../data/senate.json -t json
31 | ```
32 |
33 | This will crawl the senate website and download voting data on senators.
34 |
35 | Open and run the code in the `make_matrix.py` file to generate a csv from the json file.
36 |
37 | Then, you can open the `senate_analyzer.R` script and run it to produce charts.
38 |
39 | How to Contribute
40 | -----------------
41 | Contributions are very welcome. The easiest way is to fork this repo, and then
42 | make a pull request from your fork.
43 |
44 | Please contact vik dot paruchuri at gmail with any questions or issues.
45 |
--------------------------------------------------------------------------------
/__init__.py:
--------------------------------------------------------------------------------
1 | __import__("pkg_resources").declare_namespace(__name__)
--------------------------------------------------------------------------------
/config/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/config/settings.py:
--------------------------------------------------------------------------------
1 | """
2 | Settings for political-positions
3 | """
4 |
5 | from path import path
6 | import os
7 | import sys
8 |
9 | #Various paths
10 | PROJECT_PATH = path(__file__).dirname().dirname()
11 |
12 | #Where to cache values during the run
13 | CACHE = "percept.fields.caches.MemoryCache"
14 | #Do we use json to serialize the values in in the cache?
15 | SERIALIZE_CACHE_VALUES = False
16 |
17 | #How to run the workflows
18 | RUNNER = "percept.workflows.runners.SingleThreadedRunner"
19 |
20 | #What to use as a datastore
21 | DATASTORE = "percept.workflows.datastores.FileStore"
22 |
23 | #Namespace to give the modules in the registry
24 | NAMESPACE = "political-positions"
25 |
26 | #What severity of error to log to file and console. One of "DEBUG", "WARN", "INFO", "ERROR"
27 | LOG_LEVEL = "DEBUG"
28 |
29 | #Used to save and retrieve workflows and other data
30 | DATA_PATH = os.path.abspath(os.path.join(PROJECT_PATH, "stored_data"))
31 | if not os.path.exists(DATA_PATH):
32 | os.makedirs(DATA_PATH)
33 |
34 | #Commands are discovered here, and tasks/inputs/formats are imported using only these modules
35 | INSTALLED_APPS = [
36 | 'political-positions.inputs',
37 | 'political-positions.formatters',
38 | 'political-positions.tasks',
39 | 'political-positions.workflows'
40 | ]
--------------------------------------------------------------------------------
/crawler/crawler/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/crawler/crawler/__init__.py
--------------------------------------------------------------------------------
/crawler/crawler/items.py:
--------------------------------------------------------------------------------
1 | # Define here the models for your scraped items
2 | #
3 | # See documentation in:
4 | # http://doc.scrapy.org/topics/items.html
5 |
6 | from scrapy.item import Item, Field
7 |
8 | class CrawlerItem(Item):
9 | # define the fields for your item here like:
10 | # name = Field()
11 | pass
12 |
--------------------------------------------------------------------------------
/crawler/crawler/pipelines.py:
--------------------------------------------------------------------------------
1 | # Define your item pipelines here
2 | #
3 | # Don't forget to add your pipeline to the ITEM_PIPELINES setting
4 | # See: http://doc.scrapy.org/topics/item-pipeline.html
5 |
6 | class CrawlerPipeline(object):
7 | def process_item(self, item, spider):
8 | return item
9 |
--------------------------------------------------------------------------------
/crawler/crawler/settings.py:
--------------------------------------------------------------------------------
1 | # Scrapy settings for crawler project
2 | #
3 | # For simplicity, this file contains only the most important settings by
4 | # default. All the other settings are documented here:
5 | #
6 | # http://doc.scrapy.org/topics/settings.html
7 | #
8 |
9 | BOT_NAME = 'crawler'
10 |
11 | SPIDER_MODULES = ['crawler.spiders']
12 | NEWSPIDER_MODULE = 'crawler.spiders'
13 |
14 | # Crawl responsibly by identifying yourself (and your website) on the user-agent
15 | #USER_AGENT = 'crawler (+http://www.yourdomain.com)'
16 |
--------------------------------------------------------------------------------
/crawler/crawler/spiders/__init__.py:
--------------------------------------------------------------------------------
1 | # This package will contain the spiders of your Scrapy project
2 | #
3 | # Please refer to the documentation for information on how to create and manage
4 | # your spiders.
5 |
--------------------------------------------------------------------------------
/crawler/crawler/spiders/scrape.py:
--------------------------------------------------------------------------------
1 | from scrapy.contrib.spiders import CrawlSpider, Rule
2 | from scrapy.spider import BaseSpider
3 | from scrapy.selector import HtmlXPathSelector
4 | from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
5 | from scrapy.selector import HtmlXPathSelector
6 | from scrapy.item import Item, Field
7 | from scrapy.http import Request
8 | import re
9 | import os
10 | import requests
11 | import logging
12 | log = logging.getLogger(__name__)
13 |
14 | class Vote(Item):
15 | url = Field()
16 | congress = Field()
17 | name = Field()
18 | number = Field()
19 | time = Field()
20 | description = Field()
21 | yes_count = Field()
22 | no_count = Field()
23 | abstain_count = Field()
24 | session = Field()
25 | data = Field()
26 |
27 | class SenateSpider(CrawlSpider):
28 | name = "senate"
29 | allowed_domains = ['www.senate.gov', 'senate.gov']
30 | start_urls = ["http://www.senate.gov/pagelayout/legislative/a_three_sections_with_teasers/votes.htm"]
31 | rules = [
32 | Rule(SgmlLinkExtractor(allow=["/legislative/LIS/roll_call_lists/vote_menu_\d+_\d+.htm"])),
33 | Rule(SgmlLinkExtractor(allow=["/legislative/LIS/roll_call_lists/roll_call_vote_cfm.cfm\?congress=\d+\&session=\d+\&vote=\d+"]), 'parse_senate')
34 | ]
35 |
36 | def parse_links(self, response):
37 | x = HtmlXPathSelector(response)
38 | urls = x.select('//td[@class="contenttext"]/a/@href').extract()
39 | requests = []
40 | for url in urls:
41 | requests.append(Request(url="http://www.senate.gov" + url))
42 | return requests
43 |
44 | def parse_senate(self, response):
45 | url = response.url
46 | x = HtmlXPathSelector(response)
47 | content = x.select('//tr/td[@class="contenttext"]/text()').extract()
48 | congress = re.findall("\d+",url)[0]
49 | session = re.findall("\d+",url)[1]
50 | name = content[3]
51 | number = re.findall("\d+",url)[2]
52 | time = content[5]
53 | description = content[9]
54 | yes_count = content[11]
55 | no_count = content[13]
56 | abstain_count = content[15]
57 |
58 | yes_nof = x.select('//tr/td[@class="contenttext"]/b/text()').extract()
59 | yes_no = []
60 | for i in xrange(8,len(yes_nof)):
61 | if yes_nof[i]=="YEAs ---":
62 | break
63 | yes_no.append(yes_nof[i])
64 | sens = []
65 | for i in xrange(16,len(content)):
66 | if content[i]=="\n ":
67 | sens.append(content[i-1])
68 |
69 | syn = {sens[i] : yes_no[i] for i in xrange(0,len(yes_no))}
70 |
71 | vote = Vote()
72 | vote['congress'] = congress
73 | vote['name'] = name
74 | vote['number'] = number
75 | vote['time'] = time
76 | vote['description'] = description
77 | vote['yes_count'] = yes_count
78 | vote['no_count'] = no_count
79 | vote['abstain_count'] = abstain_count
80 | vote['data'] = syn
81 | vote['session'] = session
82 |
83 | return vote
--------------------------------------------------------------------------------
/crawler/scrapy.cfg:
--------------------------------------------------------------------------------
1 | # Automatically created by: scrapy startproject
2 | #
3 | # For more information about the [deploy] section see:
4 | # http://doc.scrapy.org/topics/scrapyd.html
5 |
6 | [settings]
7 | default = crawler.settings
8 |
9 | [deploy]
10 | #url = http://localhost:6800/
11 | project = crawler
12 |
--------------------------------------------------------------------------------
/formatters/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/formatters/__init__.py
--------------------------------------------------------------------------------
/inputs/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/inputs/__init__.py
--------------------------------------------------------------------------------
/inputs/inputs.py:
--------------------------------------------------------------------------------
1 | from __future__ import division
2 | import csv
3 | from percept.conf.base import settings
4 | from percept.utils.input import DataFormats
5 | from percept.tests.framework import CSVInputTester
6 | from percept.datahandlers.inputs import BaseInput
7 | from percept.utils.models import get_namespace
8 | import os
9 | from itertools import chain
10 | import logging
11 | import json
12 | import re
13 | import pandas as pd
14 | import subprocess
15 | from pandas.io import sql
16 | import sqlite3
17 | import json
18 | import requests
19 | import subprocess
20 |
21 | log = logging.getLogger(__name__)
22 |
23 | def join_path(p1,p2):
24 | return os.path.abspath(os.path.join(p1,p2))
25 |
26 | class SenateFormats(DataFormats):
27 | sjson = "sjson"
28 |
29 | class SenateInput(BaseInput):
30 | """
31 | Extends baseinput to read simpsons scripts
32 | """
33 | input_format = SenateFormats.mjson
34 | help_text = "Read in music links data."
35 | namespace = get_namespace(__module__)
36 |
37 | def read_input(self, mfile, has_header=True):
38 | """
39 | directory is a path to a directory with multiple csv files
40 | """
41 |
42 | mjson= json.load(open(mfile))
43 | for m in mjson:
44 | m['ltype'] = m['ltype'].split("?")[0]
45 | ltypes = list(set([m['ltype'] for m in mjson]))
46 | for l in ltypes:
47 | jp = join_path(settings.MUSIC_PATH,l)
48 | if not os.path.isdir(jp):
49 | os.mkdir(jp)
50 |
51 | fpaths = []
52 | for m in mjson:
53 | fname = m['link'].split("/")[-1]
54 | fpath = join_path(join_path(settings.MUSIC_PATH,m['ltype']),fname)
55 | try:
56 | if not os.path.isfile(fpath):
57 | r = requests.get(m['link'])
58 | f = open(fpath, 'wb')
59 | f.write(r.content)
60 | f.close()
61 | fpaths.append({'type' : m['ltype'], 'path' : fpath})
62 | except Exception:
63 | log.exception("Could not get music file.")
64 |
65 | for p in fpaths:
66 | newfile = p['path'][:-4] + ".ogg"
67 | if not os.path.isfile(newfile):
68 | frommp3 = subprocess.Popen(['mpg123', '-w', '-', p['path']], stdout=subprocess.PIPE)
69 | toogg = subprocess.Popen(['oggenc', '-'], stdin=frommp3.stdout, stdout=subprocess.PIPE)
70 | with open(newfile, 'wb') as outfile:
71 | while True:
72 | data = toogg.stdout.read(1024 * 100)
73 | if not data:
74 | break
75 | outfile.write(data)
76 | p['newpath'] = newfile
77 |
78 | self.data = fpaths
--------------------------------------------------------------------------------
/make_matrix.py:
--------------------------------------------------------------------------------
1 | import json
2 |
3 | CONGRESS_NUM = "114"
4 | with open("data/senate.json") as f:
5 | senate = json.load(f)
6 |
7 | votes = [v for v in senate if v["congress"] == CONGRESS_NUM]
8 |
9 | senators = {}
10 | bills = []
11 | senator_names = []
12 | for v in votes:
13 | number = v["number"]
14 | for k, v in v["data"].items():
15 | if k not in senators:
16 | senators[k] = {}
17 | senators[k][number] = v
18 | bills.append(number)
19 | senator_names.append(k)
20 |
21 | bills = sorted(list(set(bills)))
22 | senator_names = sorted(list(set(senator_names)))
23 |
24 | vote_matrix = [["Name", "Party", "State"] + bills]
25 | for s in senator_names:
26 | data = s.replace(", ", "")
27 | name, info = data.split(" ")
28 | info = info.replace("(", "")
29 | info = info.replace(")", "")
30 | party, state = info.split("-")
31 | row = [name, party, state]
32 | for b in bills:
33 | vote = senators[s][b]
34 | code = "2"
35 | if vote == "Yea":
36 | code = "1"
37 | elif vote == "Nay":
38 | code = "0"
39 | row.append(code)
40 | vote_matrix.append(row)
41 |
42 | rows = [",".join(v) for v in vote_matrix]
43 | write_data = "\n".join(rows)
44 | with open("data/{0}_data.csv".format(CONGRESS_NUM), "w+") as f:
45 | f.write(write_data)
46 |
47 |
--------------------------------------------------------------------------------
/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | from percept.management.base import execute_from_command_line
3 |
4 | if __name__ == "__main__":
5 | execute_from_command_line()
--------------------------------------------------------------------------------
/most_radical.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/most_radical.png
--------------------------------------------------------------------------------
/most_radical.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
494 |
--------------------------------------------------------------------------------
/polarization.eps:
--------------------------------------------------------------------------------
1 | %!PS-Adobe-3.0 EPSF-3.0
2 | %%DocumentNeededResources: font Helvetica
3 | %%+ font Helvetica-Bold
4 | %%+ font Helvetica-Oblique
5 | %%+ font Helvetica-BoldOblique
6 | %%+ font Symbol
7 | %%Title: R Graphics Output
8 | %%Creator: R Software
9 | %%Pages: (atend)
10 | %%BoundingBox: 0 0 750 884
11 | %%EndComments
12 | %%BeginProlog
13 | /bp { gs sRGB gs } def
14 | % begin .ps.prolog
15 | /gs { gsave } bind def
16 | /gr { grestore } bind def
17 | /ep { showpage gr gr } bind def
18 | /m { moveto } bind def
19 | /l { rlineto } bind def
20 | /np { newpath } bind def
21 | /cp { closepath } bind def
22 | /f { fill } bind def
23 | /o { stroke } bind def
24 | /c { newpath 0 360 arc } bind def
25 | /r { 4 2 roll moveto 1 copy 3 -1 roll exch 0 exch rlineto 0 rlineto -1 mul 0 exch rlineto closepath } bind def
26 | /p1 { stroke } bind def
27 | /p2 { gsave bg fill grestore newpath } bind def
28 | /p3 { gsave bg fill grestore stroke } bind def
29 | /p6 { gsave bg eofill grestore newpath } bind def
30 | /p7 { gsave bg eofill grestore stroke } bind def
31 | /t { 5 -2 roll moveto gsave rotate
32 | 1 index stringwidth pop
33 | mul neg 0 rmoveto show grestore } bind def
34 | /ta { 4 -2 roll moveto gsave rotate show } bind def
35 | /tb { 2 -1 roll 0 rmoveto show } bind def
36 | /cl { grestore gsave newpath 3 index 3 index moveto 1 index
37 | 4 -1 roll lineto exch 1 index lineto lineto
38 | closepath clip newpath } bind def
39 | /rgb { setrgbcolor } bind def
40 | /s { scalefont setfont } bind def
41 | % end .ps.prolog
42 | /sRGB { [ /CIEBasedABC
43 | << /DecodeLMN
44 | [ { dup 0.03928 le
45 | {12.92321 div}
46 | {0.055 add 1.055 div 2.4 exp }
47 | ifelse
48 | } bind dup dup
49 | ]
50 | /MatrixLMN [0.412457 0.212673 0.019334
51 | 0.357576 0.715152 0.119192
52 | 0.180437 0.072175 0.950301]
53 | /WhitePoint [0.9505 1.0 1.0890]
54 | >>
55 | ] setcolorspace } bind def
56 | /srgb { setcolor } bind def
57 | %%IncludeResource: font Helvetica
58 | /Helvetica findfont
59 | dup length dict begin
60 | {1 index /FID ne {def} {pop pop} ifelse} forall
61 | /Encoding ISOLatin1Encoding def
62 | currentdict
63 | end
64 | /Font1 exch definefont pop
65 | %%IncludeResource: font Helvetica-Bold
66 | /Helvetica-Bold findfont
67 | dup length dict begin
68 | {1 index /FID ne {def} {pop pop} ifelse} forall
69 | /Encoding ISOLatin1Encoding def
70 | currentdict
71 | end
72 | /Font2 exch definefont pop
73 | %%IncludeResource: font Helvetica-Oblique
74 | /Helvetica-Oblique findfont
75 | dup length dict begin
76 | {1 index /FID ne {def} {pop pop} ifelse} forall
77 | /Encoding ISOLatin1Encoding def
78 | currentdict
79 | end
80 | /Font3 exch definefont pop
81 | %%IncludeResource: font Helvetica-BoldOblique
82 | /Helvetica-BoldOblique findfont
83 | dup length dict begin
84 | {1 index /FID ne {def} {pop pop} ifelse} forall
85 | /Encoding ISOLatin1Encoding def
86 | currentdict
87 | end
88 | /Font4 exch definefont pop
89 | %%IncludeResource: font Symbol
90 | /Symbol findfont
91 | dup length dict begin
92 | {1 index /FID ne {def} {pop pop} ifelse} forall
93 | currentdict
94 | end
95 | /Font5 exch definefont pop
96 | %%EndProlog
97 | %%Page: 1 1
98 | bp
99 | 0.00 0.00 750.00 884.25 cl
100 | 0.00 0.00 750.00 884.25 cl
101 | /bg { 1 1 1 srgb } def
102 | 1 1 1 srgb
103 | 1.06 setlinewidth
104 | [] 0 setdash
105 | 1 setlinecap
106 | 1 setlinejoin
107 | 10.00 setmiterlimit
108 | 0.00 0.00 750.00 884.25 r p3
109 | 0.00 0.00 750.00 884.25 cl
110 | 0.00 0.00 750.00 884.25 cl
111 | 0.00 0.00 750.00 884.25 cl
112 | 40.95 28.67 671.03 869.85 cl
113 | /bg { 0.8980 0.8980 0.8980 srgb } def
114 | 40.95 28.67 630.08 841.18 r p2
115 | 0.9725 0.4627 0.4275 srgb
116 | 1.06 setlinewidth
117 | [] 0 setdash
118 | 0 setlinecap
119 | 1 setlinejoin
120 | 1.00 setmiterlimit
121 | np
122 | 69.59 340.78 m
123 | 47.73 26.86 l
124 | 47.73 -216.15 l
125 | 47.74 371.10 l
126 | 47.73 309.02 l
127 | 47.73 -351.16 l
128 | 47.74 -324.68 l
129 | 47.73 597.30 l
130 | 47.73 -21.66 l
131 | 47.74 -425.04 l
132 | 47.73 124.44 l
133 | 47.74 -219.07 l
134 | 47.73 153.88 l
135 | o
136 | 0 0.7490 0.7686 srgb
137 | np
138 | 69.59 369.55 m
139 | 47.73 198.29 l
140 | 47.73 3.42 l
141 | 47.74 -266.88 l
142 | 47.73 223.50 l
143 | 47.73 -255.43 l
144 | 47.74 63.40 l
145 | 47.73 -176.70 l
146 | 47.73 -92.25 l
147 | 47.74 668.44 l
148 | 47.73 -46.05 l
149 | 47.74 -157.99 l
150 | 47.73 -59.28 l
151 | o
152 | 0.00 0.00 750.00 884.25 cl
153 | 0.00 0.00 750.00 884.25 cl
154 | 0.00 0.00 750.00 884.25 cl
155 | /Font1 findfont 10 s
156 | 0.4980 0.4980 0.4980 srgb
157 | 33.86 105.17 (0.12) 1 0 t
158 | 33.86 380.79 (0.14) 1 0 t
159 | 33.86 656.41 (0.16) 1 0 t
160 | 0.00 0.00 750.00 884.25 cl
161 | 0.00 0.00 750.00 884.25 cl
162 | 0.4980 0.4980 0.4980 srgb
163 | 1.06 setlinewidth
164 | [] 0 setdash
165 | 0 setlinecap
166 | 1 setlinejoin
167 | 10.00 setmiterlimit
168 | np
169 | 36.69 108.76 m
170 | 4.26 0 l
171 | o
172 | np
173 | 36.69 384.38 m
174 | 4.26 0 l
175 | o
176 | np
177 | 36.69 660.00 m
178 | 4.26 0 l
179 | o
180 | 0.00 0.00 750.00 884.25 cl
181 | 0.00 0.00 750.00 884.25 cl
182 | 0.00 0.00 750.00 884.25 cl
183 | 0.00 0.00 750.00 884.25 cl
184 | 0.00 0.00 750.00 884.25 cl
185 | 0.00 0.00 750.00 884.25 cl
186 | 0.4980 0.4980 0.4980 srgb
187 | 1.06 setlinewidth
188 | [] 0 setdash
189 | 0 setlinecap
190 | 1 setlinejoin
191 | 10.00 setmiterlimit
192 | np
193 | 69.59 24.41 m
194 | 0 4.26 l
195 | o
196 | np
197 | 117.32 24.41 m
198 | 0 4.26 l
199 | o
200 | np
201 | 165.05 24.41 m
202 | 0 4.26 l
203 | o
204 | np
205 | 212.79 24.41 m
206 | 0 4.26 l
207 | o
208 | np
209 | 260.52 24.41 m
210 | 0 4.26 l
211 | o
212 | np
213 | 308.25 24.41 m
214 | 0 4.26 l
215 | o
216 | np
217 | 355.99 24.41 m
218 | 0 4.26 l
219 | o
220 | np
221 | 403.72 24.41 m
222 | 0 4.26 l
223 | o
224 | np
225 | 451.45 24.41 m
226 | 0 4.26 l
227 | o
228 | np
229 | 499.19 24.41 m
230 | 0 4.26 l
231 | o
232 | np
233 | 546.92 24.41 m
234 | 0 4.26 l
235 | o
236 | np
237 | 594.66 24.41 m
238 | 0 4.26 l
239 | o
240 | np
241 | 642.39 24.41 m
242 | 0 4.26 l
243 | o
244 | 0.00 0.00 750.00 884.25 cl
245 | 0.00 0.00 750.00 884.25 cl
246 | /Font1 findfont 10 s
247 | 0.4980 0.4980 0.4980 srgb
248 | 69.59 14.40 (101) .5 0 t
249 | 117.32 14.40 (102) .5 0 t
250 | 165.05 14.40 (103) .5 0 t
251 | 212.79 14.40 (104) .5 0 t
252 | 260.52 14.40 (105) .5 0 t
253 | 308.25 14.40 (106) .5 0 t
254 | 355.99 14.40 (107) .5 0 t
255 | 403.72 14.40 (108) .5 0 t
256 | 451.45 14.40 (109) .5 0 t
257 | 499.19 14.40 (110) .5 0 t
258 | 546.92 14.40 (111) .5 0 t
259 | 594.66 14.40 (112) .5 0 t
260 | 642.39 14.40 (113) .5 0 t
261 | 0.00 0.00 750.00 884.25 cl
262 | 0.00 0.00 750.00 884.25 cl
263 | 0.00 0.00 750.00 884.25 cl
264 | 0.00 0.00 750.00 884.25 cl
265 | 0.00 0.00 750.00 884.25 cl
266 | 0.00 0.00 750.00 884.25 cl
267 | 0.00 0.00 750.00 884.25 cl
268 | 0.00 0.00 750.00 884.25 cl
269 | 0.00 0.00 750.00 884.25 cl
270 | 0.00 0.00 750.00 884.25 cl
271 | 0.00 0.00 750.00 884.25 cl
272 | 0.00 0.00 750.00 884.25 cl
273 | 0.00 0.00 750.00 884.25 cl
274 | /bg { 1 1 1 srgb } def
275 | 681.06 415.58 44.50 67.34 r p2
276 | 0.00 0.00 750.00 884.25 cl
277 | 0.00 0.00 750.00 884.25 cl
278 | /Font2 findfont 10 s
279 | 0 0 0 srgb
280 | 685.32 471.59 (v) 0 ta
281 | -0.200 (ariab) tb
282 | -0.100 (le) tb gr
283 | 0.00 0.00 750.00 884.25 cl
284 | 0.00 0.00 750.00 884.25 cl
285 | /bg { 0.9490 0.9490 0.9490 srgb } def
286 | 1 1 1 srgb
287 | 1.06 setlinewidth
288 | [] 0 setdash
289 | 1 setlinecap
290 | 1 setlinejoin
291 | 10.00 setmiterlimit
292 | 685.32 442.88 23.04 23.04 r p3
293 | 0.00 0.00 750.00 884.25 cl
294 | 0.00 0.00 750.00 884.25 cl
295 | 0.9725 0.4627 0.4275 srgb
296 | 1.06 setlinewidth
297 | [] 0 setdash
298 | 0 setlinecap
299 | 1 setlinejoin
300 | 10.00 setmiterlimit
301 | np
302 | 687.62 454.40 m
303 | 18.43 0 l
304 | o
305 | 0.00 0.00 750.00 884.25 cl
306 | 0.00 0.00 750.00 884.25 cl
307 | /bg { 0.9490 0.9490 0.9490 srgb } def
308 | 1 1 1 srgb
309 | 1.06 setlinewidth
310 | [] 0 setdash
311 | 1 setlinecap
312 | 1 setlinejoin
313 | 10.00 setmiterlimit
314 | 685.32 419.84 23.04 23.04 r p3
315 | 0.00 0.00 750.00 884.25 cl
316 | 0.00 0.00 750.00 884.25 cl
317 | 0 0.7490 0.7686 srgb
318 | 1.06 setlinewidth
319 | [] 0 setdash
320 | 0 setlinecap
321 | 1 setlinejoin
322 | 10.00 setmiterlimit
323 | np
324 | 687.62 431.36 m
325 | 18.43 0 l
326 | o
327 | 0.00 0.00 750.00 884.25 cl
328 | 0.00 0.00 750.00 884.25 cl
329 | /Font1 findfont 10 s
330 | 0 0 0 srgb
331 | 711.24 450.81 (D) 0 0 t
332 | 0.00 0.00 750.00 884.25 cl
333 | 0.00 0.00 750.00 884.25 cl
334 | /Font1 findfont 10 s
335 | 0 0 0 srgb
336 | 711.24 427.77 (R) 0 0 t
337 | 0.00 0.00 750.00 884.25 cl
338 | 0.00 0.00 750.00 884.25 cl
339 | 0.00 0.00 750.00 884.25 cl
340 | 0.00 0.00 750.00 884.25 cl
341 | 0.00 0.00 750.00 884.25 cl
342 | 0.00 0.00 750.00 884.25 cl
343 | 0.00 0.00 750.00 884.25 cl
344 | 0.00 0.00 750.00 884.25 cl
345 | 0.00 0.00 750.00 884.25 cl
346 | 0.00 0.00 750.00 884.25 cl
347 | 0.00 0.00 750.00 884.25 cl
348 | 0.00 0.00 750.00 884.25 cl
349 | ep
350 | %%Trailer
351 | %%Pages: 1
352 | %%EOF
353 |
--------------------------------------------------------------------------------
/polarization.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/polarization.png
--------------------------------------------------------------------------------
/polarization.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | scrapy
2 | requests
3 |
--------------------------------------------------------------------------------
/senate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/senate.png
--------------------------------------------------------------------------------
/senate_analyzer.R:
--------------------------------------------------------------------------------
1 | setwd("~/vikparuchuri/political-positions")
2 |
3 | is_installed <- function(mypkg) is.element(mypkg, installed.packages()[,1])
4 |
5 | load_or_install<-function(package_names)
6 | {
7 | for(package_name in package_names)
8 | {
9 | if(!is_installed(package_name))
10 | {
11 | install.packages(package_name,repos="http://lib.stat.cmu.edu/R/CRAN")
12 | }
13 | options(java.parameters = "-Xmx8g")
14 | library(package_name,character.only=TRUE,quietly=TRUE,verbose=FALSE)
15 | }
16 | }
17 |
18 | sorted_vec <- function(dat){
19 | dat$vote[dat$vote=="Yea"] = 1
20 | dat$vote[dat$vote=="Nay"] = 0
21 | dat$vote[dat$vote=="Not Voting"] = 2
22 | unique_senators = unique(dat$sen)
23 | unique_cong = sort(unique(dat$congress))
24 | cols = list()
25 | for(c in unique_cong){
26 | subc = dat[dat$congress==c,]
27 | unique_session = sort(unique(subc$session))
28 | for(s in unique_session){
29 | subs = subc[subc$session==s,]
30 | unique_number = sort(unique(subs$number))
31 | for(n in unique_number){
32 | subn = subs[subs$number==n,]
33 | votes = lapply(unique_senators,function(x){
34 | ret <- 3
35 | if(x%in% subn$sen){
36 | ret = subn[subn$sen==x,'vote']
37 | }
38 | ret
39 | })
40 | ret = data.frame(as.numeric(votes),stringsAsFactors=FALSE)
41 | colnames(ret) = paste("(",c,"|",s,"|",n,")",sep="")
42 | cols[[length(cols)+1]] = ret
43 | }
44 | }
45 | }
46 | ret = data.frame(do.call(cbind,cols),stringsAsFactors=FALSE)
47 | rownames(ret) = unique_senators
48 | ret
49 | }
50 |
51 | load_or_install(c("RJSONIO","ggplot2","stringr","foreach","wordcloud","lsa","MASS","openNLP","tm","fastmatch","reshape","openNLPmodels.en",'e1071','gridExtra'))
52 |
53 | senate = fromJSON("data/senate.json")
54 |
55 | frames = lapply(senate,function(x){
56 | data.frame(sen=gsub(", ","",as.character(names(x$data))),vote=as.character(x$data),congress=as.numeric(x$congress),number=as.numeric(x$number),session=as.numeric(x$session),stringsAsFactors=FALSE)
57 | })
58 | frame = do.call(rbind,frames)
59 |
60 | frame2013 = sorted_vec(frame[frame$congress==113,])
61 |
62 | frame2013$name = gsub(" ","",as.character(lapply(strsplit(rownames(frame2013),"\\("),function(x) x[1])))
63 | frame2013$party = as.character(lapply(strsplit(rownames(frame2013),"\\("),function(x) strsplit(x[2],"-")[[1]][1]))
64 | frame2013$state = gsub("\\)","",as.character(lapply(strsplit(rownames(frame2013),"\\("),function(x) strsplit(x[2],"-")[[1]][2])))
65 |
66 | non_predictors = c("name","party","state")
67 |
68 | features = frame2013
69 |
70 | feature_names = names(features)[!names(features) %in% c(non_predictors)]
71 |
72 | for(f in feature_names){
73 | features[,f] = as.numeric(features[,f])
74 | }
75 |
76 | features = features[apply(features[,feature_names],1,function(x) length(x[x==3])<10),]
77 |
78 | scaled_data = scale(features[,feature_names])
79 | scaled_data = apply(scaled_data,2,function(x) {
80 | x[is.na(x)] = 2
81 | x
82 | })
83 | svd_train<-svd(scaled_data,2)$u
84 |
85 | newtrain<-data.frame(x=svd_train[,1],y=svd_train[,2],label_code=as.numeric(as.factor(features$party)),label=features$party,state=features$state,name=features$name,full_name=rownames(features),stringsAsFactors=FALSE)
86 | distances = rowMeans(as.matrix(dist(newtrain[,c("x","y")],method="euclidean")))
87 | newtrain = data.frame(newtrain,distances=distances,stringsAsFactors=FALSE)
88 | interesting_senators = c("Chiesa (R-NJ)","Markey (D-MA)","Kerry (D-MA)","Cowan (D-MA)", "Lautenberg (D-NJ)","McCain (R-AZ)", "Rubio (R-FL)","Cruz (R-TX)","Scott (R-SC)","Roberts (R-KS)", "Inhofe (R-OK)","Barrasso (R-WY)", "Johnson (R-WI)", "Reid (D-NV)", "Durbin (D-IL)", "Schumer (D-NY)", "McConnell (R-KY)", "Cornyn (R-TX)", "Thune (R-SD)", "Murkowski (R-AK)", "Collins (R-ME)", "Manchin (D-WV)", "Pryor (D-AR)", "King (I-ME)", "Sanders (I-VT)")
89 |
90 | #model = svm(score ~ x + y, data = newtrain)
91 | #plot(model,newtrain)
92 |
93 | collapse_frame = do.call(rbind,by(features[,feature_names],features$label_code,function(x) apply(x,2,mean)))
94 | line_count = tapply(tf$result_label,tf$result_label,length)
95 | scaled_data = scale(collapse_frame)
96 | scaled_data = apply(scaled_data,2,function(x) {
97 | x[is.na(x)] = -1
98 | x
99 | })
100 |
101 |
102 | svd_train<-data.frame(svd(scaled_data,2)$u,line_count=line_count,label=rownames(line_count))
103 | svd_train <- svd_train[svd_train$X1mean(svd_train$X1)-1.4*sd(svd_train$X1),]
104 | svd_train <- svd_train[svd_train$X2mean(svd_train$X2)-1.4*sd(svd_train$X2),]
105 |
106 | p <- ggplot(newtrain, aes(x, y))
107 | p = p + geom_point(aes(colour =label_code-1, size=10)) + scale_colour_gradient(low = "darkblue", high="red") + scale_size_area(max_size=7) + geom_text(data = newtrain[newtrain$full_name %in% interesting_senators,], aes(x+.2,y, label = full_name), hjust = 2)
108 | p = p + theme(axis.line = element_blank(),
109 | panel.grid.major = element_blank(),
110 | panel.grid.minor = element_blank(),
111 | panel.border = element_blank(),
112 | axis.title.x = element_blank(),
113 | axis.title.y = element_blank(),
114 | axis.ticks=element_blank(),
115 | axis.text.x = element_blank(),
116 | axis.text.y = element_blank())
117 | p = p +labs(colour="Type of Music")
118 | p
119 |
120 |
121 | unique_congress = sort(unique(frame$congress))
122 | polarization = list()
123 | for(c in unique_congress){
124 | sframe = frame[frame$congress==c,]
125 | if(sum(is.na(sframe))==0){
126 |
127 | frame2013 = sorted_vec(sframe)
128 |
129 | frame2013$name = gsub(" ","",as.character(lapply(strsplit(rownames(frame2013),"\\("),function(x) x[1])))
130 | frame2013$party = as.character(lapply(strsplit(rownames(frame2013),"\\("),function(x) strsplit(x[2],"-")[[1]][1]))
131 | frame2013$state = gsub("\\)","",as.character(lapply(strsplit(rownames(frame2013),"\\("),function(x) strsplit(x[2],"-")[[1]][2])))
132 | features = frame2013
133 |
134 | feature_names = names(features)[!names(features) %in% c(non_predictors)]
135 |
136 | for(f in feature_names){
137 | features[,f] = as.numeric(features[,f])
138 | }
139 |
140 | scaled_data = scale(features[,feature_names])
141 | scaled_data = apply(scaled_data,2,function(x) {
142 | x[is.na(x)] = -1
143 | x
144 | })
145 | svd_train<-svd(scaled_data,2)$u
146 |
147 | newtrain<-data.frame(x=svd_train[,1],y=svd_train[,2],label_code=as.numeric(as.factor(features$party)),label=features$party,state=features$state,name=features$name,full_name=rownames(features),stringsAsFactors=FALSE)
148 | dist_mat = as.matrix(dist(newtrain[,c("x","y")],method="euclidean"))
149 | dem_distances = apply(dist_mat,1,function(x) mean(x[features$party=="D"]))
150 | rep_distances = apply(dist_mat,1,function(x) mean(x[features$party=="R"]))
151 | distances = rowMeans(dist_mat)
152 | party_distances = tapply(distances,newtrain$label,mean)
153 | dem_distances = tapply(dem_distances,newtrain$label,mean)
154 | rep_distances = tapply(rep_distances,newtrain$label,mean)
155 | party_counts = tapply(newtrain$label,newtrain$label,length)
156 | dist_frame = data.frame(D=party_distances['D'],R=party_distances['R'],I=party_distances['I'],congress=c,DP=rep_distances['D'],RP=dem_distances['R'],DC=party_counts['D'],RC=party_counts['R'],IC=party_counts['I'])
157 | polarization[[length(polarization)+1]] = dist_frame
158 | }
159 | }
160 |
161 | dists = do.call(rbind,polarization)
162 | dfm <- melt(dists[,c("congress","D","R")], id.var = c("congress"))
163 | ddf = melt(dists[,c("congress","D","R","DC","RC")], id.var = c("congress"))
164 | ddf = data.frame(dists,variable=dists$congress)
165 | p <- ggplot(dfm, aes(congress, value, group = variable, colour = variable))
166 | p = p + geom_line() + scale_x_continuous(labels = dists$congress,breaks = dists$congress)
167 | p = p + theme(axis.line = element_blank(),
168 | panel.grid.major = element_blank(),
169 | panel.grid.minor = element_blank(),
170 | panel.border = element_blank(),
171 | axis.title.x = element_blank(),
172 | axis.title.y = element_blank())
173 | #p = p + geom_text(data = ddf, aes(congress,D, label = DC, hjust = 2))
174 | #p = p + geom_text(data = dists, aes(congress,R, label = RC, hjust = 2))
175 | p
176 |
177 |
--------------------------------------------------------------------------------
/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/tasks/__init__.py
--------------------------------------------------------------------------------
/tests/__init__.py:
--------------------------------------------------------------------------------
1 | __author__ = 'vik'
2 |
--------------------------------------------------------------------------------
/tests/test_runner.py:
--------------------------------------------------------------------------------
1 | """
2 | Runs tests
3 | """
4 |
5 | from percept.utils.registry import registry
6 | import logging
7 |
8 | log = logging.getLogger(__name__)
9 |
10 | def run_all_tests():
11 | """
12 | Look through the registry, and run tests for any class that has a tester and test_cases
13 | """
14 | for item in registry:
15 | item_cls = item.cls
16 | if hasattr(item_cls, 'tester') and hasattr(item_cls, 'test_cases'):
17 | tester = item_cls.tester()
18 | yield tester.run, item_cls, item_cls.test_cases
19 |
20 |
--------------------------------------------------------------------------------
/workflows/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VikParuchuri/political-positions/7c92276995a8b28e2b0beb90b5eec8226c0db397/workflows/__init__.py
--------------------------------------------------------------------------------