Mapa s výsledky voleb po okrscích

, Michal Škop

Mapy s volebními výsledky jsou již tradiční součástí volebního servisu mnoha médií. Ale poněvadž při letošních krajských volbách 2020 žádné médium celou tuto mapu nedělalo, vytvoříme si ji sami - sami si potom můžete postup zopakovat např. při příštích volbách.

Zároveň jde o ukázkové použití a spojování otevřených dat z různých zdrojů.

Výsledek: Krajské volby 2020 v mapě

Krajské volby 2020 po volebních okrscích: barva odpovídá vítězné straně v daném volebním okrsku: ANO (fialová), ODS a koalice (modrá), STAN a koalice (zelená), KDU-ČSL a koalice (žlutá), Piráti a koalice (černá), ČSSD a koalice (oranžová), KSČM (rudá), SPD (červená), ostatní barvy jsou lokální strany.
Krajské volby 2020 po volebních okrscích: barva odpovídá vítězné straně v daném volebním okrsku: ANO (fialová), ODS a koalice (modrá), STAN a koalice (zelená), KDU-ČSL a koalice (žlutá), Piráti a koalice (černá), ČSSD a koalice (oranžová), KSČM (rudá), SPD (červená), ostatní barvy jsou lokální strany.

Volební výsledky jsou v ČR dostupné až na úroveň volebních okrsků (volebních místností), což vedlo ke vzniku velmi podrobných map v několika médiích, např. v Rozhlase nebo v Lidovkách.

Při letošních krajských volbách ale trochu překvapivě žádné mapy za celou ČR nevznikly (existují jen trochu jinak dělané mapy po krajích).

Naší ambicí zde není kreslit real-time mapy pro statisíce lidí pro přímé použití v médiích, ale spíš ukázat směr, jakým postupovat při přípravě takové mapy.

Pro tento případ použijeme mapu v D3, alternativou je např. vykreslení mapy v QGIS nebo s mapovým pozadím v Leafletu.

Použitá data

Data použitá pro tento projekt si najdeme v NKOD - Národním katalogu otevřených dat:

Postup zpracování

S přípravou mapových podkladů budeme postupovat podle návodu a volební data zpracujeme sami nově.

Nejprve tedy připravíme mapové podklady dle instalace a návodu. Pouze místo obcí a ORP jako v příkladě výše použijeme volební okrsky (soubory VU.xxx).

Nejprve odstraníme z mapy přebytečné atributy v QGIS (návod) a získáme soubor volebni_okrsky.shp (a další).

Musíme ještě vyřešit problém jednoznačného id pro oba zdroje dat (RÚIAN a ČSÚ). S tím, že ve volebních datech jsou okrsky dle kódů pro obce, ale v případě velkých měst dělených na části, je to dle těchto městských částí. Vytvoříme si tedy vlastní proměnnou id stylu oooooo-vu, např. 559351-2 si označíme okrsek Plasy 2 (kód ČSÚ pro Plasy je 559351), tedy

V souboru volebni_okrsky.dbf to např. můžeme udělat snadno i ručně přidáním nového sloupce (název odpovídající .dbf: PLACE_ID,C,40) a vzorcem =IF(D2="",CONCAT(C2,"-",B2+1-1),CONCAT(D2,"-",B2+1-1)).

Volební data si zpracujeme do tabulky statistics.csv pomocí vlastního krátkého skriptu v Pythonu transform.py.

A poté už můžeme postupovat podle návodu.

Tj.

shp2json -n --encoding=utf-8 volebni_okrsky.shp | ndjson-map 'd.id = d.properties.PLACE_ID, d' > volebni_okrsky.ndjson
geo2topo -n tracts=volebni_okrsky.ndjson > volebni_okrsky-topo.json
toposimplify -P 0.05 -f < volebni_okrsky-topo.json > volebni_okrsky-simple-topo.json
topo2geo < volebni_okrsky-simple-topo.json tracts=volebni_okrsky-simple.json
ndjson-split 'd.features' < volebni_okrsky-simple.json > volebni_okrsky-simple.ndjson
csv2json -n statistics.csv > statistics.ndjson
ndjson-join --left 'd.id' volebni_okrsky-simple.ndjson statistics.ndjson | ndjson-map 'Object.assign(d[0], Object.assign(d[0].properties, d[1]))' > volebni_okrsky-simple-data.ndjson
geo2topo tracts=volebni_okrsky-simple-data.json > volebni_okrsky-simple-data-topo.json

Ještě si připravíme soubor s barvami politických stran, použijeme vlastní krátký skript join_parties.py a přidáme barvy.

A nyní již jen vše použijeme do výsledného html souboru, kde mírně upravíme index.html z Kartogram ČR: Nový index.html.

Další užití

Volební mapy lze použít prakticky pro libovolné volby, referenda, apod.

Detailní mapa např. umožňuje i pohled dovnitř měst, např. zde jsou zobrazeny výsledky krajských voleb 2020 v Plzni a nejbližším okolí, kde jsou zřetelně vidět ostrůvky - sídliště - v moři modré (ODS), kde vyhrávalo fialové ANO.

Plzeň a okolí - krajské volby 2020 po volebních okrscích: barva odpovídá vítězné straně v daném volebním okrsku: ANO (fialová), ODS + TOP 09 (modrá), STAN + SZ + PRO Plzeň (zelená), Piráti (černá). Je zde vidět, že ANO vyhrávalo hlavně na sídlištích. (Zvětšený výřez z mapy popsané výše s doplněnými názvy sídlišť.)
Plzeň a okolí - krajské volby 2020 po volebních okrscích: barva odpovídá vítězné straně v daném volebním okrsku: ANO (fialová), ODS + TOP 09 (modrá), STAN + SZ + PRO Plzeň (zelená), Piráti (černá). Je zde vidět, že ANO vyhrávalo hlavně na sídlištích. (Zvětšený výřez z mapy popsané výše s doplněnými názvy sídlišť.)

Zjednodušené volebních okrsky ke stažení: TopoJSON, GeoJSON

Použité nástroje a zdroje:

Závěr

Článek ukazuje jednu z metod, jak jednoduše vykreslit mapu s volebními výsledky voleb na úrovni volebních okrsků. Zároveň demonstruje, jak používat volební otevřená data z ČSÚ a mapová otevřená data z RÚIAN.