Home

Affordable for Whom?

Get in touch ↗︎

Selected Works

Affordable for Whom?

Get in touch ↗︎

Home

Housing Observatory

An interactive dashboard examining rental affordability, purchase accessibility, and displacement pressure across Berlin's 58 neighbourhoods.

Python

dbt

Tableau

Type

Mentorhip Project

Category

Urban Data

Timeframe

10 weeks

Tools

PostgreSQL, dbt, Tableau, Python

The city has a price, where do I stand?

Berlin has 3.8 million residents and roughly 85% of them rent. That makes housing not a real estate question but a social one. Yet most housing data tools are built for the minority who own, or who are looking to invest.

The Housing Observatory is a public-facing interactive dashboard that puts residents at the centre: Enter an income and apartment size, and the tool immediately maps how much of the city is within reach across 58 neighbourhoods, four analytical views, and a decade of market data.

Built over ten weeks as part of a structured mentorship programme with the Data Visualization Society, it follows a full end-to-end pipeline from raw government sources to a published interactive dashboard.

Who is it for?

Three personas shaped every analytical and design decision in the project. Each one arrives at the dashboard with a different stake in the housing market and a different question the tool is designed to answer.

01

The Newcomer

Arriving to a city they don’t know yet.

“Considering my income, which neighbourhood are affordable to rent, and how has it been changing?”

02

The Resident

Already here. Deciding whether to keep renting or decide to buy.

“Does buying an apartment make sense for me here, or is the market pricing me out?”

03

The Researcher

Following the data to understand the market.

“Where is affordability eroding the fastest and which neighbourhoods show the highest indicators of displacement risk?”

These personas don't each get their own view. They share the tool. But every design decision (every chart type, every metric, every callout) was tested against one of their three questions.

The Data

The dashboard draws on 24 different tables from several different sources.

  • The primary source is the IBB Wohnungsmarktbericht, the Investment Bank Berlin's annual housing market report, which contains rental asking prices at neighbourhood level, construction completions, building permits, and social housing projections.

  • Purchase prices came from the Gutachterausschuss, Berlin's official property valuation committee.

  • Neighbourhood-level deprivation data came from the GSSA Berlin Senate's Sozialstrukturatlas.

  • Social housing share, residency stability, welfare dependency came from the Wohnatlas 2022.

  • Rent burden and ownership rates came from the Mikrozensus.

  • Income data stretching back to 1991 came from Amt für Statistik Berlin-Brandenburg.

Some of these figures were buried inside PDF tables, not downloadable datasets, and required manual extraction into structured CSVs.

One significant geographic problem sat underneath all of it. Berlin redesigned its neighbourhood hierarchy in 2021, reorganising 60 Prognoseräume into 58. Datasets predating that change use the old boundaries. Joining them required building a weighted crosswalk.

What is a Prognoseraum?

Berlin's LOR spatial system divides the city into nested geographic units. The Prognoseraum (PRG) sits between the 12 Bezirke (districts) and the 542 Planungsräume. The project operates primarily at this level: 58 areas, each granular enough to reflect real neighbourhood differences, each large enough to carry statistically stable data.

The Pipeline

All sources were loaded into PostgreSQL with every column as text. Type casting and cleaning were deferred entirely to the transformation layer. Transformation ran in dbt, following a three-layer architecture.

Staging layers

Casts types, normalises decimal separators, applies LPAD formatting to LOR IDs, and renames columns consistently. A silent join failure between flat CSV neighbourhood IDs and the district shapefile integers was caught and fixed here.

Intermediate layers

Computes derived metrics: year-over-year rent growth, cumulative indexed series from 2014, the mortgage affordability formula, and the four displacement score dimensions.

Mart layers

Seven output tables, one per dashboard section. No joins happen in Tableau. Tableau Public cannot connect live to a database, so all data was pre-computed and exported as static CSV extracts.

The Displacement Risk Score

The most analytically original element is a composite neighbourhood-level indicator: the Displacement Risk Score (DRS).

It asks which neighbourhoods concentrate the conditions under which displacement is most likely to occur, a question no single dataset can answer alone.

The score is grounded in Andrej Holm's gentrification research and Zuk et al.'s (2018) multidimensional displacement framework. It combines four equally weighted dimensions:

1

Rent growth 2021–2024.

The most direct signal of displacement pressure.

2

Socioeconomic vulnerability.

The ESIx 2022 z-score from the GSSA Berlin Senate capturing: income, employment, and social integration at neighbourhood level.

3

Unprotected tenure share.

1 minus the combined social and municipal housing share. Residents outside the protected sector face full market exposure.

4

Residential instability.

1 minus the normalised 5-year residency share. Low long-term residency signals a neighbourhood already in transition.

Each dimension is normalised to 0-1 before averaging.

A high score means the conditions enabling displacement are present and compounding, not that displacement has already occurred.

Designing the Dashboard

This project uses cold rent (Kaltmiete) from new listings, reflecting market entry prices between 2013 and 2023.
These prices are not the same as the Mietspiegel, which represents average rents across existing contracts.
Warm rent (Warmmiete), which includes heating and service charges, is not analyzed here.

Apartments are grouped by number of rooms:

  • 1-room: up to 50 m²

  • 2-room: ~50–65 m²

  • 3 rooms: over 80 m²

Most affordability comparisons focus on 1-room apartments, as they are typically the most accessible for low-income residents.

What is Subsidized Housing?

Subsidized housing includes units with rent or access restrictions, often tied to public funding.
Tenants typically need a WBS certificate (Wohnungsberechtigungsschein) to qualify.
These units can be owned by either public or private landlords.

What Income is used?

This project uses monthly net income per inhabitant (Verfügbares Einkommen der privaten Haushalte je Einwohner)

It compares:

  • Median net income

  • Bürgergeld allowance and maximum coverage for rent.

These values are used to estimate rent burden and assess affordability across groups.

Say Hello

Get in touch↗ to discuss how I could be a great addition to your team.

Send me a Message

ivan13f@gmail.com

Or connect with me on Socials

Behance

Linkedin

Bluesky

GitHub

© 2025 Iván Alfonso Burgos

Berlin

13:26

Made with ♡︎︎ from scratch

Say Hello

Get in touch↗︎ to discuss how I could be a great addition to your team.

Send me a Message

ivan13f@gmail.com

Or connect with me on Socials

Behance

Linkedin

Bluesky

GitHub

© 2025 Iván Alfonso Burgos