20 Utilizing CA campaign finance data

# i always begin by loading the disco engine if it isn't already loaded
library(discoveryengine)

Prospect Analysis screens CADS data against campaign finance disclosures for California elections, as reported to the CA Secretary of State. The widgets to access this data are similar in form and function to the FEC widgets. They are:

  • ca_gave_to_candidate
  • ca_gave_to_proposition
  • ca_gave

The first two widgets only look at contributions in campaigns for statewide office. However, the Secretary of State’s “Cal Access” database includes a number of transactions that don’t fit into either of those two categories. For instance, contributions to a campaign for Superior Court Judge (who run locally, not statewide) or contributions to committees that are not directly affiliated with a single candidate/proposition (such as the Democratic State Central Committee of California). In order to be able to find any kind of contribution, use ca_gave, which includes giving to statewide candidates and propositions as well as any other disclosed giving.

20.1 Example: State Senate and Assembly candidates

The UC Berkeley Foundation is holding an event which will feature appearances by State assembly member Phil Ting, former state senator and assembly member Holly Mitchell, and state senator (and former state assembly member) Jim Beall. In preparation for the event, they ask you to find out who among our constituents have contributed to these officials’ campaigns when they were running for office and do some preliminary research on them. We start by identifying the candidate IDs for those candidates, using the same synonym search tool that works in every widget:

ca_gave_to_candidate(?mitchell, ?ting, ?beall)
## Regular codes and synonyms:
##           synonym         code
##    mitchell_holly CA1223588942
##  mitchell_holly_j CA3479738832
##      ing_mitchell CA1065733190
##         ting_phil  CA657102211
##    keating_janice   CA15407672
##  keating_janice_e CA2583880518
##         beall_jim CA3663467903

Once we know the correct candidate codes, we can pull contributors:

donors = ca_gave_to_candidate(CA657102211, CA1223588942, CA3663467903)
display(donors)
## # A tibble: 366 x 1
##    entity_id
##        <dbl>
##  1       331
##  2      1303
##  3      8666
##  4     11015
##  5     12306
##  6     12453
##  7     14259
##  8     15683
##  9     16251
## 10     16374
## # … with 356 more rows

Just like giving and FEC widgets, the California campaign finance widgets all support the following optional arguments:

  • at_least: to find donors with total contributions over a specified amount. By default, this is assumed to be 1 cent.
  • from and to: to constrain the date range when looking for contributions. By default, all matched contributions will be searched regardless of date. Prospect Development’s California campaign finance database goes back to 2006.

20.2 Propositions

The process for ballot propositions is pretty similar to the one for candidates, but with the added complication that donors to proposition campaigns can be either supporting or opposed to the proposition in question. An example will help illustrate.

If you’re looking for prospects who are interested in public education, you might end up considering donors to propositions 30 (in the 2011-12 cycle) and 55 (in the 2015-15 cycle). Prop 30 raised taxes in order to pay for both public K-12 schools as well as community colleges, and Prop 55 extended those tax increases. Once again, we’ll start with a synonym search:

ca_gave_to_proposition(?education)
## Regular codes and synonyms:
##                                                                                   synonym
##                      kindergarten_university_public_education_facilities_bond_act_of_2004
##      ab_127_chapter_35_2006_nunez_education_facilities_kindergarten_university_public_edu
##  education_funding_real_property_parcel_tax_initiative_constitutional_amendment_and_statu
##                      sb_1174_chapter_753_statutes_of_2014_lara_english_language_education
##                      kindergarten_university_public_education_facilities_bond_act_of_2002
##                                                            education_funding_payment_plan
##                   tax_for_early_education_and_early_childhood_programs_initiative_statute
##      public_preschool_education_tax_increase_on_incomes_over_400000_for_individuals_80000
##          temporary_taxes_to_fund_education_guaranteed_local_public_safety_funding_initiat
##         tax_extension_to_fund_education_and_healthcare_initiative_constitutional_amendmen
##        code
##  BL20030055
##  BL2005001D
##  BL20050088
##  BL20150058
##  BL20010047
##  BL2009001B
##  BL20110038
##  BL20050082
##  BL20110030
##  BL20150055

The code field looks at first like it is completely meaningless, but take a closer look at you might notice: the last 4 characters are the proposition number (e.g. 0055), while the 4 characters before that are the start of the election cycle that the proposition was a part of (so 2015 refers to the 2015-16 election cycle). So for this project, I’d use BL20150055 and BL20110030. By default, ca_gave_to_proposition will pull both supporters and oppononents of the propositions. While that may be useful if you’re just looking for wealth indicators, you probably want to specify one or the other for any affinity-based work. So:

# to pull supporters of a tax increase to fund education:
tax_supporter = ca_gave_to_proposition(BL20150055, BL20110030, 
                                       support = TRUE)

# and opponents:
tax_opponent = ca_gave_to_proposition(BL20150055, BL20110030, 
                                      support = FALSE)

A quick glance at the Matrix Bot results give us a good idea of which side of the political aisle these two groups are coming from:

