________________________________________________________________________________
Inhalt....: Statistische Analyse der Bundestagswahl 2002
Kategorie.: Arbeitsblatt
Mathematik: Stochastik, Statistik
MuPAD.....: 3.0.0
Datum.....: 2002-10-02
Autoren...: Julia Faflek <faflek@mupad.de>
Funktionen: import::readdata, stats::sample, plot::Piechart3d, plot::Bars2d,
Funktionen: contains, plot::Boxplot
________________________________________________________________________________
Die Bundestagswahl 2002 unter der Lupe
Das vorliegende Notebook wurde unter Zurhilfenahme der Quelle
http://www.bundeswahlleiter.de/bundestagswahl2002/deutsch/ergebnis2002/csv/kerg.csv
erstellt. Die (unter dieser Adresse) erhältliche Datei wurde so verändert, dass sie mit MuPAD
eingelesen werden kann. Desweiteren wurden die Wahlergebnisse von 1998 weggelassen
und die Ergebnisse für die CDU und die CSU sowie die Ergebnisse für die kleineren Parteien
zusammengefasst. Die so entstandene Datei Bundestagswahl.csv liegt im gleichen Web-
Verzeichnis wie dieses MuPAD Arbeitsblatt zum Download bereit.
Um die Datei Bundestagswahl.csv in Tabellenform darzustellen, öffnen Sie diese einfach
mit mit einem Doppelklick unter Excel.
Die Analyse von Wahlergebnissen ist stets ein interessantes Thema. In diesem Arbeitsblatt
werden wir MuPAD - Funktionen kennenlernen, die uns helfen statistische Daten auszuwerten.
Wir wollen nun die Ergebnisse der Bundestagswahl 2002 genauer unter die
Lupe nehmen. Zunächst lesen wir eine .csv Datei ein, die von Microsoft Excel
erzeugt wurde. Dazu benutzen wir den Befehl
import::readdata ("Pfad", ";").
Da jeder Spalteneintrag in der ursprünglichen Tabelle nun in der .csv Datei
durch ein Semikolon getrennt ist, müssen wir dies als zweites Argument ein-
geben.
Unter "Pfad" geben Sie bitte den Pfad an, in dem Sie die zu importierende
Datei gespeichert haben.
Daten := import::readdata(NOTEBOOKPATH."Bundestagswahl.csv", ";"):
Die so eingelesene Tabelle wird als Liste von Listen dargestellt. Wobei jede
Liste eine Zeile der Tabelle repräsentiert. Um uns die Struktur dieser Tabelle
zu veranschaulichen, lassen wir die ersten 15 Zeilen mit Hilfe des Befehls
stats::sample in Tabellenform darstellen. Die Textbreite wird vorher auf
500 gesetzt, damit keine Zeilenumbrüche innerhalb der Tabelle vorgenommen
werden.
Alt := TEXTWIDTH:
TEXTWIDTH := 500:
Beispiel := [Daten[i] $ i = 1..15]:
stats::sample(Beispiel);
TEXTWIDTH := Alt:
"Vorlaeufiges Ergebnis der Bundestagswahl" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
"Wahlkreis" "Wahlberechtigte" "Waehler" "Ungueltige" "Ungueltige" "Gueltige" "Gueltige" "SPD" "SPD" "CDU/CSU" "CDU/CSU" "GRUENE" "GRUENE" "FDP" "FDP" "PDS" "PDS" "REP" "REP" "NPD" "NPD" "Schill" "Schill" "Uebrige" "Uebrige"
"" "" "" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen" "Erststimmen" "Zweitstimmen"
"Flensburg - Schleswig" "215880" "171860" "1641" "1621" "170219" "170239" "82847" "74938" "70363" "61998" "7440" "15543" "7052" "12688" "1930" "2200" "0" "247" "0" "322" "0" "1376" "587" "927"
"Nordfriesland - Dithmarschen-Nord" "181144" "144504" "1784" "1624" "142720" "142880" "62879" "60593" "63248" "57132" "6314" "9328" "7603" "11721" "1585" "1586" "0" "145" "0" "316" "0" "1358" "2182" "701"
"Steinburg - Dithmarschen-Sued" "175833" "140505" "1705" "1719" "138800" "138786" "63555" "57201" "59686" "53494" "5314" "10663" "8261" "12255" "1764" "1770" "0" "194" "0" "437" "0" "2189" "220" "583"
"Rendsburg-Eckernfoerde" "194746" "159458" "2225" "1746" "157233" "157712" "75615" "67218" "63593" "58860" "6817" "14189" "8029" "12665" "1591" "1839" "0" "172" "0" "372" "0" "1660" "1588" "737"
"Kiel" "194276" "152934" "1904" "1686" "151030" "151248" "81119" "66978" "46497" "42260" "10069" "22760" "9144" "12532" "3036" "3244" "0" "255" "906" "551" "0" "1960" "259" "708"
"Ploen - Neumuenster" "172613" "139042" "1972" "1481" "137070" "137561" "65669" "61285" "53164" "49260" "6930" "11682" "6240" "10548" "1405" "1680" "0" "207" "0" "416" "0" "1813" "3662" "670"
"Pinneberg" "223896" "187488" "2447" "1797" "185041" "185691" "85771" "77161" "75910" "65925" "10717" "18993" "9607" "15423" "1911" "2204" "0" "240" "0" "399" "0" "4412" "1125" "934"
"Segeberg - Stormarn-Nord" "227636" "188018" "2082" "1701" "185936" "186317" "86885" "76735" "75283" "68313" "9310" "17397" "11056" "16184" "1972" "2363" "0" "273" "0" "427" "0" "3689" "1430" "936"
"Ostholstein" "175040" "141396" "1921" "1394" "139475" "140002" "67698" "61582" "57184" "53551" "5464" "9977" "7288" "10962" "1286" "1333" "0" "176" "0" "388" "0" "1355" "555" "678"
"Herzogtum Lauenburg - Stormarn-Sued" "228351" "190579" "2171" "1829" "188408" "188750" "86859" "75474" "79706" "71197" "8734" "18448" "10031" "15412" "1922" "2171" "0" "270" "1156" "585" "0" "4477" "0" "716"
"Luebeck" "178897" "137470" "2240" "1847" "135230" "135623" "68774" "64654" "46791" "43064" "9199" "13404" "7289" "9028" "2566" "2183" "0" "263" "0" "482" "0" "1957" "611" "588"
"Schleswig-Holstein" "2168312" "1753254" "22092" "18445" "1731162" "1734809" "827671" "743819" "691425" "625054" "86308" "162384" "91600" "139418" "20968" "22573" "0" "2442" "2062" "4695" "0" "26246" "11128" "8178"
Wir können sehen, dass die Zeilen 4 bis 14 die Ergebnisse der einzelnen
Wahlkreise in Schleswig-Holstein beinhalten. In der 15. Zeile stehen die Wahl-
ergebnisse für das Bundesland Schleswig-Holstein. In gleicher Art und Weise
ist die Tabelle fortgeführt, wobei die letzte Zeile der Gesamttabelle die
Ergebnisse für das Bundesgebiet darstellt:
Bundesgebiet := Daten[nops(Daten)]
![]()
Mit diesen Ergebnissen wollen wir uns nun näher beschäftigen.
Als nächstes wollen wir eine sogenannte "Piechart" für die Vergabe der Erst-
und Zweitstimmen erstellen. Dazu betrachten wir die oben erstellte Beispiel-
tabelle und stellen fest, dass die Anzahl der Erststimmen für die SPD in der
8. Reihe, die für die CDU/CSU in der 10. Reihe usw. stehen. Analog gilt,
dass die Anzahl der Zweitstimmen für die SPD in der 9. Reihe repräsentiert
werden, die für die CDU/CSU in der 11. Reihe usw. bis zur Reihe 25.
Bundesgebiet_Erststimmen := [ Bundesgebiet[2*i]
$ i = 4..12 ]:
Bundesgebiet_Zweitstimmen := [ Bundesgebiet[2*i+1]
$ i = 4..12 ]:
plot(plot::Rotate3d(PI/96,
plot::Piechart3d(Bundesgebiet_Erststimmen,
Colors = [RGB::Red, RGB::Black, RGB::Green,
RGB::Yellow, RGB::VioletRed,
RGB::Brown, RGB::Grey,
RGB::LightGrey, RGB::White],
Header = "Erststimmen",
Titles = [1 = "SPD",
2 = "CDU/CSU",
3 = "GRÜNE",
4 = "FDP",
5 = "PDS",
6 = "REP",
7 = "NPD",
8 = "Schill",
9 = "Übrige"],
TextFont = [7]
)));
plot(plot::Rotate3d(PI/96,
plot::Piechart3d(Bundesgebiet_Zweitstimmen,
Colors = [RGB::Red, RGB::Black, RGB::Green,
RGB::Yellow, RGB::VioletRed,
RGB::Brown, RGB::Grey,
RGB::LightGrey, RGB::White],
Header = "Zweitstimmen",
Titles = [1 = "SPD",
2 = "CDU/CSU",
3 = "GRÜNE",
4 = "FDP",
5 = "PDS",
6 = "REP",
7 = "NPD",
8 = "Schill",
9 = "Übrige"],
TextFont = [7]
)));


