Die meisten Kriterien für einen hohen Nachrichtenwert dürfte dieser Beitrag wohl verfehlen. Die Wahl ist seit Monaten geschlagen und obwohl ein spannungsgeladenes Kopf-an-Kopf-Rennen prognostiziert wurde, kam es nur zu vergleichsweise sanften Verschiebungen. Ob das ganze Spektakel dabei mehr als rein politische Vorderbühne war, mehr als der hoffnungslose Versuch ein Profil ohne Relief zu schaffen, darf jede*r für sich selbst entscheiden. Wenn die Wahlen bisher aber auch noch keine grundsätzlichen Erneuerungen und Reformen mit sich gebracht haben, so nutzt das ganze Spektakel zumindest als Basis mir die Zeit an einem regnerischen Sonntag zu vertreiben.

Nachdem ich am Wochenende beim Durchstöbern der open data Plattform Österreichs auf die Sprengelergebnisse der Wienwahl gestoßen bin, wollte ich mich nach dem medialen Hick Hack um die Mandatsvergabe daran versuchen die Ergebnisse selbst zu berechnen und mit dem ggmap-Package von R zu visualisieren. Beim nächsten wochenendlichen Regenschauer wird dann versucht das Reproduzierte in eine Shiny-App zu packen und Veränderungen des Wahlausgangs durch die umstrittene Wahlzahl interaktiv nachvollziehbar zu machen. Vorerst reicht die Schlechtwetterfront glücklicherweise aber nur aus, um den ersten Teil des Projekts wachstumsfördernd zu tränken: die Berechnung und (statische) Darstellung der Ergebnisse.

In einem ersten Schritt werden dazu die abgegebenen Stimmen auf Sprengelebene eingelesen und zu Wahlkreisen aggregiert. In einem zweiten Schritt folgt ein Skript zur Berechnung der Grund- und Restmandate auf Wahlkreisebene, bevor die vergebenen Mandate im zweiten Durchgang berücksichtigt werden und als bunte Wienkarte Gestalt annehmen.

Datenkosmetik

Nachfolgend finden sich die ersten Arbeitsschritte. Vom Laden der benötigten Packages, über die Definition der und Erläuterungen zur Datenstruktur bis hin zur Recherche der Mandatsverteilung im Wiener Gemeinderat. Nachdem wir uns diesen – eher kosmetisch gelagerten – Arbeiten zugewand haben, können wir im nächsten Schritt die Verarbeitung der Daten angehen. Doch schauen wir zunächst einmal, wo wir unseren Eyeliner überall angesetzt und welche Linien wir gezogen haben.

Die Berechnung an sich benötigt keine zusätzlichen R-Packages. Magrittr und data.table werden lediglich zur komfortableren Code-Gestaltung und zur einfacheren Datenmanipulation geladen. Ggmap wird benötigt, um den Zahlen ein kartographisches Gesicht zu verleihen.

Copy to Clipboard

Das Einlesen und Strukturieren der Daten wird hier unnötig umständlich angegangen. Während mensch sich einige der Arbeitsschritte sparen könnte, habe ich sie – aus Gründen der Nachvollziehbarkeit – trotzdem angeführt. Die Rohdaten gibt es hier. In den Syntax-Kommentaren zu den einzelnen Variablen finden sich Kurzbeschreibungen des Inhalts bzw. Erläuterungen zur gewählten Vorgehensweise. Falls sich jemand fragen sollte, wie es in einzelnen Sprengeln mehr abgegebene Stimmen als Wahlberechtigte geben kann, der*die sei an dieser Stelle auf eine kleine Erläuterung zu den Daten verwiesen.

Copy to Clipboard

Je nach Anzahl der Wahlberechtigten, gibt es unterschiedliche Mandatszahlen für die einzelnen Wahlkreise. Warum sich diese nicht schon in die eigentliche Quelldatei integriert wurden, bleibt mal dahingestellt. Die zu vergebenden Mandate je Wahlkreis lassen sich aber relativ schnell recherchieren. In Summe hat Wien 100 Mandate zu vergeben. Wahlkreise sind – um das auch noch erwähnt zu haben – bis auf die kleineren Innenbezirke – weitgehend Deckungsgleich mit den allgemeinen Bezirksgrenzen.

Copy to Clipboard

Berechnung der Grundmandate

