Mapa s výsledky voleb po okrscích
, Michal ŠkopMapy 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ě

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:
- Pro geografickou část použijeme data z RÚIANu od ČÚZK: RUIAN Stát - SHP.
- Pro data o volebních výsledcích použijeme data ČSÚ: Volební výsledky.
- Číselníky k volbám opět zveřejňuje ČSÚ: Číselníky k volbám.
- Na barvy stran použijeme vlastní seznam politických stran.
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
-
oooooo
je šestimístný kód ČSÚ pro obce - pokud má obec čtvrti, je to kód čtvrti, pokud ne, je to kód obce, a -
vu
je číslo okrsku.
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.

Zjednodušené volebních okrsky ke stažení: TopoJSON, GeoJSON
Použité nástroje a zdroje:
- Kartogram ČR (choropleth, choropletová mapa)
- TopoJSON-simplify
- NDJSON-CLI
- TopoJSON-client
- TopoJSON-server
- Streming Shapefile Parser
- D3.js
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.