Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
File size: 8,208 Bytes
61d29fc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 | # FEC Campaign Finance Integration - Implementation Summary
## β
What Was Added
### 1. Pipeline Module
**File:** [`pipeline/create_campaigns_gold_tables.py`](../pipeline/create_campaigns_gold_tables.py)
Creates 4 campaign finance gold tables per state:
- `campaigns_candidates.parquet` - Federal candidates (House, Senate, President)
- `campaigns_committees.parquet` - PACs and campaign committees
- `campaigns_contributions.parquet` - Individual contributions $200+
- `campaigns_nonprofit_donors.parquet` - Nonprofit leadership political giving analysis
**Key Features:**
- State-specific data extraction
- Links to nonprofits via employer matching
- Links to nonprofit officers via name matching
- Configurable contribution limits and cycle years
### 2. Example Demo Script
**File:** [`examples/demo_fec_integration.py`](../examples/demo_fec_integration.py)
Interactive demonstration of FEC API capabilities:
- Search for candidates in a state
- Find contributions from specific employers
- Track nonprofit leadership donations
- Create gold tables for integration
**Usage:**
```bash
# Basic demo
python examples/demo_fec_integration.py --state MA
# Search specific employer
python examples/demo_fec_integration.py --state MA --employer "Community Health"
# Create gold tables
python examples/demo_fec_integration.py --state MA --create-gold-tables
```
### 3. Comprehensive Documentation
**File:** [`website/docs/integrations/fec-campaign-finance.md`](../website/docs/integrations/fec-campaign-finance.md)
Complete integration guide including:
- API access setup (get free key from api.data.gov)
- Gold table schemas
- Use case examples
- Data model integration
- Advanced usage patterns
- Best practices
**Complements existing file:** [`website/docs/integrations/fec-political-contributions.md`](../website/docs/integrations/fec-political-contributions.md)
## π Integration with Existing Data Model
### Data Linkages
The FEC integration connects to existing gold tables:
```
campaigns_contributions.parquet
βββΊ contributor_employer ββββββββΊ nonprofits_organizations.organization_name
βββΊ contributor_name ββββββββΊ contacts_nonprofit_officers.officer_name
campaigns_nonprofit_donors.parquet (Analysis Table)
βββΊ ein ββββββββΊ nonprofits_organizations.ein
βββΊ organization_name ββββββββΊ nonprofits_organizations.organization_name
βββΊ contributor_name ββββββββΊ contacts_nonprofit_officers.officer_name
campaigns_candidates.parquet
βββΊ state ββββββββΊ State-partitioned data structure
campaigns_committees.parquet
βββΊ state ββββββββΊ State-partitioned data structure
```
### Use Cases Enabled
1. **Track Political Influence on Grant Awards**
```python
# Load data
contributions = pd.read_parquet('data/gold/states/MA/campaigns_contributions.parquet')
grants = pd.read_parquet('data/gold/states/MA/grants_revenue_sources.parquet')
# Analyze correlation between political giving and grant receipt
```
2. **Identify Politically Active Nonprofit Leaders**
```python
# Load nonprofit donor analysis
donors = pd.read_parquet('data/gold/states/MA/campaigns_nonprofit_donors.parquet')
# See which nonprofit officers donate politically
print(donors.groupby('organization_name')['contribution_amount'].sum())
```
3. **Map Donor Networks in Healthcare Policy**
```python
# Find health sector political contributions
health_contribs = contributions[
contributions['contributor_employer'].str.contains('Health', case=False, na=False)
]
```
## π Directory Structure
```
data/gold/states/{STATE}/
βββ campaigns_candidates.parquet β NEW
βββ campaigns_committees.parquet β NEW
βββ campaigns_contributions.parquet β NEW
βββ campaigns_nonprofit_donors.parquet β NEW (Analysis)
βββ nonprofits_organizations.parquet (Links via employer)
βββ contacts_nonprofit_officers.parquet (Links via name)
βββ grants_revenue_sources.parquet (Cross-reference)
```
## π Quick Start
### 1. Get FEC API Key
Visit: https://api.data.gov/signup/
- Free tier: 1,000 requests/hour
- Instant activation
### 2. Set Environment Variable
```bash
echo 'FEC_API_KEY="your_key_here"' >> .env
```
### 3. Create Gold Tables
```bash
# Activate environment
source .venv/bin/activate
# Create campaign finance tables for Massachusetts
python pipeline/create_campaigns_gold_tables.py \
--state MA \
--cycle 2024 \
--max-contributions 10000
```
### 4. Analyze Data
```python
import pandas as pd
# Load nonprofit donor analysis
donors = pd.read_parquet('data/gold/states/MA/campaigns_nonprofit_donors.parquet')
# Top nonprofit organizations by political giving
print(donors.groupby('organization_name').agg({
'contribution_amount': 'sum',
'contributor_name': 'count'
}).sort_values('contribution_amount', ascending=False).head(10))
```
## π API Reference
### Main Classes
**`CampaignsGoldTableCreator`** - Pipeline for creating gold tables
- `create_campaigns_candidates(cycle)` - Extract candidate data
- `create_campaigns_committees(cycle)` - Extract committee data
- `create_campaigns_contributions(min_amount, max_records, cycle)` - Extract contributions
- `create_campaigns_nonprofit_donors(contributions_df)` - Analyze nonprofit leadership donations
- `create_all_campaigns_tables(cycle, min_contribution_amount, max_contributions)` - Run full pipeline
**`OpenFECAPI`** (from `discovery/fec_integration.py`) - API client
- `search_individual_contributions(...)` - Search contributions
- `search_candidates(...)` - Find candidates
- `search_committees(...)` - Find PACs/committees
## π Related Files
### Existing Files (Enhanced)
- [`discovery/fec_integration.py`](../discovery/fec_integration.py) - FEC API client (already existed)
- [`website/docs/integrations/fec-political-contributions.md`](../website/docs/integrations/fec-political-contributions.md) - General integration guide (already existed)
### New Files (Created)
- [`pipeline/create_campaigns_gold_tables.py`](../pipeline/create_campaigns_gold_tables.py) - **NEW** - Gold table pipeline
- [`examples/demo_fec_integration.py`](../examples/demo_fec_integration.py) - **NEW** - Demo script
- [`website/docs/integrations/fec-campaign-finance.md`](../website/docs/integrations/fec-campaign-finance.md) - **NEW** - Technical guide
## π― Future Enhancements
Potential additions to consider:
1. **Add to main orchestration script**
- Update `scripts/create_all_gold_tables.py` to include campaigns pipeline
2. **Dashboard integration**
- Add FEC visualizations to React app
- Display political connections on nonprofit profiles
- Show donor network graphs
3. **Automated analysis**
- Scheduled updates (campaigns data updated daily by FEC)
- Alerts for new major contributions
- Influence score calculations
4. **Extended matching**
- Fuzzy name matching for officers
- Organization name normalization
- Cross-reference with local officials data
## π Documentation Links
- **Technical Guide:** [FEC Campaign Finance](../website/docs/integrations/fec-campaign-finance.md)
- **General Guide:** [FEC Political Contributions](../website/docs/integrations/fec-political-contributions.md)
- **Demo Script:** [examples/demo_fec_integration.py](../examples/demo_fec_integration.py)
- **API Client:** [discovery/fec_integration.py](../discovery/fec_integration.py)
- **Pipeline Module:** [pipeline/create_campaigns_gold_tables.py](../pipeline/create_campaigns_gold_tables.py)
## β
Checklist for Integration
- [x] Create pipeline module for gold table generation
- [x] Add example demo script
- [x] Write comprehensive documentation
- [ ] Add to main orchestration script (optional)
- [ ] Create React dashboard components (optional)
- [ ] Set up automated updates (optional)
---
**Implementation Date:** April 28, 2026
**Author:** GitHub Copilot
**License:** MIT (consistent with project)
|