matrix_bot(tax_supporter)
## ca_gave_to_candidate 
##     CA545453741: DE LEON, KEVIN
##     CA3415765751: OSBORN, TORIE
##     CA3789174547: YEE, BETTY T.
##     CA580635557: PAVLEY, FRAN
##     CA2025703811: STERN, HENRY
##     CA165165894: TORLAKSON, TOM
##     CA1322715128: BECERRA, XAVIER
##     CA1664107145: YEE , BETTY T.
##     CA941720645: SKINNER, NANCY
## fec_gave_to_candidate 
##     H4CA21072: RENTERIA, AMANDA
##     H0CA33117: BASS, KAREN
##     H8CA10167: COX, TERRANCE JOHN (TJ)
##     S4MA00028: MARKEY, EDWARD JOHN MR
##     H2CA31125: AGUILAR, PETE
##     H2CA36439: RUIZ, RAUL DR.
##     H6AZ08038: GIFFORDS, GABRIELLE
##     H4CA10075: EGGMAN, MICHAEL RAY
##     H8NV03036: TITUS, DINA
##     S6OH00254: STRICKLAND, TED
##     H8CO04067: MARKEY, ELIZABETH HELEN
##     S2IN00091: DONNELLY, JOSEPH S
##     S6MO00362: KANDER, JASON
##     S4MI00355: PETERS, GARY
##     S8AK00090: BEGICH, MARK
##     H2CA43245: TAKANO, MARK
##     H2CA52089: PETERS, SCOTT
##     H8CA22089: CAPPS, LOIS
##     S8ME00080: ALLEN, THOMAS H
##     S6PA00100: SPECTER, ARLEN
##     H2CA26026: BERMAN, HOWARD L.
##     H2MA04073: KENNEDY, JOSEPH P III
##     H2CA00120: BROWNLEY, JULIA
##     H6CA04123: BROWN, CHARLES
##     S4GA11277: NUNN, MARY MICHELLE
##     S8CO00172: UDALL, MARK E
##     S2NM00088: HEINRICH, MARTIN TREVOR
##     S6NV00028: REID, HARRY
##     S6LA00227: LANDRIEU, MARY L
##     S6PA00266: MCGINTY, KATHLEEN ALANA
##     S2ND00099: HEITKAMP, HEIDI
##     S6VA00093: WARNER, MARK ROBERT
##     S8FL00166: NELSON, BILL
##     S8NY00082: SCHUMER, CHARLES E
##     S8NC00239: HAGAN, KAY R
##     S6NV00200: MASTO, CATHERINE CORTEZ
##     H0CA27085: SCHIFF, ADAM
##     S2VA00142: KAINE, TIMOTHY MICHAEL
##     S4NJ00185: BOOKER, CORY A
##     S2NV00209: BERKLEY, SHELLEY
##     H0CA10149: GARAMENDI, JOHN
##     S8NM00184: UDALL, TOM
##     H0CA03078: BERA, AMERISH
##     S0NH00219: SHAHEEN, JEANNE
##     H8CA05035: PELOSI, NANCY
##     S0CO00211: BENNET, MICHAEL F
##     S6NH00091: HASSAN, MARGARET WOOD
##     S6MO00305: MCCASKILL, CLAIRE
##     S8MI00281: STABENOW, DEBBIE
##     S6IL00292: DUCKWORTH, L TAMMY
##     H4CA11081: MCNERNEY, JERRY
##     S2WA00189: MURRAY, PATTY
##     S6MT00162: TESTER, JON
##     S6OH00163: BROWN, SHERROD
##     S8OR00207: MERKLEY, JEFFREY ALAN
##     S8WI00026: FEINGOLD, RUSSELL DANA
##     S0CA00199: FEINSTEIN, DIANNE
##     S8WA00194: CANTWELL, MARIA
##     S6CA00584: HARRIS, KAMALA D
##     S8MN00438: FRANKEN, AL
##     S2WI00219: BALDWIN, TAMMY
##     S0NY00410: GILLIBRAND, KIRSTEN ELIZABETH
##     S0AL00156: JONES, DOUG
##     S2CA00286: BOXER, BARBARA
##     S2MA00170: WARREN, ELIZABETH
## fec_gave_to_category 
##     J2100: Democratic leadership PAC
##     J7500: Minority/Ethnic Groups
##     Y0000: Unknown
##     J1200: Democratic/Liberal
## gave_to_department 
##     PP: Public Policy
##     CEEE: Educ Equity & Excellence Centers
## has_affiliation 
##     BLDR: Builders of Berkeley
## has_interest 
##     HUR: Human Rights
##     PCY: Public Policy
##     ENV: Environment
##     DIV: Diverse Constituencies
matrix_bot(tax_opponent)
## ca_gave_to_candidate 
##     CA1403064487: STRICKLAND, TONY
##     CA3516489204: POIZNER, STEVE
##     CA643204175: WHITMAN, MARGARET C.
##     CA4012945810: MC CLINTOCK, THOMAS
##     CA1728102410: BAKER, CATHARINE
##     CA4083971340: SCHWARZENEGGER, ARNOLD
## fec_gave_to_candidate 
##     S4AR00103: COTTON, THOMAS
##     H0CA10123: HARMER, DAVID
##     S0OH00133: PORTMAN, ROB
##     S0NV00138: ANGLE, SHARRON E
##     S2OH00170: MANDEL, JOSH
##     S0MA00109: BROWN, SCOTT P
##     S0SC00149: GRAHAM, LINDSEY OLIN
##     S0FL00338: RUBIO, MARCO
##     H2CA11135: GILL, RICKY
##     H6CA22125: MCCARTHY, KEVIN
##     S0CA00330: FIORINA, CARLY
##     H0OH08029: BOEHNER, JOHN A.
##     H8WI01024: RYAN, PAUL D.
##     S2CA00351: CAMPBELL, TOM
##     P80003353: ROMNEY, MITT / RYAN, PAUL D. 
##     P80002801: MCCAIN, JOHN S.
## fec_gave_to_category 
##     J1100: Republican/Conservative
##     J2200: Republican leadership PAC
##     Z4100: Republican Joint Candidate Committee
##     Z5100: Republican Party Committees
##     Z1100: Republican Candidate Committees
## has_interest 
##     VEN: Venture Capital
##     BUS: Business
##     REP: Republican Politics