Skip to content

Instantly share code, notes, and snippets.

@salim-b
Last active July 30, 2020 21:52
Show Gist options
  • Save salim-b/8494c8576a35cd02f530e4d7581e4519 to your computer and use it in GitHub Desktop.
Save salim-b/8494c8576a35cd02f530e4d7581e4519 to your computer and use it in GitHub Desktop.
Test file for hackmd-cli issue #34
title breaks robots lang
Test file for hackmd-cli issue
false
noindex, nofollow
de-CH

BE

  • add function to convert administrative areas to municipalities and adapt create_bern_data() accordingly

  • Bei Staatskanzlei BE anfragen, ob sie die Zahl der brieflich und an der Urne eingelangten E-Voting-Ausweiskarten von Auslandschweizerinnen und Auslandschweizern auch separiert nach Stimmkanal haben (vermutlich nicht...)

  • Gemäss Sebastian Fankhauser (E-Mail vom 2017-08-25) sind "ab dem Jahr 2019 erste Testversuche geplant für e-Election", sprich das Anbieten von E-Voting bei Wahlen. Sobald es soweit ist, sollte ein entsprechender Eintrag für is_e_voting_available_for_elections in cantonal_characteristics erstellt werden!

BS

  • Seit der Abstimmung vom 5. Juni 2016 sind in Basel-Stadt Inlandschweizer mit einer Behinderung zum I-Voting zugelassen. Konkret können sich "Stimmberechtigte, welche eine IV-Rente (IV) oder eine Hilflosenentschädigung (HE) beziehen" bzw. "Stimmberechtigte, welche mit einem ärztlichen Attest belegen, dass sie die Stimme auf konventionellem Weg nicht ohne fremde Hilfe abgeben können" fürs I-Voting registrieren.

    • Die Behinderten können zusätzlich auf kantonaler und Gemeindeebene elektronisch abstimmen! Damit stimmen streng genommen die Werte unter referendum_level (und allenfalls election_level) seit dem 2016-06-05 dort nicht mehr, wo es auch Vorlagen auf Kantons- und Gemeindebene gab (mein Vorgänger hat diese Ebenen jeweils miteinbezogen, ohne allerdings group anzupassen, was nat. kreuzfalsch ist)! Zudem stimmt dort streng genommen auch is_entire_group_in_all_votes = TRUE nicht!
    • Es könnte eine neue Ausprägung der Variable group geschaffen werden – etwa mit dem Code 0 und einem group_name à la Swiss citizens living abroad and handicapped Swiss citizens living in Switzerland; allerdings wäre fraglich, ob bei diesen Einträgen auch is_preregistration_required auf TRUE gesetzt werden sollte (gilt ja nur für die behinderten InlandschweizerInnen). - Das grundsätzliche Problem der fehlenden Aufteilung der Zahlen zwischen AuslandschweizerInnen und behinderten InlandschweizerInnen wird dadurch nicht gelöst!
    • Am besten wäre, der Kanton würde uns detailliertere Ergebnisse bereitstellen inkl. der Aufschlüsselung der abgegebenen Stimmen nach group, sodass für BS jeweils 2 Einträge vorgenommen werden könnten: Einmal für Swiss citizens living abroad und einmal für handicapped Swiss citizens living in Switzerland (mit group-Code 0 oder so).
  • Der Kanton plant die Ausdehnung des E-Votings auf alle Stimmberechtigten:

    Voraussichtlich bei der Abstimmung vom 4. März 2018 werden 50 Prozent der Stimmberechtigten elektronisch abstimmen können. Die Ausweitung auf alle Stimmberechtigten soll bis 2019 erfolgen. soll "demnächst" erfolgen.

FR

  • FR-Einträge anhand der PDF-Berichte zur E-Voting-Nutzung vervollständigen (postal_votes und electorate) und Leitfaden um Angaben zum Mapping der Zahlen erweitern.

    Offene Fragen und Beobachtungen:

    • Zählen wir ungültige Stimmzettel in postal_votes mit oder nicht? (Die Zahl Ungültig (Brieflich) scheint (meist) in Möglichkeit per Vote électronique aber Brieflich abgestimmt enthalten, ersichtlich etwa am Bericht vom 2014-05-18).
      Im Bericht vom 2010-11-28 ist Ungültig (Brieflich) offenbar in Brieflich eingereichte Stimmzettel enthalten, in jenem vom 2010-09-26 hingegen nicht!
    • Bis zum 2013-11-24 ist Eingelegte Stimmzettel kleiner als Vote électronique plus Möglichkeit per Vote électronique aber Brieflich abgestimmt. Woher stammen die restlichen Stimmzettel?
      • Es könnte mit der Aufhebung der Wassenaar-Übereinkunft (ab 2014) zusammenhängen, sodass sich Eingelegte Stimmzettel auf das gesamte Auslandschweizer-Elektorat bezieht und jene aus nicht-E-Voting-berechtigten Wassenaar-Staaten miteinbezieht. --> Am wahrscheinlichsten! Das bedeutete aber auch, dass is_wassenaar_corrected auf FALSE gesetzt werden müsste für die entsprechenden Einträge (momentan nicht der Fall)!
      • Es könnte auch sein, dass die Zahl Ungültig (Brieflich) bis dahin nicht in Möglichkeit per Vote électronique aber Brieflich abgestimmt enthalten war und die zusätzliche Differenz Eingelegte Stimmzettel - Vote électronique + Möglichkeit per Vote électronique aber Brieflich abgestimmt + Ungültig (Brieflich) auf leere Stimmzettel zurückzuführen ist.
        Dafür spräche, dass in den Berichten vom 2011-05-15 und 2011-02-13 die Summe Vote électronique + Möglichkeit per Vote électronique aber Brieflich abgestimmt + Ungültige und leere genau der Zahl Eingelegte Stimmzettel entspricht.
      • In den Berichten vom 2010-11-28 und 2010-09-26 ist neben der Zahl Möglichkeit per Vote électronique aber Brieflich abgestimmt zusätzlich die Zahl Brieflich eingereichte Stimmzettel aufgeführt (Differenz kommt offenbar aufgrund der Wassenaar-Staaten zustande). Diese Zahl ist für uns nicht relevant, richtig?
    • Angabe Möglichkeit per Vote électronique aber Brieflich abgestimmt fehlt in den Berichten vom 2012-06-17 und 2012-03-11!
    • Mit der E-Voting-Wiederaufnahme am 2016-11-27 hat die Struktur des Berichtes völlig geändert. Im neuen Bericht sind keine expliziten Zahlen zur Anzahl brieflicher Stimmen mehr enthalten. Da aber in den 6 Berichten zuvor postal_votes = votes - e_votes war, sollte dies nicht weiterhin gelten?
    • Bericht fehlt gänzlich für folgendes Datum: 2013-03-03

