1 Einleitung

“Die größte Gefahr im Straßenverkehr sind Autos, die schneller fahren, als ihr Fahrer denken kann.” (Robert E. Lembke)

Laut dem aktuellen Straßensicherheitsbericht der WHO aus dem Jahr 2018 sterben jährlich 1,35 Millionen Menschen auf den Straßen. In der Altersgruppe zwischen 5 und 29 Jahren sind damit Verkehrsunfälle die häufigste Todesursache (World Health Organisation, 2018). Dementsprechend sollte eine Reduzierung dieser Zahlen im Interesse aller sein. In Deutschland starben im Jahr 2019 3059 Personen infolge von Verkehrsunfällen (Statistisches Bundesamt, 2020). Zwar sinken die Zahlen in Deutschland seit dem Anfang der 1990er Jahre dank technischer Verbesserungen und verschärften Sicherheitsvorschriften stetig, trotzdem handelt es sich bei den meisten der 2019 bei Verkehrsunfällen Verstorbenen doch um vermeidbare Tode.

Die vorliegende Arbeit beschäftigt sich mit einem Datensatz des Amts für Statistik Berlin-Brandenburg, welcher alle Verkehrsunfälle mit Personenschaden im Land Berlin im Jahr 2019 umfasst. Zwar sind auch schon Daten für das Jahr 2020 verfügbar, diese sind jedoch aufgrund der außergewöhnlichen Lage, in der sich die Weltbevölkerung seit Beginn der COVID-19-Pandemie befindet, nicht als repräsentativ zu betrachten, da die Einschränkungen des öffentlichen Lebens auch starke Veränderungen im Straßenverkehr mit sich zogen (Landespolizeidirektion Stab 14 Verkehr, 2020b).

1.1 Verkehrsunfälle in Berlin

In Berlin wurden im Jahr 2019 147.306 Verkehrsunfälle verzeichnet (Landespolizeidirektion Stab 14 Verkehr, 2020a). Davon wurde in 14.959 Fällen ein Personenschaden festgestellt (Wittlich et al., 2020), 40 Personen starben (Hasselmann, 2020). In den meisten Fällen ließen sich diese Unfälle auf Fehler beim Abbiegen, das Nichtbeachten der Vorfahrt, eine nicht angemessen angepasste Geschwindigkeit, das falsche Verhalten von Fußgänger:innen oder Alkoholeinfluss zurückführen. Die meisten Unfälle (68,4%) werden von PKW verursacht. 60% der Unfalltoten waren Fußgänger:innen. Besonders gefährlich war es in Berlin für Radfahrer:innen an der Oberbaumbrücke, am Frankfurter Tor, an der Straßenecke Otto-Braun-Straße/Mollstraße in der Nähe des Alexanderplatzes und am Brandenburger Tor. (Landespolizeidirektion Stab 14 Verkehr, 2020a)

1.2 Motivation und Fragestellungen

Der vorliegenden Arbeit ist zum Ziel gesetzt, verschiedene Fragen zu beantworten. Es soll ermittelt werden, ob und um wie viel gefährlicher Unfälle von Güterkraftfahrzeugen mit nicht geschützten Verkehrsteilnehmenden (Fußgänger:innen und Fahrradfahrer:innen) im Vergleich sind. Außerdem wird versucht, in den vorliegenden Daten Hotspots für verschiedene Verkehrsteilnehmer:innen zu identifizieren. Hierzu wird unter anderem eine interaktive Web-Applikation mit Hilfe des R-Packages Shiny erstellt und veröffentlicht.

1.3 Struktur der Arbeit

Es wird damit begonnen, einen Überblick über bisherige relevante Forschung zu dieser Arbeit zu geben. Nachfolgend wird auf den gewählten Datensatz eingegangen, der deskriptiv analysiert wird. Daraufhin folgt eine deduktive Analyse der vorliegenden Daten, welche in der Erstellung einer interaktiven Karte von Berlin mündet. Nach einer Diskussion der gewonnenen Ergebnisse folgt ein abschließendes Fazit.

2 Literaturbericht

Aufgrund der oft schwerwiegenden Folgen von Verkehrsunfällen, wird dieses Gebiet seither international erforscht. Entsprechend zahlreich sind auch die Forschungsrichtungen, die sich mit diesem Thema beschäftigen. Während Mediziner:innen aller Art gesundheitliche Ursachen und Folgen von Verkehrsunfällen untersuchen (Evers & Auerbach, 2011; Häkkänen & Summala, 2001; Wilhelm et al., 2011), beschäftigen sich Geograph:innen und Verkehrswissenschaftler:innen mit der Verortung der Unfälle und der Analyse von Hotspots (T. Anderson, 2007; Bíl et al., 2019; Erdogan et al., 2015) und Maschinenbauer:innen und Informatiker:innen erproben Möglichkeiten der Prävention, z.B. mit Hilfe KI-unterstützter Fahrerassistenzsysteme (Fawcett et al., 2017; Gahr et al., 2018; Ryder et al., 2017).

Für diese Arbeit stehen die Ursachenforschung, die Prävention und die Hotspotdetektion im Fokus, wobei die Übergänge in andere Bereiche teilweise fließend sind, da die Erkennung von Unfallhotspots der Prävention weiterer Unfälle dient, wofür die Ursachen für diese Unfallhäufungen beseitigt werden müssen. Innerhalb dieses Gebiets kann unterschieden werden zwischen der Forschung bezüglich besonders gefährdeter Gruppen wie Fußgänger:innen, Radfahrer:innen, Kindern und Senior:innen (Fastenmeier, 2019; Lakes, 2017; Limbourg & Reiter, 2002; Stephan & Wilhelm, 2011) und bezüglich besonders gefährdender Gruppen wie LKW-Fahrer:innen und alkoholisierte/anderweitig beeinträchtigte Fahrer:innen (Evers & Auerbach, 2011; Häkkänen & Summala, 2001; Saß et al., 2016).

Ein großer Teil der in den letzten zehn Jahren veröffentlichten Forschung beschäftigt sich jedoch explizit mit der Erkennung von vorhandenen Unfallhotspots und den Möglichkeiten, durch dieses gewonnene Bewusstsein dort die Unfallzahlen zu senken. Auf diese Forschung wird im Folgenden ím Hinblick auf das Ziel der vorliegenden Arbeit genauer eingegangen.

Anderson , Yu et al. und Erdogan et al. untersuchen und vergleichen verschiedene Methoden der Identifikation von Unfallhotspots. Altbewährten Methoden werden neuere Ansätze der räumlichen Statistik gegenüber gestellt. Die Kernel Density Estimation Methode bringt im Vergleich durch den Einbezug von zusätzlichen Daten wie denen eines Geoinformationssystems die besten Ergebnisse hervor. (T. Anderson, 2007; T. K. Anderson, 2009; Erdogan et al., 2015; Yu et al., 2014)

Le et al. und Bíl et al. arbeiten ebenfalls mit Kernel Density Estimation. Sie stellen fest, dass sich die Lage der Hotspots im Laufe der Zeit verändern kann. Neue kommen beispielsweise durch Straßenarbeiten hinzu, Alte verschwinden, wenn z.B. Warnhinweise aufgestellt werden. Der Großteil der beständigen Hotspots sind in Kurven verortet. (Bíl et al., 2019; Le et al., 2020)

Auch Lu et al. beschäftigen sich mit der Identifikation von Unfallhotspots. In ihre logistische Regressionsanalyse beziehen sie zusätzlich äußere Einflussfaktoren wie Art der Straße, Straßen- und Sichtverhältnisse, Zustand des Fahrzeugs und der Fahrer:innen und Position der Fahrzeuge im Straßengeschehen mit ein. Das erarbeitete Modell lag in 86.67% der Fälle mit seiner Vorhersage richtig. Es wird angeregt, in folgenden Studien zusätzlich die Verkehrsstärke und das vorherrschende Wetter in die Analyse mit einzubeziehen. (Lu et al., 2015)

Gahr et al. sammelten Videomaterial und Fahrdaten von Fahrern in der Schweiz um auf dieser Basis Unfallhotspots zu erkennen und zu klassifizieren. So gewonnene Daten könnten in Fahrzeugsysteme aufgenommen werden, um die Autofahrer:innen vor vorausliegenden Gefahrengebieten zu warnen. Der Vorteil des verwendeten Crown Sourcing-Ansatzes besteht darin, dass Hotspots und Gefahrengebiete bei einer kontinuierlichen Datenerhebung sofort und nicht erst retrospektiv erkannt werden können und somit schneller Gegenmaßnahmen wie ein Warnhinweis im Fahrzeug selbst ergriffen werden können. (Gahr et al., 2018; Ryder et al., 2017)

Auch Fawcett et al. untersuchen Möglichkeiten der proaktiven Hotspotidentifikation. Das auf Bayes basierende Modell wird auf einen Datensatz der Stadt Halle angewandt. Mit hoher Genauigkeit können später entstehende Hotspots auf Basis der Daten der Vorjahre vorausgesagt werden, wobei die Voraussagen besser werden, je mehr Vorjahre in die Analyse mit einbezogen werden. (Fawcett et al., 2017)

Abschließend für dieses Gebiet hat Lakes Unfallhotspots in Berlin untersucht und dabei einen besonderen Fokus auf Fußgänger:innen und Radfahrer:innen gelegt. Es wird eine deutliche Konzentration auf den Innenstadtbereich erkennbar, wobei die Hotspots für Radfahrer:innen räumlich spezifischer und mit höheren Unfallzahlen vertreten sind als die Unfallorte von Fußgänger:innen. In den Frühjahrs- und Sommermonaten kommt es durch die häufigere Fahrradnutzung zu mehr Unfällen als in den Wintermonaten. Besonders gefährlich für Radfahrende ist der Kreisverkehr am Moritzplatz. Die häufigste Unfallursache bei Unfällen mit Fahrradbeteiligung sind Fehler beim Rechtsabbiegen. (Lakes, 2017)