Es läßt sich also kein wesentlicher Unterschied zwischen der Vergabe der Erst- und
der der Zweitstimmen feststellen.
Schauen wir uns nun das Wahlverhalten innerhalb der Bundesländer an.
Dazu müssen wir die entsprechenden Zeilen aus der Gesamttabelle heraussuchen.
Laender := [Schleswig_Holstein,
Mecklenburg_Vorpommern, Hamburg,
Niedersachsen, Bremen, Brandenburg,
Sachsen_Anhalt, Berlin,
Nordrhein_Westfalen, Sachsen,
Hessen, Thueringen, Rheinland_Pfalz,
Bayern, Baden_Wuerttemberg, Saarland];
![]()
Schleswig_Holstein := Daten[15]:
Mecklenburg_Vorpommern := Daten[23]:
Hamburg := Daten[30]:
Niedersachsen := Daten[59]:
Bremen := Daten[62]:
Brandenburg := Daten[73]:
Sachsen_Anhalt := Daten[84]:
Berlin := Daten[97]:
Nordrhein_Westfalen := Daten[162]:
Sachsen := Daten[180]:
Hessen := Daten[202]:
Thueringen := Daten[213]:
Rheinland_Pfalz := Daten[229]:
Bayern := Daten[274]:
Baden_Wuerttemberg := Daten[312]:
Saarland := Daten[317]:
Für jedes Bundesland müssen wir die absoluten Zahlen für die Zweitstimmen
relativieren, indem wir durch die Gesamtzahl der gültigen abgegebenen Zweit-
stimmen teilen. Diese stehen in der siebten Reihe. Die so erhaltenen Daten
stellen wir als Balkendiagramm dar. Damit wir unterhalb der Balken die zuge-
hörigen Parteien ablesen können, erstellen wir eine Liste, in der Marken von
der Form Stelle = "String" definiert werden. So werden Marken an der Stelle
t erzeugt mit der durch die Zeichenkette gegebene Beschriftung.
Marken := [0.5 = "SPD", 1.5 = "CDU/CSU", 2.5 = "GRÜNE",
3.5 = "FDP", 4.5 = "PDS", 5.5 = "REP",
6.5 = "NPD", 7.5 = "Schill", 8.5 = "Übrige"]:
for BL in Laender do
Zweitstimmen := [BL[2*i+1]/BL[7]*100 $ i = 4..12]:
plot(plot::Bars2d([Zweitstimmen],
Colors = [RGB::Red, RGB::Black, RGB::Green,
RGB::Yellow, RGB::VioletRed,
RGB::Brown, RGB::Grey,
RGB::LightGrey, RGB::White],
YGridVisible = TRUE,
Header = "Vergabe der Zweitstimmen in "
.expr2text(BL[1])),
XTicksAt = Marken,
XTicksNumber = None,
XTicksVisible = FALSE,
TicksLabelFont = [7])
end_for;
















