Census & Demographics

The most-used open data there is, and the easiest to map wrongly.

Census data arrives as two things that must be joined: boundaries and tables, keyed by an identifier that spreadsheet software loves to damage. After the join come the analytical traps — mapping counts instead of rates, trusting survey estimates without their margins of error, reading noise in small areas as signal, and comparing years whose boundaries moved. These guides cover downloading and joining census data correctly, normalising it, carrying its uncertainty, smoothing unstable rates, and redistributing population across changed or finer geographies.

20 Steps in this path

The full path, in order

20 guides: the concepts underneath the work, then each task, then the errors that task produces. Work down, or jump to the step you need.

  1. Census Identifiers Explained: GEOIDs, Codes and the Leading Zero Problem census geoid explained 🧭 Concept
  2. How to Download Census Boundaries in Python download census tract shapefile python ⚙️ How-To
  3. How to Download Census Tables from an API in Python census api python acs ⚙️ How-To
  4. How to Join a Census Table to Its Boundaries Without Losing Rows join census data to shapefile python ⚙️ How-To
  5. Counts, Rates and Densities: What a Demographic Map Should Show map counts vs rates normalize 🧭 Concept
  6. How to Normalise Census Counts into Rates and Densities normalize census data per capita python ⚙️ How-To
  7. Margins of Error Explained: Why Survey Estimates Need Their Uncertainty acs margin of error explained 🧭 Concept
  8. How to Aggregate Survey Estimates and Their Margins of Error aggregate acs margin of error python ⚙️ How-To
  9. Small Numbers Explained: Why Rates in Small Areas Jump Around small area rate instability 🧭 Concept
  10. How to Smooth Unstable Area Rates with Empirical Bayes in Python empirical bayes rate smoothing python ⚙️ How-To
  11. Boundary Changes Over Time: Why Two Census Years Do Not Line Up census boundary changes over time 🧭 Concept
  12. How to Compare Census Years Across Changed Boundaries census crosswalk python ⚙️ How-To
  13. How to Redistribute Population with Dasymetric Mapping dasymetric mapping python ⚙️ How-To
  14. How to Calculate Population-Weighted Centroids population weighted centroid python ⚙️ How-To
  15. Fixing Census Joins That Fail Because Leading Zeros Were Dropped census geoid leading zeros join fails 🔧 Fix
  16. Fixing Census API Values Like −666666666 and Other Sentinels census api -666666666 🔧 Fix
  17. Fixing a Rate Map Dominated by Tiny, Nearly Empty Areas choropleth rate map small population 🔧 Fix
  18. Fixing Census Totals That Do Not Add Up After Aggregation census totals don't match 🔧 Fix
  19. Fixing Census Data That Does Not Match the Boundary File Year census data boundaries mismatch year 🔧 Fix

Topics this path covers

A path is a route; a topic is everything the site has on a subject. Open a topic to see the guides this path skips.

Other ways in