Malczyk untersuchte für die Unfallforschung der Versicherer Unfälle zwischen schweren LKW und ungeschützten Verkehrsteilnehmer:innen, mit Fokus auf Häufigkeit, Umstände und Verletzungen. In den Datensatz wurden Unfälle mit LKW ab 11.900 kg zulässiger Gesamtmasse und Radfahrer:innen oder Fußgänger:innen einbezogen, bei denen der anfängliche Schadenswert auf mindestens 30.000€ geschätzt wurde, wobei davon ausgegangen wird, dass ein großer Teil dieser Summe jeweils auf den Personenschaden bezogen ist. Die meisten dieser Unfälle geschahen wochentags, innerorts, bei Tageslicht und trockener Fahrbahn. Besonders gefährdet sind Personen ab 55 Jahren. Die meisten Fußgänger:innen (23%) verunglückten beim Überqueren der Straße von rechts vor einem geradeaus fahrenden LKW, die meisten Fahrradfahrer:innen (56%) verunglückten bei einem Abbiegemanöver des LKW nach rechts. Er schließt mit Hinweisen für beide Seiten, wie Unfälle zwischen den Parteien vermieden werden können. (Malczyk, 2019)

3 Daten importieren und bereinigen

Der Datensatz “Straßenverkehrsunfälle nach Unfallort in Berlin 2019” wurde vom Amt für Statistik Berlin-Brandenburg unter einer Creative Commons-Lizenz (CC BY 3.0 DE) herausgegeben und umfasst Daten zu 13.390 (von insgesamt 14.959 registrierten) Verkehrsunfällen mit Personenschaden (Amt für Statistik Berlin-Brandenburg, 2020b). Die übrigen 1569 Unfälle wurden aufgrund von fehlerhaften oder widersprüchlichen Angaben zum Unfallort nicht in den Datensatz aufgenommen (Wittlich et al., 2020).

# Laden der benötigten Bibliotheken
library(readr)
library(tidyverse)
library(ggplot2)
library(scales)
library(sf)
library(shiny)
library(leaflet)
library(emojifont)

# Laden des Datensatzes
unfall <- read_delim("https://box.hu-berlin.de/f/f40cf4fd947b49deb355/?dl=1",
    ";", escape_double = FALSE, locale = locale(encoding = "latin1"),  trim_ws = TRUE)
View(unfall)

Der Datensatz (Amt für Statistik Berlin-Brandenburg, 2020a) umfasst 13390 Fälle, welche mit 24 Variablen beschrieben werden. In der begleitenden Datensatzbeschreibung (Amt für Statistik Berlin-Brandenburg, 2020b) werden die einzelnen Variablen kurz erklärt. Fünf der Variablen sind für die weitere Analyse nicht relevant, da sie entweder keine besondere Aussagekraft haben (UJAHR und LAND, da diese Variablen für alle Fälle denselben Wert haben, da nur ein (Bundes-)Land und ein Jahr betrachtet wird) oder sich mit anderen Variablen doppeln ( LOR (“Lebensweltlich orientierte Räume,” Dopplung mit STRASSE) und LINREFX/LINREFY (UTM-Koordinaten nach ETRS89, Dopplung mit XGCSWGS84/YGCSWGS84)). Die verbleibenden 19 Variablen werden im Folgenden vorgestellt.

  • OBJECTID: nominal, ID des jeweiligen Vorfalls

  • BEZIRK: nominal, Kennziffer des Bezirkes, 1 = Mitte, 2 = Friedrichshain-Kreuzberg, 3 = Pankow, 4 = Charlottenburg-Wilmersdorf, 5 = Spandau , 6 = Steglitz-Zehlendorf, 7 = Tempelhof-Schöneberg, 8 = Neukölln, 9 = Treptow-Köpenick, 10 = Marzahn-Hellersdorf , 11 = Lichtenberg, 12 = Reinickendorf

  • STRASSE: nominal, Name der Straße/des Straßenabschnittes auf der/dem der Unfall passierte

  • UMONAT: kardinal, Datum des Unfalls auf Monat genau

  • USTUNDE: kardinal, Uhrzeit des Unfalls auf Stunde genau

  • UWOCHENTAG: kardinal, Wochentag des Unfalls, 1 = Sonntag, 7 = Montag

  • UKATEGORIE: nominal, Schwere des Unfalls, 1 = Unfall mit Toten, 2 = Unfall mit Schwerverletzten, 3 = Unfall mit Leichtverletzten, jeweils die schwerste Folge ist ausschlaggebend

  • UART: nominal, Art des Unfalls, 1 = Zusammenstoß mit anfahrendem/anhaltendem/ruhendem Fahrzeug, 2 = Zusammenstoß mit vorausfahrendem/wartendem Fahrzeug, 3 = Zusammenstoß mit seitlich in gleicher Richtung fahrendem Fahrzeug, 4 = Zusammenstoß mit entgegenkommendem Fahrzeug, 5 = Zusammenstoß mit einbiegendem/ kreuzendem Fahrzeug, 6 = Zusammenstoß zwischen Fahrzeug und Fußgänger, 7 = Aufprall auf Fahrbahnhindernis, 8 = Abkommen von Fahrbahn nach rechts, 9 = Abkommen von Fahrbahn nach links, 0 = Unfall anderer Art

  • UTYP1: nominal, Typ des Unfalls, 1 = Fahrunfall, 2 = Abbiegeunfall, 3 = Einbiegen/Kreuzen-Unfall, 4 = Überschreiten-Unfall, 5 = Unfall durch ruhenden Verkehr, 6 = Unfall im Längsverkehr, 7 = sonstiger Unfall

  • ULICHTVERH: nominal, Lichtverhältnisse zur Zeit des Unfalls, 0 = Tageslicht, 1 = Dämmerung, 2 = Dunkelheit

  • IstRad: nominal, Fahrradbeteiligung, nur ja/nein, nicht wie viele

  • IstPkw: nominal, Personenkraftwagenbeteiligung, nur ja/nein, nicht wie viele

  • IstFuss: nominal, Fußgängerbeteiligung, nur ja/nein, nicht wie viele

  • IstKrad: nominal, Kraftradbeteiligung, nur ja/nein, nicht wie viele

  • IstGkfz: nominal, Güterkraftfahrzeugbeteiligung (Lastkraftwagen mit Normalaufbau und einem Gesamtgewicht über 3,5 t, ein Lastkraftwagen mit Tankauflage bzw. Spezialaufbau, eine Sattelzugmaschine oder eine andere Zugmaschine), nur ja/nein, nicht wie viele

  • IstSonstige: nominal, Beteiligung sonstiger Verkehrsteilnehmer (z.B. Bus, Straßenbahn), nur ja/nein, nicht wie viele

  • USTRZUSTAND: nominal, Zustand der Straße zum Unfallzeitpunkt, 0 = trocken, 1 = nass/feucht/schlüpfrig, 2 = winterglatt

  • XGCSWGS84 und YGCSWGS84: kardinal, Gauß-Krüger-Koordinaten. Anmerkung: Die Nutzung des Gauß-Krüger-Systems wurde zugunsten des international anwendbaren Referenzsystems WGS84 aufgegeben, wie auch die Datensatzbeschreibung des DSB Unfallatlas (Datensatzbeschreibung Unfallatlas, 2020), auf den der hier genutzte Datensatz zurückgeht, korrekterweise angibt. Demnach handelt es sich bei diesen Koordinaten um WGS84-Koordinaten im Dezimalgrad.

Die vorliegenden Daten wurden stark anonymisiert. Nähere Angaben zu Unfallbeteiligten (Alter, Geschlecht, genaue Anzahl, etc.) fehlen. Auch das Datum wurde auf Monat und Wochentag reduziert, sodass eine genaue Zuordnung nicht möglich ist. Daher sind Analysen in Bezug auf die genaueren Umstände der Unfälle nicht möglich. Die Hotspotanalyse bezieht sich dementsprechend nur auf die geografische Lage der verzeichneten Unfälle. Zwar sind einige zusätzliche Parameter bekannt, da die genauere Umgebungssituation jedoch nicht erfasst wurde, lässt sich die jeweilige Relevanz etwa der Sichtverhältnisse oder des Straßenzustandes nicht feststellen.

Da die Erstellung des Datensatzes auf standardisierten Polizeiberichten basiert, ist der Aufbereitungsaufwand verhältnismäßig gering. Lediglich beim Unfall mit der ID 201196 scheint es einen Einlesefehler gegeben zu haben bezüglich der Koordinaten, des Straßenzustands und der Frage nach den sonstigen Beteiligten, sodass entschieden wurde, die fehlerhaften Koordinaten zu entfernen.

# Entfernen nicht relevanter Variablen
unfall <- unfall %>%
  select(-LOR, -LAND, -UJAHR, -LINREFX, -LINREFY)

# Entfernen eines nicht plausiblen Koordinatenpaares
unfall <- unfall %>%
  mutate(`XGCSWGS84` = na_if(`XGCSWGS84`, 5254675821)) %>%
  mutate(`YGCSWGS84`= na_if(`YGCSWGS84`, 1))

# Umformen der Koordinatenwerte in Kommazahlen
unfall$XGCSWGS84 <- gsub('^([0-9]{2})([0-9]+)$', '\\1.\\2', unfall$XGCSWGS84)
unfall$YGCSWGS84 <- gsub('^([0-9]{2})([0-9]+)$', '\\1.\\2', unfall$YGCSWGS84)

# Umformen der Koordinatenwerte in numerische Werte
unfall <- unfall %>%
  mutate(XGCSWGS84 = as.numeric(XGCSWGS84)) %>%
  mutate(YGCSWGS84 = as.numeric(YGCSWGS84))

4 Deskriptive Analyse

Im Folgenden wird näher auf die im Datensatz aufgeführten Attribute eingegangen. In den meisten Fällen werden die Daten durch ein Säulendiagramm grafisch dargestellt. Da die meisten untersuchten Variablen, abgesehen von den zeitlichen, kategorisch sind und keine unterliegende logische Reihenfolge aufweisen, ist eine Untersuchung auf Normalverteilung o.ä. hinfällig.

