Direkt zum Hauptbereich

Socio-Economic Data for the German General Election

The general elections are ahead and wouldn't it be cool to run some databased models? The Government is publishing some very interesting statistics on the level of the electoral constituencies. This is quite rare. Why? In Germany the electoral constituencies are not equal to the regional districts which are in charge for the normal gorvernmental statistics. You can see the data here: https://www.bundeswahlleiter.de/bundestagswahlen/2017/strukturdaten.html.
Alas, the csv-files are not really R-friendly. Therefore, I have wrote the following script that will give you three csv-files, one for 2013, one for 2017 and one with the variables that are included for both election.
And I have changed the column names so that it is easier to work with them...

require(readr)
## Loading required package: readr
df2017  <- read_delim("https://www.bundeswahlleiter.de/dam/jcr/f7566722-a528-4b18-bea3-ea419371e300/btw17_strukturdaten.csv", 
                      ";", escape_double = FALSE, col_names = FALSE, 
                      locale = locale(decimal_mark = ","), 
                      comment = "#", trim_ws = TRUE, skip = 2)
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   X1 = col_character(),
##   X2 = col_integer(),
##   X3 = col_character(),
##   X4 = col_integer(),
##   X26 = col_integer(),
##   X27 = col_integer(),
##   X29 = col_character(),
##   X39 = col_character(),
##   X40 = col_character(),
##   X41 = col_character(),
##   X42 = col_character(),
##   X52 = col_character()
## )
## See spec(...) for full column specifications.
df2017 <- df2017[,-52]
newNames<-c("Land","WahlkreisNR","Wahlkreis",
            "Gemeinden","Flaeche","Bevoelkerung",
            "Deutsch","AuslaenderProz","Einwohnerkm2",
            "Geburtensaldo","Wanderungssaldo","Alter18",
            "Alter1825","Alter2535","Alter3560",
            "Alter6075","Alter75","OhneMigration",
            "MitMigration","RoemischKath","Evangelisch",
            "SonstigeRel","Eigentuemerquote","Wohnungen",
            "WohnungenBestand","Einkommen","BIP",
            "Autos","BerufsschuleAbschluss","Abschluss",
            "OhneHaupt","Haupt","Real",
            "Abi","KitaKinder","Unternehmen",
            "Handwerksunternehmen","Besch","BeschLand",
            "BeschProd","BeschHandel","BeschDienst",
            "BeschSonst","SozialEmpf","SozialEmpfNichtErwerb",
            "SozialEmpfAusl","Arbeitsl","ArbeitslMaenner",
            "ArbeitslFrauen","Arbeitsl1519","Arbeitsl5564")
colnames(df2017) <- newNames
write.csv(df2017, "Strukturdaten2017.csv", row.names = F)


#2013
df2013 <- read_delim("https://www.bundeswahlleiter.de/dam/jcr/65ef1c2d-4df0-44e2-8881-99a176b4896c/btw13_strukturdaten.csv", 
           ";", escape_double = FALSE, col_names = FALSE, 
           locale = locale(decimal_mark = ","), 
           comment = "#", trim_ws = TRUE, skip = 2)
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   X1 = col_character(),
##   X2 = col_integer(),
##   X3 = col_character(),
##   X4 = col_character(),
##   X43 = col_character()
## )
## See spec(...) for full column specifications.
df2013 <- df2013[,-43]


newNames <- c("Land","WahlkreisNR","Wahlkreis",
              "Gemeinden","Flaeche",
              "Bevoelkerung","Maennlich",
              "Deutsch","Einwohnerkm2",
              "Geburtensaldo","Wanderungssaldo",
              "Alter18","Alter1825",
              "Alter2535","Alter3560",
              "Alter6075","Alter75",
              "Abschluss","OhneHaupt",
              "Haupt","Real",
              "Abi","Autos",
              "Wohnungen","WohnungenBestand",
              "Betriebe","Gewerbesteuer",
              "Gewerbeanmeldung","Gewerbeabmeldung",
              "Insolvenz","InsolvenzBesch",
              "Besch","BeschLand",
              "BeschProd","BeschHandel",
              "BeschDienst","BeschSonst",
              "Arbeitsl","ArbeitslFrauen",
              "ArbeitslAusl","SozialEmpf",
              "SozialEmpfNichtErwerb")
colnames(df2013) <- newNames

write.csv(df2013, "Strukturdaten2013.csv", row.names = F)
 
df2013 <- cbind(df2013, Jahr=2013)
df2017 <- cbind(df2017, Jahr=2017)
commonNames <- colnames(df2013)[colnames(df2013) %in% colnames(df2017)]
dfCommon <- rbind(df2013[,commonNames], df2017[,commonNames])

write.csv(dfCommon, "StrukturdatenCommon.csv", row.names = F)

Kommentare

Beliebte Posts aus diesem Blog

#RTutorial: Using R to Harvest the Twitter STREAM API

Initializing the Twitter API In this tutorial, the so called STREAMING-API from Twitter is used. This API provides real-time access to Twitter, so the results are dependent from what is actually going on, right now. Before we start, we have to initialize the Twitter-API. To use the Twitter API, a consumer key and consumer secret is required. Therefore, you have to register as a developer who is creating a Twitter app. Create a Twitter account and then sign in at https://apps.twitter.com/. The account has to be verified with a phone number. This can be done on the Twitter webpage in the account settings. Fill in name, description and any valid URL with leading “http://”. It is important NOT to provide any call-back URL, because otherwise the registration from R will not function. After this, you can see a summary of your newly created app with a link to “manage keys and access tokens”. The consumer key and consumer secret that can be found there have to be copied into the following R-...

Deep-Dive Impfeffektivität: Eine kritische Datenanalyse der RKI-Berechnungen / Teil 1: Die Methode

Die Einschätzung, wie effektiv die COVID-Impfung ist, ist eine der politisch relevantesten Kennzahlen derzeit. Insbesondere für die Einschätzungen der Angemessenheit einr Impfpflicht ist diese Zahl extrem wichtig. In der Vergangenheit hat sich immer wieder gezeigt, dass die Berechnungen des RKI nicht in jeder Hinsicht eindeutig sind, sondern auf vielen Annahmen beruhen, die man auch kritisch hinterfragen kann und muss. Für die politische Datenwissenschaft ist es daher essenziell, diese Berechnungen nachvollziehbar zu machen. In diesem Beitrag wird das methodische Vorgehen des RKI zur Berechnung der Impfeffektivität analysiert. Die Informationen dazu entstammen den RKI-Wochenberichten .  In einem zweiten Teil habe ich die konkreten Berechnungen des RKI so weit wie möglich rekonstruiert und kann daher zeigen, wie stark die Ergebnisse schwanken, wenn Annahmen leicht verändert werden. Meine Erkenntnisse aus der folgenden Analyse: Das RKI verwendet zur Berechnung der Impfeffektivität di...

Zwischen #AfDErfolg und Medienberichten gibt es einen kausalen Effekt - und der lässt sich berechnen

BuzzFeed Deutschland  hat Daten zusammengetragen, mit denen sich der Einfluss der Medien auf die Umfragewerte der AfD berechnen lässt. Wir zeigen, dass es einen statistischen Kausalzusammenhang zwischen der Häufigkeit der Berichte über die AfD und ihren Umfragewerten gibt. Hierfür verwenden wir Granger-Causality-Analyse. Das Ergebnis ist, dass vier bis fünf Wochen, nachdem vermehrt über die AfD berichtet wurde auch die Umfragewerte signifikant steigen. Was ist in den Daten Die Daten enthalten vor allem eine Zeitreihe mit wöchentlichen Aktivitäten zur Suche „AfD“ bei Google News (über Google Trends bezogen) und die Umfrageergebnisse der Afd in den Umfragen der Institute EMNID, Forschungsgruppe Wahlen, GMS, Infratest dimap, Forsa, INSA/YouGov und Allensbach. Aus diesen Werten haben wir einen wöchentlichen Durchschnitt gebildet. AfD-Umfragen/Google News, absolut Die absoluten Werte geben erst einmal keinen Aufschluss über einen Zusammenhang. Die Analyse Zeitreihen h...