2-Bedroom Rent — federal fair-market rent
choropleth · albers usa
scroll / pinch to zoom · drag to pan
A dense choropleth at the U.S. ZCTA (ZIP Code Tabulation Area) level — now 18 toggleable layers grouped into Economics, Risk, Amenity and Demographics. Switch between DSCR, income, HUD FMR, price-per-sqft, the FEMA National Risk Index composite, six individual natural-hazard scores (flood, tornado, wildfire, hurricane, heat) plus 30-year tornado touchdown counts, OSM walkability and more. Or flip on Stacked Hot-Spot mode and see the ZIPs that score in the favourable quartile on three or more layers at once — the places where the math actually agrees. (Risk layers are flipped so the hot-spot favours low risk.)
jefffriesen/6892860 (gist) — a 5.5MB pre-simplified TopoJSON of 28,635 US ZCTAs. Chosen over US Census TIGER + OpenDataDE per-state files (which sum to ~600MB and 33k+ ZCTAs) because (a) it loads in one shot, (b) the simplification preserves visual fidelity at national zoom while keeping the browser responsive.R-SIGMA.opportunity-zscore (yield_sigma_national in zip_master.json, 8,279 ZIPs). The base is median + 1.4826×MAD (robust to outliers): national median yield 6.19%, robust σ 2.25. Unlike the other 18 layers’ sequential gold/red ramps, sigma uses a diverging 13-stop ramp centred on a neutral slate at 0σ — deep red on the negative tail, bright gold on the positive tail. The display domain is clamped to ±3σ: R-SIGMA flagged data artifacts as high as +39σ, and clamping pins any outlier to the end colour so one artifact can’t blow out the scale. Bands: typical (|σ|<1), notable (1–2), rare (2–3), exceptional (>3). A high +σ is statistically unusual, not a buy signal — it can be a real bargain, a data artifact, or a market pricing in risk we don’t see. It tells you where to look. A screen, not advice.zip_master.json for every ZIP with a rent and a home value (~30k ZIPs — far denser than the legacy college-anchored collegemap/web/data.json fallback, which still fills any remaining gap). NOI = best_rent × 12 × 0.89 (89% effective gross income after a 11% vacancy/collection haircut) − home_value × op_cost; DSCR = NOI ÷ (home_value × 0.80 × ann), where ann is the 360-month annuity factor at 6.51% mortgage + 0.70%, displayed clamped to (−3, 8). The operating cost is the real v3 basis, replacing the old flat 1.65%: op_cost = state_property_tax + state_landlord_insurance + per-ZIP maintenance_pct — the maintenance term is now the REAL per-ZIP maintenance_pct field (Y-DSCR.maintenance-model, 31,646 ZIPs; national median ~0.97%), replacing the old flat 0.50% reserve and falling back to 0.50% only where the field is missing. Per-state EFFECTIVE property tax from the Tax Foundation (property taxes paid as a % of owner-occupied value; DC = statutory 0.85%) and per-state NAIC 2022 DP-3 landlord insurance (from projects/zipdata/data/insurance_by_state.json); ZIPs with no state fall back to a 2.085% national-average op-cost. Basis caveat: best_rent is often a median/FMR rent (smaller/older units) while the home value is zhvi_latest — the TYPICAL all-homes value. zip_master carries no property-type ZHVI (zhvi_2br/zhvi_condo), so DSCR uses the all-homes value; this can bias DSCR slightly low where the typical home is larger than the typical rental./projects/zipdata/data/zip_master.json. Powers: median HH income (ACS, 94.8%), population (ACS, 99.9%), bachelor+ % (ACS, 99.7%), BLS county unemployment (99.0%), 2-Bedroom Rent (100.0%), ZORI rent premium = zori_latest / median_rent_acs (26.3% coverage).population / land_area_sqmi. zip_master has no land-area field, so we derive sqmi from the ZCTA feature geometry via d3.geoArea(feature) × R² (R = 3,958.76 mi).Y-OSM.walkability-score from the OSM amenity pull — 7,359 ZIPs scored 0-100. Per ZIP: a weighted, per-category-capped count of useful daily-life amenities (grocery 10, school 8, pharmacy 6, transit 6, park 6, hospital/clinic 5, restaurant 5, cafe 5, library 4, gym 4, bank/ATM 3, bar 2), each category capped so one dense category cannot dominate, then normalised: walk_score = min(100, round(100 × raw / 240.16)) where 240.16 is the empirically-calibrated walker's-paradise reference (~79% of the 304-point theoretical ceiling). Buckets: 0-25 car-dependent, 25-50 somewhat walkable, 50-75 walkable, 75-100 very walkable. Full formula in projects/osm/scripts/compute_walkability.py — "Walk Score, but open."Y-OSM.15min-city from the OSM amenity pull — 7,359 ZIPs scored 0-100. The score counts how many of 6 essential daily-life categories the ZIP contains at least one of: grocery (supermarket/convenience), school, healthcare (clinic/doctors/hospital/pharmacy), transit stop, park, and a "third place" (cafe/library/community centre). Each essential is worth ~16.7 points; score = essentials_present / 6 × 100. Buckets: 0-33 car-dependent (0-2 essentials), 33-67 partial (3-4), 67-100 complete 15-min candidate (5-6). Limitation — this is a PRESENCE PROXY, not true walk-distance routing: it answers "does the ZIP contain these essentials at all?", NOT "can a resident walk to them within a literal 15 minutes (~800 m)?". We have no per-ZIP pedestrian road network or address-level population, and a ZIP is a coarse multi-square-mile polygon. So low scores (0-2) reliably mean car-dependent (the essentials simply aren't there), while high scores (5-6) flag candidate 15-minute neighbourhoods worth verifying on the ground — not a Moreno-grade isochrone metric. Full formula and caveat in projects/osm/scripts/compute_15min.py and the JSON _meta.amenities_by_zip.json (Overpass, ODbL).price_per_sqft is REAL Realtor.com median listing $/sqft for 27,551 ZIPs; the remaining ~1,086 fall back to a zhvi_proxy estimate (ZHVI ÷ regional typical home size) — the tooltip flags which. Market Rent uses best_rent, the best available rent (ACS B25064 / ZORI / Realtor, per rent_source), 100% coverage.api.usa.gov/crime/fbi/cde/summarized/agency/<ORI>/violent-crime — aggregated agency → county by summing offenses across all reporting agencies (sheriff + city PDs) and summing each agency's monthly participated_population. Agencies' jurisdictions don't overlap (sheriff covers unincorporated area; city PDs cover their cities), so SUMming the populations gives the county's reporting coverage. Counties covered: ~17 states (the API key's 1000-req/hour quota constrained the pull). Fallback: County Health Rankings 2022 v043_rawvalue — which is also FBI UCR violent crime, packaged as a ~3-year rolling average ending ~2019. Counties without CDE 2024 coverage get the CHR value (so the layer paints them too, with the older year disclosed in the tooltip). Property crime is shown in the tooltip where present (CDE 2024 only) but is NOT used in the colour because property-rate coverage is partial — mixing the two would scramble the scale. Honest caveats: (1) The FBI doesn't publish a county-level UCR dataset; this is a researcher rollup the FBI's own Annual Report uses. (2) Agencies that didn't report are excluded from both numerator and denominator. (3) Counties with NO reporting agencies in 2024 fall back to the CHR ~2017-2019 value, which is older but covers them. (4) ~600 ZIPs (territories, Alaska boroughs, very small counties) get NULL.zip_master.json — FEMA Composite Risk (fema_risk_score, county NRI composite 0-100, plus the categorical fema_risk_rating and fema_eal_score shown in the tooltip), and five individual NRI hazard scores: Flood (hazard_riverine_flood), Tornado, Wildfire, Hurricane (coastal only, ~25k ZIPs) and Heat Wave. A seventh risk layer, Tornado Count (30yr), is the raw SPC county touchdown count 1994-2023. All risk scores are 0-100 percentile-style — high = more risk = bad. ZIPs missing a hazard render grey (no-data); we never fabricate a score.