MIJN BUURT, ÉÉN VERBETERING — statische projectwebsite
Verken een fictieve buurtenquête. Fictieve data — geen onderzoek naar echte inwoners van Ede.
INHOUD VAN DEZE MAP
index.html de site (één pagina: verkennen, reacties, uitleg/downloads)
demo-iframe.html demo die index.html?embed=1 lokaal in een iframe van 1280×720 inbedt
css/style.css opmaak (systeemfonts, geen externe assets)
js/filterlogic.js filter- en tellogica (ook gebruikt door de tests)
js/app.js interface
js/data.js, js/wijken.js de dataset en de wijkgrenzen als lokale JS-variabelen (gegenereerd)
data/dataset.json webklare gegevens (200 respondenten, 400 antwoorden, labels, citaten)
data/csv/ personen.csv, antwoorden.csv, labels.csv (oorspronkelijke tabellen)
kaart/ wijken-ede-2023.geojson (CBS/PDOK, CC BY 4.0) en bronverantwoording.json
documentatie/ codeboek-v3.md, correctielog.json, reviewstatus.json, review-analyse.txt
controles/ verwachte-tellingen.json (onafhankelijke controletellingen)
voorbeelden/ presentatievoorbeelden.json (parkeren en speeltuin)
manifest-bronpakket.json versie en SHA-256-hashes van de bronbestanden
screenshots/ echte browserscreenshots + overzicht.txt met gebruikte filters/URL's
TESTVERSLAG.txt wat is getest, wat werkt en welke beperkingen er zijn
LICENTIES-EN-BRONNEN.txt bron- en licentievermelding
LOKAAL OPENEN
Dubbelklik op index.html. De site werkt volledig vanaf file:// (geen fetch, geen server nodig).
Alle data en kaartgeometrie zitten in js/data.js en js/wijken.js, geladen via gewone script-tags.
Let op: de knop ‘Deel deze weergave’ geeft bij file:// een lokaal bestandspad, geen publieke link.
OPTIONELE LOKALE HTTP-SERVER
In de map waar deze README staat:
python3 -m http.server 8000
en open http://localhost:8000/ (of http://localhost:8000/index.html).
De site werkt ook vanuit een submap, bijvoorbeeld http://localhost:8000/site/index.html,
omdat alle paden relatief zijn.
PUBLICEREN OP STATISCHE HOSTING
Zet de volledige inhoud van deze map (inclusief js/, css/, data/, kaart/, documentatie/) op
een statische host (bijvoorbeeld een webserver, GitHub Pages, Netlify of een S3-bucket).
Er is geen buildstap, backend, database, login of API-sleutel nodig. HTTPS wordt aanbevolen;
voor inbedden in een andere site is HTTPS en een host die inbedden toestaat vereist (zie hieronder).
Dit pakket bevat geen publieke URL; publicatie is een aparte beslissing.
INBEDDEN (IFRAME) EN PRESENTATIESTAND
Met ?embed=1 toont de pagina een compacte kop en minder paginachroom; filters, bronreacties,
het fictief-label en de kaartattributie blijven zichtbaar. Er is geen afhankelijkheid van de
bovenliggende pagina, geen top-navigatie en geen automatische fullscreen of rondleiding.
Reduced-motion-voorkeur van het besturingssysteem wordt gerespecteerd.
Relatief voorbeeld (zoals demo-iframe.html, naast index.html):
Voorbeeld voor een gepubliceerde site (vervang de host door de echte locatie):
Inbedden werkt alleen als de host het toestaat: de responsheaders X-Frame-Options en
Content-Security-Policy (frame-ancestors) van de gekozen host moeten het bovenliggende
domein (bijvoorbeeld de presentatietool) toelaten, en de iframe-bron moet via HTTPS gaan als
de bovenliggende pagina HTTPS gebruikt. Dit pakket wijzigt geen serverheaders en geen
Interact-code; dat regelt u bij de hosting.
VASTE WEERGAVEN VIA URL
De selectie staat achter het #-teken en wordt bij herladen, terug en vooruit hersteld:
#deel=basis|uitdaging|alles datasetdeel (standaard basis)
#wijk=WK022803 wijkcode (CBS-code; alle = geen wijkfilter)
#leeftijd=75+ 18-24, 25-44, 45-64, 65-74, 75+
#vraag=V1|V2 V1 ‘Wat waardeer je?’, V2 ‘Wat wil je verbeteren?’
#thema=parkeren twaalf onderwerpcodes of buiten_codeboek
#houding=belemmering waardering, belemmering, gewenste_verandering, afgewezen_verandering
#zoek=schaduw zoektekst in de oorspronkelijke reactie (hoofdletterongevoelig)
#kaart=aantal|aandeel kaartweergave
#id=anm8ag9 geopend respondent-ID
Voorbeeld: index.html#vraag=V2&thema=parkeren&houding=belemmering&id=anm8ag9
Onbekende waarden worden veilig teruggezet naar de standaard, met een melding.
‘Deel deze weergave’ kopieert de echte huidige URL naar het klembord (met een selecteerbaar
tekstveld als het klembord niet beschikbaar is).
FILTERS EN TELLINGEN
Datasetdeel Basisgroep (160 personen, 320 antwoorden) is standaard en de basis voor alle
hoofdbevindingen. Testgevallen (40/80) zijn doelbewust moeilijke reacties.
Alles (200/400) is gemengd demonstratiemateriaal en wordt zo gemarkeerd.
Contextgroep Het datasetdeel na wijk- en leeftijdsfilter. Dit aantal (N) is de noemer van elk
percentage en blijft inclusief mensen die het gekozen onderwerp niet noemen.
Passend antwoord Een antwoord past wanneer vraag, onderwerp, houding en zoektekst allemaal in
hetzelfde antwoord gelden. Bij onderwerp plus houding moet die houding aan datzelfde
onderwerp hangen (niet aan een ander onderwerp in hetzelfde antwoord). Houding zonder
onderwerp zoekt in alle thema-houdinglabels.
Buiten de lijst ‘Buiten de onderwerpenlijst’ (buiten_codeboek) heeft vrije omschrijvingen en geen
houdingveld; daarom alleen te combineren met houding = alle.
Tellen Personen uniek op respondent-ID; antwoorden uniek op respondent-ID + vraag. De 778
labelrijen in labels.csv zijn geen 778 personen of reacties.
Houding Waardering, probleem/belemmering, gewenste verandering, afgewezen verandering. Dit is
geen positief/negatief sentiment: één antwoord kan meerdere houdingen bevatten.
Grafieken Per onderwerp het aantal unieke personen met waardering in V1, een probleem in V2 of
een wens in V2, als n/N met de contextgroep als noemer. Alle twaalf onderwerpen
worden getoond; gelijke scores delen een rangnummer. Als het vraag- of houdingfilter
een grafiek uitsluit staat er ‘Niet van toepassing bij deze filters’. Bij een
onderwerpfilter wordt dat onderwerp gemarkeerd en worden de andere staven gedimd.
Klikken op een staaf stelt onderwerp, vraag en houding in.
Kaart Per wijk dezelfde selectie met die wijk als lokale contextgroep; het globale wijkfilter
markeert alleen, zodat u van wijk kunt wisselen. ‘Aantal’ = passende personen;
‘Aandeel binnen wijk’ = passende personen / contextpersonen in die wijk vóór
inhoudsfilters. 0 personen: ‘geen gegevens’ (gearceerd). Minder dan 10 personen:
‘kleine groep’, alleen aantallen, geen percentagekleur. De grens 10 is een
demonstratiekeuze, geen bewijs van statistische betrouwbaarheid. De negen wijken van
Ede-stad staan ook uitvergroot; dat is dezelfde geometrie.
Lege toestanden De site onderscheidt: geen respondenten in een wijk, respondenten zonder passend
label, en een zoektekst met nul resultaten; elk met een resetoptie.
Detailpaneel Volledig (fictief) profiel, beide volledige antwoorden, per onderwerp alle houdingen
met omschrijving en letterlijke bewijsfragmenten (gemarkeerd in de tekst als ze
exact matchen), buiten-codeboek-items, statussen (leeg / onvoldoende informatie /
geen verbeterwens), twijfel en toelichting, review en correctie. Welk antwoord bij
de filters past wordt gemarkeerd; het andere antwoord is context en telt niet mee.
VOORBEELDKNOPPEN (basisgroep, N=160)
Parkeren 21 personen noemen in V2 een parkeerprobleem; 8 wijzen een parkeermaatregel of een
bepaalde locatie/inrichting af; 4 doen beide. Niet alle 8 zijn tegen extra plaatsen in
het algemeen. Voorbeeld anm8ag9; tegenvoorbeeld ewjuefq vraagt extra vakken.
Speeltuin 19 personen waarderen speelruimte in V1; 6 van die 19 wensen in V2 ook een verandering
aan speelruimte (zelfde respondent). Voorbeeld 2gwgqwj.
Deze aantallen worden live uit de data berekend en zijn gecontroleerd tegen
controles/verwachte-tellingen.json. Het zijn verzonnen meningen, geen conclusies over Ede.
HERBOUWEN (optioneel, alleen voor ontwikkelaars)
js/data.js en js/wijken.js zijn gegenereerd uit data/dataset.json en kaart/wijken-ede-2023.geojson
met het bouwscript in de map bouw/ naast deze site (python3 -I bouw/build.py ).
Bezoekers hebben geen buildstap nodig.