Download
Everything the map knows about every area, as one CSV: 1,389 rows, one per ZIP code area, 20 columns, sorted worst-served first. Unscored areas are kept with their rank fields empty, so not scored is distinguishable from not in California.
Data build 2026-07-27. Licensed CC BY 4.0; drive-time derived columns carry OpenStreetMap’s ODbL attribution. Cite as:
Medi-Vu, California healthcare access index, data build 2026-07-27. https://medi-vu-deep.vercel.appData dictionary
Column meanings are the same sentences the map legend and the methodology page use, because they are read from the same definition. Ranks run from 1, the worst-served area, to 1,389. The interval is the 5th to 95th percentile of an area’s rank across the simulations.
| Column | Meaning | Unit |
|---|---|---|
geo_id | ZIP Code Tabulation Area, 2020 vintage. The join key. | five digits, as text |
label | Town or county name for the area. A label, not a claim that the area is that town. | text |
county | County containing the area’s population-weighted centre. | text |
population | Residents, ACS 2020–24. | people |
low_reliability | Too few residents or recorded deaths for a stable rate. Shown on the map with hatching; excluded from headline statistics. | true / false |
rank_median | Median composite rank across simulations. 1 is the worst-served area in California. | rank, 1 = worst |
rank_p05 | Lower end of the 90% rank interval: the best the area plausibly is. | rank |
rank_p95 | Upper end of the 90% rank interval: the worst it plausibly is. | rank |
rank_width | rank_p95 minus rank_p05. How far the evidence lets the rank move. | places |
prob_worst_decile | The share of simulations placing this area in the bottom decile. The default, because it is the claim the analysis can actually support. | 0 to 1 |
rank_equal | One number per area, no uncertainty. Included so you can see how much more confident this looks than the evidence warrants. | rank, 1 = worst |
asmr_per_100k | All causes, 2019–24, adjusted so an older population does not by itself look unhealthy. | deaths per 100,000 per year |
access_primary_care | Providers per 100,000 people, weighted by distance and by competition from everyone else nearby. | providers per 100,000 |
access_safety_net | Community and free clinic capacity within reach, weighted by distance and competition. Capacity is staffed primary-care FTE from HCAI. | FTE per 100,000 |
uninsured_pct | Share of people with no health insurance. | percent |
no_vehicle_pct | Where care exists but getting to it is the obstacle. | percent |
copd_pct | Adults with COPD, CDC PLACES model-based estimate. | percent |
diabetes_pct | Adults with diagnosed diabetes, CDC PLACES model-based estimate. | percent |
chd_pct | Adults with coronary heart disease, CDC PLACES model-based estimate. | percent |
cluster | Areas whose neighbourhood scores are more extreme than chance allows, at every neighbourhood size tested. Rust marks clusters of poor service, blue clusters of good service. | hot / cold / none; empty if not tested |
The sources
Each card names what the source provides and what it cannot do. The second half is the part that matters: an index is only as honest as its weakest input, and every one of these has a boundary.
CDPH Death Profiles by ZIP Code
All-cause and cause-specific deaths, 2019–24, by ZIP and age band.
Age is crossed with cause only for all-causes, so cause-specific rates cannot be age-standardised at this grain. Counts under 11 are suppressed.
CDC PLACES, 2025 release
Model-based chronic disease prevalence by ZCTA.
Small-area estimates modelled from survey data, not direct measurements. Not for programme evaluation.
American Community Survey 2020–24
Population by age, insurance coverage, vehicle availability.
Margins of error are large for small areas. They are propagated — through the barrier shares and through the population denominators every rate divides by — which is most of why the published intervals are as wide as they are.
NPPES provider registry
Primary care providers by practice ZIP.
Enumerated, not practising. Addresses go stale and there is no measure of hours or panel size.
HCAI Primary Care Clinic Annual Utilization (2024 final)
California community and free clinics: primary-care provider FTE, encounters, and each clinic’s own coordinates.
Capacity is staffed FTE, not encounters. Encounters would be circular here — a clinic logs more of them partly because more people live near it, and the accessibility model already divides supply by demand.
HRSA Health Center Program sites
Federally qualified health centres and look-alikes, used to cross-check which clinics are federally qualified.
Site counts only, so it can say where the safety net is but not how big each part of it is. Superseded as a capacity measure by HCAI.
Census TIGER/Line 2025 and Centers of Population
ZCTA, tract, place and county boundaries, plus population-weighted centroids. Places and counties are what turn a ZIP code into a town name.
ZCTA boundaries are 2020 vintage and are not the same objects as postal ZIP codes. Place boundaries do not nest inside them either, so a name is a label for an area, never a claim that the area is that town.
OpenStreetMap, California extract
The road network every drive time is routed over, with OSRM at free-flow speeds.
Speed limits, not traffic. The routing knows no rush hour, no mountain weather and no bus timetable, which is why no-vehicle share is carried as a separate barrier.
HUD USPS ZIP-to-tract crosswalk
Residential allocation ratios for pushing ZIP-coded counts to tracts.
Allocation uncertainty is not propagated into the intervals.
CDC/ATSDR SVI 2022 and HRSA shortage designations
Held out as external validators, never used as index inputs.
Feeding either into the index and then validating against it would be circular.
Coverage
The index covers 1,389 ZIP code areas and 39,284,090 residents. 26 areas are flagged as small-population and are shown but treated with caution. Statewide medians: age-adjusted mortality 740.1 per 100,000, primary care 233.6 providers per 100,000, uninsured 5.4%, no vehicle 5.0%.
Full detail for every dataset — URL, vintage, grain, licence and ingestion notes — lives in config/sources.yaml in the repository, which is what the loaders read.