top of page

Datenanalyse Praxis - Kommunalwahl 2020

Aktualisiert: 10. Dez. 2020

Am 13. September 2020 finden in Nordrhein-Westfalen die Kommunalwahlen statt. Wahlen und Datenanalyse sowie Statistiken gehörten schon immer zusammen, egal ob Prognosen oder Rückschlüsse nach der Wahl, vieles wird analysiert.

Auch wir haben Daten zu den Kandidatinnen und Kandidaten für den Düsseldorfer Stadtrat analysiert und statistische Informationen visualisiert. Unsere kleine Analyse soll einen Einblick in die Datenanalyse mit der Programmiersprache Python und deren Modulen pandas und matplotlib geben.


Datenquelle

Da wir keine eigenen Daten über die Kandidatinnen und Kandidaten vorliegen haben, bedienen wir uns aus Quellen der Stadt Düsseldorf. Diese und viele andere Kommunen, Länder und Staaten, sowie öffentliche Einrichtungen stellen unter den Begriffen Open Government bzw. Open Data viele Daten bereit.

Auf der Webseite https://opendata.duesseldorf.de/dataset/ratswahl-2020-d%C3%BCsseldorf lassen sich die von uns genutzten Daten herunterladen (Download: 19.08.2020). Ähnliche Quellen gibt es auch bei vielen anderen Kommunen, wobei nicht alle die gleichen Daten bereitstellen. Es gibt jedoch immer die Möglichkeit Anfragen für Daten zu stellen.


Datenanalyse und Visualisierung

Mit Hilfe der Python Module pandas (Auswertung) und matplotlib (Grafische Darstellung) haben wir die vorliegenden Daten in einem Jupyter Notebook analysiert und grafisch ausgewertet.

Im folgenden Abschnitt geben wir einen Einblick in die Analyse und zeigen einen Teil der Ergebnisse. Das vollständige Jupyter Notebook findet ihr hier: Jupyter Notebook auf GitHub


Daten einlesen

Die genutzten Daten liegen als CSV-Datei vor und können relativ schnell mit Hilfe von pandas eingelesen werden:

df = pd.read_csv("./Daten/Rats_Kandidatinnen_und_Kandidaten _0.csv", delimiter=";")

Die CSV-Datei beinhaltet Informationen zu 703 Kandidatinnen und Kandidaten für den Stadtrat:

  • Vorname und Name

  • Akademischer Grad

  • Jahrgang / Geburtsjahr

  • Geburtsort

  • Beruf

  • Wohnort inkl. PLZ

  • Partei (inkl. Abkürzung)

  • Wahlbezirk

  • Reserveliste Platz

  • E-Mail Adresse

Verteilung der Kandidatinnen und Kandidaten

In einer ersten Analyse haben wir uns die Verteilung der Personen auf die 16 Parteien (inkl. einer Einzelbewerberin) angeguckt. Diese Verteilung haben wir mit matplotlib grafisch dargestellt.

Kreisdiagramm mit matplotlib

Zusätzliche kleine Analysen waren die Häufigkeiten von Nachnamen sowie die Verteilung akademischer Grade auf die Parteien.

df['Name'].value_counts()

Müller      6
Krüger      6
Möller      5
Becker      5
Schmidt     5

Alter der Kandidatinnen und Kandidaten

In einer weiteren Auswertung haben wir das durchschnittliche Alter der Kandidatinnen und Kandidaten unterteilt nach Parteien betrachtet. Da die Datenquelle nur das Geburtsjahr enthält und wir uns bereits in der zweiten Jahreshälfte befinden, gehen wir davon aus, dass alle Personen bereits in diesem Jahr Geburtstag hatten.

df['age'] = 2020 - df['Jahrgang']
df.groupby('Partei').mean()['age']
Balkendiagramm mit matplotlib

Geschlecht der Personen

Ebenso wie das komplette Geburtsdatum fehlt das Geschlecht in der vorliegenden Datenquelle. Was bei der Betrachtung der Daten auffällt, dass der Beruf größtenteils gendergerecht angegeben wurde. Hierüber könnte daher ein großer Teil der Personen einem Geschlecht zugeordnet werden. Leider gilt dies nicht für alle Einträge zum Beruf. Um den manuellen Aufwand gering zu halten, haben wir uns daher für einen Online-Dienst entschieden der für einen Vornamen ein Geschlecht zurückgibt. Auch hier gab es jedoch elf Vornamen die nicht zuzuordnen waren und manuell ergänzt werden mussten. Zusätzlich wurde die Korrektheit der Ergebnisse nur stichprobenartig kontrolliert.

Ein Zuordnung zum Geschlecht "divers", neben weiblich und männlich ist anhand der vorliegenden Informationen ebenfalls nicht möglich.


Mit Hilfe des ermittelten Geschlechts konnten wir anschließend eine Auswertung pro Partei vornehmen. Die Verteilung über alle Parteien hinweg betrug 40%:60% (Weiblich:Männlich).

# Absolute Zahlen
df.groupby(["Partei_kurz", "gender"])['Name'].count()

Partei_kurz                           gender
AfD                                   female    10
                                      male      30
Albertine Kallenbach - Alle sind Wir  female     1
CDU                                   female    25
                                      male      52
DIE LINKE                             female    19
                                      male      25
DSP                                   female     9
                                      male      17
Die PARTEI                            female    11
                                      male      30
FDP                                   female    14
                                      male      36
FREIE WÄHLER                          female    21
                                      male      24
GRÜNE                                 female    32
                                      male      31
Klimaliste Düsseldorf                 female    23
                                      male      18
PIRATEN                               female    13
                                      male      28
REP                                   female    14
                                      male      27
SPD                                   female    44
                                      male      62
TIERSCHUTZ hier!                      female    26
                                      male      15
Volt                                  female    13
                                      male      28
WIDERSTAND 2020 Wir für Düsseldorf    female     2
                                      male       3
Geschlecht der KandidatInnen zum Stadtrat

Die vorgestellten Analysen basieren auf einer kleinen und überschaubaren Datenquelle und dienen als Beispiel für die Möglichkeiten der Datenanalyse mit Python. Weitere Analysen und Rückschlüsse könnte man z.B. auch durch Einbeziehung von Daten andere Kommunen ziehen.

 

Disclaimer: Die Codingschule übernimmt kein Gewähr für die Korrektheit der Daten und Auswertungen.

bottom of page