Analysis of CA ballot measure financing

Including Proposition 62 to abolish the death penalty in California.


In [78]:
import pandas as pd

In [79]:
# proposition = "PROPOSITION 064- MARIJUANA LEGALIZATION. INITIATIVE STATUTE."
proposition = "PROPOSITION 062- DEATH PENALTY. INITIATIVE STATUTE."

Read in data on committees and contributions


In [80]:
props = pd.read_csv("http://www.firstpythonnotebook.org/_static/committees.csv")

In [81]:
contribs = pd.read_csv("http://www.firstpythonnotebook.org/_static/contributions.csv")

Number of committees per proposition


In [82]:
props.prop_name.value_counts()


Out[82]:
PROPOSITION 057 - CRIMINAL SENTENCES. JUVENILE CRIMINAL PROCEEDINGS AND SENTENCING. INITIATIVE CONSTITUTIONAL AMENDMENT AND STATUTE.                           13
PROPOSITION 056 - CIGARETTE TAX TO FUND HEALTHCARE, TOBACCO USE PREVENTION, RESEARCH, AND LAW ENFORCEMENT. INITIATIVE CONSTITUTIONAL AMENDMENT AND STATUTE.    12
PROPOSITION 064- MARIJUANA LEGALIZATION. INITIATIVE STATUTE.                                                                                                   11
PROPOSITION 066- DEATH PENALTY. PROCEDURES. INITIATIVE STATUTE.                                                                                                 9
PROPOSITION 055 - TAX EXTENSION TO FUND EDUCATION AND HEALTHCARE. INITIATIVE CONSTITUTIONAL AMENDMENT.                                                          8
PROPOSITION 067- REFERENDUM TO OVERTURN BAN ON SINGLE-USE PLASTIC BAGS.                                                                                         7
PROPOSITION 062- DEATH PENALTY. INITIATIVE STATUTE.                                                                                                             7
PROPOSITION 059- SB 254 (CHAPTER 20, STATUTES OF 2016), ALLEN. CAMPAIGN FINANCE: VOTER INSTRUCTION                                                              6
PROPOSITION 053 - REVENUE BONDS. STATEWIDE VOTER APPROVAL. INITIATIVE CONSTITUTIONAL AMENDMENT.                                                                 4
PROPOSITION 054 - LEGISLATURE. LEGISLATION AND PROCEEDINGS. INITIATIVE CONSTITUTIONAL AMENDMENT AND STATUTE.                                                    4
PROPOSITION 058 - SB 1174 (CHAPTER 753, STATUTES OF 2014), LARA. ENGLISH LANGUAGE EDUCATION                                                                     4
PROPOSITION 063- FIREARMS. AMMUNITION SALES. INTIATIVE STATUTE.                                                                                                 4
PROPOSITION 051 - SCHOOL BONDS. FUNDING FOR K-12 SCHOOL AND COMMUNITY COLLEGE FACILITIES. INITIATIVE STATUTORY AMENDMENT.                                       4
PROPOSITION 052 - STATE FEES ON HOSPITALS. FEDERAL MEDI-CAL MATCHING FUNDS. INITIATIVE STATUTORY AND CONSTITUTIONAL AMENDMENT.                                  3
PROPOSITION 061- STATE PRESCRIPTION DRUG PURCHASES. PRICING STANDARDS. INITIATIVE STATUTE.                                                                      3
PROPOSITION 060- ADULT FILMS. CONDOMS. HEALTH REQUIREMENTS. INITIATIVE STATUTE.                                                                                 2
PROPOSITION 065- CARRY-OUT BAGS. CHARGES. INITIATIVE STATUTE.                                                                                                   1
Name: prop_name, dtype: int64

Filter for proposition of interest


In [83]:
prop = props[props.prop_name == proposition]

All contributions to all committees for and against the proposition


In [84]:
merged = pd.merge(prop, contribs, on="calaccess_committee_id")

In [85]:
merged[["contributor_firstname", "contributor_lastname", "contributor_city", "contributor_state", "amount", "committee_name_x", "committee_position"]].head()


Out[85]:
contributor_firstname contributor_lastname contributor_city contributor_state amount committee_name_x committee_position
0 SUZI ALEXANDER SAN FRANCISCO CA 100.0 YES ON 62, NO ON 66. REPLACE THE COSTLY, FAILE... SUPPORT
1 GARLAND ALLEN SANTA MONICA CA 1500.0 YES ON 62, NO ON 66. REPLACE THE COSTLY, FAILE... SUPPORT
2 KATHRYN ANDREWS EL CERRITO CA 100.0 YES ON 62, NO ON 66. REPLACE THE COSTLY, FAILE... SUPPORT
3 ROBERT BACON OAKLAND CA 750.0 YES ON 62, NO ON 66. REPLACE THE COSTLY, FAILE... SUPPORT
4 RICHARD BAYLESS FREMONT CA 100.0 YES ON 62, NO ON 66. REPLACE THE COSTLY, FAILE... SUPPORT

Total contributions


In [86]:
merged.amount.sum()


Out[86]:
32836678.18

Number of committees for and against the proposition


In [87]:
merged.committee_position.value_counts().reset_index()


Out[87]:
index committee_position
0 OPPOSE 29633
1 SUPPORT 4809

In [88]:
support = merged[merged.committee_position == "SUPPORT"]

In [89]:
oppose = merged[merged.committee_position == "OPPOSE"]

Total contributions for the proposition


In [90]:
support.amount.sum()


Out[90]:
16000608.370000001

Total contributions against the proposition


In [91]:
oppose.amount.sum()


