Data Journalist · Berlin
Visual storytelling on cities, climate & society — from raw data to finished narrative.
POLITICO Europe · 2023–2026
EU policy journalism across energy, climate, electoral behaviour, industry and technology. Click any project to explore.
Visualizations below produced at POLITICO Europe (2023–2026). All rights remain with POLITICO Europe. Reproduced solely to demonstrate research and technical approach. Please do not redistribute.
Personal work · GIS
Two maps, one question: how does space get used? Berlin at block resolution, Germany from orbit.
01 — Berlin
OpenStreetMap processed in QGIS at block resolution. The result is a precise picture of Berlin's built fabric — streets, footpaths, cycle lanes, and the green space between them.
QGIS · OpenStreetMap · Python
01 — Berlin
At this resolution you can see the difference between a densely built Altbau block in Prenzlauer Berg and a suburban row-house strip in Pankow. Built surface versus permeable green — visible at a glance across all 892 km² of the city.
01 — Berlin
This layer feeds into density calculations, walkability scoring, and green-space proximity analyses. Once the geometry is clean, overlaying census data, transit stops, or crime incidents becomes straightforward.
02 — Germany
Copernicus satellite imagery reclassified into land-cover categories — forest, farmland, urban fabric, wetlands, water — rendered at country scale in a single coherent view.
QGIS · Copernicus Land Monitoring Service · R
02 — Germany
What strikes you at country scale is how much of Germany is still forest and field. The Ruhr, Rhine-Main, and Berlin appear as dense grey patches in an otherwise green and beige landscape. Urban sprawl is real — but contained.
02 — Germany
A standard district-level choropleth would average out the variation and hide the patchwork. The raster approach shows exactly where farmland ends and forest begins — no administrative boundary required.
Berlin · Urban crime
A full data investigation into the city's bike-theft epidemic — geography, timing, hotspots, and the economics of loss.
01 — Scale
Over 28,000 bikes reported stolen in Berlin in 2023 — one of the highest figures in Germany. The numbers have remained stubbornly high for years despite targeted police campaigns and public awareness initiatives.
20M€in declared bike value stolen in one year.
01 — Scale
A stolen bike is not just a financial loss. For many Berliners — especially lower-income residents — a bike is the primary mode of transport. Losing it can mean losing access to work, childcare, or daily errands for weeks.
01 — Scale
Berlin's police publish detailed theft records through the official open data portal. The dataset covers reported incidents with location, time, and declared value — roughly 60–70% of actual thefts, since many go unreported.
Python · GeoPandas · Berlin Polizei open data
02 — Geography
Thefts cluster along U-Bahn corridors and in inner-city Kieze. Mapping at LOR planning unit level reveals the concentration clearly: the centre and east bear a disproportionate share of incidents relative to their cycling population.
02 — Geography
The hotspot areas correlate strongly with high footfall zones — markets, stations, shopping streets — rather than with residential density. It's about opportunity, not neighbourhood character.
03 — When
Contrary to intuition, theft does not peak after dark. Analysis of reported timestamps shows risk stretching from morning rush hour all the way to early evening — bikes left outside offices and cafés are the primary targets.
03 — When
The highest-risk window is 8am to 2pm — while owners are at work or running errands. The idea that locks only matter at night turns out to be exactly wrong. Lock your bike even for a ten-minute coffee stop.
04 — Hotspots
Alt-Treptow tops the ranking with 193 thefts — roughly one every two days. Oranienburgerstraße, Boxhagener Platz, and Warschauer Straße follow closely. A handful of specific streets generate a strikingly large share of all incidents city-wide.
04 — Hotspots
Many top-ranked streets lack quality bike parking. Where rings and stands are scarce, bikes get locked to railings, poles, and scaffolding — making them easier targets and harder to secure properly.
05 — Districts
Half of all Berlin thefts are concentrated in just three of the twelve districts. Mitte, Friedrichshain-Kreuzberg, and Pankow together define the city's theft geography — reflecting both cycling density and high-footfall public space.
06 — Loss
Declared values range from sub-€100 commuter bikes to €5,000 cargo models. The median declared loss is €894 — a significant sum for most Berliners, and a figure that has been rising year-on-year as average bike quality improves and e-bikes become more common.
€894median declared value per stolen bike.
Berlin · Urban equity
Where are Berlin's childcare facilities — and do they reach the children who need them most? Supply and need tell two very different stories.
01 — Context
Germany's Kita-Rechtsanspruch guarantees every child a place from age one. In Berlin, over 2,500 facilities serve the city's youngest residents. But a legal right and a practical reality are not always the same thing.
Python · QGIS · Amt für Statistik Berlin-Brandenburg
01 — Context
Proximity is everything in early childcare. A Kita two kilometres away — without a direct bus connection — is not really accessible for a parent dropping off a toddler before an 8am shift. The data lets us ask: who actually has access?
02 — Supply
Facility locations hexagonally binned reveal a familiar spatial pattern. Mitte, Prenzlauer Berg, and Kreuzberg are well served. Spandau, Marzahn-Hellersdorf, and the outer south-east lag behind — fewer facilities covering larger, less walkable areas.
02 — Supply
The pattern mirrors urban investment more broadly. Inner-city districts benefited from decades of renovation and new construction. Peripheral areas — many of them GDR-era Plattenbau settlements — have seen slower facility growth relative to population.
03 — Need
Social benefit data paints a starkly different geography. Child poverty concentrates in Neukölln, northern Wedding, and Marzahn-Hellersdorf — the very districts where Kita density is lowest.
03 — Need
Children from low-income households gain the most from quality early education — in language development, social skills, and later academic outcomes. The supply gap hits precisely where the developmental benefit would be greatest.
04 — Mismatch
The structural gap becomes impossible to ignore. Districts with the fewest Kitas per child consistently score highest on the city's social deprivation index. It is not just an urban planning failure — it is an equity failure baked into the city's infrastructure.
04 — Mismatch
In Marzahn-Hellersdorf, there are roughly 28% fewer Kita places per child under three compared to Pankow, despite similar or higher rates of child poverty. The gap is not marginal — it is structural and persistent.
05 — Distance
Average walking distance to the nearest Kita correlates strongly with deprivation rank across planning units. For families without a car — the majority in low-income households — that extra distance is not an inconvenience. It determines whether a parent can hold a full-time job.
05 — Distance
Childcare proximity is as much urban infrastructure as a bus stop or a park. The cities that have taken this seriously — Vienna, Stockholm, Paris — have invested in micro-scale facility planning rather than district-level averages. Berlin has the data to do the same.
Germany · Housing · Demographics
Census 2022 data at 10×10 km raster cells reveals a country still split. Between Chemnitz and Munich: €585 a month for the same 75m² flat.
01 — The data
Germany's Census 2022 released granular rent data for the first time in over a decade. Processed at 10×10 km grid cells and visualised across the full country, the result is an unprecedented picture of housing cost geography.
R · QGIS · Statistisches Bundesamt Zensus 2022
01 — The data
The East–West divide is immediate and unmistakeable. The colour shift from deep amber in Bavaria to pale tones across Saxony, Thuringia, and Brandenburg does not need a caption — the data encodes 35 years of divergent economic trajectory.
€5.40average rent per m² in Chemnitz — the cheapest major city.
01 — The data
Standard analyses use city or district averages, masking the variation within. At 10×10 km, you can see how a single city conceals a spectrum — the inner ring of Munich costs dramatically more than its outer suburbs, even though they share a postcode area.
02 — Cities
Munich's average of €13.20/m² sits at the far end of a distribution spanning more than €8. Hamburg, Frankfurt, and Stuttgart cluster in the expensive tier. Leipzig and Dresden, despite rapid growth, remain relatively affordable — for now.
€13.20average rent per m² in Munich — the most expensive major city.
02 — Cities
The cities where jobs are being created — Munich, Frankfurt, Stuttgart — are also the cities where housing costs are highest. For workers arriving from eastern states or from abroad, the wage premium rarely covers the rent premium.
03 — Impact
For a standard 75m² flat — appropriate for a small family — the monthly gap between Germany's cheapest and most expensive major cities is €585. That is not just a housing cost difference. It is a life-choice constraint.
€585monthly gap for a 75m² flat between Chemnitz and Munich.
03 — Impact
High rents in economically dynamic cities act as a brake on labour mobility. Workers who would benefit from moving to Munich or Frankfurt cannot afford to do so. The housing map and the opportunity map no longer align.
04 — Trends
Rents in southern and western cities have risen faster than in the East throughout the 2010s and early 2020s. The structural divide is not just a legacy of reunification — it is being actively reproduced by market dynamics, planning constraints, and migration patterns that concentrate demand in an ever-smaller set of cities.
Statistisches Bundesamt Zensus 2022 · R · QGIS
04 — Trends
The 2022 Census is a snapshot. The next comparable dataset may not arrive for another decade. In the meantime, the rent gap will keep widening — and the stories behind the numbers will keep being lived.
Interactive · Built with D3.js
Hover, drag, click. Mock data — real chart types I use in my work.
GDP vs. renewable energy — European countries
Each circle is a country · size = CO₂ per capita · Hover · Click legend to filter regions
Simulated data · illustrative prototype
EU electricity mix 2010–2024
Move mouse to read values by year
Simulated data · illustrative prototype
EU policy connections
Drag nodes · Filter by theme
Simulated data · illustrative prototype
Who wins in the European Parliament?
Share of plenary roll-call votes won by each political group · Hover a bar
POLITICO analysis · European Parliament roll-call data · reproduced for portfolio demonstration
Open to data journalism roles, freelance visualization projects, and research collaborations.