Project 3 — Food Desert Analysis¶
Difficulty
🟡 Intermediate. ~10–14 hours.
Goal¶
"Which census tracts in [your city or county] meet USDA food desert criteria — low income and low access to grocery stores?"
Apply the USDA Food Access Research Atlas methodology, a published, citable methodology hiring managers will recognize.
Data needed¶
| Layer | Source |
|---|---|
| Census tracts | TIGER/Line |
| Tract-level demographics | ACS — median income, % no vehicle, total population |
| Grocery store locations | OSM (shop=supermarket), or scrape state license boards |
| (Optional) Block-group population centroids | TIGER/Line |
| Road network | OSM, or use ArcGIS Online network |
OSM grocery extract: https://overpass-turbo.eu with query:
[out:json][timeout:60];
area["name"="Atlanta"]->.searchArea;
(
node["shop"="supermarket"](area.searchArea);
way["shop"="supermarket"](area.searchArea);
);
out center;
Tools used¶
- ArcGIS Pro: Buffer OR Network Analyst (OD Cost Matrix)
- Spatial Join, Calculate Field
- Definition Queries with SQL
USDA criteria (simplified)¶
A tract is a food desert if both:
- Low income: poverty rate ≥ 20% OR median income ≤ 80% of metro median.
- Low access: significant share of population lives more than:
- 1 mile from grocery (urban), or
- 10 miles (rural).
There's a stricter version (½ mile + low vehicle access). We'll start with the basic urban version.
Workflow¶
Step 1 — Set up¶
- Project:
food_desert_<area>. - Project all to State Plane.
- Filter tracts to your study area (Definition Query).
Step 2 — Tag low-income tracts¶
Add field LOW_INCOME (Text 1).
def low_income(pct_poverty, median_inc, metro_median_inc):
if pct_poverty is None: pct_poverty = 0
if median_inc is None: return "N"
if pct_poverty >= 20 or median_inc <= 0.80 * metro_median_inc:
return "Y"
return "N"
Expression: low_income(!PCT_POVERTY!, !MEDIAN_INC!, 65000). Replace 65000 with your metro median.
Step 3 — Compute distance to nearest grocery¶
Option A (Quick): Buffer method¶
- Buffer grocery stores by 1 mile, dissolve.
- Select by Location: tracts whose centroid is NOT inside the buffer = "low access".
In ArcGIS Pro:
Map → Select by Location
Input: tracts
Relationship: HAVE_THEIR_CENTER_IN
Selecting: 1mi-buffer
→ Switch selection to get tracts NOT inside.
Tag those tracts as LOW_ACCESS = 'Y'.
Option B (Better): Network analysis¶
- Generate block-group population centroids.
- OD Cost Matrix (Network Analyst): origins = centroids, destinations = grocery stores, mode = walking, cutoff = 30 min.
- Compute the closest grocery for each centroid → distance.
- Aggregate to tract: % of population beyond 1-mile walking distance.
- Tag low-access if > 33% of the tract's population.
Step 4 — Combine criteria¶
def is_food_desert(low_income, low_access):
if low_income == 'Y' and low_access == 'Y':
return "Y"
return "N"
Add FOOD_DESERT field, calculate.
Step 5 — Symbolize and map¶
- Symbology: Unique Values on
FOOD_DESERT. - Y = bright red, N = light gray.
- Add grocery stores as point overlay.
- Optional: chart of % of city population in food deserts.
Step 6 — Validate¶
Compare to the USDA Food Access Research Atlas for your area: https://www.ers.usda.gov/data-products/food-access-research-atlas/. Your tracts should mostly match the official designation. Diverge points are interesting — explain them in your write-up.
Step 7 — Layout / Story Map¶
Build a 3-section Story Map:
- What is a food desert? Explain the USDA criteria.
- Methodology. Your data sources, distance method, thresholds.
- Result. The map, top tracts, recommendations.
Skills learned¶
- Applying a published methodology
- Network Analyst (if Option B)
- Multi-criteria attribute logic
- Citable, defendable analysis
Portfolio value¶
The USDA designation makes this project citable and policy-relevant. Strong for public-sector and consulting roles.
Stretch goals¶
- Add vehicle access as a third criterion (USDA's full definition).
- Compare to community food assets (farmers markets, food pantries).
- Animate the change over multiple ACS years.
- Produce a dashboard for advocacy use.
→ Next: Emergency Response Optimization.