Case Study / Civic Data & Analytics
Canada Housing Affordability Analysis
A 120-hour civic data project with the GLOCAL Foundation of Canada analyzing where the housing-affordability burden falls heaviest across Canada, using Statistics Canada Census 2016 & 2021 and CMHC Rental Market Survey 2024–2025 data in Python, Pandas, and Jupyter.
- Python
- Pandas
- Jupyter Notebook
- Matplotlib
- Statistics Canada
- CMHC
- Data Visualization
- Civic Tech
- Cost-burdened 2021
- 20.9%
- Renter burden
- 33.2%
- Renter vs owner
- 2.24×
- Datasets
- 4 official
01 / Method
From raw census tables to policy brief
The GLOCAL 120-hour program runs from data collection through visualization to a public-facing communication brief.
01 — Collect
Gathered 4 official datasets: Statistics Canada Census 2016 & 2021 core housing need and 30%+ shelter-cost burden, plus CMHC Rental Market Survey 2024–2025 for 2-bedroom rents and vacancy rates. Every figure is official, none simulated.
Statistics Canada · CMHC RMS · data/SOURCES.md citations02 — Clean & engineer
Handled missing values and inconsistent formats, then engineered four features on top of the raw owner/renter shares: renter–owner gap, census-to-census change, renter-specific change, and renter-vs-owner ratio.
pandas · feature engineering · STIR 30% affordability line03 — Visualize
Built six chart suites: core housing need by province, owner-vs-renter gap, high-STIR cities, 2016→2021 change, vacancy vs rent, and the national supply/vacancy/rent trend.
matplotlib · reusable charts module · outputs/04 — Communicate
Translated the findings into a policy brief for a non-technical audience, connecting the data to housing and social policy actions as part of the GLOCAL 120-hour program.
Policy brief · Task 5 · #Civicdatavisualization
02 / Results
Provincial affordability scoreboard (2021 Census)
Share of households spending 30%+ of income on shelter, with the engineered renter–owner gap and the 2016→2021 change. Negative change means the burden improved.
| Province | Core need % | Total burden % | Owner % | Renter % | Gap (pts) | Δ 2016→21 |
|---|---|---|---|---|---|---|
| British Columbia | 13.4 | 25.5 | 19.3 | 37.8 | 18.5 | -2.5 |
| Ontario | 12.1 | 24.2 | 17.7 | 38.4 | 20.7 | -3.5 |
| Alberta | 9.9 | 21.2 | 16.0 | 34.0 | 18.0 | +0.3 |
| Saskatchewan | 10.3 | 17.2 | 11.1 | 33.1 | 22.0 | -3.0 |
| Nova Scotia | 10.0 | 17.9 | 9.7 | 34.7 | 25.0 | -3.7 |
| Manitoba | 10.1 | 17.3 | 9.9 | 33.5 | 23.6 | -1.8 |
| Quebec | 6.0 | 16.1 | 10.0 | 25.2 | 15.2 | -4.9 |
| Prince Edward Island | 7.0 | 15.5 | 8.8 | 30.2 | 21.4 | -3.1 |
| Newfoundland and Labrador | 8.0 | 14.6 | 8.9 | 32.5 | 23.6 | -2.6 |
| New Brunswick | 6.2 | 12.9 | 7.5 | 28.0 | 20.5 | -3.9 |
03 / Visuals
Where the burden bites hardest
Three of the six chart suites from the notebook, re-rendered for the web.
Core housing need by province (2021)
National average 10.1% — BC and Ontario sit above the line.
- British Columbia13.4%
- Ontario12.1%
- Saskatchewan10.3%
- Manitoba10.1%
- Nova Scotia10.0%
- Alberta9.9%
- Newfoundland and Labrador8.0%
- Prince Edward Island7.0%
- New Brunswick6.2%
- Quebec6.0%
High-STIR zones — heaviest renter burden
Mid-size Ontario and BC cities top the list, ahead of the two biggest metros.
- Kelowna, B.C.43.7%
- Peterborough, Ont.43.0%
- Barrie, Ont.42.4%
- Oshawa, Ont.41.7%
- Kingston, Ont.41.4%
- Toronto, Ont.40.5%
- Victoria, B.C.40.0%
- Nanaimo, B.C.39.9%
National trend — supply up, vacancy up, rents still rising (CMHC)
2023
2025
Record purpose-built supply doubled the vacancy rate, yet average rent still climbed ~13% — supply slowed rent growth but did not reverse it.
04 / Findings
What the data says
Six headline findings carried into the Task 5 policy brief.
20.9% of households were cost-burdened in 2021
Down from 24.1% in 2016 — though part of the 2021 improvement was flattered by temporary pandemic income supports, noted as a caveat in the analysis.
Renters carry ~2.2× the burden of owners
Nationally 33.2% of renters vs 14.8% of owners spend 30%+ of income on shelter. The gap is a structural feature, not a regional quirk — it appears in every province, widest in Nova Scotia at 25 points.
BC and Ontario lead on core housing need
British Columbia (13.4%) and Ontario (12.1%) sit well above the 10.1% national line; Quebec (6.0%) and New Brunswick (6.2%) are lowest. Core need correlates strongly with shelter burden (r = 0.88).
Alberta is the only province where it got worse
Total burden fell in every province between 2016 and 2021 except Alberta (+0.3 pts), the lone increase in the country.
High-STIR zones are mid-size cities, not just big metros
Kelowna, Peterborough, Barrie, Oshawa, and Kingston top the renter-burden list — ahead of Toronto and Vancouver. This is the key regional-trend insight carried into the policy brief.
Record supply hasn't reversed rent growth
Purpose-built supply pushed national vacancy from 1.5% (2023) to 3.1% (2025), yet average rent still climbed from ~$1,373 to $1,550. Vancouver remains both the most expensive ($2,314 for a 2-bedroom) and the tightest (1.6% vacancy); Calgary, the loosest big market at 4.6%, still saw the fastest rent growth at +8.9%.
05 / Takeaways
Key learnings
What a 120-hour civic data project teaches about analytics for public policy.
Official data beats anecdote
Restricting the analysis to Statistics Canada and CMHC sources — with full citations in SOURCES.md — made every claim defensible in front of a policy audience.
Feature engineering tells the story
The raw tables never mention inequality; the engineered renter–owner gap and ratio columns are what turned a census extract into a structural-inequity finding.
Reproducibility is part of the deliverable
All cleaning and charts live in versioned src/ modules (housing.py, charts.py), so every figure in the brief can be regenerated from the raw CSVs in one notebook run.
Caveats build credibility
Flagging that pandemic income supports flattered the 2021 numbers kept the analysis honest and made the final brief more persuasive, not less.