4.1 Zeit

Zunächst soll das Unfallaufkommen in Bezug auf verschiedene zeitliche Parameter (Monat, Wochentag, Uhrzeit) untersucht werden.

# Zusammenfassung der Variable UMONAT
unfall %>%
  group_by(UMONAT) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##      UMONAT      AnzahlUnfaelle  
##  Min.   : 1.00   Min.   : 786.0  
##  1st Qu.: 3.75   1st Qu.: 928.8  
##  Median : 6.50   Median :1139.5  
##  Mean   : 6.50   Mean   :1115.8  
##  3rd Qu.: 9.25   3rd Qu.:1228.0  
##  Max.   :12.00   Max.   :1448.0
# Erstellen eines Histogramms
unfall %>% 
  ggplot(., aes(x = UMONAT)) +
  scale_x_continuous(limits = c(0 , 13), breaks = seq(1, 12, by = 1), labels = c("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"), oob = oob_keep) +
  scale_y_continuous(limits = c(0, 1600), breaks = seq(0, 1600, by = 250)) + 
  geom_histogram(binwidth = 1, color = "grey") +
  theme_minimal() +
  labs(title = "Unfallverteilung nach Monat", y = "Anzahl Unfälle") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), axis.title.x=element_blank())

Über das Jahr hinweg schwanken die Unfallzahlen zwischen einem Minimum im Februar (786) und einem Maximum im Juni (1448), wobei der Durchschnitt bei 1115.8 Unfällen im Monat liegt. Die Sommer- und Herbstmonate (Mai bis Oktober) verzeichnen gegenüber den Winter- und Frühlingsmonaten eine größere Anzahl von Unfällen. Die Spitzen in Juni und August gehen einher mit Beginn und Ende der Ferienzeit und dem dadurch vermehrten Reiseverkehr. Die flache, nahezu symmetrische Glockenform spricht für eine Normalverteilung mit hoher Standardabweichung, der Einbruch im Juli spricht wiederum dagegen, da die Kurve somit bimodal ist.

# Zusammenfassung der Variable UWOCHENTAG
unfall %>%
  group_by(UWOCHENTAG) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##    UWOCHENTAG  AnzahlUnfaelle
##  Min.   :1.0   Min.   : 988  
##  1st Qu.:2.5   1st Qu.:1804  
##  Median :4.0   Median :2131  
##  Mean   :4.0   Mean   :1913  
##  3rd Qu.:5.5   3rd Qu.:2207  
##  Max.   :7.0   Max.   :2248
# Erstellen eines Histogramms
unfall %>%
  ggplot(., aes(x = UWOCHENTAG)) +
  scale_x_continuous(limits = c(0,8), breaks = seq(1,7, by = 1), labels = c("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag" , "Samstag"), oob = oob_keep) +
  scale_y_continuous(limits = c(0, 2500), breaks = seq(0, 2500, by = 500)) +
  geom_histogram(binwidth = 1, color = "grey") +
  theme_minimal() +
  labs(title = "Unfallverteilung nach Wochentag", y = "Anzahl Unfälle") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), axis.title.x=element_blank())

Die Unfallzahlen an Werktagen unterscheiden sich kaum. Insgesamt gab es an jedem Werktag in 2019 über 2000 Unfälle, wobei der Dienstag mit 2248 Unfällen leicht vorne liegt. Im Vergleich dazu sind die Zahlen am Wochenende bedeutend niedriger. Schon an Samstagen ist ein deutlicher Abfall zu erkennen und an Sonntagen verunglückten nur weniger als die Hälfte (988) im Vergleich zu unter der Woche. Da die Zahlen unter der Woche nahezu identisch sind, am Wochenende jedoch deutlich niedriger liegen, wird hier nicht von einer Normalverteilung gesprochen.

# Zusammenfassung der Variable USTUNDE
unfall %>%
  group_by(USTUNDE) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##     USTUNDE      AnzahlUnfaelle  
##  Min.   : 0.00   Min.   :  58.0  
##  1st Qu.: 5.75   1st Qu.: 181.0  
##  Median :11.50   Median : 681.5  
##  Mean   :11.50   Mean   : 557.9  
##  3rd Qu.:17.25   3rd Qu.: 813.5  
##  Max.   :23.00   Max.   :1158.0
# Erstellen eines Histogramms
unfall %>%
  ggplot(., aes(x = USTUNDE)) +
  scale_x_continuous(limits = c(-1 ,24), breaks = seq(0,23, by = 1), oob = oob_keep) +
  scale_y_continuous(limits = c(0, 1200), breaks = seq(0, 1250, by = 250)) +
  geom_histogram(binwidth = 1, color = "grey") +
  geom_hline(aes(yintercept = 557.9)) +
  geom_text(aes(0, 557.9, label = "Durchschnitt", vjust = - 1)) +
  theme_minimal() +
  labs(title = "Unfallverteilung nach Uhrzeit", x = "Uhrzeit",  y = "Anzahl Unfälle")

Über den Tag verteilt liegt der niedrigste Wert um 4 Uhr morgens bei 58 Unfällen und der höchste Wert genau 12 Stunden später um 16 Uhr bei 1158 Unfällen. Ein rapider Anstieg ist zu 7 Uhr zum ersten Schub des Berufsverkehrs zu verzeichnen. Zum frühen Mittag entspannt sich die Lage wieder etwas um dann zu 16 Uhr in der Hauptverkehrszeit ihren Höhepunkt zu erreichen. Nach 17 Uhr folgt ein deutliches Absinken der Zahlen, welches sich bis 2 Uhr morgens fortsetzt und dort bis 4 Uhr nahezu stagniert. Auch diese Kurve ist eindeutig bimodal und stellt daher keine Normalverteilung dar.

4.2 Straßenzustand und Lichtverhältnisse

Nun wird die Unfallverteilung in Hinblick auf die äußeren Parameter Straßenzustand und Lichtverhältnisse untersucht. Im Gegensatz zu den zeitlichen Parametern ist hier vor allem in der Analyse zu beachten, dass das Vorkommen der einzelnen Ausprägungen nicht gleichmäßig verteilt ist. So nimmt die Dämmerung nur einen kleinen Teil des Tages ein und das Vorkommen von Glätte auf Straßen ist auf die Wintermonate beschränkt.

# Zusammenfassung der Variable USTRZUSTAND
unfall %>%
  group_by(USTRZUSTAND) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##   USTRZUSTAND  AnzahlUnfaelle 
##  Min.   :0.0   Min.   :    1  
##  1st Qu.:0.5   1st Qu.:   34  
##  Median :1.0   Median : 1618  
##  Mean   :1.0   Mean   : 3348  
##  3rd Qu.:1.5   3rd Qu.: 4931  
##  Max.   :2.0   Max.   :10154  
##  NA's   :1
# Erstellen eines Barcharts
unfall %>%
  drop_na() %>%
  ggplot(., aes(x = USTRZUSTAND)) +
  scale_x_continuous(limits = c(-1, 3), breaks = seq(0, 2, by = 1), labels = c("trocken", "nass / feucht / schlüpfrig", "winterglatt"), oob = oob_keep) +
  scale_y_continuous(limits = c(0, 11000), breaks = seq(0, 11000, by = 2000)) +
  geom_bar(width = 0.5, color = "grey") +
  theme_minimal() +
  labs(title = "Unfallverteilung nach Straßenzustand", y = "Anzahl Unfälle") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), axis.title.x=element_blank())

Der Großteil der Unfälle in 2019 fanden auf trockenen Straßen statt (10154). 1618 passierten bei nasser, feuchter oder anderweitig schlüpfriger Fahrbahn und nur 34 sind der Winterglätte zuzuschreiben. Hierbei spielt natürlich mit herein, dass die Straßen die meiste Zeit trocken sind und nur verhältnismäßig selten nass oder überfroren.

# ZUsammenfassung der Variable ULICHTVERH
unfall %>%
  group_by(ULICHTVERH) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##    ULICHTVERH  AnzahlUnfaelle
##  Min.   :0.0   Min.   : 724  
##  1st Qu.:0.5   1st Qu.:1766  
##  Median :1.0   Median :2808  
##  Mean   :1.0   Mean   :4463  
##  3rd Qu.:1.5   3rd Qu.:6333  
##  Max.   :2.0   Max.   :9858
# Erstellen eines Barcharts
unfall %>%
  ggplot(., aes(x = ULICHTVERH)) +
  scale_x_continuous(limits = c(-1, 3), breaks = seq(0, 2, by = 1), labels = c("Tageslicht", "Dämmerung", "Dunkelheit"), oob = oob_keep) +
  scale_y_continuous(limits = c(0, 10000), breaks = seq(0, 10000, by = 2000)) +
  geom_bar(width = 0.5, color = "grey") +
  theme_minimal() +
  labs(title = "Unfallverteilung nach Lichtverhältnissen", y = "Anzahl Unfälle") +
  theme(axis.title.x=element_blank())

Die meisten Unfälle fanden tagsüber statt (9858). 2808 passierten bei Dunkelheit und 724 bei Dämmerlicht. Analog zu den Straßenverhältnissen, muss beachtet werden, dass Dämmerlicht nur während eines kleinen Teils des Tages vorherrschen kann.

4.3 Unfallbeteiligte

Besonders interessant ist auch die Frage nach den beteiligten Verkehrsteilnehmern. Auch hier ist anzumerken, dass die Verkehrsteilnehmer nicht zu gleichen Anteilen im Straßenverkehr vertreten sind. Weiterhin wird nur die Beteiligung am Unfall angegeben, nicht aber die Zahl der Beteiligten oder gar der oder die Unfallverursachende.