Nachdem die ersten Vorbereitungsschritte gestapft wurden, kann zu den Berechnungen angesetzt werden: die Grundmandate oder die “billigen” Mandate. Um diesen Berechnungsschritt wurde in der jüngeren Vergangenheit Wiens wild gestritten. Parteiübergreifend wurden Päkte und Notariatsakte unterzeichnet, in Nacht und Nebel Aktionen wechselten abgesägte Abgeordnete das Parteischiff und brachten grüne Fregatten zum Kentern. Der ganze Spuk? Die Stimmen, um ein Grundmandat zu erhalten (die Wahlzahl), bestimmen sich nicht rein über die verfügbaren Mandate innerhalb eines Wahlkreises. Ein zusätzlicher Faktor verzerrt hier etwas die Verhältnisse. Aktuell berechnet sich die Wahlzahl anhand der gültig abgegebenen Stimmen dividiert durch die verfügbaren Mandate plus eins. Durch den höheren Divisor (Mandate plus eins) wird die Wahlzahl bzw. die benötigte Stimmenanzahl für ein (Grund-)Mandat kleiner. Ein Grundmandat ist damit “billiger” zu ergattern, als ein Mandat im zweiten Durchgang. Begünstigt werden von dieser Regel besonders Parteien, die in einzelnen Bezirken unverhältnismäßig stark vertreten sind bzw. Parteien mit einem soliden Stand in den großen Flächenbezirken. Diese stellen ja ohnehin schon einen hohen Anteil der 100 zu vergebenden Mandate des Gemeinderats.

Copy to Clipboard

Zweiter Durchgang: Verteilung der Restmandate

Nachdem die Grundmandate durch den obigen Code verteilt wurden, muss in einem zweiten Schritt mit den Reststimmen auch noch etwas passieren. Am Kampf um die Reststimmen nehmen all jene Parteien teil, die zumindest eine von zwei Bedingungen erfüllen. Die Parteien müssen im gesamten Wahlgebiet mindestens fünf Prozent der Stimmen oder aber in zumindest einem Wahlkreis ein Grundmandat erreicht haben.

Der Wahlzahlbonus von plus eins begünstigt damit nicht per se größere Parteien auf Stadtebene. Belohnt wird durch den höheren Divisor vielmehr eine gewisse Verankerung der Parteien innerhalb der jeweiligen Bezirksgrenzen. Ein gutes Abschneiden auf dieser Ebene sichert Vorteile auf gesamtstädtischer Ebene. Politischen Kräften, die zur Wahl antreten, aber mitunter nur lokal stark vertreten sind, wird es durch den Bonus sogar ermöglicht ein Hintertürchen zum Gemeinderat zu finden, dessen Eingang grundsätzlich ein 5-Prozent-Hürde schützt: Wer es nicht schafft, im gesamten Stadtgebiet zumindest 5 Prozent der Wähler*innen hinter sich zu vereinen, darf vor dem, nicht aber im Rathaus Platz nehmen. Als Ausnahme zu dieser Regel gelten aber all jene, die zumindest in einem Bezirk ein Mandat erobern konnten. Das so festgehaltene im Hinterkopf, lässt sich de facto aber trotzdem der Schluss herstellen, dass große Parteien durch den Bonus in der bisherigen Wahlgeschichte überproportional viele Mandate im Vergleich zu den gültig abgegebenen Stimmen erhalten haben.

Nachdem nun zuvor bestimmt wurde, welche Parteien 2015 ein Grundmandat erhalten haben, müssen an dieser Stelle auch noch all jene Parteien berücksichtigt werden, die in der gesamten Stadt zumindest fünf Prozent der Stimmen erhalten haben. Die so zusammengesetzte Liste an Parteien wartet dann im zweiten Durchgang auf die Vergabe der Reststimmen. Wie schon bei der Aufteilung der Gemeinderatssitze auf die einzelnen Bezirke, kommt hier der d’Hondt’sche-Teiler zur Anwendung.

Copy to Clipboard

Nachdem nun die Grund- und Restmandate berechnet wurden, bleibt nichts weiter zu tun, als die Ergebnisse zusammenzuführen und schon zeigt sich die Verteilung der aktuell vergebenen Gemeinderatssitze.

ParteiMandateGrundmandate
SPOE4438
FPOE3429
OEVP70
GRUE103
NEOS50

Sprengelergebnisse

Um die schlicht gehaltene Tabelle der vergebenen Gemeinderatssitze durch ihr zugrundeliegendes Lokalkolorit aufzupeppen und die Ergebnisse punktgenauer betrachten zu können, benötigen wir die einzelnen Sprengelergebnisse. Die zuvor berechneten Grund- und Restmandate helfen uns hier wenig weiter; also geht es zurück zum Ausgangspunkt – zu den kosmetisch behandelten Rohdaten.

In einem ersten Schritt werden die jeweiligen Stimmanteile auf Sprengelebene berechnet. Um diese Ergebnisse in einem zweiten Schritt auf einer Karte visualisieren zu können, erhält jeder Sprengel eine gesonderte ID – eine Kombination aus Bezirkskennzahl und Sprengelkennzahl. Da die Sprengelkennzahl in jedem Bezirk von neu beginnt, was zu Überschneidungen führen kann, ist eine Verbindung mit der Bezirkskennzahl erfordelich, um eine eindeutige Zuordnung zu ermöglichen.