Jetzt können wir schon genauere Unterschiede zwischen den Bundesländern
feststellen. Während die PDS in Bayern sehr schlecht abgeschnitten hat,
konnte sie in Mecklenburg-Vorpommern und Thüringen mehrere Stimmen
für sich gewinnen. Auch bei den beiden großen Volksparteien SPD und
CDU/CSU kann man eine Verteilung der Stimmen erkenne. Die CDU/CSU
muss zwar in den Ländern Bremen und Brandenburg ihre größten Misserfolge
hinnehmen, hat dafür aber in Rheinland-Pfalz, Bayern und Baden-Württemberg
die meisten Wähler für sich gewinnen können. So kann man große Unterschiede
im Wahlverhalten bzgl. der Bundesländer feststellen.
Die Betrachtung dieser Balkendiagramme führt zu der Frage, in welchem
Wahlkreis die jeweiligen Parteien ihren größten Erfolg feiern können.
Dazu wollen wir erst einmal die Parteien mit Zahlen identifizieren, und zwar mit
der Nummer der Spalte, die die für sie abgegebenen Zweitstimmen beinhaltet:
Parteien := ["SPD", "CDU/CSU", "GRÜNE", "FDP", "PDS",
"REP", "NPD", "Schill"]
![]()
Partei := proc(String)
begin
if String = "SPD" then return(9)
elif String = "CDU/CSU" then return(11)
elif String = "GRÜNE" then return(13)
elif String = "FDP" then return(15)
elif String = "PDS" then return(17)
elif String = "REP" then return(19)
elif String = "NPD" then return(21)
elif String = "Schill" then return(23)
end_if:
end_proc:
Diese Prozedur wird uns behilflich sein, den Wahlkreis mit dem höchsten
Prozentsatz für die jeweilige Partei zu ermitteln. Zunächst müssen wir wieder
die absoluten Stimmanzahlen durch die abgegebenen gültigen Stimmen teilen
und diese Daten dann nach ihrem Maximum durchsuchen.
Der Befehl contains(Liste, Maximum) liefert die Stelle zurück, an der das
Maximum steht. Wir wissen dann also in welcher Zeile sich das Maximum be-
findet und müssen nur den ersten Zeileneintrag zurückgeben. Denn dieser zeigt
uns den Wahlkreis an:
Wahlkreis := proc(daten, Name)
local Prozent, Prozentliste, Index;
begin
Zahl := Partei(Name);
Prozent := daten[i][Zahl]/daten[i][7]
$ i = 4..nops(Daten);
Prozentliste := [Prozent];
Index := contains(Prozentliste, max(Prozent));
print(Unquoted, "Die Partei " .Name.
" hat im Wahlkreis "
.expr2text(daten[Index][1]).
" ihr bestes Ergebnis von "
.expr2text(float(max(Prozent)*100)).
" Prozent erzielt.");
end_proc:
Folgende Aufrufe liefern uns das gewünschte Ergebnis:
TEXTWIDTH := 150:
for P in Parteien do
print(Wahlkreis(Daten, P))
end_for;
TEXTWIDTH := Alt:
Die Partei SPD hat im Wahlkreis "Hamburg-Wandsbek" ihr bestes Ergebnis von 61.70742442 Prozent erzielt.
Die Partei CDU/CSU hat im Wahlkreis "Deggendorf" ihr bestes Ergebnis von 72.83094812 Prozent erzielt.
Die Partei GRÜNE hat im Wahlkreis "Bruchsal - Schwetzingen" ihr bestes Ergebnis von 25.02681577 Prozent erzielt.
Die Partei FDP hat im Wahlkreis "Koeln III" ihr bestes Ergebnis von 12.41795886 Prozent erzielt.
Die Partei PDS hat im Wahlkreis "Berlin-Friedrichshain - Kreuzberg - Prenzlauer Berg-Ost" ihr bestes Ergebnis von 29.31281938 Prozent erzielt.
Die Partei REP hat im Wahlkreis "Dresden II - Meissen I" ihr bestes Ergebnis von 2.108092083 Prozent erzielt.
Die Partei NPD hat im Wahlkreis "Doebeln - Mittweida - Meissen II" ihr bestes Ergebnis von 2.25532167 Prozent erzielt.
Die Partei Schill hat im Wahlkreis "Hamburg-Eimsbuettel" ihr bestes Ergebnis von 5.469297437 Prozent erzielt.
Eine weitere interessante Fragestellung beschäftigt sich mit der Wahlbe-
teiligung. Wir wollen wissen, wo die Wahlbeteiligung am höchsten und wo
am niedrigsten war. Dazu müssen wir die Anzahl der Wähler durch die
Anzahl der Wahlberechtigten teilen. Die dazu benötigten Daten stehen in
der zweiten und dritten Spalte.
TEXTWIDTH := 100:
for BL in Laender do
Wahlbeteiligung[BL[1]] := float(BL[3]/BL[2]*100):
print(Unquoted, "In " .BL[1].
" liegt die Wahlbeteiligung bei "
.expr2text(Wahlbeteiligung[BL[1]]). " Prozent.");
end_for;
TEXTWIDTH := Alt:
In Schleswig-Holstein liegt die Wahlbeteiligung bei 80.85801305 Prozent.
In Mecklenburg-Vorpommern liegt die Wahlbeteiligung bei 71.13988432 Prozent.
In Hamburg liegt die Wahlbeteiligung bei 79.64893613 Prozent.
In Niedersachsen liegt die Wahlbeteiligung bei 80.97824088 Prozent.
In Bremen liegt die Wahlbeteiligung bei 78.87526382 Prozent.
In Brandenburg liegt die Wahlbeteiligung bei 73.74163364 Prozent.
In Sachsen-Anhalt liegt die Wahlbeteiligung bei 68.73946415 Prozent.
In Berlin liegt die Wahlbeteiligung bei 77.6180657 Prozent.
In Nordrhein-Westfalen liegt die Wahlbeteiligung bei 80.28241566 Prozent.
In Sachsen liegt die Wahlbeteiligung bei 73.60230859 Prozent.
In Hessen liegt die Wahlbeteiligung bei 80.20033661 Prozent.
In Thueringen liegt die Wahlbeteiligung bei 74.84904818 Prozent.
In Rheinland-Pfalz liegt die Wahlbeteiligung bei 80.03340713 Prozent.
In Bayern liegt die Wahlbeteiligung bei 81.58855952 Prozent.
In Baden-Wuerttemberg liegt die Wahlbeteiligung bei 81.14914778 Prozent.
In Saarland liegt die Wahlbeteiligung bei 80.02830188 Prozent.
map(op(Wahlbeteiligung), eq -> rhs(eq))
![]()
Dies ist noch nicht sehr anschaulich, daher stellen wir die Wahlbeteiligung als
Balkendiagramm dar. Auch hier erstellen wir erst wieder eine Liste, die die
Marken an die gewünschten Stellen setzt.
Marken_Laender := [0.2 = "SH", 1.6 = "MV", 2.7 = "HH",
4.0 = "NI", 5.4 = "HB", 6.5 = "BB",
7.6 = "ST", 8.8 = "BE", 10.0 = "NW",
11.4 = "SN", 12.5 = "HE", 13.7 = "TH",
14.8 = "RP", 16 = "BY", 17.4 = "BW",
18.5 = "SL"]:
Wahlbeteiligung[BL[1]] $ BL in Laender
![]()
plot(plot::Bars2d([[map(op(Wahlbeteiligung), eq -> rhs(eq))]],
Color = RGB::Blue,
YGridVisible = TRUE))

