HowTo Heatmap Wahlverhalten
Inhaltsverzeichnis
Wahlverhalten auswerten
Nach den anstrengenden Wochen vor Wahlen kommt die Auswertung oft zu kurz. Hier soll eine Methode vorgestellt werden, wie der Wahlerfolg mit einer Karte ausgewertet werden kann.
Vorgeplänkel
Ziel
Das Ziel ist eine Kartendarstellung der erreichten Stimmen (relativ zu den erreichbaren Stimmen) in den verschiedenen Gebieten. Die Karte ist dabei zunächst als Papierkarte zum Ausdrucken konzipiert, mit ein wenig Zusatzaufwand kann auch eine digitale Karte fürs Web erzeugt werden.
Konzept
- Beschaffung der Rohdaten
- OSM-Daten als Grundlagen (Stadtplan im Hintergrund zur Orientierung)
- Wahlbüros mit Koordinaten & Stimmen
- Vorbereitung der Daten mit GQIS
- Import der Rohdaten
- Hintergrundkarte einstellen
- Verarbeitung der Daten
- Erzeugen von Heatmaps (absolute, relative Stimmenverteilung)
- Anzeige
- Papierkarte basteln
- (optional) Ausgabe als Webkarte
Software
Diese Anleitung nutzt QGIS 3. Vorkenntnisse mit GIS-Software werden nicht benötigt. Die Versionsnummer ist wichtig, da in der Version 2 sich die Features an anderen Orten verstecken als hier beschrieben.
Um die Wahllokale mit Koordinaten und Stimmen muss man entweder viel Handarbeit machen oder fragt einen befreundeten Hacker ob er die offizielle Liste automatisiert auswertet. Am Ende sollte eine CSV
-Datei stehen.
Rohdaten
Kartenmaterial
Die Basis bilden OSM-Daten. Theoretisch könnte man sich Rohdaten herunterladen und selber darstellen, hier werden aber sogenannte Tiles verwendet, bereits fertige Schnipsel Karte.
Im speziellen diesen Tile-Server: https://tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png
(Liste von Tilservern). Dieser Tileserver stellt eine Schwarz/Weiße Karte zur Verfügung, die sich hier besonders eignet da so die farbige Heatmap gut zu erkennen ist.
Wahllokale
Gebraucht wird eine Datei die für jedes Wahllokal mindestens folgende Daten enthält:
- Koordinaten (Üblicherweise Lon., Lat.)
- Gesamtstimmen pro Wahllokal
- erreichte Stimmen pro Wahllokal
Mehr geht natürlich auch, so sah unser Beispiel aus:
wahllokal_id ; stadtteil_grob ; stadtteil_fein ; strasse ; lat ; lon ; stimmen_gesamt ; erststimme_absolut ; erststimme_relativ ; zweitstimme_absolut ; zweitstimme_relativ 2100 ; Pirnaische ; Vorstadt ; Grunaer Str. ; 51.0471758 ; 13.7516133 ; 691 ; 9 ; 1.3 ; 8 ; 1.16 2200 ; Pirnaische ; Vorstadt ; Zirkusstr. ; 51.04956 ; 13.7493 ; 828 ; 12 ; 1.45 ; 12 ; 1.45 2400 ; Pirnaische ; Vorst. ; Steinstr. ; 51.0529572 ; 13.7489046 ; 655 ; 4 ; 0.61 ; 3 ; 0.46 3100 ; Seevorstadt ; Ost ; Prager Str. ; 51.04374515 ; 13.7356033099201 ; 596 ; 3 ; 0.5 ; 1 ; 0.17 3200 ; Seevorstadt ; Ost ; Räcknitzstr. ; 51.0440022 ; 13.7402901 ; 643 ; 12 ; 1.87 ; 12 ; 1.87 3300 ; Seevorstadt ; Ost ; Lindengasse ; 51.0408497 ; 13.739627 ; 606 ; 3 ; 0.5 ; 4 ; 0.66 3400 ; Strehlen ; ; Tiergartenstr. ; 51.0374013 ; 13.7491512 ; 965 ; 6 ; 0.62 ; 5 ; 0.52 [...]
Vorbereitung
Kartenmaterial
- Kontrollieren das das
Browser
-Widget da ist- Falls nicht:
Ansicht
,Bedienfelder
,Browser
- Falls nicht:
XYZ Tiles
, Rechtsklick,Neue Verbindung...
- Name:
OSM SW
- URL:
https://tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png
- Name:
- OK
- Doppelklick auf den neuen Eintrag
OSM SW
- Layer erscheint auf der Karte
Wahllokale
Import
Layer
,Layer hinzufügen
,Textdatei als Layer importieren
- Dateiformat: Benutzerdefiniert
- Trenner (
;
,,
, Tabstop etc.) einstellen
- Trenner (
- Geometriedefinition
- Punktkoordinaten
- X-Feld:
lon
- Y-Feld:
lat
- Geometrie-KBS: i.d.R.
Projekt-KBS
, wasWGS 84
sein sollte.
- Hinzufügen klicken
- evtl. in der Legende links: Rechtsklick auf neuen Layer,
Auf den Layer zoomen
Jetzt sollten die Wahllokale als Punkte erscheinen. Falls nicht kontrollieren das der Layer sichtbar ist und ganz oben in der Liste steht.
Transformation
Damit nachher auch korrekte Kreise berechnet werden muss noch das Koordinatensystem angepasst werden. Das Problem: Je nachdem wo man lebt, braucht man ein anderes.
Zum Transformieren muss man erstmal rauskriegen, was überhaupt das Ziel-Koordinatensystem ist. Für Deutschland verwendet man generell das Deutsche Hauptdreiecksnetz
(DHDN), welches aus 4 Teilen besteht. Von Westen (Zone 2) nach Osten (Zone 5).
Um das Rauszubekommen, kann man sich die Gebiete der verschiedenen Zonen ansehen.
Verarbeitung
,Werkzeugkiste
- oder
Strg+Alt+T
- oder
Vektoren Allgemein
,Layer reprojizieren
- Eingabe-Layer: Layer mit Wahllokalen
- Reprojiziert: Klick auf
...
: In Datei speichern (irgendwas angeben) - Ziel-KBS: Rechts neben dem Dropdown auf das Icon klicken (ein Fenster öffnet sich, siehe nächster Punkt)
DHDN / Gauss-Kruger zone [2/3/4/5]
- In neuem Fenster: Oben in Filter
DHDN / Gauss-Kruger
eintragen- die Einträge
DHDN / Gauss-Kruger zone 2
bisDHDN / Gauss-Kruger zone 5
verwenden- die Einträge mit
3-degree
ignorieren
- die Einträge mit
- Einträge durchprobieren, bis der gewünschte Ort in der Zone liegt
- OK (Fenster schließt sich)
Streifen 5 wird in diesem Menü falsch angezeigt, alles was östlich von Zone 4 liegt, ist Zone 5.
- die Einträge
- Im Hintergrund ausführen
- Den alten Layer ausblenden
Die korrekte Auswahl für Dresden wäre beispielsweise DHDN / Gauss-Kruger zone 5
(EPSG: 31469).
Wenn alles gut gelaufen ist, ist kein Unterschied zu sehen. Warum das so ist soll uns hier nicht weiter interessieren, der Schritt ist aber trotzdem wichtig.
Von den anderen Layer (OSM SW
) bzw. vom Projekt sollte man das Koordinatensystem nicht umstellen.
Verarbeitung
Heatmaps erzeugen
Nun baue man sich zwei Heatmaps mit fast den selben Einstellungen: eine für die absolut erreichbaren Stimmen, und einmal für die absolut erreichten Stimmen.
Verarbeitung
,Werkzeugkiste
- oder
Strg+Alt+T
- oder
- Heatmap auswählen (Doppelklick)
- dieser Schritt funktioniert in QGIS 2 nicht
- Punktlayer: Layer mit Wahllokalen (den neuen, rerojizierten)
- Fortgeschrittene Parameter
Weight from field
: Summe aller Stimmen (erreichbare Stimmen)
- Mit den Werten Auflösung & Radius experimentieren bis ein in etwa flächendeckendes Bild herauskommt.
- Radius anpassen (in Metern, bei mir 500)
- Anzahl Zeilen Anpassen (Ich habe 1000 verwendet)
- Irgendwohin klicken, die Anzahl der Spalten wird dann automatisch berechnet
- Reprojiziert: Klick auf
...
: In Datei speichern (irgendwas angeben)
- Im Hintergrund ausführen
- Warten
- Heatmap mit selben Einstellung erzeugen
- Gewicht: Anzahl der tatsächlich erreichten Stimmen (absolut)
- Natürlich in eine andere Datei
- Empfehlung: Layer umbennen (
stimmen_erreicht
undstimmen_gesamt
)
Anteile Berechnen
Raster
,Rasterrechner
- Heatmap mit erreichten Stimmen / Heatmap mit gesamten Stimmen
"stimmen_erreicht@1" / "stimmen_gesamt@1"
Reference Layers
: Beide Layer auswählen (OK drücken)Output
: Klick auf...
: In Datei speichern (irgendwas angeben)
- Im Hintergrund ausführen
- Heatmap vernünftig darstellen
- Doppelklick auf Layer (Tab
Stil
) - Darstellungsart:
Singleband Pseudocolor
- Bunten Farbverlauf auswählen (evtl. invertieren), ich nehme
RdYlBu
- Modus:
Gleiches Intervall
(unten) - Klassen: 10 (oder mehr)
- Tab
Transparenz
:Globale Deckkraft
verringern (z.B.80%
)
- Doppelklick auf Layer (Tab
Anzeige
Natürlich kann man jetzt auch einen Screenshot machen, aber dedizierte andere Ausgabeformen können deutlich mehr Informationen tragen.
Papierkarte
Projekt
,Neues Drucklayout
- oder
Strg+P
- oder
Element hinzufügen
,Karte hinzufügen
- Rundherum etwas Platz lassen
- rechts oben unter
Elemente
dieKarte 1
auswählen - Unter den Eigenschaften wenn gewünscht die Anzeigegrenzen anpassen
Element hinzufügen
,Beschriftung hinzufügen
- (evtl. 2x)
- Titel und Beschreibung (Jahr, Wahl) hinzufügen
Element hinzufügen
,Legende hinzufügen
- Eigenschaften: Häkchen bei
Automatisch aktualisieren
entfernen - dann die Legende anpassen
- Eigenschaften: Häkchen bei
Element hinzufügen
,Maßstab hinzufügen
- wieder in den Eigenschaften rumprobieren
Element hinzufügen
,Beschriftung hinzufügen
- OSM Lizenz Ergänzen (wichtig):
(c) OpenStreetMap-Mitwirkende
- OSM Lizenz Ergänzen (wichtig):
Danach alles hübsch anordnen und dann exportieren:
Anordnung
,Als [Bild/SVG/PDF] exportieren
In meiner Version ging der Export als SVG nicht, PDF und Bild aber schon. Einfach mal probieren.
Webseite
Zum Generieren einer Website wird das Plugin qgis2web
benötigt. Einfach unter Erweiterungen
installieren.
Es werden die
qtWebkitWidgets
benötigt. Falls die noch fehlen poppt bei der Plugininstallation ein Fehler auf. Unter Debian/Ubuntu werden die Paketelibqt5webkit5-dev python3-pyqt5.qtwebkit
benötigt.
Web
,qgis2web
,Create web map
- Fenster groß machen, so dass alle Felder sichtbar sind
- Layer auswählen: Wahllokale, Heatmap (die Berechnete, also die mit den relativen Stimmen) und
OSM SW
(Hintergrundkarte)- für die zu Beschriftenden Felder
inline Label
auswählen
- für die zu Beschriftenden Felder
- Konfiguration Anpassen:
Add Layers List
:Expanded
- Unter
Exporter
evtl. den Ausgabeordner ändern
- OK
Dieser gesamte Ordner kann dann auf eine Webseite geklatscht werden. Dabei nicht den Verweis auf die OSM-Quelle irgendwo vermerken: (c) OpenStreetMap-Mitwirkende
.
Schlussbemerkungen
Dieser Ansatz kann nur einer von vielen sein, denn eine solche Karte bringt nicht besonders viel Genauigkeit mit. Der Einzugsbereich von Wahllokalen wird überhaupt nicht betrachtet, ob nun nur 300 Meter oder zwei Kilometer, um nur ein Beispiel zu nennen.
Diese Anleitung ist nach dem Motto "Quick and Dirty" gestaltet, an vielen Stellen habe ich Details weggelassen. Mehr Aufmerksamkeit verdienen zum Beispiel noch das Koordinatensystem, die Darstellung der Hintergrundkarte oder die geschickte Einfärbung.
Nichtsdestotrotz hoffe ich das sie euch einen guten Dienst geleistet hat, für Rückfragen stehe ich euch zur Verfügung.
Danke an ⅅℒℚ für die Idee und die Rohdaten.