# Errechnen der Anzahl der Unfälle an denen jeweils mindestens einer dieser Verkehrsteilnehmergruppem beteiligt war
unfallBeteiligte <- as.data.frame(c(count(filter(unfall, IstFuss == 1)), count(filter(unfall, IstRad == 1)), count(filter(unfall, IstPKW == 1)), count(filter(unfall, IstKrad == 1)), count(filter(unfall, IstGkfz == 1)), count(filter(unfall, IstSonstige == 1))))

# Erstellen eines Data Frames für die Erstellung eines Diagramms
unfallBeteiligte <- unfallBeteiligte %>%
  t() %>%
  cbind(c("Fußgänger:innen", "Radfahrer:innen", "PKWs", "Krafträder", "Güterkraftfahrzeuge",  "Sonstige")) %>%
  as.data.frame() %>%
  transform(V1 = as.numeric(V1))

# Erstellen eines Barcharts
unfallBeteiligte %>%
  ggplot(., aes(x = V2, y = V1)) +
  theme_minimal() +
  geom_col(color = "grey") +
  scale_y_continuous(limits = c(0, 11000), breaks = seq(0, 10000, by = 2000)) +
  labs(title = "Unfallverteilung nach Beteiligten", y = "Anzahl Unfälle") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), axis.title.x=element_blank())

Da der PKW auf den Straßen das prädominante Verkehrsmittel ist, sind auch an den meisten Unfällen PKWs beteiligt. An zweiter Stelle stehen die Radfahrer:innen, gefolgt von Fußgänger:innen und Krafträdern. Güterkraftfahrzeuge sind nur sehr selten an Unfällen beteiligt.

Die Schwere des Unfalls wird in die drei Kategorien Leichtverletzte, Schwerverletzte und Tote eingeteilt, wobei jeweils die schwerste Verletzung ausschlaggebend ist. Da jede Art Unfallbeteiligte eine eigene Variable ist, ist die Erstellung des Diagramms wie im Folgenden zu sehen, etwas aufwändiger.

# Errechnen der Gesamtzahl der Unfälle nach Verkehrsmittel und Unfallschwere
Fuss <- unfall %>%
  select(IstFuss, UKATEGORIE) %>%
  filter(IstFuss == 1) %>%
  mutate(unfaelleInsgesamt = sum(IstFuss)) %>%
  group_by(UKATEGORIE, unfaelleInsgesamt) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/(unfaelleInsgesamt))
## `summarise()` has grouped output by 'UKATEGORIE'. You can override using the `.groups` argument.
Rad <- unfall %>%
  select(IstRad, UKATEGORIE) %>%
  filter(IstRad == 1) %>%
  mutate(unfaelleInsgesamt = sum(IstRad)) %>%
  group_by(UKATEGORIE, unfaelleInsgesamt) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/(unfaelleInsgesamt))
## `summarise()` has grouped output by 'UKATEGORIE'. You can override using the `.groups` argument.
PKW <- unfall %>%
  select(IstPKW, UKATEGORIE) %>%
  filter(IstPKW == 1) %>%
  mutate(unfaelleInsgesamt = sum(IstPKW)) %>%
  group_by(UKATEGORIE, unfaelleInsgesamt) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/(unfaelleInsgesamt))
## `summarise()` has grouped output by 'UKATEGORIE'. You can override using the `.groups` argument.
KRad <- unfall %>%
  select(IstKrad, UKATEGORIE) %>%
  filter(IstKrad == 1) %>%
  mutate(unfaelleInsgesamt = sum(IstKrad)) %>%
  group_by(UKATEGORIE, unfaelleInsgesamt) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/(unfaelleInsgesamt))
## `summarise()` has grouped output by 'UKATEGORIE'. You can override using the `.groups` argument.
GKFZ <- unfall %>%
  select(IstGkfz, UKATEGORIE) %>%
  filter(IstGkfz == 1) %>%
  mutate(unfaelleInsgesamt = sum(IstGkfz)) %>%
  group_by(UKATEGORIE, unfaelleInsgesamt) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/(unfaelleInsgesamt))
## `summarise()` has grouped output by 'UKATEGORIE'. You can override using the `.groups` argument.
Sonstige <- unfall %>%
  select(IstSonstige, UKATEGORIE) %>%
  filter(IstSonstige == 1) %>%
  mutate(unfaelleInsgesamt = sum(IstSonstige)) %>%
  group_by(UKATEGORIE, unfaelleInsgesamt) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/(unfaelleInsgesamt))
## `summarise()` has grouped output by 'UKATEGORIE'. You can override using the `.groups` argument.
# Erstellen eines gemeinsamen Data Frames
Unfallschwere <- bind_rows(list(Fuss=Fuss, Rad=Rad, PKW=PKW, KRad=KRad, GKFZ=GKFZ, Sonstige=Sonstige), .id = 'Verkehrsmittel')


# Erstellen eines gemeinsamen Barcharts
Unfallschwere %>%
  ggplot(., aes(x = UKATEGORIE , fill = Verkehrsmittel, y = Prozente)) +
  theme_minimal() +
  geom_bar(position = "dodge", stat = "identity") +
  scale_y_continuous(limits = c(0,1), labels = percent) +
  scale_x_continuous(limits = c(0,4), breaks = seq(1, 3, by =1), labels = c("Tote", "Schwerverletzte", "Leichtverletzte")) +
  scale_fill_grey(name = "Verkehrsmittel",  labels = c("Fußgänger", "Güterkraftfahrzeuge", "Krafträder", "PKWs", "Fahrräder", "Sonstige")) +
  labs(title = "Unfallschwere nach Verkehrsteilnehmern") +
  theme(axis.title.y=element_blank(), axis.title.x=element_blank())

Unabhängig von der Art der Unfallbeteiligten werden die meisten Opfer von Verkehrsunfällen mit Personenschaden nur leicht verletzt. Wie oben festgestellt, sind Güterkraftfahrzeuge verhältnismäßig selten an Unfällen mit Personenschaden beteiligt. Jedoch ist der Anteil der Beteiligungen an Unfällen mit tödlichem Ausgang im Vergleich zu den anderen Verkehrsteilnehmenden erhöht. Auch Fußgänger:innen sind verhaltnismäßig oft an schweren Unfällen (Todesfolge oder Schwerverletzte) beteiligt.

4.4 Orte

Die Unfallzahlen pro Berliner Bezirk werden nicht als Säulendiagramm, sondern als einfache Heatmap grafisch dargestellt. Die Grafik wird unter Zuhilfenahme einer Shapefile-Datei des Geoportals Berlin (Geoportal Berlin, 2017) erstellt.

# Zusammenfassung der Variable BEZ
unfall %>%
  group_by(BEZ) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##       BEZ        AnzahlUnfaelle  
##  Min.   : 1.00   Min.   : 586.0  
##  1st Qu.: 3.75   1st Qu.: 837.8  
##  Median : 6.50   Median : 913.0  
##  Mean   : 6.50   Mean   :1115.8  
##  3rd Qu.: 9.25   3rd Qu.:1276.0  
##  Max.   :12.00   Max.   :2215.0
# Einlesen einer Shapefile-Karte der Bezirke von Berlin
download.file("https://box.hu-berlin.de/f/2142622630f44fd2a54d/?dl=1", destfile = "./bezirksgrenzen.shp.zip", mode = "wb")
unzip("./bezirksgrenzen.shp.zip")
shapes <- read_sf("bezirksgrenzen.shp")
view(shapes)

#Zusammenzählen der Unfälle pro Bezirk
bezUnfall <- unfall %>%
  group_by(BEZ) %>%
  summarize(AnzahlUnfaelle = n())

# Zuordnung der Klarnamen der Bezirke zu den jeweiligen Unfallzahlen
Bezirke <- c("Mitte", "Friedrichshain-Kreuzberg", "Pankow", "Charlottenburg-Wilmersdorf", "Spandau", "Steglitz-Zehlendorf", "Tempelhof-Schöneberg", "Neukölln", "Treptow-Köpenick", "Marzahn-Hellersdorf", "Lichtenberg", "Reinickendorf")
bezUnfall$Bezirke <- Bezirke

# Umsortieren der Tabelle "bezUnfall", sodass die Reihenfolge der Bezirke mit der in der Shapefile-Datei übereinstimmt
bezUnfall <- bezUnfall %>%
    arrange(match(Bezirke, c("Reinickendorf", "Charlottenburg-Wilmersdorf", "Treptow-Köpenick", "Pankow", "Neukölln", "Lichtenberg", "Marzahn-Hellersdorf", "Spandau", "Steglitz-Zehlendorf", "Mitte", "Friedrichshain-Kreuzberg",  "Tempelhof-Schöneberg"), desc(AnzahlUnfaelle), desc(BEZ)))
                  
# Erstellen einer Heatmap der Unfallverteilung nach Bezirken
bezUnfall %>%
  ggplot(., aes()) +
  geom_sf(data = shapes, aes(fill = bezUnfall$AnzahlUnfaelle)) +
  scale_fill_gradient(low = "white", high = "black", limits = c(0, 2500)) +
  labs(title = "Karte der Unfallverteilung nach Bezirken", fill = "Anzahl der Unfälle")

Es ist eine klare Häufung der Unfälle im Stadtzentrum zu erkennen. Die meisten Unfälle geschahen im Bezirk Mitte (2215), gefolgt von Charlottenburg-Wilmersdorf (1727) und Friedrichshain-Kreuzberg (1381). Die niedrigste Unfallzahl kann Marzahn-Hellersdorf mit nur 586 Unfällen vorweisen.

4.5 Straßen/Kieze

Die ca. 9500 Straßen Berlins wurden zu etwa 440 Straßenbereichen zusammengefasst. Dies umgeht auch die mehrfache Vergabe von Straßennamen in verschiedenen Bezirken, die sonst womöglich zu Problemen geführt hätte.

# Zusammenfassung der Variable STRASSE
unfall %>%
  group_by(STRASSE) %>%
  summarize(AnzahlUnfalle = n()) %>%
  summary(unfall$STRASSE)