Out[91]:
16836069.809999999

Percentage of total contributions given to support the proposition


In [92]:
support.amount.sum() / merged.amount.sum()


Out[92]:
0.48727853293472212

Top contributions in support of the proposition


In [93]:
support.sort_values("amount", ascending=False)[["contributor_firstname", "contributor_lastname", "contributor_city", "contributor_state", "amount", "committee_name_x"]].head()


Out[93]:
contributor_firstname contributor_lastname contributor_city contributor_state amount committee_name_x
33745 NaN FUND FOR POLICY REFORM WILMINGTON DE 1970000.0 FUND FOR POLICY REFORM (NONPROFIT 501(C)(4))
33737 THOMAS STEYER SAN FRANCISCO CA 1500000.0 MILLION VOTER PROJECT ACTION FUND - YES ON 55,...
33746 NaN FUND FOR POLICY REFORM WILMINGTON DE 1403000.0 FUND FOR POLICY REFORM (NONPROFIT 501(C)(4))
33744 NaN FUND FOR POLICY REFORM WILMINGTON DE 1000000.0 FUND FOR POLICY REFORM (NONPROFIT 501(C)(4))
33742 NaN FUND FOR POLICY REFORM WILMINGTON DE 550000.0 FUND FOR POLICY REFORM (NONPROFIT 501(C)(4))

Top contributions in opposition to the proposition


In [94]:
oppose.sort_values("amount", ascending=False)[["contributor_firstname", "contributor_lastname", "contributor_city", "contributor_state", "amount", "committee_name_x"]].head()


Out[94]:
contributor_firstname contributor_lastname contributor_city contributor_state amount committee_name_x
33246 HENRY T. NICHOLAS III ALISO VIEJO CA 200000.0 CALIFORNIANS TO MEND, NOT END, THE DEATH PENAL...
33014 HENRY T. NICHOLAS III ALISO VIEJO CA 200000.0 CALIFORNIANS TO MEND, NOT END, THE DEATH PENAL...
33734 NaN CALIFORNIA CORRECTIONAL PEACE OFFICERS ASSOCIA... SACRAMENTO CA 125000.0 CALIFORNIANS TO MEND, NOT END, THE DEATH PENAL...
33696 NaN CALIFORNIA CORRECTIONAL PEACE OFFICERS ASSOCIA... SACRAMENTO CA 125000.0 CALIFORNIANS TO MEND, NOT END, THE DEATH PENAL...
32739 NaN LOS ANGELES POLICE PROTECTIVE LEAGUE ISSUES PAC SACRAMENTO CA 125000.0 CALIFORNIANS TO MEND, NOT END, THE DEATH PENAL...

Total intake, by committee, for and against the proposition


In [95]:
merged.groupby(["committee_name_x", "committee_position"]).amount.sum().reset_index().sort_values("amount", ascending=False)


Out[95]:
committee_name_x committee_position amount
1 CALIFORNIANS TO MEND, NOT END, THE DEATH PENAL... OPPOSE 8.387852e+06
0 CALIFORNIA CORRECTIONAL PEACE OFFICERS ASSOCIA... OPPOSE 8.343218e+06
6 YES ON 62, NO ON 66. REPLACE THE COSTLY, FAILE... SUPPORT 7.621678e+06
2 FUND FOR POLICY REFORM (NONPROFIT 501(C)(4)) SUPPORT 6.140000e+06
3 MILLION VOTER PROJECT ACTION FUND - YES ON 55,... SUPPORT 2.110000e+06
5 VOLUNTEERS FOR YES ON 62 SUPPORT 1.289300e+05
4 SAN FRANCISCO POLICE OFFICERS ASSOCIATION ISSU... OPPOSE 1.050000e+05

Top individual and organizational contributors for and against the proposition

  • Used fillna() to fill missing (NaN) values for contributors' first and last names
  • Combination of first name, last name, city and "position" assumed to be unique individual

In [96]:
top_contributors = merged.fillna({'contributor_firstname': 'NotAFirstName', 'contributor_lastname': 'NotALastName'})
top_contributors = top_contributors.groupby(["contributor_firstname", "contributor_lastname", "contributor_city", "committee_position"]).amount.sum().reset_index().sort_values("amount", ascending=False)

In [97]:
top_contributors.head(10)


Out[97]:
contributor_firstname contributor_lastname contributor_city committee_position amount
22133 NotAFirstName FUND FOR POLICY REFORM WILMINGTON SUPPORT 6140000.0
28597 THOMAS STEYER SAN FRANCISCO SUPPORT 1750000.0
21816 NICHOLAS MCKEOWN PORTOLA VALLEY SUPPORT 1500000.0
23943 REED HASTINGS SANTA CRUZ SUPPORT 1000000.0
22098 NotAFirstName CALIFORNIA CORRECTIONAL PEACE OFFICERS ASSOCIA... SACRAMENTO OPPOSE 650000.0
22198 NotAFirstName PEACE OFFICERS RESEARCH ASSOCIATION OF CALIFOR... SACRAMENTO OPPOSE 610000.0
22164 NotAFirstName LAURENE POWELL JOBS, INCLUDING EMERSON COLLECT... PALO ALTO SUPPORT 600000.0
22192 NotAFirstName OPEN SOCIETY POLICY CENTER INC. WASHINGTON SUPPORT 500000.0
22254 NotAFirstName THE CALIFORNIA ASSOCIATION OF HIGHWAY PATROLMEN SACRAMENTO OPPOSE 500000.0
22714 PAUL GRAHAM MOUNTAIN VEW SUPPORT 500000.0

In [ ]: