Spaß mit R und Berlin Open Data II: ESF-Förderungen

Ein neuer Datensatz im Open Data-Portal Berlins: ESF-geförderte Vorhaben des Landes Berlin 2014-2020

Aus der Beschreibung:

In der Förderperiode 2014-2020 stehen der deutschen Hauptstadt Berlin rund 215 Mio. EUR aus dem Europäischen Sozialfonds (ESF) zur Verfügung, die in die hier lebenden Menschen investiert werden können.
Schwerpunkte sind dabei die soziale Eingliederung benachteiligter Gruppen, die bessere Qualifizierung für einen Arbeitsplatz, die Bekämpfung der Jugendarbeitslosigkeit sowie die Optimierung der allgemeinen und beruflichen Bildung.

Zunächst muss der Datensatz korrekt eingelesen werden – das brauchte bei mir mehrere Versuche:

esf <- read.csv("esf.csv", sep = ";", fileEncoding = "UTF-8", dec = ",")

Da die CSV-Datei nicht mit Kommata sondern Semikola als separierenden Zeichen angelegt wurde, muss R das mittels des Attributs sep mitgeteilt werden. Damit Sonderzeichen korrekt dargestellt werden, wird außerdem auf das fileEncoding UTF-8 hingewiesen. Zu guter Letzt muss R auch wissen, dass die „Nachkommastellen“ nicht hinter einem Punkt (amerikanische Schreibweise), sondern eben hinter einem Komma stehen. Nur so werden die Euro-Beträge auch als Zahlen (class = numeric) und nicht als hier eher unbrauchbare Faktoren erkannt.

Ein Blick in die Struktur dieses Data Frames ergibt, dass die Variablen territoriale_umsetzungsmechanismen und finanzierungsform jeweils nur eine Ausprägung haben, nämlich „07 : Nicht zutreffend“ und „Nicht rückzahlbare Finanzhilfe“. Die Variable land besteht ebenso und naheliegenderweise nur aus der einen Ausprägung DE300. Auf diese Spalten kann ich also verzichten, so dass ich sie mittels der select-Funktion aus dem dplyr-Package „lösche“:

esf <- select(esf, -c(11,13,15))

Die Tabelle weist 641 Zuwendungen an 182 verschiedene Empfänger aus. Interessant wäre es also zu wissen, wieviel die verschiedenen Empfänger insgesamt aus dem ESF erhalten haben:

summen <- tapply(esf$gesamtbetrag_förderfähiger_ausgaben, esf$name_des_begünstigten, sum)

Diese neue Tabelle summen sortiere ich absteigend:

summen <- sort(summen, decreasing = TRUE)

Und lasse mir dann die Top10 der 182 Empfänger ausgeben:

head(summen,10)

            Arbeit und Bildung e.V.         Stiftung Naturschutz Berlin                  WeTeK Berlin gGmbH 
                            9085780                             5667636                             4695658 
                   Chance BJS gGmbH Beuth Hochschule für Technik Berlin                           BUS gGmbH 
                            3349125                             3086155                             2958709 
               Personal_inform GmbH                     LKJ Berlin e.V.       ComFort-Schulungszentrum GmbH 
                            2882466                             2777685                             2776943 
  FrauenComputerZentrumBerlin e. V. 
                            2697057 

Das sind aber nur die Summen, die direkt aus dem ESF geflossen sind. Für jede ESF-Förderung muss – sofern ich die Tabelle wirklich richtig verstehe – die öffentliche Hand einen Teil beisteuern. Darüber gibt die Variable kofinanzierungssatz_in_prozent Auskunft:

summary(esf$kofinanzierungssatz_in_prozent)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
15.04   49.92   49.92   49.60   50.00   66.67 

Wir sehen: Der Kofinanzierungssatz bewegt sich zwischen 15,04 und 66,67 Prozent. In Mittel und Median liegt er bei knapp unter 50 Prozent. Dieser Prozentsatz wird auf die ESF-Fördersumme noch aufgeschlagen.

Mich stört die Variable Themenfeld, denn dort besteht jede Ausprägung aus einer ID-Nummer gefolgt von einer Beschreibung, bspw. 117 - Förderung des gleichen Zugangs zum lebenslangen Lernen für alle Altersgruppen im formalen, nichtformalen und informellen... Dadurch steht immer unerhört viel Text in den Zellen.

Also verwende ich die separate-Funktion aus dem tidyr-Package, um daraus zwei Spalten zu machen – das schreibe ich zur Sicherheit in eine neue Tabelle esf_sep:

esf_sep <- separate(esf, themenfeld, c("themenfeld", "beschreibung themenfeld"), " - ")

Und um ein paar weitere der für mich noch recht mysteriösen Funktionen aus dem dplyr-Package auszuprobieren, wende ich die group_by-Funktion auf die Empfänger an:

empf <- group_by(esf_sep, name_des_begünstigten)

Jetzt sollte ich mittels summarize, einigen Argumenten und ein wenig Magie schöne Übersichtstabellen erstellen können:

summarize(empf, Gesamtsumme = sum(gesamtbetrag_förderfähiger_ausgaben), 'Anzahl der Förderungen' = length(gesamtbetrag_förderfähiger_ausgaben))

# A tibble: 182 x 3
   name_des_begünstigten                                               Gesamtsumme `Anzahl der Förderungen`
                                                                                            
 1 A&QUA gGmbH                                                            1796959.                       23
 2 ABBV GmbH                                                               959359.                        8
 3 ABT gGmbH - Akademie für berufliches Training                          1712346.                       17
 4 abw - gemeinnützige Gesellschaft für Arbeit, Bildung und Wohnen mbH     370433.                        5
 5 agens Arbeitsmarktservice gGmbH                                         509435.                        9
 6 AGRARBÖRSE Deutschland Ost e. V.                                        542946.                        6
 7 ajb GmbH Gemeinnützige Gesellschaft für Jugendberatung                  692342.                        2
 8 Akelei e. V.                                                            418609.                        2
 9 all2gethernow e.V.                                                      321707.                        1
10 Allianz deutscher Designer AGD e.V.                                     113616.                        1
# ... with 172 more rows

Das ließe sich in ähnlicher Weise auf Postleitzahlen, Themenfelder oder sogar Zeiträume anwenden. Dafür müsste ich mich aber erst wieder mit den schrecklichen Datumsfunktionen vertraut machen.