##    STRASSE          AnzahlUnfalle   
##  Length:441         Min.   :  1.00  
##  Class :character   1st Qu.: 12.00  
##  Mode  :character   Median : 24.00  
##                     Mean   : 30.36  
##                     3rd Qu.: 41.00  
##                     Max.   :177.00
# Erstellen einer absteigenden Liste der Straßen mit den meisten Unfällen
unfall %>%
  group_by(STRASSE) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  arrange(desc(AnzahlUnfaelle)) %>%
  print(n = 10)
## # A tibble: 441 x 2
##    STRASSE                AnzahlUnfaelle
##    <chr>                           <int>
##  1 Alexanderplatzviertel             177
##  2 Samariterviertel                  124
##  3 Reinickendorfer Straße            115
##  4 Manteuffelstraße                  110
##  5 Reuterkiez                        110
##  6 Rüdigerstraße                     110
##  7 Breitscheidplatz                  109
##  8 Oranienburger Straße              108
##  9 Humboldthain Nordwest             107
## 10 Charitéviertel                    106
## # ... with 431 more rows

Da im Datensatz 441 verschiedene Straßenabschnitte bzw. Kieze vorkommen und die Analyse der Unfallhotspots unter Zuhilfenahme der geografischen Daten (XGCSWGS84 und YGCSWGS84) im weiteren Verlauf dieser Arbeit in Form einer Web-Applikation vorgenommen werden soll, wird an dieser Stelle auf eine ausführliche grafische Darstellung verzichtet. Die Top 3 Unfallorte sind das Alexanderplatzviertel in Mitte, das Samariterviertel in Friedrichshain und die Reinickendorfer Straße im Wedding in Mitte. Die Straßenabschnitte mit den niedrigsten Werten sind im Datensatz nicht aufgeführt, da nur Abschnitte genannt werden, auf denen sich mindestens ein Unfall ereignet hat.

4.6 Unfalltyp und -art

Die Kategorien Unfalltyp und Unfallart müssen an dieser Stelle genauer definiert werden, da sie auf den ersten Blick dasselbe beschreiben. Der Unfalltyp bezieht sich auf die dem Unfall unmittelbar vorausgehende Situation, wohingegen die Unfallart beschreibt auf welche Art das Unglück geschah.

# Zusammenfassung der Variable UTYP1
unfall %>%
  group_by(UTYP1) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##      UTYP1     AnzahlUnfaelle
##  Min.   :1.0   Min.   : 956  
##  1st Qu.:2.5   1st Qu.:1108  
##  Median :4.0   Median :1235  
##  Mean   :4.0   Mean   :1913  
##  3rd Qu.:5.5   3rd Qu.:2866  
##  Max.   :7.0   Max.   :3253
# Erstellen eines Barcharts
unfall %>%
  ggplot(., aes(x = UTYP1)) +
  scale_x_continuous(limits = c(0, 8), breaks = seq(1, 7, by = 1), labels = c("Fahrunfall", "Abbiegeunfall", "Einbiegen/Kreuzen-Unfall", "Überschreiten-Unfall",    "Unfall durch ruhenden Verkehr", "Unfall im Längsverkehr", "sonstiger Unfall"), oob = oob_keep) +
  scale_y_continuous(limits = c(0, 3300), breaks = seq(0, 3300, by = 500)) +
  geom_bar(width = 1, color = "grey") +
  theme_minimal() +
  labs(title = "Unfallverteilung nach Typ", y = "Anzahl Unfälle") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), axis.title.x=element_blank())

Am häufigsten geschehen Unfälle beim Abbiegen, Einbiegen/Kreuzen und im Längsverkehr. Unfälle durch das Überqueren der Fahrbahn, durch ruhenden Verkehr oder im normalen Fahrgeschehen sind hingegen verhältnismäßig selten.

# Zusammenfassung der Variable UART
unfall %>%
  group_by(UART) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  summary(AnzahlUnfaelle)
##       UART      AnzahlUnfaelle  
##  Min.   :0.00   Min.   :  16.0  
##  1st Qu.:2.25   1st Qu.: 127.0  
##  Median :4.50   Median : 909.5  
##  Mean   :4.50   Mean   :1339.0  
##  3rd Qu.:6.75   3rd Qu.:1820.2  
##  Max.   :9.00   Max.   :5030.0
# Erstellen eines Barcharts
unfall %>%
  ggplot(., aes(x = UART)) +
  scale_x_continuous(limits = c(-1, 10), breaks = seq(0, 9, by = 1), labels = c("Unfall anderer Art", "Zusammenstoß mit anfahrendem/ \n anhaltendem/ruhendem Fahrzeug", "Zusammenstoß mit vorausfahrendem/ \n wartendem Fahrzeug", "Zusammenstoß mit seitlich in gleicher \n Richtung fahrendem Fahrzeug", "Zusammenstoß mit \n entgegenkommendem Fahrzeug", "Zusammenstoß mit einbiegendem/ \n kreuzendem Fahrzeug", "Zusammenstoß zwischen Fahrzeug \n und Fußgänger", "Aufprall auf Fahrbahnhindernis", "Abkommen von Fahrbahn \n nach rechts", "Abkommen von Fahrbahn \n nach links"), oob = oob_keep) +
  scale_y_continuous(limits = c(0, 5100), breaks = seq(0, 5000, by = 1000)) +
  geom_bar(width = 1, color = "grey") +
  theme_minimal() +
  labs(title = "Unfallverteilung nach Art", y = "Anzahl Unfälle") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1), axis.title.x=element_blank())

Die meisten Unfälle (5030) sind solche mit einbiegendem oder kreuzendem Fahrzeug. Schon an dritter Stelle stehen Zusammenstöße zwischen Fahrzeug und Fußgängern. Unfälle, die durch Fahrbahnhindernisse oder das Abkommen von der Fahrbahn entstehen sind hingegen sehr selten.

Die hier grafisch dargestellten Sachverhalte decken sich mit den Ergebnissen des Berichts der Landespolizeidirektion (Landespolizeidirektion Stab 14 Verkehr, 2020a).

5 Relationen und deduktive Analyse

5.1 Besonders gefährliche Unfälle

Aufgrund des ungleichen Kräfteverhältnisses ist davon auszugehen, dass Unfälle von Güterkraftfahrzeugen mit wenig geschützten Verkehrsteilnehmenden wie Fußgänger:innen und Radfahrer:innen besonders häufig zu Schwerverletzten und Toten führen. Dies geht auch aus verschiedenen Untersuchungen bereits hervor (Malczyk, 2019; Verlag für Rechtsjournalismus, 2021).

Zunächst wird der Anteil der Unfälle mit Todesfolge insgesamt mit dem Anteil der Unfälle mit Todesfolge, an denen Güterkraftfahrzeuge und Fußgänger:innen und/oder Radfahrer:innen beteiligt waren, verglichen.

# Erstellen eines Datensatzes für Unfälle mit GKFZ-Beteiligung und Fußgänger:innen- und/oder Radfahrer:innen-Beteiligung
GKFZRadFuss <- unfall %>%
  filter(IstGkfz == 1) %>%
  filter((IstRad == 1 & IstFuss == 1) | (IstRad == 0 & IstFuss == 1) | (IstRad == 1 & IstFuss == 0)) %>%
  mutate(unfaelleInsgesamt = sum(IstGkfz)) %>%
  group_by(UKATEGORIE, unfaelleInsgesamt) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/(unfaelleInsgesamt))
## `summarise()` has grouped output by 'UKATEGORIE'. You can override using the `.groups` argument.
# Errechnen der jeweiligen prozentualen Anteile der Unfallkategorie
alle <- unfall %>%
  filter(!(IstGkfz == 1 & IstRad == 1)) %>%
  filter(!(IstGkfz == 1 & IstFuss == 1)) %>%
  group_by(UKATEGORIE) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  mutate(Prozente = (AnzahlUnfaelle)/13241)

# Erstellen eines gemeinsamen Datensatzes
vergleich <- bind_rows(list("restliche Unfälle" = alle, "GKFZ mit Rad-/ \n Fußgängerbeteiligung" = GKFZRadFuss), .id = 'Unfälle')

# Erstellen eines gemeinsamen Barcharts
vergleich %>%
  ggplot(., aes(x = UKATEGORIE, y = Prozente, fill = Unfälle)) +
  theme_minimal() +
  scale_y_continuous(limits = c(0,1), labels = percent) +
  scale_x_continuous(limits = c(0,4), breaks = seq(1, 3, by =1), labels = c("Tote", "Schwerverletzte", "Leichtverletzte")) +
  scale_fill_grey() +
  geom_bar(stat = "identity",  position = "dodge", width = 0.5) +
  labs(title = "Vergleich Anteile Unfälle insgesamt vs mit GKFZ") +
  theme(axis.title.x=element_blank())

Wie im obigen Diagramm deutlich wird, sind die Anteile der GKFZ-Unfälle mit schweren Folgen erhöht. Somit kann folgende Hypothese aufgestellt werden:

H1: Unfälle mit GKFZ-Beteiligung insbesondere in Kombination mit Radfahrer:innen und/oder Fußgänger:innen haben aufgrund des ungleichen Kräfteverhältnisses zwischen den beteiligten Parteien besonders häufig schwerwiegende Folgen.

Die dazugehörige Nullhypothese lautet:

H0: Unfälle von GKFZ und Fußgänger:innen/Radfahrer:innen enden nicht signifikant öfter tödlich oder mit Schwerverletzten als andere.

Um diesen Unterschied auf statistische Signifikanz zu testen, wird Pearson’s Chi-Quadrat-Test durchgeführt. Es wird so getestet, ob ein Zusammenhang zwischen Fahrzeugbeteiligung und Unfallschwere existiert.

chisq.test(alle$AnzahlUnfaelle, GKFZRadFuss$AnzahlUnfaelle)
## Warning in chisq.test(alle$AnzahlUnfaelle, GKFZRadFuss$AnzahlUnfaelle): Chi-
## squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  alle$AnzahlUnfaelle and GKFZRadFuss$AnzahlUnfaelle
## X-squared = 6, df = 4, p-value = 0.1991

Aufgrund der teilweise sehr niedrigen Werte wird eine Warnung ausgegeben. Es wird daher alternativ der Exakte Test nach Fisher angewandt.

fisher.test(alle$AnzahlUnfaelle, GKFZRadFuss$AnzahlUnfaelle)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  alle$AnzahlUnfaelle and GKFZRadFuss$AnzahlUnfaelle
## p-value = 1
## alternative hypothesis: two.sided

Da beim Chi-Quadrat-Test nur ein p-Wert von 0.1991 und beim Fisher-Test sogar ein p-Wert von 1 ausgegeben wird, kann die Nullhypothese nicht abgelehnt werden. Auf Grundlage der vorliegenden Daten muss davon ausgegangen werden, dass der Ausgang von Unfällen von Güterkraftfahrzeugen und Fahrradfahrer:innen oder Fußgänger:innen sich nicht signifikant von denen anderer Verkehrsteilnehmer:innen unterscheidet.

5.2 Hotspots

Zur Identifikation von Unfallhotspots für Fahrradfahrer:innen und Fußgänger:innen soll zunächst jeweils eine Dichtekarte erstellt werden.

# Dichtekarte Radfahrer:innen
unfall %>% 
  filter(IstRad == 1) %>%
ggplot(., aes(x=XGCSWGS84, y=YGCSWGS84)) +
  stat_density_2d(aes(fill = ..level..), geom = "polygon") +
  labs(fill="Anzahl Unfälle", title = "Dichtekarte der Unfälle mit Fahrradbeteiligung") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank())

# Dichtekarte Fußgänger:innen
unfall %>% 
  filter(IstFuss == 1) %>%
ggplot(., aes(x=XGCSWGS84, y=YGCSWGS84)) +
  stat_density_2d(aes(fill = ..level..), geom = "polygon") +
  labs(fill="Anzahl Unfälle",  title =  "Dichtekarte der Unfälle mit Fußgänger:innenbeteiligung") +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank())

Analog zu Lakes’ Ergebnissen (Lakes, 2017), ist eine klarer Schwerpunkt zur Stadtmitte hin zu erkennen, welcher bei den Fußgänger:innen etwas weiter gefasst ist als bei den Radfahrer:innen mit insgesamt niedrigeren Dichten.

unfall %>%
  filter(IstRad == 1) %>%
  group_by(STRASSE) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  arrange(desc(AnzahlUnfaelle)) %>%
  print(n = 37)
## # A tibble: 418 x 2
##    STRASSE                              AnzahlUnfaelle
##    <chr>                                         <int>
##  1 Alexanderplatzviertel                            81
##  2 Oranienburger Straße                             68
##  3 Samariterviertel                                 61
##  4 Charitéviertel                                   56
##  5 Lausitzer Platz                                  55
##  6 Reuterkiez                                       53
##  7 Unter den Linden Nord                            50
##  8 Wilhelmstraße                                    50
##  9 Pankow Süd                                       49
## 10 Rüdigerstraße                                    49
## 11 Schloßstraße                                     48
## 12 Breitscheidplatz                                 46
## 13 Andreasviertel                                   45
## 14 Urbanstraße                                      43
## 15 Viktoriapark                                     43
## 16 Boxhagener Platz                                 42
## 17 Leipziger Straße                                 42
## 18 Humboldthain Nordwest                            41
## 19 Oranienplatz                                     41
## 20 Mehringplatz                                     40
## 21 Pankow Zentrum                                   40
## 22 Nördlicher Landwehrkanal                         39
## 23 Arnimplatz                                       38
## 24 Graefekiez                                       36
## 25 Adlershof West                                   35
## 26 Falkplatz                                        35
## 27 Invalidenstraße                                  34
## 28 Kaiser-Wilhelm-Platz                             34
## 29 Traveplatz                                       34
## 30 Wriezener Bahnhof/Entwicklungsgebiet             34
## 31 Gesundbrunnen                                    33
## 32 Heine-Viertel West                               33
## 33 Karl-Marx-Allee                                  33
## 34 Niederschönhausen                                33
## 35 Dammvorstadt                                     32
## 36 Friedenau                                        32
## 37 Moritzplatz                                      32
## # ... with 381 more rows
unfall %>%
  filter(IstFuss == 1) %>%
  group_by(STRASSE) %>%
  summarize(AnzahlUnfaelle = n()) %>%
  arrange(desc(AnzahlUnfaelle)) %>%
  print(n = 20)
## # A tibble: 372 x 2
##    STRASSE                              AnzahlUnfaelle
##    <chr>                                         <int>
##  1 Alexanderplatzviertel                            36
##  2 Rixdorf                                          27
##  3 Samariterviertel                                 25
##  4 Breitscheidplatz                                 24
##  5 Carl-Schurz-Straße                               21
##  6 Nollendorfplatz                                  21
##  7 Rüdigerstraße                                    21
##  8 Mehringplatz                                     19
##  9 Neu-Tempelhof                                    17
## 10 Buckow Mitte                                     16
## 11 Charitéviertel                                   16
## 12 Dammvorstadt                                     16
## 13 Reinickendorfer Straße                           16
## 14 Schloßstraße                                     16
## 15 Oranienburger Straße                             15
## 16 Borkumer Straße                                  14
## 17 Greifswalder Straße                              14
## 18 Wriezener Bahnhof/Entwicklungsgebiet             14
## 19 Droysenstraße                                    13
## 20 Gesundbrunnen                                    13
## # ... with 352 more rows

Der bei Lakes (Lakes, 2017) noch für Fahrräder als mit am gefährlichsten gehandelte Moritzplatz liegt nun in der Rangliste nur noch auf Platz 37. Diese erfreuliche Veränderung ist auf eine Ummarkierung des Moritzplatzes im Frühjahr 2015 zurückzuführen, die die Unfälle mit Fahrradbeteiligung innerhalb eines Jahres um 37% reduzieren konnte (Pressestelle, 2016). Die Einflüsse dieser Veränderung spielen nur in einen kleinen Teil des Datensatzes von Lakes mit herein, da dieser Daten von 2011 bis 2015 verwendete.

Das Alexanderplatzviertel ist weiterhin aufgrund seiner zentralen Lage und den hohen Verkehrszahlen sowohl bei Fußgänger:innen als auch bei Radfahrer:innen für die meisten Unfälle verantwortlich. Auch die Oranienburger Straße, die Rüdigerstraße, das Samariterviertel und das Charitéviertel gehören noch immer zu den Unfallhotspots.

Die grafische Darstellung einer solchen Menge Daten in statischer Form stößt schnell an Grenzen. Eine zoombare, mit weiteren Angaben angereicherte Alternative ist daher sinnvoll.

5.3 Shiny-App

Auf Basis der bisher erlangten Erkenntnisse soll im Folgenden eine interaktive Web-Applikation mit dem R-Package Shiny erstellt werden. Sie soll eine Karte von Berlin zeigen, auf welcher alle Unfälle des Datensatzes mit ihren Koordinaten verortet wurden. Darüber hinaus soll der Nutzer in der Lage sein, die Unfälle nach der Unfallschwere, den Unfallbeteiligten, dem Monat und dem Wochentag zu filtern. Beim Anklicken eines spezifischen Markers soll zudem angezeigt werden, welche Arten von Verkehrsteilnehmern (neben den gegebenenfalls Ausgewählten) an dem Unfall beteiligt waren.