Zur Datenbereinigung werden nun Sprengel ohne Stimmabgaben gelöscht. Solange wir noch etwas vom Szenario einer 0-prozentigen Wahlbeteiligung entfernt sind, betrifft dies nur “unechte” Sprengel wie beispielsweise Spitäler etc., in denen Wahlberechtigte aus unterschiedlichen Wahlbezirken zusammengefasst werden.

Abschließend werden jene Parteien mit den meisten Stimmen innerhalb eines Sprengels als Sieger*innen erkoren. Das Ausmaß des jeweiligen Sieges wird hier aber ebenso wenig erfasst, wie eventuelle Gleichstände zwischen zwei oder mehr Parteien. Ich bin nicht ganz sicher, was bei Gleichständen tatsächlich passiert. Spekulierend gehe ich aber von folgeder Logik aus: je weiter links sich der Name einer Partei in meiner Datentabelle findet, desto eher wird ihr ein Gleichstand als Sieg zugerechnet. Ein Gleichstand zwischen einer Partei in Spalte eins und zwei, wird zu Gunsten der Partei in Spalte eins ausgelegt. Ein Gleichstand zwischen Spalte drei und fünf zu Gunsten der Partei in Spalte drei. Dieser Algorithmus schmeichelt in der Ergebnisdarstellung daher am stärkste der SPÖ, dann der FPÖ und so weiter. Zum Glück investieren die echten Wahlhelfer*innen etwas mehr Energie in die Berechnung der Ergebnisse.

Copy to Clipboard

Abschließend werden nun noch eine Wienkarte und die dazugehörigen Sprengelgrenzen geladen. Die Grenzen werden von Wahl zu Wahl neu gezogen. Eine Definition der Wahlsprengel findet sich lobenswerter Weise wieder auf der open data Plattform. Ein Minimum an Formatierungsaufwand bleibt mensch aber auch hier nicht erspart. Hinweise, warum die Polygone der Sprengelgrenzen so verschachtelt-verstringt sind, sind übrigens jederzeit willkommen. Bis dahin gehe ich mal einfach davon aus, dass die Mehrzahl der User*innen – im Gegensatz zu mir – mit diesem Format tatsächlich etwas anfangen kann.

Copy to Clipboard

Nachdem nun die geographischen Längen- und Breitengrade ausgelesen, entworren und mit einer Sprengel-ID gekennzeichnet wurden, die mit jener in der Datentabelle der Wahlergebnisse korrespondiert, kann zum letzten Feinschliff angesetzt werden: die einzelnen Sprengel werden in die Farben der jeweiligen Siegerparteien gekennzeichnet.

Als Kontext schaffenden Hintergrund laden wir eine allgemeine Karte von Wien. Mit der geom_path-Funktion von ggmap spannen wir ein Liniennetz (die Sprengelgrenzen gemäß der zuvor aufbereiteten Tabelle) über die gesamte Stadt. Hier ist es wichtig, der Funktion Anhaltspunkte zur Gruppierung der Daten zu geben. Im Grunde geben wir die Anweisung, die Sprengelgrenzen je unabhängig voneinander zu zeichnen. Ohne diese Ergänzung wird – ohne abzusetzen – eine durchgängige Linie gezeichnet, die durch alle gegebenen Breitengrade führt. Anschaulicher, als diese umständliche Beschreibung ist vermutlich das Ergebnis einer fehlenden Gruppierung – mehr Kinderzeichnung, als Wahlergebnis (Abb.1).

Gemeinderatswahl: Fehler beim Zeichnen der SprengelgrenzenGemeinderatswahl: Wien mit Sprengelgrenzen

Deutlich klarer erscheint das Stadtbild demgegenüber, wird die Gruppierung gesetzt (vgl. Abb.2). Um zum Abschluss auch die Verteilung der Sieger-Parteien darzustellen werden die entsprechenden Farben mit der geom_polygon-Funktion zugewiesen und schon haben wir unser DIY-Funktionenset zur Berechnung und Darstellung der Wahlergebnisse (Abb. 3/4).

Copy to Clipboard
  • Gemeinderatswahl: Wien mit Sprengelgrenze, gefärbt nach Wahlergebnis mit Koordinatensystem als Hintergrund
  • Gemeinderatswahl: Wien mit Sprengelgrenze, gefärbt nach Wahlergebnis mit Hintergrundkarte
  • Gemeinderatswahl: Wien mit Sprengelgrenze, gefärbt nach Wahlergebnis ohne Hintergrundkarte