Open data · R Shiny

Cultuur in de raad

Hoe vaak praten Nederlandse gemeenteraden over amateurkunst, cultuureducatie en cultuurbeoefening? En past die aandacht bij wat een gemeente aan cultuur uitgeeft? Dit dashboard doorzoekt de raadsdocumenten van zo'n 290 gemeenten en zet ze naast open data van het CBS.

Open het dashboard Code op GitHub
Dashboard met links de keuze voor thema en periode, een kaart van Nederland met gemeenten ingekleurd naar het aantal raadsdocumenten over cultuurthema's per 1.000 documenten, en daaronder een sorteerbare ranking met bandbreedte.
Aandacht voor amateurkunst, cultuurbeoefening en talentontwikkeling per 1.000 raadsdocumenten in de raadsperiode 2022–2025, met een 95%-bandbreedte per gemeente.

Wat kun je ermee?

Kaart en ranking

Alle gemeenten ingekleurd en gerangschikt: per 1.000 raadsdocumenten, per 100.000 inwoners of absoluut. Sorteerbaar en doorzoekbaar.

Vergelijkbare gemeenten

De rang binnen de eigen grootteklasse, zodat een grote stad wordt vergeleken met andere grote steden.

Thema's en periodes

Vaste thema's en periodes van vier jaar: raadsperiodes, landelijke cultuurperiodes of alle jaren sinds 2010. Alles voorberekend, dus direct beschikbaar.

Trend en vergelijken

Een eigen grafiek per term, voor tot vier gemeenten naast heel Nederland, met de coronaperiode en de verkiezingen gemarkeerd.

Gemeenteprofiel

Kerncijfers, een samenvatting in gewone taal, de cultuurlasten van de nieuwste jaarrekeningen en begrotingen, en de zinnen waarin de termen voorkomen.

Aandacht vs. budget

Welke gemeenten praten veel over cultuur maar geven er weinig aan uit, en omgekeerd?

Uitleg en export

De methode in gewone taal, CSV- en PNG-export en een deelbare link die thema, periode en keuzes bewaart.

Gemeenteprofiel van Tilburg met kerncijfers, een korte samenvatting, een trendlijn naast Nederland, cultuurlasten per inwoner naast de mediaan, en de nieuwste raadsdocumenten met gemarkeerde zinnen.
Gemeenteprofiel: kerncijfers, samenvatting, trend, budget en de nieuwste vermeldingen met gemarkeerde zinnen.

Eerlijker tellen

~15%

van de treffers is dezelfde bijlage bij meerdere agendapunten. Die worden per gemeente samengevoegd, in de treffers én in de noemer.

2/3

van de treffers voor talentontwikkeling gaat niet over cultuur. Een contextfilter houdt alleen vermeldingen dicht bij cultuurwoorden over.

95%

bandbreedte (exact Poisson) bij elke waarde. Gemeenten met minder dan 10 treffers krijgen geen rang: hun plek is vooral toeval.

per jaar

tellen alleen de jaren met archief mee, zodat gemeenten met een later begonnen of onvolledig archief niet benadeeld worden.

Lijngrafieken per zoekterm met de aandacht per jaar sinds 2010 voor Nederland, Tilburg en Utrecht, met de gekozen periode, de coronaperiode en de verkiezingsjaren gemarkeerd.
Trend per term sinds 2010, met Tilburg en Utrecht naast heel Nederland. Blauw: gekozen periode; grijs: coronaperiode; stippellijnen: gemeenteraadsverkiezingen.
Spreidingsdiagram met cultuurlasten per inwoner op de horizontale as en aandacht in de raad op de verticale as, met gemeenten ingedeeld in vier profielen.
Aandacht in de raad (2022–2025) naast de cultuurlasten per inwoner (jaarrekening 2024).

Onder de motorkap

Geen live verzoeken

De app gebruikt alleen voorberekende data, dus een trage of overbelaste API raakt bezoekers niet. Getekende grafieken worden gedeeld tussen bezoekers (bindCache). Vrij zoeken zit nog in de code (ExtendedTask + mirai) en kan weer aan.

Nachtelijke voorberekening

Een GitHub Action rekent elk thema over alle jaren uit, in lichte delen van acht jaar, plus de nieuwste vermeldingen per gemeente. De app telt de periodes daaruit op. CBS-cijfers en gemeentegrenzen worden alleen opnieuw gedownload als de bron een nieuwe versie heeft; bij een storing blijft de vorige versie staan.

Getest en veilig

Tests zonder netwerk in CI bij elke push, ge-escapete brontekst, CSV-export beschermd tegen formule-injectie en Actions vastgezet op een commit-SHA.

Zelf starten

Je hebt R 4.4 of nieuwer nodig. Installeer de pakketten en start de app vanuit de map van het project:

install.packages(c("shiny", "bslib", "httr2", "jsonlite", "dplyr", "tidyr",
                   "leaflet", "ggplot2", "ggrepel", "DT", "cbsodataR", "sf",
                   "cachem", "mirai"))
shiny::runApp()

Meer over de methode, de tests en de opzet staat in de README.

Kanttekeningen