GE

  • Kommunale Daten hinterfragen! Wieso gibt es bspw. für 2016-02-28 zwei separate Registerdatensätze, einen für die föderal/kantonalen Abstimmungen (cv201610) und einen für die kommunalen Abstimmungen in Genf (cv201610_21)?

    Vermutung: Die Registerdaten korrespondieren mit den Abstimmungszetteln, die wiederum separat gezählt werden, einmal für die föderal/kantonalen und einmal für die kommunalen Abstimmungen.

    Würde das bedeuten, dass unsere Variablen referendum_level und election_level jeweils nicht ganz stimmen bzw. deren Werte teilweise korrigiert werden müssten? Glaube nicht (uff!), siehe bspw.:

    backup_data$data_main %>%
      dplyr::filter(canton == "Geneva" & date == "2016-11-27" & municipality == "Genève") %>%
      View()

    Trotzdem den Code bei Gelegeneheit genau checken!

  • Kommunale Abstimmungen/Wahlen nachtragen

    • REDACTED hat die Daten beim Kanton angefordert!
      Nachdem die Daten eingetroffen sind:
      • Die Variable source der betreffenden Einträge in den auxiliary datasets auf Data provided by the canton of Geneva setzen!
      • Google worksheet cantonal_auxiliary_dataset und municipal_auxiliary_dataset um entsprechende Einträge ergänzen.
      • GE_filenames_and_vote_dates.csv und GE_municipality_district_codes_and_names.csv auf Basis der neuen Version des GE-Codebooks (Liste des variables et liste des votations.xlsx) aktualisieren.
        • GE_municipality_district_codes_and_names.csv: im 2017-09-24-Datensatz hat Carouge die zwei district_codes 00 und 01; das ist äusserst suspekt, da Aufteilungen normalerweise in aufsteigenden Zahlen (01 und 02) erfolgen! -> De Faveri fragen!
      • Unterstützung in i_voting_dataset_add_new_data.Rmd für separate kommunale Datensätze fertigstellen (Basis ist bereits gelegt).
    • An den folgenden Daten sind die foreigners living in Switzerland (sind in GE nur auf kommmunaler Ebene stimmberechtigt) in unseren Daten enthalten, sonst nicht:
      2010-11-28
      2011-05-15
      2011-11-27
      2013-06-09
      2013-09-22
      2013-11-24
      2015-04-19
      2015-05-10
      
      1. Abklären, ob die Daten damit bis zum 2013-11-24 vollständig sind.
      2. Die fehlenden AusländerInnen nachtragen (mit Sicherheit fehlen sie nach dem 2013-11-24).
  • Es scheint am 2011-11-27 die eidgenössische Wahl und am 2012-06-17 die kantonale Wahl zu fehlen. Einfach type etc. anpassen und gut ist?

  • Die kantonale und kommunale (Meyrin) Wahl vom 2011-05-15 fehlt bislang.

  • Evtl. bei Auslandschweizern in GE die Ausprägung "all" in municipality ersetzen durch "none" und i_voting_dataset_add_new_data.Rmd entsprechend anpassen. Vgl. I-Voting-Datensatz – REDACTEDs Fragen & Beobachtungen.md.

SG

TG

Beginnend mit dem Abstimmungstermin vom 23. September 2018 wird der Kanton Thurgau nach längerer Pause wieder E-Voting-Versuche für Auslandschweizer durchführen, basierend auf dem System der Post.

VD

ZH

Allgemein

Siehe das Faktenblatt – Vote électronique vom 05.04.2017 für weitere Informationen über die E-Voting-Ausweitungspläne der einzelnen Kantone.

Ausstehende Datenaktualisierungen

