Het eerste wat we nodig hadden voor onze analyse was de complete uitslag van de Provinciale Statenverkiezingen van 20 maart op stembureauniveau. In april moesten we ons nog behelpen met data die we zelf hadden verzameld, en niet compleet was doordat niet alle gemeenten de data aanboden. Inmiddels is de complete data wél beschikbaar via het open dataportaal van de overheid.
Die data bestaat uit zo’n 355 EML XML-bestanden van alle Nederlandse gemeenten. Heel grondig, maar lastig om analyses mee te maken. Vandaar dat we alles eerst converteren naar een handzaam CSV-bestand met electiontool, dat we voor ons vorige onderzoek hadden ontwikkeld.
We combineren de data met die van Waar Is Mijn Stemlokaal en andere bestanden met postcodes, zodat we latitude en longitude kunnen vinden om te plotten op een kaartje. Ook versimpelen we de data en halen we er alleen de partijen uit die we echt nodig hebben. In deze analyse nemen we alleen de partijen mee die ook in de Eerste Kamer komen: lokale partijen vallen af. Ook zetten we de benaming uit de oorspronkelijke Kiesraad-data om naar kortere afkortingen. Er zijn twee lijstcombinaties die we samenvoegen: de Noord-Hollandse 50PLUS/Partij voor de Ouderen tellen we op bij 50PLUS. De Brabantse ChristenUnie-SGP tellen we op bij zowel CU als de SPG. De SGP blijft ook na die samenvoeging de enige partij die niet in alle provincies meedoet: in Groningen, Noord-Holland en Limburg kon er niet op ze gestemd worden.
De versimpelde data zetten we om naar een lijst met zeven kolommen:
TABEL I INVOEREN
Met deze data kunnen we alle visualisaties maken.
Om de visualisatie te maken waarin het aandeel van de 5% ‘fanbases’ (bureaus waar de 5% meeste stemmen vandaan komen) duidelijk wordt, zetten we de data om naar een tabel met deze kolommen:
TABEL II INVOEREN
De SGP is in dit lijstje dus de enige partij waar die totale 100% niet slaat op álle 9.311 stembureaus, maar alleen op de 6.810 waar ze daadwerkelijk meededen.
Deze nieuwe tabel zetten we om in een ‘stacked bar chart’ waar je de distributie goed kan zien:
Voor de kaartjes gebruiken we een basiskaart in het TopoJSON-formaat. De visualisaties zijn te zwaar om goed in de browser te kunnen maken (wat we wel doen bij de stacked bar chart). Daarom maken we de kaartjes in Python met behulp van de Altair-datavisualisatie bibliotheek. Het eindresultaat is een serie plaatjes. De kaartjes zijn dus niet interactief.
Om goed te kunnen vergelijken, moeten de bolletjes op de kaarten van alle partijen gelijk in grootte zijn. Dat is lastig, want Altair schaalt de bolletjes op basis van de verdeling van de stemmen per partij. Eén kaartje van de PvdA (dat maximaal 284 stemmen kreeg op één bureau) ziet er daarom heel anders uit dan de SGP (dat er 1.033 kreeg op één bureau). Het kan vast makkelijker in Altair, maar we lossen dit op door het stembureau met de meeste stemmen van alle partijen (de SGP dus) in de dataset op te nemen van elke partij, maar dat bolletje buiten Nederland te plotten, ergens in het Verenigd Koninkrijk. Die zie je dus niet terug op het uiteindelijke kaartje. Weet jij wel hoe we dat netjes zouden kunnen doen? Het hele project, inclusief alle data en Jupyter Notebooks staat op ons Github-account. Doe er je voordeel mee.