An diesem Histogramm können wir jetzt auf einen Blick ablesen, wo die Wahl-
beteiligung am höchsten und wo am niedrigsten war. Wir sehen, dass die
geringste Wahlbeteiligung in Sachsen-Anhalt war, gefolgt von Mecklenburg-
Vorpommern, Sachsen und Thüringen. In Bayern gaben die meisten Wahl-
berechtigten ihre Stimme ab, dicht gefolgt von Baden-Württemberg, Nieder-
sachsen und Schleswig-Holstein.
Wenden wir uns nun einer weiteren interessanten Fragestellung zu. Wir wollen
untersuchen, wie "einig" sich die Wähler einer Partei sind. Dazu erstellen wir
Boxplots für jede Partei und nehmen die Anzahl der abgegebenen Zweit-
stimmen pro Bundesland und teilen diese durch die Gesamtzahl der
abgegebenen Zweitstimmen.
L:= [[Bl[Partei(P)]/Bl[7]*100 $ Bl in Laender]
$ P in Parteien]:
plot(plot::Boxplot(L, Colors = [RGB::Red, RGB::Black,
RGB::Green, RGB::Yellow,
RGB::VioletRed, RGB::Brown,
RGB::Grey, RGB::LightGrey],
LineWidth = 0.5 * unit::mm),
XTicksVisible = FALSE,
GridVisible = TRUE)

