HowTo Heatmap Wahlverhalten

Aus Piratenwiki
Wechseln zu: Navigation, Suche


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.

caption Beispiel einer Karte

Konzept

  1. Beschaffung der Rohdaten
    • OSM-Daten als Grundlagen (Stadtplan im Hintergrund zur Orientierung)
    • Wahlbüros mit Koordinaten & Stimmen
  2. Vorbereitung der Daten mit GQIS
    • Import der Rohdaten
    • Hintergrundkarte einstellen
  3. Verarbeitung der Daten
    • Erzeugen von Heatmaps (absolute, relative Stimmenverteilung)
  4. 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

  1. Kontrollieren das das Browser-Widget da ist
    • Falls nicht: Ansicht, Bedienfelder, Browser
  2. XYZ Tiles, Rechtsklick, Neue Verbindung...
  3. OK
  4. Doppelklick auf den neuen Eintrag OSM SW
    • Layer erscheint auf der Karte

Wahllokale

Import

  1. Layer, Layer hinzufügen, Textdatei als Layer importieren
  2. Dateiformat: Benutzerdefiniert
    • Trenner (;, ,, Tabstop etc.) einstellen
  3. Geometriedefinition
    • Punktkoordinaten
    • X-Feld: lon
    • Y-Feld: lat
    • Geometrie-KBS: i.d.R. Projekt-KBS, was WGS 84 sein sollte.
  4. Hinzufügen klicken
  5. 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.

  1. Verarbeitung, Werkzeugkiste
    • oder Strg+Alt+T
  2. 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]
  3. In neuem Fenster: Oben in Filter DHDN / Gauss-Kruger eintragen
    • die Einträge DHDN / Gauss-Kruger zone 2 bis DHDN / Gauss-Kruger zone 5 verwenden
      • die Einträge mit 3-degree ignorieren
    • 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.

  4. Im Hintergrund ausführen
  5. 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.

caption DHDN Zone 4 im Auswahlmenü

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.

  1. Verarbeitung, Werkzeugkiste
    • oder Strg+Alt+T
  2. 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.
      1. Radius anpassen (in Metern, bei mir 500)
      2. Anzahl Zeilen Anpassen (Ich habe 1000 verwendet)
      3. Irgendwohin klicken, die Anzahl der Spalten wird dann automatisch berechnet
    • Reprojiziert: Klick auf ...: In Datei speichern (irgendwas angeben)
  3. Im Hintergrund ausführen
    • Warten
  4. Heatmap mit selben Einstellung erzeugen
    • Gewicht: Anzahl der tatsächlich erreichten Stimmen (absolut)
    • Natürlich in eine andere Datei
  5. Empfehlung: Layer umbennen (stimmen_erreicht und stimmen_gesamt)
caption Heatmap ohne Anpassung der Darstellung

Anteile Berechnen

  1. 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)
  2. Im Hintergrund ausführen
  3. 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%)
caption Heatmap bunt

Anzeige

Natürlich kann man jetzt auch einen Screenshot machen, aber dedizierte andere Ausgabeformen können deutlich mehr Informationen tragen.

Papierkarte

  1. Projekt, Neues Drucklayout
    • oder Strg+P
  2. Element hinzufügen, Karte hinzufügen
    • Rundherum etwas Platz lassen
    • rechts oben unter Elemente die Karte 1 auswählen
    • Unter den Eigenschaften wenn gewünscht die Anzeigegrenzen anpassen
  3. Element hinzufügen, Beschriftung hinzufügen
    • (evtl. 2x)
    • Titel und Beschreibung (Jahr, Wahl) hinzufügen
  4. Element hinzufügen, Legende hinzufügen
    • Eigenschaften: Häkchen bei Automatisch aktualisieren entfernen
    • dann die Legende anpassen
  5. Element hinzufügen, Maßstab hinzufügen
    • wieder in den Eigenschaften rumprobieren
  6. Element hinzufügen, Beschriftung hinzufügen
    • OSM Lizenz Ergänzen (wichtig): (c) OpenStreetMap-Mitwirkende

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 Pakete libqt5webkit5-dev python3-pyqt5.qtwebkit benötigt.

  1. Web, qgis2web, Create web map
    • Fenster groß machen, so dass alle Felder sichtbar sind
  2. 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
  3. Konfiguration Anpassen:
    • Add Layers List: Expanded
    • Unter Exporter evtl. den Ausgabeordner ändern
  4. 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.