Hierfür muss zunächst der Datensatz noch etwas bearbeitet werden. Es wird eine Zeile ausgeschlossen, in der die Koordinaten fehlerhaft waren und deswegen entfernt wurden, da sich dieser Unfall demnach nicht auf der Karte verorten lässt. Nachfolgend werden alle Koordinaten in numerische Werte umgewandelt. Dann wird der Popup-text erstellt, indem, wenn die Art Verkehrsteilnehmer beteiligt war, der Name in einer neuen Spalte gespeichert wird und danach diese Spalten in die neue Spalte “Popup” zusammengeführt werden. Für eine online aufrufbare Version der Applikation [https://cmhinrichs.shinyapps.io/CrashMapBerlin2019/) wird die bearbeitete Version des Datensatzes extern gespeichert.

# Bereinigung der Koordinaten, Erstellen des Popup-Textes
unfall <- unfall %>%
  drop_na() %>%
  mutate(Fahrrad = case_when(IstRad == 1 ~ "Fahrrad")) %>%
  mutate(Auto = case_when(IstPKW == 1 ~ "PKW")) %>%
  mutate(Fußgänger = case_when(IstFuss == 1 ~ "Fußgänger")) %>%
  mutate(KRad = case_when(IstKrad == 1 ~ "KRad")) %>%
  mutate(GKFZ = case_when(IstGkfz == 1 ~ "GKFZ")) %>%
  mutate(Sonstige = case_when(IstSonstige == 1 ~ "Sonstige")) %>%
  unite(Popup, Fahrrad:Sonstige, sep=", ", na.rm = TRUE)

# Zuordnen einer Markerfarbe zur jeweiligen Unfallkategorie
unfall <- unfall %>%
  mutate(color = case_when(UKATEGORIE == 1 ~ "red",
                            UKATEGORIE == 2 ~ "orange",
                            UKATEGORIE == 3 ~ "green"))

# Speichern eines für die Applikation angepassten Datensets, welches seperat geladen werden kann, damit die App außerhalb dieses Dokuments funktionieren kann
write_csv(unfall, file = "unfall2.csv")

In der Sidebar finden sich die Filtermöglichkeiten. Da jeweils die Option “Alle” vorhanden sein sollte um den Datensatz auch in seiner Gänze darstellen zu können, wurde sich gegen einen Slider-Input für Monate und Wochentage entschieden. Alle vier Auswahlbereiche werden daher durch Radiobuttons dargestellt, wobei sich jeweils nur eine option gleichzeitig auswählen lässt. Der Hauptbereich wird von der interativen Karte eingenommen, die die Daten gefiltert nach Input darstellt. Es kann herein- und hinausgezoomt werden. Wenn der Nutzer mit dem Cursor über einem einzelnen Marker verharrt, wird der Name des Straßenabschnitts angezeigt. Wird auf einen Marker geklickt, erscheint ein Popup, welches anzeigt, welche Arten von Verkehrsteilnehmern an dem jeweiligen Unfall beteiligt waren.

Eine Einfärbung der Marker je nach Schwere des Unfall war vorgesehen, konnte jedoch aufgrund von Komplikationen leider nicht zufriedenstellend implementiert werden. Die entsprechende Stelle im Code wurde auskommentiert und durch die für alle Kategorien geltende Farbe Rot ersetzt.

library(readr)
library(shiny)
library(tidyverse)
library(leaflet)
library(emojifont)
unfall2 <- read_csv("unfall2.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   .default = col_double(),
##   STRASSE = col_character(),
##   Popup = col_character(),
##   color = col_character()
## )
## i Use `spec()` for the full column specifications.
load.fontawesome()
# Shiny App

ui <- fluidPage(
    
    titlePanel("Unfälle mit Personenschaden in Berlin 2019"),
    
    sidebarLayout(fluid = TRUE,
                  
                  # Sidebar: Input
                  sidebarPanel(
                      # Input: Unfallfolgen
                      radioButtons("ausgang", "Unfallfolgen:",
                                   choiceNames = c("Alle",
                                                   "Leichtverletzte",
                                                   "Schwerverletzte", 
                                                   "Tote"),
                                   choiceValues = c(0, 1, 2, 3)
                      ),
                      
                      # Input: Beteiligte
                      radioButtons("beteiligte", "Unfallbeteiligte:",
                                   choices = c("Alle", 
                                               "Fahrrad", 
                                               "Fußgänger", 
                                               "PKW", 
                                               "GKFZ", 
                                               "KRad", 
                                               "Sonstige"),
                      ),
                      
                      # Input: Monat
                      radioButtons("monat", "Monat:",
                                   choiceNames = c("Alle", 
                                                   "Januar", 
                                                   "Februar", 
                                                   "März", 
                                                   "April", 
                                                   "Mai", 
                                                   "Juni", 
                                                   "Juli", 
                                                   "August", 
                                                   "September", 
                                                   "Oktober", 
                                                   "November", 
                                                   "Dezember"),
                                   choiceValues = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)       
                      ),
                      
                      # Input: Wochentag
                      radioButtons("wochentag", "Wochentag:",
                                   choiceNames = c("Alle", 
                                                   "Sonntag",
                                                   "Montag", 
                                                   "Dienstag", 
                                                   "Mittwoch", 
                                                   "Donnerstag", 
                                                   "Freitag", 
                                                   "Samstag"),
                                   choiceValues = c(0, 1, 2, 3, 4, 5, 6, 7)
                      ),
                      
                      width = 3
                  ),
                  
                  # Main Panel: Output
                  mainPanel(
                      
                      # Output: Interaktive Karte
                      leafletOutput("mapPlot", height = 800),
                      
                      width = 9
                      
                  )
    )
)


server <- function(input, output, session) {
    
    
    # Erzeugen eines gefilterten Datensets
    filteredData <- reactive({ 
        
        # Input: Unfallausgang
        if (input$ausgang == 0) {
            unfall2
        }
        else if(input$ausgang == 1) {
            unfall2 <- filter(unfall2, UKATEGORIE == 3)
        }
        else if(input$ausgang == 2) {
            unfall2 <- filter(unfall2, UKATEGORIE == 2)
        }
        else if(input$ausgang == 3) {
            unfall2 <- filter(unfall2, UKATEGORIE == 1)
        }
        
        # Input: Unfallbeteiligte
        # Anzeigen aller Unfälle
        if (input$beteiligte == 0) {
            unfall2
        }
        
        # Anzeigen Unfällte ausgewählter Unfallbeteiligter
        else if (input$beteiligte == "Fahrrad") {
            unfall2 <- filter(unfall2, IstRad == 1) 
        }
        else if (input$beteiligte == "Fußgänger") {
            unfall2 <- filter(unfall2, IstFuss == 1) 
        }
        else if (input$beteiligte == "PKW") {
            unfall2 <- filter(unfall2, IstPKW == 1)
        }
        else if (input$beteiligte == "GKFZ") {
            unfall2 <- filter(unfall2, IstGkfz == 1)
        }
        else if (input$beteiligte == "KRad") {
            unfall2 <- filter(unfall2, IstKrad == 1)
        }
        else if (input$beteiligte == "Sonstige") {
            unfall2 <- filter(unfall2, IstSonstige == 1)
        }
        
        # Input: Monat
        # Anzeigen aller Unfälle
        if (input$monat == 0){
            unfall2
        }
        # Anzeigen Unfälle ausgewählter Monate
        else {
            unfall2 <- filter(unfall2, UMONAT %in% input$monat)
        }
        
        # Input: Wochentag
        # Anzeigen aller Unfälle
        if (input$wochentag == 0){
            unfall2
        }
        # Anzeigen Unfälle ausgewählter Wochentage
        else {
            unfall2 <- filter(unfall2, UWOCHENTAG %in% input$wochentag)
        }
    }) 
    
    # Erzeugen der Grundkarte, noch ohne Marker
    output$mapPlot <- renderLeaflet({
        
        leaflet() %>%
            addTiles() %>% 
            setView(unfall2, lng=13.404954, lat=52.520007, zoom = 10)
        
    })  
    
    # Erzeugen der Icons
    Farbe <- awesomeIcons(
        icon = "ambulance",
        iconColor = "black",
        markerColor = "red", # eigentlich: unfall$color, um die Marker passend des Unfallausgangs einzufärben
        library = "fa"
    )
    
    # Erzeugen der Marker zur Karte auf Basis des gefilterten Datensets
    observe({ 
        
        unfall2 <- filteredData()
        
        leafletProxy("mapPlot", data = filteredData()) %>%
            clearMarkerClusters() %>%
            addAwesomeMarkers(lng = unfall2$XGCSWGS84, lat = unfall2$YGCSWGS84, icon = Farbe, label = unfall2$STRASSE, popup = unfall2$Popup, clusterOptions = markerClusterOptions(maxClusterRadius = 60))
        
    }) 
    
}

# Launch der Shiny App ----
shinyApp(ui, server)

Shiny applications not supported in static R Markdown documents

6 Diskussion

Diese Arbeit hatte zum einen das Ziel, den Zusammenhang zwischen Güterkraftfahrzeugbeteiligung und Unfallschwere zu untersuchen und zum anderen, Unfallhotspots für Radfahrer:innen und Fußgänger:innen zu identifizieren.

Bei der Untersuchung der Unfallschwere konnte die Nullhypothese auf Basis der vorliegenden Daten nicht abgelehnt werden. Wie u.a. bei Malczyk (2019) deutlich wird, ist jedoch ein Zusammenhang zwischen Unfällen mit Güterkraftfahrzeugen und sogenannten ungeschützten Verkehrsteilnehmer:innen und schwereren Unfallfolgen allgemeinhin anerkannt. Eine erneute Analyse mit einem mehrere Jahre umfassenden Datensatz sollte jedoch in Betracht gezogen werden, da eine größere Datenmenge möglicherweise eine bessere Grundlage bietet.

Die Erkenntnisse aus der Auswertung der Fahrrad- und Fußgänger:innen-Unfall-Hotspots stehen im Einklang mit den Ergebnissen von Lakes (Lakes, 2017), welcher die Unfallhotspots in den Jahren 2011 bis 2015 ausgewertet hat. Als große positive Entwicklung kann hierbei die Neugestaltung der Verkehrsführung des Moritzplatzes hervorgehoben werden. Die generelle Verteilung von Unfällen mit Fahrradfahrer:innen- oder Fußgänger:innenbeteiligung ist jedoch weitesgehend identisch geblieben. Dies wird auch noch einmal deutlich in der Shiny-Webapplikation, die die einzelnen Unfallorte grafisch darstellt.

Es ist anzumerken, dass diese Arbeit einigen Limitationen unterliegt. Aufgrund der starken Anonymisierung der Daten konnten viele interessante Aspekte nicht untersucht werden. Das Fehlen eines vollständigen Datums verhinderte eine genauere zeitliche Analyse, fehlende Angaben zum Unfallverusachenden und fehlende demografische Angaben vereitelten eine Zielgruppenanalyse besonders gefährdeter oder gefährdender Verkehrsteilnehmer:innen. Da der Datensatz nur ein einzelnes Jahr umfasst, lassen sich auf dieser Basis keine Voraussagen treffen, da es nicht möglich ist, einen Trend festzustellen. Des Weiteren sind in diesem Datensatz nur Unfälle mit Personenschaden aufgenommen, sodass insbesondere bei einer etwaigen Relationsanalyse Verfälschungen durch den Nichteinbezug der personenschadensfreien Unfälle auftreten können.

7 Fazit

Die Frage, ob Unfälle von Güterkraftfahrzeugen mit ungeschützten Verkehrsteilnehmenden im Vergleich mit anderen Unfällen schwerere Folgen haben, muss auf Basis der vorliegenden Daten mit Nein beantwortet werden. Die Untersuchung sollte jedoch mit einem umfangreicheren, detaillierteren Datensatz wiederholt werden.

Es konnten Hotspots und Ballungsräume für Unfälle mit Fußgänger:innen und Fahrradfahrer:innen ausgemacht werden, die sich mit bisherigen Untersuchungen decken. Es wird eine generelle Konzentration zum Stadtzentrum hin deutlich, die bei Fahrrädern deutlicher ausgeprägt ist als bei Fußgänger:innen. Die Shiny-Applikation kann genutzt werden, um sich als Verkehrsteilnehmer:in über potenzielle Gefahrenstellen zu informieren. Dazu bietet es sich an, die Datensätze weiterer Jahre mit einzupflegen, was auch Zukunftsprognosen erlauben würde.

Literatur

Amt für Statistik Berlin-Brandenburg (Ed.). (2020a). Datensatzbeschreibung OpenData portal berlin: Statistik der straßenverkehrsunfälle. https://download.statistik-berlin-brandenburg.de/d6480d95278a99fc/7a539fdf4985/AfSBBB_BE_LOR_Strasse_Strassenverkehrsunfaelle_2019_Datensatzbeschreibung.pdf
Amt für Statistik Berlin-Brandenburg (Ed.). (2020b). Straßenverkehrsunfälle nach unfallort in berlin 2019. https://daten.berlin.de/datensaetze/strassenverkehrsunf%C3%A4lle-nach-unfallort-berlin-2019
Anderson, T. (2007). Comparison of spatial methods for measuring road accident ‘hotspots’: A case study of london. Journal of Maps, 3(1), 55–63. https://doi.org/10.1080/jom.2007.9710827
Anderson, T. K. (2009). Kernel density estimation and k-means clustering to profile road accident hotspots. Accident; Analysis and Prevention, 41(3), 359–364. https://doi.org/10.1016/j.aap.2008.12.014
Bíl, M., Andrášik, R., & Sedoník, J. (2019). A detailed spatiotemporal analysis of traffic crash hotspots. Applied Geography, 107, 82–90. https://doi.org/10.1016/j.apgeog.2019.04.008
Datensatzbeschreibung unfallatlas: Kartenanwendung der statistischen Ämter des bundes und der länder. (2020). https://unfallatlas.statistikportal.de/_opendata2021.html
Unfallatlas, opendata, German Accident Atlas
Erdogan, S., Ilçi, V., Soysal, O. M., & Kormaz, A. (2015). A model suggestion for the determination of the traffic accident hotspots on the turkish highway road network: A pilot study. Boletim de Ciências Geodésicas, 21(1), 169–188. https://doi.org/10.1590/S1982-21702015000100011
Evers, C., & Auerbach, K. (2011). Verhaltensbezogene ursachen schwerer lkw-unfälle: Behaviour-related causes of severe truck accidents: Vols. Heft 174. Bundesanstalt für Straßenwesen. http://bast.opus.hbz-nrw.de/frontdoor.php?source_opus=211&la=de
Fastenmeier, W. (2019). Senioren im straßenverkehr – prävention von verkehrsunfällen. In R. Hardt, T. Junginger, & M. Seibert-Grafe (Eds.), Prävention im alter – gesund und fit älter werden (pp. 127–140). Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-662-56788-3{\textunderscore }6
Fawcett, L., Thorpe, N., Matthews, J., & Kremer, K. (2017). A novel bayesian hierarchical model for road safety hotspot prediction. Accident Analysis & Prevention, 99(Pt A), 262–271. https://doi.org/10.1016/j.aap.2016.11.021
Gahr, B., Ryder, B., Dahlinger, A., & Wortmann, F. (2018). A crowd sensing approach to video classification of traffic accident hotspots. In P. Perner (Ed.), Machine learning and data mining in pattern recognition (Vol. 10935, pp. 183–197). Springer International Publishing. https://doi.org/10.1007/978-3-319-96133-0{\textunderscore }14
Geoportal Berlin. (2017). Bezirke: Die bezirksgrenzen der 12 berliner bezirke (Open Data Informationsstelle Berlin, Ed.). https://daten.odis-berlin.de/de/dataset/bezirksgrenzen/
Hasselmann, J. (2020). Verkehrsunfallbilanz 2019: So (un)sicher sind berlins straßen - berlin - tagesspiegel (Der Tagesspiegel, Ed.). https://www.tagesspiegel.de/berlin/verkehrsunfallbilanz-2019-so-unsicher-sind-berlins-strassen/25680384.html
Häkkänen, H., & Summala, H. (2001). Fatal traffic accidents among trailer truck drivers and accident causes as viewed by other truck drivers. Accident Analysis & Prevention, 33(2), 187–196. https://doi.org/10.1016/S0001-4575(00)00030-0
Lakes, T. (2017). Eine räumlich differenzierte analyse von verkehrsunfällen mit radfahrer- und fußgängerbeteiligung in berlin. Bundesgesundheitsblatt - Gesundheitsforschung - Gesundheitsschutz, 60(12), 1328–1335. https://doi.org/10.1007/s00103-017-2639-1
Landespolizeidirektion Stab 14 Verkehr. (2020a). Pressekonferenz zur verkehrssicherheitslage 2019 in berlin (Der Polizeipräsident in Berlin, Ed.). https://www.berlin.de/polizei/aufgaben/verkehrssicherheit/verkehrsunfallstatistik/
Landespolizeidirektion Stab 14 Verkehr. (2020b). Pressekonferenz zur verkehrssicherheitslage 2020 in berlin (Der Polizeipräsident in Berlin, Ed.). https://www.berlin.de/polizei/aufgaben/verkehrssicherheit/verkehrsunfallstatistik/
Le, K. G., Liu, P., & Lin, L.-T. (2020). Determining the road traffic accident hotspots using GIS-based temporal-spatial statistical analytic techniques in hanoi, vietnam. Geo-Spatial Information Science, 23(2), 153–164. https://doi.org/10.1080/10095020.2019.1683437
Limbourg, M., & Reiter, K. (2002). Unfälle und sicherheit älterer menschen. In B. Schlag & K. Megel (Eds.), Mobilität und gesellschaftliche partizipation im alter (Vol. 230, pp. 173–181). Kohlhammer. http://www.seniorenbeirat-goettingen.de/eigenedateien/dokumente/themen/mobilitaet_und_gesellsch_partizipation_i.pdf#page=173
Lu, T., Dunyao, Z., Lixin, Y., & Pan, Z. (2015). The traffic accident hotspot prediction: Based on the logistic regression method. In X. Yan (Ed.), 2015 international conference on transportation information and safety (ICTIS 2015) (pp. 107–110). IEEE. https://doi.org/10.1109/ICTIS.2015.7232194
Malczyk, A. (2019). Unfälle schwerer lkw mit fußgängern und mit radfahrern. In Fahrzeugsicherheit (pp. 331–348). VDI Verlag. https://doi.org/10.51202/9783181023648-331
Pressestelle. (2016). Neue verkehrsführung für radfahrer am moritzplatz erhält auszeichnung. https://www.berlin.de/sen/uvk/presse/pressemitteilungen/2016/pressemitteilung.541244.php
Pressemitteilung: Neue Verkehrsführung für Radfahrer am Moritzplatz erhält Auszeichnung
Ryder, B., Gahr, B., Egolf, P., Dahlinger, A., & Wortmann, F. (2017). Preventing traffic accidents with in-vehicle decision support systems - the impact of accident hotspot warnings on driver behaviour. Decision Support Systems, 99, 64–74. https://doi.org/10.1016/j.dss.2017.05.004
Saß, A.-C., Rabenberg, M., & Rommel, A. (2016). Verkehrsunfälle unter alkoholeinfluss. Journal of Health Monitoring, 2016(1), 29–36. https://doi.org/10.17886/RKI-GBE-2016-023
Statistisches Bundesamt. (2020). 6,6 % weniger verkehrstote im jahr 2019. https://www.destatis.de/DE/Presse/Pressemitteilungen/2020/02/PD20_061_46241.html
Im Jahr 2019 sind in Deutschland 3&nbsp;059&nbsp;Menschen bei Unfällen im Straßenverkehr ums Leben gekommen. Wie das Statistische Bundesamt (Destatis) nach vorläufigen Ergebnissen weiter mitteilt, waren das 216&nbsp;Todesopfer oder 6,6&nbsp;% weniger als im Jahr 2018 (3&nbsp;275 Todesopfer). Damit erreichte die Zahl der Verkehrstoten den niedrigsten Stand seit Beginn der Statistik vor mehr als 60 Jahren. Auch die Zahl der Verletzten ging 2019 gegenüber dem Vorjahr zurück, und zwar um 3,0&nbsp;% auf rund 384&nbsp;000&nbsp;Personen.&nbsp;
Stephan, E., & Wilhelm, B. (2011). Möglichkeiten der prävention schläfrigkeits-bedingter verkehrsunfälle. In B. Wilhelm, E. Stephan, & V. Dittmann (Eds.), Tagesschläfrigkeit - gefahren und konsequenzen für den straßenverkehr (pp. 85–87). Kirschbaum. https://dgvm-verkehrsmedizin.de/wp-content/uploads/2019/10/symposium_t%c3%83%c2%bcbingen.pdf#page=85
Verlag für Rechtsjournalismus (Ed.). (2021). Unfallstatistik der bundesrepublik deutschland: Die zahlen sprechen für sich. https://www.bussgeldkatalog.org/unfallstatistik/
Wilhelm, B., Stephan, E., & Dittmann, V. (Eds.). (2011). Tagesschläfrigkeit - gefahren und konsequenzen für den straßenverkehr: 6. Gemeinsames symposium der DGVM und DGVP am 1.-2. Oktober 2010 in tübingen ; [tagungsband. Kirschbaum.
Wittlich, H., Meidinger, D., Lehmann, H., Kostrzynski, M., & Drößiger, J. (2020). Alle schlimmen verkehrsunfälle in berlin auf einer karte (Tagesspiegel, Ed.). https://interaktiv.tagesspiegel.de/lab/alle-schlimmen-verkehrsunfaelle-in-berlin-auf-einer-karte/
World Health Organisation (Ed.). (2018). Global status report on road safety 2018. https://www.who.int/publications/i/item/9789241565684
Yu, H., Liu, P., Chen, J., & Wang, H. (2014). Comparative analysis of the spatial analysis methods for hotspot identification. Accident; Analysis and Prevention, 66, 80–88. https://doi.org/10.1016/j.aap.2014.01.017