Was sagen uns diese Boxplots?
Als erstes fällt auf, dass die Boxen unterschiedliche Größen haben. Eine
große Box bedeutet, dass die Daten großen Schwankungen unterlegen
sind. Bei der PDS zum Beispiel können wir beobachten, dass die für sie
abgegebenen Stimmen im Bereich zwischen ca 2% und 15% liegen. Dies
bedeutet, dass es große regionale Unterschiede im Wahlverhalten bzgl.
der PDS gibt. Ganz anders sieht das bei der FDP aus. Die sehr kleine
Box zeigt, dass sich die Wähler aus den jeweiligen Bundesländern ähnlich
verhalten haben. Sie konnte also keine sehr großen regionalen Siege, aber
ebenso keine starken Niederlagen für sich verbuchen.
Eine weitere Kenngröße ist der Median, den wir als waagerechte Linie
innerhalb der Box ablesen können. Diese zeigt uns den Mittelwert der
abgegebenen Stimmen an. Für die PDS ist dieser Wert sehr gering,
d.h. in 50% der Bundesländer lag der Stimmenanteil unter 2%. Wenn
die PDS also mehr als 2% der Stimmen in einem Bundesland be-
kommen hat, dann auch wesentlich mehr. Anders herum verhält es
sich bei der SPD und der CDU/CSU.
Weiterhin können wir für die SPD, die CDU/CSU und die "Übrigen"
einen Punkt ausserhalb dieser Box erkennen. Diese werden als Aus-
reisser bezeichnet und weichen sehr stark von dem Großteil der
Daten ab. Bei der SPD und der CDU/CSU sind dies die Werte aus
Bayern. Dies zeigt, dass die Wahlergebnisse aus Bayern eine Sonder-
rolle innerhalb der Bundestagswahlergebnisse spielen.
_____________________________________________________________________________
Aufgaben:
1. Erstellen Sie Boxplots für die Partei SPD, indem Sie die Stimmen aus den einzelnen Wahlkreisen
nehmen und diese zu dem jeweiligen Bundesland zusammenfassen. So erhalten sie 16 Boxplots für
eine Partei. Vergleichen Sie diese und verfahren Sie analog für beliebige andere Parteien.
2. Suchen Sie die Spalte, in der die Anzahl der ungültigen Stimmen stehen, aus der Tabelle heraus und
berechnen Sie, wo die Quote der ungültigen Stimmen am höchsten und wo am niedrigsten ist.
_____________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de
2. Quelle: http://www.bundeswahlleiter.de/bundestagswahl2002/deutsch/ergebnis2002/csv/kerg.csv
Die Datei wurde so verändert, dass sie mit MuPAD eingelesen werden kann. Desweiteren wurden
die Wahlergebnisse von 1998 weggelassen und die Ergebnisse für die CDU und die CSU sowie die
Ergebnisse für die kleineren Parteien zusammengefasst.
3. Um die Datei bundestagswahlergebnisse.csv in Tabellenform darzustellen, öffnen Sie diese nicht
mit einem Doppelklick, sondern unter Excel mit der Option Öffnen und geben Sie als Dateityp
Textdateien an.
_____________________________________________________________________________