Allgemein

  • 2016-09-25

    • GE: Einträge sind noch provisorisch...
  • 2016-11-27

    • GE: Einträge sind noch provisorisch...
  • 2017-02-12

    • GE: Einträge sind noch provisorisch...
  • 2017-04-02

    • NE: Daten fehlen (bislang nicht angefordert; kantonale Wahlen)
      • gleich noch fragen, ob an den folgenden Daten tatsächlich kein E-Voting zur Verfügung stand (es existieren keine entsprechenden Seiten unter https://www.ne.ch/autorites/CHAN/CHAN/elections-votations/stat/Pages/*)
        • 2006-02-12 (kommunale Abstimmung)
        • 2006-04-02 (kommunale Abstimmung)
        • 2006-06-11 (kommunale Wahlen)
        • 2006-08-27 (kommunale Wahl)
        • 2006-10-29 (kommunale Abstimmung)
        • 2007-02-04 (kommunale Wahl)
        • 2007-07-01 (kommunale Abstimmung)
        • 2007-09-23 (kommunale Abstimmungen & Wahlen)
        • 2007-12-09 (kommunale Abstimmungen)
        • 2008-09-28 (kommunale Abstimmungen)
        • 2009-06-21 (kommunale Abstimmung)
        • 2010-04-18 (kommunale Abstimmung)
        • 2010-06-20 (kommunale Abstimmung)
        • 2011-05-15 (kommunale Abstimmungen)
        • 2012-08-26 (kommunale Abstimmung)
        • 2012-10-14 (kantonale Wahl)
        • 2015-04-19 (kommunale Wahl)
        • 2016-04-03 (kommunale Abstimmung)
        • 2016-04-24 (kommunale Abstimmung)
        • 2016-10-23 (kommunale Wahlen)
        • 2017-06-18 (kommunale Wahl)
  • 2017-05-21

    • GE: Einträge sind noch provisorisch...
  • 2017-09-24

    • GE: Einträge sind noch provisorisch...
    • FR
      • beginnend mit dem 2017-09-24 können auch Inlandschweizer der Gemeinde Treyvaux e-voten; momentan haben wir nur einen Aggregatseintrag: ist bei diesem is_preregistration_required nach wie vor FALSE?
      • zudem gab es Wahlen in der Gemeinde Montagny; konnte dort e-votet werden? falls ja, Eintrag anpassen!
  • 2018-03-04

    • SG: Ausland-CH
    • GE
  • 2018-06-10

    • SG: Ausland-CH
    • alle
  • 2018-09-23

    • SG: Ausland-CH
    • alle
  • 2018-11-25

    • SG: Ausland-CH
    • alle
  • 2019-02-10

    • SG: Ausland-CH
    • alle
  • 2019-03-10 (Ständeratsersatzwahl in SG)

    • SG: Widnau
  • 2019-05-19

    • alle

Hilfsdatensätze

  • cantonal_auxiliary_dataset
    • komplettierte Kantone:
      • NE
  • municipal_auxiliary_dataset
    • komplettierte Kantone:
      • NE

Datenvalidierung

  • swissevote um Funktion ergänzen zur Überprüfung, ob Daten vollständig sind. Snippet:

    googlesheet_data$data_auxiliary_cantonal %>%
      dplyr::filter(is_e_voting_available) %>%
      dplyr::group_by(canton) %>% dplyr::summarise(date,
                                                   .groups = "drop") %>%
      dplyr::union(googlesheet_data$data_auxiliary_municipal %>%
                       dplyr::filter(is_e_voting_available) %>%
                     dplyr::group_by(canton) %>%
                     dplyr::summarise(date,
                                      .groups = "drop")) %>%
      dplyr::setdiff(googlesheet_data$data_main %>%
                       dplyr::group_by(canton) %>%
                       dplyr::summarise(date, .groups =
                                          "drop"))
  • Ausstehende Überprüfung, ob unsere Zahlen korrekt e_voting_electorate zugeordnet wurden (statt electorate):

    • GE für die folgenden nicht-föderalen Abstimmungstermine (mangels BK-Zahlen kann kein Vergleich angestellt werden; angesichts der Höhe der Zahlen scheint es aber äusserst wahrscheinlich, dass die Zahlen e_voting_electorate und nicht electorate wiedergeben):
      2003-01-19
      2003-11-30
      2004-04-18
      2004-06-13
      2004-10-24
      2005-04-24
      2011-05-15
      2011-11-27
      2012-10-14
      2012-11-04
      2015-04-19
      2015-05-10
      
    • NE für die folgenden nicht-föderalen Abstimmungstermine (mangels BK-Zahlen kann kein Vergleich angestellt werden; angesichts der Höhe der Zahlen scheint es aber äusserst wahrscheinlich, dass die Zahlen electorate und nicht e_voting_electorate wiedergeben; sie wurden daher mittlerweile electorate zugeordnet):
      2005-10-30
      2010-01-17
      2011-06-19
      2011-11-27
      2013-04-14
      2013-04-28
      2013-05-19
      
    • ZH für die folgenden nicht-föderalen Abstimmungstermine (mangels BK-Zahlen kann kein Vergleich angestellt werden; angesichts der Höhe der Zahlen scheint es aber äusserst wahrscheinlich, dass die Zahlen e_voting_electorate und nicht electorate wiedergeben):
      2005-10-30
      2006-04-02
      2007-11-25
      2008-09-28
      2010-04-25
      2010-06-13
      2011-09-04
      2011-11-27
      
  • Zusätzliche Validitätschecks

    • Einsatz der folgenden R-Pakete prüfen:
    • main_dataset
      • is_entire_group_in_all_votes je nach Kanton checken
        • Tabelle cantonal_characteristics dürfte hilfreich sein!
      • checken, dass level nie municipal einschliesst, wenn municipality == "all" | is.na(municipality)
      • überprüfen, ob level bei allen Einträgen konsistent ist (anhand von allowed_group_* in Tabelle cantonal_characteristics)
      • Vollständigkeit folgender Variablen checken:
        group
        date
        system
        level
        type
        nr_of_..._referendums combined_level und combined_elected_power (both are combinations of two seven-code variables) has_overlapping_aggregate und is_overlapping_aggregate
    • data_auxiliary_cantonal
      • GE: analog zu NE, wenn möglich ...
    • data_auxiliary_municipal
      • GE: analog zu NE, wenn möglich ...
  • In den meisten Kantonen dürfen AuslandschweizerInnen nicht an den Ständeratswahlen teilnehmen (da diese kantonalem Recht unterstehen und somit gewissermassen als kantonale Wahlen angesehen werden). In denjenigen Fällen, in denen die AuslandschweizerInnen aber teilnehmen dürfen, wäre es daher wünschenswert unter comments darauf hinzREDACTEDisen. Es sollte nun automatisch überprüft werden, ob dieser Kommentar jeweils gemacht wurde!

Dokumentation

  • README.md

    • auf Projektwebseite verweisen.
    • interessante Infos etc. von Bundeskanzlei erwähnen/verlinken.
    • evtl. kurzen Crashkurs zu Git und GitLab zusammenstellen (bzw. gute Quellen verlinken)
  • UPDATE_PROCEDURE.md

    • um Hinweise zur Aktualisierung von GE_filenames_and_vote_dates.csv und GE_municipality_district_codes_and_names.csv auf Basis neuer Versionen des GE-Codebooks (Liste des variables et liste des votations.xlsx) ergänzen.
      • Alternative: Die notwendigen Daten (Tabellenblätter Liste scrutins und Annexe 3) direkt aus Liste des variables et liste des votations.xlsx einlesen, sodass keine separaten Subset-Tabellen mehr notwendig sind (Liste des variables et liste des votations.xlsx müsste natürlich dennoch immer durch neuste Version ersetzt werden). Dies setzt allerdings voraus, dass das Format dieser beiden Tabellenblätter aus Liste des variables et liste des votations.xlsx über die Zeit stabil bleibt (was ich bezweifle; zudem hat es Fehler im "Original" (bspw der district_code von Collonge-Bellerive seit 2013), für welche jeweils Workarounds gefunden werden müssten)!
    • um Hinweise zur Aktualisierung von cantonal_characteristics ergänzen
      • Eine Übersicht, ob AuslandschweizerInnen in Ständeratswahlen stimmberechtigt sind findet sich hier.
    • um Hinweise zur Aktualisierung von Overview of political bodies by canton ergänzen
    • Um Hinweise ergänzen, dass Angaben über Zahl, Ebene etc. der Referenden/Wahlen vielfach automatisch gescraped werden können. Oder noch besser: Dort, wo Scraping gegeben, dass gleich mittels passendem Code in den Aktualisierungsablauf integrieren...
  • COVERAGE.md erstellen.

    • Dazu nötigen R-Code entweder in i_voting_dataset_validation.Rmd integrieren oder gleich ein eigenes Skript erstellen
    • Darin zu erfassen (möglichst automatisiert):
      • vollständig erfasste Abstimmungstermine
      • fehlende Daten (NA) --> die rot markierten Zellen im Google Sheet
      • Heatmap mit Einträgen pro Datum und Kanton
  • Markdown-Dokumente automatisch in PDFs umwandeln

Analyse

  • i_voting_dataset_analysis.Rmd aufteilen in i_voting_dataset_analysis_preparation.Rmd und sowie separate Skripte je "Analysegegenstand" (welche i_voting_dataset_analysis_preparation.Rmd sourcen); i_voting_dataset_analysis_template.Rmd daran anpassen

Grafiken

  • Grafiken für REDACTED machen

    • e_votes_share über die Zeit plotten nach group (Inländer vs. Auslandschweizer) und canton
      • municipality-Scatterplot für die Kantone, bei denen es möglich ist (GE, NE, ZH)
  • Weitere Grafiken erstellen / ausbauen

    • Aggregatseinträge in Heatmap entries_per_canton_and_date berücksichtigen
    • Grafik scatterplot_e_votes_share verbessern
      • feinere Unterteilung der Achsen
      • Regressionslinie toggable machen
      • Dropdown-Menü mit mehreren Arten von Regressionslinien bspw. LOESS vs. linear oder nach canton oder group etc. (wobei da evtl. small multiples besser wären)

Entwicklung des elektronischen Stimmkanals in den Kantonen

Ziel

Update des Berichts Entwicklung des elektronischen Stimmkanals in den Kantonen Genf, Neuenburg und Zürich (A1F1). Erklärung der stark unterschiedlichen Nutzungsraten zwischen Gemeinden mittels eines Modells.

Vorgehen
  • Übersicht machen nach level, vgl. heat_map_entries_per_canton_and_date
  • Alle nötigen Variablen generieren (vgl. A1F1, S. 23ff)
    • checken, ob evtl. grundlegende "Updates" notwendig scheinen, bspw. "Grosser Unterbruch (2005- 2008)" -> gabs danach auch "grosse" Unterbrüche?
    • Dummy für Umstellung von GE auf preregistration
    • Aus Micha-Datensatz
  • Die Variablen standardisieren (bzw. "studentisieren") ("z-transformation"). Dazu: data_main %>% mutate_at(.vars = vars(...), .funs = . %>% scale() %>% as.vector())
  • I-Voting-Nutzungsraten visualisieren (interaktiv und als statische Grafiken für Publikation exportieren)
    • I-Voting-Nutzungsraten je Gemeinde (evtl. separate Grafik je Kanton)
    • Aggregierte I-Voting-Nutzungsraten je Kanton; evtl. Streuung auch visualisieren, also Abweichungen der einzelnen Gemeinden gegenüber Aggregat
  • "Versuchsübersicht" je Gemeinde visualisieren analog zu A1F1, Anhang B
    • Problem: Wir haben bislang gar keine vollständige Erfassung aller nicht-E-Voting Abstimmungen auf Gemeindeebene!; Vermutung: Grafiken in Anhang B sind unvollständig (Stata-Code checken!)
    • Grafik direkt in i_voting_dataset_analysis_basic.Rmd erstellen
    • Umsetzung:
      • als Start- und Enddatum je Kanton immer min und max von data_auxiliary_cantonal nehmen
      • schauen, ob innerhalb obiger Periode "vergessene" Daten in data_auxiliary_federal oder data_auxiliary_municipal vorhanden
  • Modell spezifizieren, coden und laufen lassen
  • Resultate tabellarisch exportieren
  • Resultate visualisieren, z.b. auch als dotplot (vgl. A1F1, Abb. 5)
  • relevante Missings systematisch auflisten und darauf hinweisen
Anmerkungen
  • Komischer Effekt: Einwohnerzahl; Effekte sehr unterschiedlich je Kanton
    • Interessant wäre, den dahinter stehenden Grund zu finden

Diverses

  • Knitted .Rmd-Dateien als Webseiten ausliefern 🤘

    • Separates Repo für GitLab Pages einrichten (bspw. knitted nennen).
    • Als Group Page konfigurieren.
    • knitr caching in allen .Rmd-Skripten einrichten
    • R-Markdown- oder Blogdown-Webseite aufsetzen.
    • Knitted HTML-Dateien aller relevanten Inhalte (Grafiken, Codebook, Readme etc.) einbauen
      • Abklären, ob wir den Datensatz auf "öffentlich" (Lesezugriff) schalten wollen oder nicht. Falls nicht, sollte die Dokumentation aussen vor gelassen werden, da sie ohne die Daten kaum Sinn macht...
      • Nicht vergessen, gemeinsame Abhängigkeiten zu konfigurieren).
      • Auch bei den Plotly-Graphs die Abhängigkeiten teilen (mittels dem libdir-Parameter von htmlwidgets::saveWidget(); der Zukunftstauglichkeit halber idealerweise die aktuelle Plotly-Version an den Verzeichnisnamen anhängen).
    • Die mittels Pandoc aus den Markdown-Dateien generierten PDFs an geeigneter Stelle verlinken ("als PDF herunterladen") 😉
  • R-Markdown-Output-Formate in separater Datei _output.yml definieren, sodass sich ihn alle .Rmd-Dateien teilen.

  • Google-Sheets-Tabelle cantonal_characteristics vervollständigen

  • Kapitel 5.1 zu Missings im Codebook überdenken. Momentane Aussage

    Missings are coded as N/A.

    stimmt so nicht ganz, denn teilweise sind sie nicht explizit als N/A codiert, sondern schlicht leere Werte. Am einfachsten wäre, das durchgehend so zu handhaben und auf N/A zu verzichten. Dafür müsste die Google-Sheets-Tabelle main_dataset einmalig bereinigt werden.

  • Abchecken, ob die mit i_voting_dataset_add_new_data.Rmd zu verarbeitenden Datensätze im Google Drive auch mittels des R-Pakets googledrive eingelesen werden können. Das würde ein lokales Mounten des Google Drives überflüssig machen!

