GithubHelp home page GithubHelp logo

untergeekde / feldmannreferendum Goto Github PK

View Code? Open in Web Editor NEW
6.0 1.0 1.0 461 KB

R-Code zur Auswertung des Bürgerentscheid über die Abwahl des Frankfurter OB Feldmann am 6.11.2022

Home Page: https://www.hessenschau.de/noindex/live-ergebnisse-des-feldmann-referendums-v1,feldmann-referendum-ergebnis-live-100.html

License: MIT License

R 100.00%
politik frankfurt peterfeldmann

feldmannreferendum's Introduction

feldmannreferendum

R-Routinen, um die Abstimmungsergebnisse des Referendums in Frankfurt am 6. November 2022 auf die hessenschau.de-Website zu bringen.

V1.01 - Fragen und Anmerkungen jan.eggers (klammeraffe) hr.de

Aufbau

  • R - Programm- und Hilfscode
  • index - Konfigurations- und Indexdateien z.B. mit den Stadtteilzuordnungen
  • daten - Ausgabeordner für die aus dem Netz gelesenen und aufbereiteten Daten
  • testdaten - Künstlich generierte Test-Dateien zur Simulation

R-Dateien im Ordner R

  • update_feldmann.R - Hauptskript

  • lies_aktuellen_stand.R - Funktionen zur Datenakquise und -aufbereitung

  • aktualisiere_karten.R - Update der Datawrapper-Karten und -Tabelle im Ortsteilergebnissen

  • generiere_balken.R - Funktionen zur Generierung des HTML/CSS-Codes für die Datawrapper-Darstellungen

  • messaging.R - Status- und Fehlermeldung über MS Teams

  • generiere_testdaten.R - Zufällige Erzeugung von Simulationsdateien

  • daten_vorbereiten.R - Hilfsskripte zur einmaligen Erzeugung der Index-Dateien

Das Skript update_feldmann() ist gewissermaßen das Hauptprogramm. Es ist dazu gedacht, 1x pro Minute aufgerufen zu werden. Es lädt die Wahllokal-Daten und vergleicht sie mit dem letzten abgelegten Stand - wenn sich nichts verändert hat, wird das Skript beendet.

Mit den Daten aus den Wahllokalen wird zuerst das "Feldmann-o-meter" aktualisiert - die Grafik, die anzeigt, welcher Anteil der Wahlberechtigten schon ausgezählt ist, wieviele Ja- und Nein-Stimmen es gab, und welchen Anteil die Ja-Stimmen an der Gesamtheit der Wahlberechtigten hätten (geschätzt auf den Anteil der ausgezählten Wahlberechtigten).

Dann wird aus den Wahllokal-Daten der Auszählung für den Stadtteil generiert - das kann man in dieser Form auch direkt vom Server der Stadt ziehen; da ich aber die Zuordnung der Wahllokale zu den Stadtteilen habe und selbst aggregieren kann, rechnet eine Routine es schnell selbst.

Durch Aufruf der Funktion aktualisiere_karten() werden die Ortsdaten erzeugt und für die Stadtteile in Datawrapper ausgegeben. Aus der Stadtteil-Auszählung werden die drei Datawrapper-Grafiken auf den aktuellen Stand gebracht:

  • eine Choropleth-Karte mit dem Anteil der Ja-Stimmen an der Wahlbevölkerung,
  • eine Symbol-Karte mit den absoluten Ja-Stimmen nach Ortsteil,
  • eine Tabelle mit den Ortsteil-Ergebnissen in barrierefreier Form.

index-Dateien

  • config.csv enthält die URL, von der Daten gelesen werden, die Anzahl der Wahlberechtigten für Frankfurt (diese Zahl wird Sonntag 18 Uhr aktualisiert) und die IDs von Datawrapper-Zielen.
  • stadtteile-skaliert_08.geojson - Shapefile für die Datawrapper-Darstellungn der Ergebnisse
  • stadtteile.csv - eine Datei mit den Namen der Ortsteile, Geokoordinaten mit einem Punkt, und den Wahlergebnissen des 1. Wahlgangs der Bürgermeisterwahl 2018 zum Vergleich
  • zuordnung_wahllokale.csv - die Zuordnung der Wahllokale zu den Ortsteilen
  • opendata-wahllokale.csv - Adressen der Wahllokale vom Wahlamt

Datenquelle und Datenformat

Nutzt die Livedaten von https://wahlen.frankfurt.de - die aktuellen Daten nach Ortsteil und Stimmbezirk sind als CSV-Datei auf dieser Seite zu finden. Dort ist das Datenformat auch erklärt:

  • datum : Datum des Wahltermins
  • wahl : Name der Wahl
  • ags : AGS der Behörde
  • gebiet-nr : Nummer des Wahlgebiets
  • gebiet-name : Name des Wahlgebiets
  • max-schnellmeldungen : Anzahl an insgesamt erwarteten Schnellmeldungen im Wahlgebiet
  • anz-schnellmeldungen : Anzahl an bisher eingegangenen Schnellmeldungen im Wahlgebiet
  • A1 : Wahlberechtigte ohne Sperrvermerk 'W'
  • A2 : Wahlberechtigte mit Sperrvermerk 'W'
  • A3 : Wahlberechtigte nicht im Wählerverzeichnis
  • A : Wahlberechtigte insgesamt
  • B : Wähler
  • B1 : Wähler mit Wahlschein (idR Briefwähler?)
  • C : Ungültige Stimmen
  • D : Gültige Stimmen
  • D1 : Ja-Stimmen
  • D2 : Nein-Stimmen

Es gibt 575 Stimmbezirke - also administrative Auszählungs-Einheiten. Fast 200 von diesen "Bezirken" sind die Briefwahl-Auszählungen - sie werden alle in der Messe ausgezählt. Insgesamt gibt es 219 Wahllokale. (vgl. index/opendata-wahllokale.csv)

Eine kleine Falle wurde erst im Lauf des Wahlabends sichtbar: Die Briefwahl-Ergebnisse kommen systematisch später als alle anderen Ergebnisse - da ein Briefwahl-Stimmbezirk aber rechnerisch 0 Wahlberechtigte hat, kann man ohne die Briefwahl-Stimmen kein Quorum berechnen. Deshalb musste die Logik im Lauf des Abends von "% der Wahlberechtigten ausgezählt" auf "% der Wahllokale ausgezählt" umgestellt werden.

Wann gibt es wo Daten?

  • Sobald einer der 575 Stimmbezirke ausgezählt ist, wird eine "Schnellmeldung" erzeugt und werden die CSVs aktualisiert.
  • Eine Schnellmeldung umfasst einen Stimmbezirk, ein Wahllokal idR mehrere davon.
  • Nicht ausgezählte Wahllokale enthalten NA bei Wahlberechtigten/Wählern
  • Ortsteile haben, solang sie noch nicht ganz ausgezählt sind, fiktive Wahlberechtigten-Zahlen - die dann nur die Wahllokale abbilden, die bereits ausgezählt sind. (Beispiel: Ein Ortsteil hat 3000 Wahlberechtigte in 3 Wahllokal-Bezirken mit jeweils 1000 Wahlberechtigten - solange nur 2 ausgezählt sind, wird für den Ortsteil eine Wahlberechtigten-Anzahl von 2000 angezeigt.)
  • Briefwahl"lokale" - die Stimmbezirke mit den Nummern 9xx-xx - haben 0 Wahlberechtigte.

An dieser Stelle ein Dankeschön an das Wahlamt der Stadt Frankfurt, das trotz Zeitdrucks geduldig und kompetent Unterstützung geleistet hat.

feldmannreferendum's People

Contributors

untergeekde avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

janeggers-hr

feldmannreferendum's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.