# Geregistreerde overlast per buurt

Elke maand telt de politie hoeveel meldingen van overlast er binnenkwamen, per buurt en per soort: van verwarde personen en jeugd tot geluidshinder en drugs. CBS publiceert de cijfers als open tabel, met een maand vertraging.

- Uitgever: Politie, Centraal Bureau voor de Statistiek
- Gebied: Nederland · Laagste detail: buurt
- Periode: 2012 – 2026 · Ververst: maandelijks
- Toegang: Open · Licentie: CC BY 4.0
- Koppelsleutels: buurtcode (BU), wijkcode (WK), gemeentecode (GM)
- Status: ok (2026-10-15) · Geregistreerde overlast; soort overlast, wijk en buurt · nieuwste periode: 2026 september
- URL: https://data.politie.nl

## Wat kun je ermee?
- **Vergelijk je buurt met de rest van je gemeente.** Deel de meldingen door het aantal inwoners en zet je buurt naast de andere buurten in dezelfde gemeente. Dat is eerlijker dan een landelijke ranglijst.
- **Zoek het seizoensritme.** Overlast piekt in de zomer en rond de jaarwisseling. Zet elk jaar als eigen lijn in één grafiek en het patroon springt eruit.
- **Factcheck: 'de overlast neemt toe'.** Vergelijk dezelfde maanden met vorig jaar, niet de laatste maand met de vorige. Let op de trendbreuk van maart 2021 als je verder terugkijkt.
- **Verwarde personen en de ggz.** Leg de meldingen over verwarde personen naast cijfers over ggz-gebruik per buurt. Corrigeer voor inkomen en dichtheid, anders meet je vooral stedelijkheid.

## Zo verwerk je het
1. **Kies je gebieden.** Zoek de codes op in de wijk- en buurtkaart. Codes hebben een vaste lengte: GM + 4 cijfers, WK + 6, BU + 8.
2. **Haal de maandcijfers op.** Filter op gebied en soort overlast. Vul de sleutels aan met spaties tot de vaste lengte en pagineer per 10.000 rijen.
   `https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=WijkenEnBuurten eq 'BU03630000' &$skip=0`
3. **Maak er een nette tabel van.** Zet Perioden om naar een datum ('2026MM09' wordt 2026-09) en haal de spaties uit de sleutels. Rijen zonder meldingen ontbreken: tel ze als nul.
4. **Deel door inwoners.** Koppel het aantal inwoners uit de kerncijfers op buurtcode. Laat buurten met heel weinig inwoners weg, daar wordt één melding meteen een uitschieter.
5. **Laad elke maand alles opnieuw.** De politie past oude maanden aan. Een maandelijkse verversing haalt daarom de hele reeks op, niet alleen de nieuwste maand.

## Interessante koppelingen
- Hebben buurten met een laag inkomen meer overlast? → [cbs-kwb](https://www.opendataindex.nl/bron/cbs-kwb.md) via buurtcode (BU). Inkomen en inwoners staan per buurt in de kerncijfers. In Staat van bleek de samenhang tussen laag inkomen en overlast sterk (ρ ≈ 0,58).
- Waar in de stad zit de overlast? → [pdok-wijkenbuurten](https://www.opendataindex.nl/bron/pdok-wijkenbuurten.md) via buurtcode (BU). De buurtgrenzen maken van de tabel een kaart. Gebruik de grenzen van hetzelfde jaar als de indeling van de cijfers.
- Geeft warm weer meer overlast? → [knmi-daggegevens](https://www.opendataindex.nl/bron/knmi-daggegevens.md) via datum (maand). Middel de temperatuur per maand en leg die naast de meldingen. Corrigeer voor seizoen en jaarwisseling.

## Vergelijkbare bronnen
- [politie-misdrijven](https://www.opendataindex.nl/bron/politie-misdrijven.md): Misdrijven in plaats van overlast: aangiften en registraties van strafbare feiten.
- [Veiligheidsmonitor (CBS)](https://www.veiligheidsmonitor.nl): Een enquête: hoe veilig mensen zich voelen en wat ze zelf meemaakten, ook als ze het niet meldden.
- [Meldingen openbare ruimte (gemeenten)](https://data.amsterdam.nl): Meldingen bij de gemeente over afval, lawaai en kapotte straten. Ander loket, andere mensen die melden.

## Waar je op moet letten
- **Een registratie is geen gebeurtenis.** Wat niemand meldt, staat er niet in. Hoe vaak mensen de politie bellen verschilt per buurt en per soort overlast.
- **Trendbreuk in maart 2021.** De politie veranderde toen hoe meldingen worden vastgelegd. Vooral 'verward persoon' sprong omhoog. Vergelijk daarom niet zomaar 2020 met 2022.
- **Cijfers veranderen achteraf.** Oudere maanden worden met terugwerkende kracht bijgewerkt. Laad de hele reeks opnieuw in plaats van alleen de nieuwe maand toe te voegen.
- **Altijd de nieuwste buurtindeling.** CBS rekent de hele reeks om naar de buurtgrenzen van het laatste jaar. Buurtcodes uit oude bestanden bestaan daardoor soms niet meer.
- **Valkuilen in de API.** Sleutels zijn met spaties aangevuld ('NL00      '); zonder die spaties krijg je niets terug. Maximaal 10.000 rijen per verzoek. Het Feed-endpoint past alleen het eerste filter toe en negeert de rest zonder foutmelding.

## API (OData v3)

- Basis: https://dataderden.cbs.nl/ODataApi/OData/47024NED
- Toegang: Geen sleutel of account; de beschrijving en onze aanroep werken anoniem. (getest)
- Formaten: JSON, Atom/XML
- Omvang: 31798062 rijen (cellen) in TypedDataSet (getest)
- Filteren: OData-expressies in $filter, sleutels tussen enkele aanhalingstekens; eq, ne, gt, ge, lt, le, and, or, substringof(), startswith()

### Endpoints
- `GET /TableInfos`: titel, samenvatting, periode en wijzigingsdatum van de tabel
- `GET /UntypedDataSet`: de cijfers, alle waarden als tekst
- `GET /TypedDataSet`: de cijfers, met getallen als getal
- `GET /DataProperties`: alle kolommen: dimensies en onderwerpen met eenheid
- `GET /CategoryGroups`: groepering van categorieën
- `GET /Overlast`: codes en namen van de dimensie Overlast
- `GET /WijkenEnBuurten`: codes en namen van de dimensie WijkenEnBuurten
- `GET /Perioden`: codes en namen van de dimensie Perioden

### Parameters
- `$filter`: rijen kiezen, bv. WijkenEnBuurten eq 'GM0363    ' (platform)
- `$select`: alleen deze kolommen (platform)
- `$top / $skip`: pagineren (platform)
- `$orderby`: sorteren (platform)
- `$format`: json of atom (platform)
- `$count`: achter een pad: alleen het aantal (platform)

### Dimensies
- `Overlast` (9 codes): '0.0.0 ' = Totaal registraties overlast; 'E33   ' = Overlast door verward persoon; 'E35   ' = Melding overlast jeugd
- `WijkenEnBuurten` (18498 codes): 'NL00      ' = Nederland; 'GM1680    ' = Aa en Hunze; 'WK168000  ' = Wijk 00 Annen
- `Perioden` (191 codes): '2012MM01' = 2012 januari; '2012MM02' = 2012 februari; '2012MM03' = 2012 maart

### Velden (3)
`GeregistreerdeOverlast_1` long, `Gemeentenaam_2` string, `SoortRegio_3` string

### Limieten en valkuilen
- Maximaal 10.000 rijen per verzoek; pagineer met $skip. (ervaring)
- Sleutels zijn met spaties aangevuld tot vaste lengte: 'GM0363    ', '0.0.0 ', 'E33   '. Zonder spaties krijg je een lege lijst, geen foutmelding. (ervaring)
- Het Feed-endpoint past alleen het eerste $filter-predicaat toe en negeert de rest zonder melding. Gebruik TypedDataSet. (ervaring)
- TableInfos.Modified verandert bijna dagelijks (metadata). Voor versheid kijk je naar de hoogste Perioden-sleutel. (ervaring)
- Oude maanden worden met terugwerkende kracht bijgewerkt. Laad altijd de hele reeks opnieuw. (ervaring)
- Python urllib (LibreSSL op macOS) faalt op de TLS van cbs.nl; gebruik curl of Node fetch. (ervaring)

### Voorbeeld
```
https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=WijkenEnBuurten%20eq%20'GM0363%20%20%20%20'%20and%20Overlast%20eq%20'0.0.0%20'&$top=3
```

## Zo haal je het op

### curl
```bash
curl "https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?\$filter=WijkenEnBuurten%20eq%20'GM0363%20%20%20%20'%20and%20Overlast%20eq%20'0.0.0%20'"
```

### python
```python
import requests

url = "https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet"
# let op: sleutels zijn met spaties aangevuld tot een vaste lengte
filter = "WijkenEnBuurten eq 'GM0363    ' and Overlast eq '0.0.0 '"
rijen = requests.get(url, params={"$filter": filter}).json()["value"]
print(rijen[-1]["Perioden"], rijen[-1]["GeregistreerdeOverlast_1"])
```

## Wie gebruikt het
- [Staat van](https://staatvan.nl): Overlast per buurt per maand, met kaart en vergelijkingen
- [Politie Dataportaal](https://data.politie.nl): De eigen tabelweergave van de politie

## Wat je ermee kunt bouwen
- [Buurtmonitor veiligheid: overlast en misdrijven per buurt](https://www.opendataindex.nl/bouwen/buurtmonitor-veiligheid.md): Een dashboard dat voor elke buurt in je gemeente laat zien hoeveel overlast en misdrijven de politie registreert, per 1.000 inwoners en door de jaren heen, met een kaart en een vergelijking met heel Nederland.


## Voorbeelden met echte cijfers (6)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Meldingen van geluidshinder door horeca: 1,8 duizend per jaar in 2025, 77% minder dan in 2012** (2025). Tabel 47024NED. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/derden-geluidshinder-horeca)
  - `https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=Overlast%20eq%20'M061%20%20'%20and%20WijkenEnBuurten%20eq%20'NL00%20%20%20%20%20%20'%20and%20substringof('JJ'%2CPerioden)&$select=Perioden,GeregistreerdeOverlast_1`
- **Meldingen van overlast door alcohol of drugs: 58 duizend per jaar in 2025, 2,9 keer zo veel als in 2012** (2025). Tabel 47024NED. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/derden-overlast-alcohol-drugs)
  - `https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=Overlast%20eq%20'E38%20%20%20'%20and%20WijkenEnBuurten%20eq%20'NL00%20%20%20%20%20%20'%20and%20substringof('JJ'%2CPerioden)&$select=Perioden,GeregistreerdeOverlast_1`
- **Meldingen van jeugdoverlast: 95 duizend per jaar in 2025, 5% meer dan in 2012** (2025). Tabel 47024NED. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/derden-overlast-jeugd)
  - `https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=Overlast%20eq%20'E35%20%20%20'%20and%20WijkenEnBuurten%20eq%20'NL00%20%20%20%20%20%20'%20and%20substringof('JJ'%2CPerioden)&$select=Perioden,GeregistreerdeOverlast_1`
- **Meldingen van overlast door zwervers: 39 duizend per jaar in 2025, 3,3 keer zo veel als in 2012** (2025). Tabel 47024NED. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/derden-overlast-zwervers)
  - `https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=Overlast%20eq%20'E41%20%20%20'%20and%20WijkenEnBuurten%20eq%20'NL00%20%20%20%20%20%20'%20and%20substringof('JJ'%2CPerioden)&$select=Perioden,GeregistreerdeOverlast_1`
- **Meldingen van overlast: gemiddeld het hoogst in juli, het laagst in februari** (september 2026). Tabel 47024NED. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/recept-overlast-kalender)
  - `https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=Overlast%20eq%20'0.0.0%20'%20and%20WijkenEnBuurten%20eq%20'NL00%20%20%20%20%20%20'%20and%20substringof('MM'%2CPerioden)&$select=Perioden,GeregistreerdeOverlast_1`
- **Geregistreerde overlast: 462 duizend meldingen per jaar in 2025, 65% meer dan in 2012** (2025). Tabel 47024NED. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/recept-overlast-totaal)
  - `https://dataderden.cbs.nl/ODataApi/OData/47024NED/TypedDataSet?$filter=Overlast%20eq%20'0.0.0%20'%20and%20WijkenEnBuurten%20eq%20'NL00%20%20%20%20%20%20'%20and%20substringof('JJ'%2CPerioden)&$select=Perioden,GeregistreerdeOverlast_1`