Nächste Schritte

  • Zwei separate level-Variablen referendum_level und election_level schaffen und die Daten anpassen. Achtung: Systematisch vorgehen!

    • Codebook anpassen!
  • election_procedure und elected_power in den *_auxiliary_datasets umbenennen (analog zu Punkt 4) und i_voting_dataset_add_Geneva_data.Rmd sowie i_voting_dataset_add_Neuchatel_data.Rmd als deprecated markieren oder gleich entfernen.

  • Jeweils drei separate Variablen schaffen à la nr_of_federal_e_issues und nr_of_cantonal_e_issues sowie total_nr_of_e_issues (autogenerated). Achtung: Systematisch vorgehen!

    • Codebook anpassen!
  • Jeweils drei separate Variablen schaffen à la federal_election_procedure und federal_elected_power und die Daten anpassen. Achtung: Systematisch vorgehen!

    • Codebook anpassen!
  • i_voting_dataset_add_new_data.Rmd fertigstellen.

  • Leitfaden anpassen.

  • Ausprägung 0 = "none" für alle Variablen hinzufügen, in denen dies bislang durch NA ausgedrückt wurde

    • Codebook anpassen!
    • Google Sheet anpassen!
    • i_voting_dataset_add_new_data.Rmd anpassen!
  • alle CSV-Dateien nach UTF-8, kommasepariert transformieren 🤘 und i_voting_dataset_add_new_data.Rmd anpassen

  • is_e_voting_available aus municipal_auxiliary_dataset in i_voting_dataset_add_new_data.Rmd berücksichtigen!

  • GE_municipality_district_codes_and_names.csv abchecken: Bis auf Lancy sind alle void_since-Einträge umgekehrt wie diejenigen im GE-Codebook. Wer liegt falsch? Alles i.O., war ein Missverständnis!

  • i_voting_dataset_add_new_data.Rmd erweitern, sodass automatisch ermittelt wird, ob data_new bestehende Einträge ersetzt und falls ja, welche (Google-Sheets-Zeilennummern).

  • Die group-Ausprägungen mit dem Zusatz from selected municipalities entfernen. Die darin enthaltene Info ist redundant (bereits in municipality drin) und verkompliziert die Datenverarbeitung bloss (bspw. der Google-Sheet-Tabelle cantonal_characteristics)

  • Zuerst abklären:

    • in welchen Fällen, diese "Spezialgruppen" bislang zugeordnet wurden. Bspw. werden GE-Einträge vor 2016-11-27 nicht diesen "Spezialgruppen" zugeordnet (was aber intuitiv logisch wäre)! keine offensichtlichen Besonderheiten
    • welche und wieviele Einträge betroffen sind. 17
    • ob überhaupt immer konsequent von diesen "Spezialgruppen" Gebrauch gemacht wurde. offensichtlich nicht
  • Dann alles Relevante ändern:

    • alle betroffenen group codes ändern im Google Sheet main_dataset
    • Codebook ändern
    • Google Sheet cantonal_characteristics anpassen
    • Spaltenformeln anpassen im Google Sheet main_dataset
    • Funktionen und alles andere anpassen in R-Skripten
  • Variable electorate2 abschaffen. Das Codebook beschreibt die Variable wie folgt:

    This is a special variable only relevant for Zurich. It gives the total electorate consisting of Swiss living in Switzerland and Swiss living abroad, even though Swiss abroad were not allowed to i-vote.

    • Alle Einträge, die einen Wert unter electorate2 aufweisen, haben gleichzeitig NA in electorate. Die Zahlen können also ohne Weiteres "verschoben" werden.
    • Die Variable is_matched_group enthält bereits die Info, ob die Zahlen match exactly the denoted unit of analysis (sprich die group). Unter matched_group_notes finden sich auch jeweils Angaben zu entsprechenden Inkonsistenzen (bei den meisten Einträgen, die einen Wert unter electorate2 aufweisen, der Fall).
    • Vorgehen:
      • Werte in electorate2 nach electorate verschieben
      • column_types anpassen in Funktion read_in_googlesheet in i_voting_dataset_shared_code.Rmd
      • Sicherstellen dass alle R-Skripte an allen weiteren relevanten Stellen angepasst wurden
  • Variable votes aufsplitten in die zwei Variablen vote_count_e_voting_electorate und vote_count_total, denn zumindest in den NE-Daten ist es immer vote_count_total! Die meisten anderen Zahlen inkl. jenen aus den BK-PDFs sollten hingegen vote_count_e_voting_electorate sein.

  • Vorgehen:

    • im Google Sheet: votes in vote_count_e_voting_electorate umbenennen; allfällig betroffene Formeln anpassen
    • im Google Sheet: neue Variable vote_count_total erstellen; diejenigen Werte, welche nicht vote_count_e_voting_electorate, sondern vote_count_total wiedergeben, verschieben
      • Betroffene Kantone
        • NE, non-aggregate
        • GE, non-aggregate ab 2016-11-27
    • alle R-Skripte an allen betroffenen Stellen anpassen (col-types beim einlesen, ...)
    • Codebook anpassen
  • Auch die Variablen ballot_votes und postal_votes aufsplitten wie oben -> dasselbe Problem!

  • Vorgehen:

    • im Google Sheet: ballot/postal_votes in ballot/postal_votes_e_voting_electorate umbenennen; allfällig betroffene Formeln anpassen
    • im Google Sheet: neue Variable ballot/postal_votes_total erstellen; diejenigen Werte, welche nicht ballot/postal_votes_e_voting_electorate, sondern total_ballot/postal_votes_total wiedergeben, verschieben
    • alle R-Skripte an allen betroffenen Stellen anpassen (col-types beim einlesen, ...)
    • Codebook anpassen
  • Der Konsistenz halber – und um etwaigen Missverständnissen vorzubeugen – die Variable electorate umbenennen in total_electorate

  • Vorgehen:

    • umbenennen im Google Sheet und abchecken, dass alle Formeln etc. weiterhin funktionieren
    • umbenennen im CODEBOOK
    • alle R-Skripte anpassen, wo nötig
  • Erfassung von Ständeratswahlen klären

  • Die Zuordnung als federal macht Probleme, bspw. bei 2. Ständerats-Wahlgängen, die nur in einzelnen Kantonen stattfinden, aber in federal_auxiliary_dataset erfasst sind (und damit per Definition für alle Kantone gelten). Wenn am selben Datum in einem anderen Kanton Abstimmungen stattfinden, produziert das Skript (logischerweise) falsche Resultate (momentan der Fall bei GE am 2011-11-27)!

  • Abhilfe: Neue Variable limited_to_cantons in federal_auxiliary_dataset! 🎉

  • in UPDATE_PROCEDURE.md aufnehmen

  • in i_voting_dataset_add_new_data.Rmd umsetzen (unter Determine type, Determine election_level und Determine is_entire_group_in_all_votes))

  • Die Variablen is_preregistration_required und is_wassenaar_corrected von cantonal_auxiliary_dataset nach cantonal_characteristics "verschieben" und alle R-Skripte entsprechend anpassen.

  • Mail an Paolo De Faveri schreiben (auf franz. 😑; zuerst per E-Mail, evtl. Telefongespräch "anbieten") wegen:

    • Am 2017-05-21 gabs in der GE-Gemeinde Troinex eine Wahl: E-Voting?
    • Es fehlen uns die kommunalen Rohdatensätze vom 2016-09-25 (Meyrin und Vandoeuvres; siehe GE_missing_files.csv) sowie 2017-05-21 (Onex).
    • Im föderal-kantonalen Rohdatensatz vom 2017-09-24 (cv201730) finden sich zwei Einträge mit der undokumentierten Kombination aus municipality_code_2_digits == "08" (votcom; 08 entspricht Carouge) und district_code == "01" (votarr)! Das scheint ein Fehler.
    • Ich hätte gerne die aktualisierte Fassung des Codebooks (Liste des variables et liste des votations.xlsx)! Bei der letzten Anfrage (Mail vom 14. März 2018 mit Anhang descr_vota.xlsx) haben wir nur die Tabelle Descriptifs fichiers erhalten, es sollten allerdings ~10 Tabellen sein! Am besten das bisherige Codebook als "Beispiel" anhängen, damit klar ist, was gemeint ist sowie gleich auf das Mail vom 14. März 2018 antworten.
    • Der Daten der Abstimmung vom 2018-03-04
  • De Faveris Antwort beantworten

    • zudem fragen:
      • bez. Auslandschweizer in den Stimmregisterdaten: Diese weisen die Ausprägung 46 in den Gemeinde-Variablen auf (VOTCOM, CCOM, DOMICOM), allerdings erst ab dem 2015-06-14:

        (1) A partir du scrutin du 14.6.2015 (fichier v201540.sas7bdat).

        Sind die Auslandschweizer in den vorhergehenden Daten schlicht nicht enthalten (weshalb nicht?)? Falls doch, wie lassen sie sich identifizieren? Vor 2015-06-14 existieren offenbar jeweils separate Files nur für die Auslandschweizer (enden auf *_46.csv)

      • bez. Preregistration seit dem 2016-11-27: Müssen sich auch Auslandschweizer speziell fürs E-Voting registrieren? Oder sind Sie mit dem Stimmregistereintrag automatisch auch fürs E-Voting registriert (Zahlen in den BK-PDFs deuten stark darauf hin!)? Auslandschweizer sind automatisch registriert!, siehe hier

      • generell: der erste Genfer E-Voting-Versuch war am 2003-01-19 in Anières, richtig? Davor gab es also noch keinerlei Termine mit E-Voting?

      • generell: was haben diejenigen Einträge in den Rohdaten zu bedeuten, welche nur auf kommunaler Ebene stimmberechtigt sind (QUALCOM = 1 & QUALCAN = 0 & QUALFED = 0), aber keine Ausländer sind (CNAT <= 26)? In den kommunalen Rohdaten vom 2016-11-27 (cv201640_21) sind dies bspw. 256 Einträge! Streng genommen müsste diese Kombo unmöglich sein...

      • bez. kommunaler Abstimmung in Carouge vom 2009-06-21: Ist es so, dass kein E-Voting verfügbar war (wir haben die zugehörige Datei nicht)?

      • Es fehlen uns noch die Dateien zu folgenden kommunalen Abstimmungen, an denen jeweils E-Voting verfügbar war:

        • Anières vom 2003-01-19
        • Cologny vom 2003-11-30
        • Carouge vom 2004-04-18
        • Meyrin vom 2004-06-13
        • Vandoeuvres vom 2004-10-24.
  • Daten-Schema überarbeiten

    • Variable municipality_code_alt restlos entfernen.
    • Variable district umbenennen: Im Falle von GE und ZH enthält sie die "Subgemeinde", also eine geografische Einheit unterhalb der municipality, sonst ist sie leer -> der Name district (=Bezirk) ist daher kontraintuitiv!
    • Für alle Variablen, die sich schlicht aus den vorhandenen Daten ableiten lassen (*_share etc.) passende Funktionen zum R-Paket swissevote hinzufügen (sodass sie ad-hoc erzeigt werden können) und die Variablen restlos entfernen.
    • Die numerischen *_code-Variablen entfernen und durch ordentliche factors ersetzen (die *_code_name Variablen). -> ACHTUNG: Gibt wohl ziemlich Arbeit!
  • i_voting_dataset_add_new_data.Rmd testen (Resultate mit bereits vorhandenen Einträgen vergleichen und auf Plausibilität prüfen).

    • BE testen
    • GE testen
      • fix unknown municipality in 2014-09-28
      • klären, weshalb an folgenden Daten die Auslandschweizer fehlen:
        2009-09-27
        2009-11-29
        2010-03-07
        2010-09-26
        2010-11-28
        2011-02-13
        2011-11-27
        2012-03-11
        2012-06-17
        2012-09-23
        2012-10-14
        2012-11-04
        2012-11-25
        2013-03-03
        2013-06-09
        2013-09-22
        2013-11-24
        2014-02-09
        2014-05-18
        2014-09-28
        2014-11-30
        2015-03-08
        höchstwahrscheinlich fehlen sie, weil Auslandschweizer auf kommunaler Ebene nicht stimmberechtigt sind und ihre Stimmen erst nach dem 2015-03-08 per Gemeinde erfasst werden; Tatsache ist: sie fehlen auch in den Rohdaten
        • i_voting_dataset_add_new_data.Rmd erweitern, sodass die Auslandschweizer-Zahlen den OCSTAT-Excel-Tabellen entnommen werden.
      • klären, weshalb an folgenden Daten die foreigners living in Switzerland fehlen: 2011-11-27, 2013-06-09, 2013-09-22, 2013-11-24 sie fehlen, weil sie in separaten Datensätzen enthalten sind (und wir diese noch nicht haben)
      • check strange Onex double entry @ 2010-09-26
      • check 2015-03-08
      • die Ermittlung von is_foreigner in Funktion read_raw_geneva_dataset kontrollieren!!! Scheint nicht zum gewünschten Resultat zu führen (haben evtl. auch die Auslandschweizer eine cnat > 26? das würde erklären, weshalb wir scheinbar keine Auslandschweizer in den neueren Datensätzen finden...
        • update: die Zahlen scheinen auch mit den BK-Auslandschweizer-Zahlen übereinzustimmen (zumindest am 2017-05-21)!) --> testen mit den 2017-05-21-Daten!
      • check superstrange script results @ 2011-11-27
        • falsche Einträge haben alle group == 4 & type == NA & *_level == 0!
        • zudem: type und weitere Variablen stimmen nicht, da fälschlicherweise der 2. SR-Wahlgang von Zürich aus federal_auxiliary_dataset inkludiert wurde.
      • check why the group == 4 entry @ 2015-06-14, 2016-02-28, 2016-06-05 has type == NA & _level == 0
      • check why elections from 2011-05-15, 2015-04-19, 2015-05-10, 2015-10-18 and 2015-11-08 are missing (elections from 2011-11-27 and 2012-11-04 don't seem to be missing)
      • Resultate (electorate) mit den Zahlen aus GE_filenames_and_vote_dates.csv vergleichen
      • Resultate mit den Zahlen aus den OCSTAT-Excel-Tabellen vergleichen
      • double-check is.na(country_canton_code) filtering; evtl. (stattdessen) typelec sowie ìs_eligible_* (mit)einbeziehen; Ziel: möglichst dieselben Zahlen wie bisherige Einträge (bzw. OCSTAT-Zahlen)!
      • double-check votcorr == "A" filtering
      • problematic_dates fixen, vgl. I-Voting-Datensatz – REDACTEDs Fragen & Beobachtungen.md
    • NE testen
  • Variablen-Reihenfolge in main_dataset überdenken/anpassen

    • in main_dataset
    • im Codebook
    • in allen R-Skripten
  • Parameterzahl reduzieren in den ganzen determine_*()-Funktionen in i_voting_dataset_add_new_data.Rmd

  • Verbleibende Validation-Checks erstellen, siehe oben.

    • Die cantonal_election_procedure_*-Einträge aus der Tabelle cantonal_characteristics zur Datenvalidierung in i_voting_dataset_validation.Rmd nutzen
  • In i_voting_dataset_analysis.Rmd nach dem Einlesen der Daten die Variablen vom Typ integer nach factor (mit entsprechenden Labels) umwandeln, wo sinnvoll (u. a. für die Erstellung von Grafiken etc. nützlich).

  • In i_voting_dataset_add_new_data.Rmd den BFS-Gemeindestand einlesen und die Daten automatisch um Bezirk und Bezirksnummer ergänzen (momentan ist district nur für (einen Teil der) Einträge des Kantons Genf gesetzt)

    • Den jeweils neusten BFS-Gemeindestand einlesen, entweder über .xls-Datei (Problem: Kein Direktlink vorhanden; mögliche Alternative?) oder via Web Services R-Paket swissmuni benutzen!
    • main_data mit BFS-Gemeindestand via municipality_code joinen, sprich main_data um district (bestehende Variable überschreiben) und district_code (neue Variable) ergänzen
  • overlapping aggregates direkt in i_voting_dataset_add_new_data.Rmd generieren

    • in cantonal_auxiliary_dataset 3 neue Spalten overlapping_aggregate_electorate, overlapping_aggregate_vote_count und overlapping_aggregate_e_votes erstellen und mit bisherigen Werten befüllen. Code:
      data_main %>%
        filter(is_overlapping_aggregate) %>%
        select(canton, date, e_voting_electorate, vote_count_e_voting_electorate, e_votes) %>%
        readr::write_csv(path = "/home/REDACTED/Schreibtisch/temp.csv")
      
    • allen R-Code an neues Schema von data_auxiliary_cantonal anpassen
    • generate_overlapping_aggregate() fertigstellen
      • die Spalten *__electorate und e_votes interaktiv befüllen (via get_user_input())
      • den Rest automatisch befüllen
    • generate_overlapping_aggregate() beim Hinzufügen neuer Daten in create_geneva_data() und create_neuchatel_data() nutzen 🤘
    • check e_voting_electorate sums automatically against the values from the Federal Chancellery; print warning if they differ!
  • NE: in i_voting_dataset_add_new_data.Rmd direkt fehlende Einträge in den auxiliary datasets generieren aufbauend auf get_neuchatel_cantonal_vote_dates() und get_neuchatel_municipal_vote_dates() 🤘

    • zuerst Overview of political bodies by canton aus UPDATE_PROCEDURE.md in cantonal_characteristics aufnehmen
    • generate_neuchatel_municipal_auxiliary_data() und generate_neuchatel_cantonal_auxiliary_data() fertigstellen
    • Code anpassen, sodass (bei NE) nicht direkt abgebrochen wird, wenn date nicht vorhanden, sondern eben auxiliary datasets ergänzt werden, wenn möglich
  • Die Variable municipality_code_alt taugt in der gegenwärtigen Form herzlich wenig, zumal sie bloss den BFS-Code einer einzigen ehemaligen Gemeinde von mehreren auflistet! Vgl. auch Notizen dazu in I-Voting-Datensatz – REDACTEDs Fragen & Beobachtungen.md. Deshalb idealerweise: In i_voting_dataset_add_new_data.Rmd die Gemeindefusionen via Webservice GDE-Mutationen (siehe oben) handhaben.

  • Auf das Gesamtelektorat bezogene Variablen (total_electorate etc.) für GE-Daten bevor is_preregistration_required == TRUE befüllen, wo möglich (i_voting_dataset_add_new_data.Rmd anpassen).

  • Missings vereinheitlichen, siehe oben.

  • Weitere Grafiken in i_voting_dataset_analysis.Rmd erstellen/ausbauen, siehe oben.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment