# feldmannreferendum

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

V1.0 - 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 Wahlbezirk, 
- eine Tabelle mit den 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 Wahllokal, Ortsteil und Ortsbezirk sind als CSV-Datei [auf dieser Seite zu finden](https://votemanager-ffm.ekom21cdn.de/2022-11-06/06412000/praesentation/opendata.html). 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
 
## Wann gibt es wo Daten?
 
 - Sobald ein Wahllokal ausgezählt ist, wird eine "Schnellmeldung" erzeugt und werden die CSVs aktualisiert. 
 - Eine Schnellmeldung umfasst ein Wahllokal.
 - 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 Wahllokale 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.**