Datathon project. Analyzes whether neighborhood income predicts 311 service response times in Los Angeles using MyLA311 data, ACS Census demographics, and census tract geometries.
Raw response times appear faster in low-income tracts, but this is a composition effect: low-income areas generate 3x more graffiti removal requests, which close in minutes. After controlling for complaint type, the income gap is small and inconsistent across service categories.
data/
raw/ # tl_2022_06_tract shapefile (full CA — not in git)
processed/ # acs_la_county_tracts.csv (not in git)
shapefiles/ # la_tracts.* — LA County filtered shapefile + geojson
notebooks/ # analysis notebooks (add here)
src/
filter_tracts.py # filters CA shapefile to LA County
convert_geojson.py# converts la_tracts.shp → la_tracts.geojson
fetch_acs.py # pulls ACS 5-year estimates from Census API
presentation/ # slide deck
The interactive map lives in la-311-dashboard/. To host it:
- In Netlify, Add new site → Import an existing project and pick this GitHub repo.
- Leave build settings as-is;
netlify.tomlsets Publish directory tola-311-dashboardand skips a real build (command = "true"). - Deploy. The site root serves
la-311-dashboard/index.html(CSS, JS, anddata/load with relative URLs).
Do not set a separate “Base directory” to la-311-dashboard unless you change publish to . — the repo root should stay the base so netlify.toml is picked up.
pip install -r requirements.txt
cp .env.example .env
# fill in your API keys in .envRun in order:
python src/filter_tracts.py # requires tl_2022_06_tract.shp in data/raw/
python src/convert_geojson.py # requires la_tracts.shp in data/shapefiles/
python src/fetch_acs.py # requires CENSUS_API_KEY in .env311 data: download from data.lacity.org and place in data/raw/.
- MyLA311 Service Request Data
- ACS 5-Year Estimates — tract level, LA County (FIPS 06037)
- TIGER/Line Shapefiles 2022