De Tweede Kamerverkiezingen van 2023 zijn afgerond en de stemmen zijn geteld, waarbij de PVV van Geert Wilders als winnaar is uitgekomen. De NOS heeft een webapp ontwikkeld waarmee je je eigen coalities kunt vormen en het verschil met de verkiezingen van 2021 kunt zien.
Maar wat als je nog verder wilt analyseren? Met behulp van Python en een slimme toepassing van NOS-data heb ik het onderstaande Google Data Studio-dashboard ontwikkeld.
Het dashboard van de Tweede Kamerverkiezingen 2023
Wil je direct aan de slag met het Google Data Studio-dashboard? Klik dan op de groene knop om naar het dashboard te gaan. Het dashboard is gebaseerd op een eerder ontwikkeld dashboard, waarover je meer kunt lezen in het artikel “Uitslag Tweede Kamerverkiezingen 2021 Gevisualiseerd!“
Voor de optimale ervaring raad ik aan om het dashboard via een desktop te bekijken. Klik op de onderstaande knop om naar het Google Data Studio-dashboard te gaan.
Functionaliteiten en filters van het dashboard
In het dashboard zie je direct het aantal zetels en stemmen dat een partij heeft behaald in 2023 en in 2021. Bovendien is meteen de zetelwinst of -verlies zichtbaar. Onderaan links zie je in welke gemeente een partij de grootste is geworden. Maak gebruik van het “partij” filter bovenin om het dashboard te filteren voor een specifieke partij of partijen.
Extract
Waar vind ik de data?
Om de data op te halen en te verwerken in het dashboard, heb ik eerst onderzocht hoe de data op de webapp van de NOS terechtkomt. Door naar de Network Requests te kijken, is te zien dat er regelmatig een index.json wordt ingeladen die verwijst naar “https://voteflow.api.nos.nl/TK23/index.json“.
Door naar dit webadres te gaan, is er een enorm JSON-bestand te zien dat de data van alle partijen, de stemmen en het totale aantal zetels weergeeft. Daarnaast bevat het ook relevante data van de verkiezingen van 2021 en de data per gemeente. De JSON is echter niet goed leesbaar vanuit de browser. Door gebruik te maken van Insomnia kunnen we de JSON beter leesbaar maken en achterhalen welke data we willen laden/gebruiken voor het dashboard.
Het ophalen van data met Python
Door gebruik te maken van drie libraries kan de data eenvoudig worden geladen in een Google Colab-omgeving of PyCharm. Met behulp van Requests kan ik de data ophalen, via Pandas kan ik dit in een DataFrame (een tabel) plaatsen. Vervolgens gebruik ik datetime om een tijdstempel aan het geëxporteerde bestand toe te voegen.
Onderaan het script is te zien hoe de data wordt opgehaald van de voteflow API van de NOS. Deze wordt als input gebruikt voor de uiteindelijke scraper.
Door de keys “[“landelijke_uitslag”][“partijen”]” te doorlopen (loopen), kan ik eenvoudig per partij de data netjes verzamelen en dit in een dictionary opslaan. In mijn script noem ik deze “row_data“. Een Python dictionary fungeert als een verzamelbak waar we waarden voor een specifieke entiteit (in dit geval politieke partij) kunnen opslaan.
Deze data wordt vervolgens verwerkt in een DataFrame (df).
Vervolgens gebruik ik een vergelijkbaar script om ook de data per gemeente op te halen. Helaas zit deze data in een afzonderlijk object, en het was sneller en efficiënter om een tweede script te schrijven in plaats van dit te integreren in het huidige script. Het Python-script voor gemeenten vind je hieronder:
Transform
Dataverwerking in Google Sheets
De output van het Python-script wordt opgeslagen in een .CSV-bestand. Vervolgens kan dit bestand worden geladen in een Excel- of Google Sheets-bestand.
Vanwege de directe koppeling tussen Looker Data Studio en Google Sheets, heb ik ervoor gekozen om de gegevens daar te verwerken. Aangezien de uitvoer niet meer verandert, kunnen we een statisch bestand hiervoor gebruiken. Het Python-script hoeft slechts één keer te worden uitgevoerd om de gegevens te verzamelen.
In principe behoeven we hier weinig aanpassingen te doen en kunnen we dit direct koppelen met Looker Data Studio. Het Google Sheets-bestand bestaat uit twee tabbladen: één met het aantal zetels, stemmen en de uitslag van de vorige Tweede Kamerverkiezingen in 2021, en één tabblad met de resultaten per gemeente.
Custom Fields in Looker Data Studio
Aangezien de data al werkbaar is, zijn er weinig aanpassingen nodig. Ik heb echter wel een extra veld toegevoegd om het verschil in het percentage stemmen voor een partij tussen 2023 en 2021 weer te geven. Normaal gesproken kan dit verschil worden gevisualiseerd met een “Date Range” filter. Echter, gezien we slechts twee datapunten hebben (2021 en 2023), is het efficiënter om het op deze manier in te richten.
Daarnaast heb ik voor één grafiek een extra veld toegevoegd om de gewonnen en verloren zetels te visualiseren.
Load
Datavisualisatie in Looker Data Studio
Nu de data beschikbaar is in Looker Data Studio, kunnen we de resultaten van de Tweede Kamerverkiezingen 2023 visualiseren, met gegevens per gemeente en vergelijken met de resultaten van 2021.
Het doel was om zoveel mogelijk gegevens zo compact mogelijk en overzichtelijk te visualiseren. Daarnaast wilde ik de visualisatie zo “clean” mogelijk maken, zonder dat het te overweldigend wordt.
Aan de linkerkant vind je het totale aantal geldige stemmen, partijen en zetels die partijen hebben. Dit is aan te passen met behulp van de filters bovenin het dashboard. Zo kun je filteren op een aantal partijen, maar ook op partijen met meer dan een bepaald aantal zetels, of partijen die een minimaal of maximaal aantal stemmen hebben gekregen. Deze gegevens maken gebruik van eenvoudige scorekaarten.
Verder zie je het aantal zetels dat een partij heeft behaald in 2023 in vergelijking met 2021. Hier kun je ook zien hoeveel zetels een partij heeft gewonnen en verloren ten opzichte van de vorige verkiezingen.
Hieronder vind je een coalitiebouwer. Het zwarte lijntje geeft aan hoeveel zetels er nodig zijn voor een meerderheid. De groene balk geeft aan hoeveel zetels er zijn in de huidige selectie. Zo kun je zien hoeveel zetels bijvoorbeeld de PVV, VVD en NSC samen hebben.
Onderaan de pagina is te zien welke partij per gemeente de grootste is geworden. De kleuren geven aan welke partij het grootste is geworden. Zo is in één oogopslag te zien dat de PVDA/GroenLinks vrijwel alle grote steden met de winst heeft behaald.
Dat is een overzicht van de Tweede Kamerverkiezingen gevisualiseerd in Looker Data Studio. Heb je suggesties of aanvullingen voor het dashboard? Laat dan een reactie achter of stuur me een berichtje op LinkedIn.
Als je ook je eigen websitegegevens wilt laten visualiseren, neem dan gerust vrijblijvend contact met me op!