= read_csv2("data/Unfallorte2022_LinRef.csv")
unfall_csv <- st_as_sf(unfall_csv, coords = c("LINREFX", "LINREFY"),
unfaelle crs = 25832)
3 Ausführliche Erläuterungen zur Musterlösung
Daten der Bundesinformationssystem Straße (BISStra) für Straßennetz: https://www.bast.de/DE/Verkehrstechnik/Fachthemen/v2-bisstra.html
Daten für Unfälle vom Unfallatlas: https://unfallatlas.statistikportal.de/
3.1 Unfälle zählen
3.1.1 A43
Daten einlesen:
<- read_sf("data/geo/BFStr_Netz_SK.geojson")
strecke <- strecke |>
a43 filter(Str_Kennung == "A43" & Sk_Achse == "Hauptachse") |>
mutate(rownumber = row_number())
Unfälle filtern:
= unfaelle %>%
unfaelle_43 # find out which autobahn is closest by
mutate(nearest_autobahn_id = st_nearest_feature(st_zm(.), a43)) %>%
# calculate distance to closest autobahn
mutate(nearest_autobahn_distance = st_distance(st_zm(.), a43[nearest_autobahn_id, ], by_element = TRUE))
Alles nicht in der Nähe von BAB raus:
= unfaelle_43 |>
unfaelle_autobahn filter(as.double(nearest_autobahn_distance) <= 15) |>
st_zm()
Unfälle zählen:
= unfaelle_autobahn %>%
autobahnen_accident_count as_tibble() %>%
select(-geometry) %>%
count(nearest_autobahn_id, UKATEGORIE) %>%
spread(UKATEGORIE, n) %>%
rename(Anzahl_UK2 = `2`, Anzahl_UK3 = `3`) %>%
replace(is.na(.), 0) %>%
mutate(Anzahl_U_G = Anzahl_UK2 + Anzahl_UK3)
# Hier gehören eigentlich noch Unfaelle nach Kategorie 1 dazu. Gibt es aber in diesem Jahr auf der A43 nicht, also kann die Variable nicht erzeugt werden.
Verbinden mit Daten der A43:
= a43 |>
a43 left_join(autobahnen_accident_count, by = c("rownumber" = "nearest_autobahn_id"))
#a43 <- replace(a43, is.na(a43), 0)
Reine deskriptive Darstellung aller Unfälle Plotten:
ggplot () +
geom_sf(data = a43, size = 2, mapping = aes(color = Anzahl_U_G)) +
scale_color_distiller(palette = 8 , direction = 1, breaks = seq(2,14,2)) +
labs(title = "Anzahl der Verkehrsunfälle nach Abschnitten der A43 im Jahr 2022",
color = "Anzahl Verkehrsunfälle") +
theme(plot.title = element_text(size=10))
Barrierefreiheit Plot-Test
ggplot () +
geom_sf(data = a43, size = 2, mapping = aes(color = Anzahl_U_G)) +
scale_color_viridis_b(direction = -1, breaks = seq(2,14,2)) +
labs(title = "Anzahl der Verkehrsunfälle nach Abschnitten der A43 im Jahr 2022",
color = "Anzahl Verkehrsunfälle") +
theme(plot.title = element_text(size=10))
3.1.2 Gesamtdeutschland
<- strecke |>
strecke_de filter(Str_Klasse_kurz == "A" & Sk_Achse == "Hauptachse") |>
mutate(rownumber = row_number())
Unfälle filtern:
= unfaelle %>%
unfaelle_de # find out which autobahn is closest by
mutate(nearest_autobahn_id = st_nearest_feature(st_zm(.), strecke_de)) %>%
# calculate distance to closest autobahn
mutate(nearest_autobahn_distance = st_distance(st_zm(.), strecke_de[nearest_autobahn_id, ], by_element = TRUE))
Alles nicht in der Nähe von BAB raus:
= unfaelle_de |>
unfaelle_de_autobahn filter(as.double(nearest_autobahn_distance) <= 15) |>
st_zm()
Unfälle zählen:
= unfaelle_de_autobahn %>%
de_unfall_anzahl as_tibble() %>%
select(-geometry) %>%
count(nearest_autobahn_id, UKATEGORIE) %>%
spread(UKATEGORIE, n) %>%
rename(Anzahl_UK1 = `1`,Anzahl_UK2 = `2`, Anzahl_UK3 = `3`) %>%
replace(is.na(.), 0) %>%
mutate(Anzahl_U_G = Anzahl_UK1 + Anzahl_UK2 + Anzahl_UK3)
Verbinden mit Daten:
= strecke_de |>
strecke_de left_join(de_unfall_anzahl, by = c("rownumber" = "nearest_autobahn_id"))
= strecke_de |>
strecke_de mutate(UD = (Anzahl_U_G)/(Sk_Laenge_km))
<- replace(strecke_de, is.na(strecke_de), 0) strecke_de
Plotten:
<- gisco_get_nuts(country = "Germany", nuts_level = 0, resolution = 03) d_de
ggplot () +
geom_sf(data = d_de, fill = NA, size = 0.5) +
geom_sf(data = strecke_de, size = 2, mapping = aes(color = Anzahl_U_G)) +
scale_color_distiller(palette = 8 , direction = 1) +
labs(title = "Anzahl der Verkehrsunfälle nach Abschnitten der BAB im Jahr 2022",
color = "Anzahl Verkehrsunfälle") +
theme(plot.title = element_text(size=10))
3.2 Unfallrate und Unfalldichten:
3.2.1 A43
Zählstelle als sf
<- read_csv2("data/zs/Jawe2022.csv", locale = locale(encoding = 'iso-8859-1')) d_Jawe
Überprüfen wieviele Zählstellen Daten haben:
<- d_Jawe |>
d_Jawe_BAB filter(Str_Kl == "A")
= nrow(d_Jawe_BAB) Anzahl_BAB_ZST
<- d_Jawe_BAB |>
d_Jawe_BAB_NA drop_na(DTV_Kfz_MobisSo_Q)
= nrow(d_Jawe_BAB_NA) Anzahl_BAB_ZST_Daten
Wir haben also Anzahl_BAB_ZST = 1228
Zählstellen auf Autobahnen und davon besitzen Anzahl_BAB_ZST_Daten = 868
Daten im Jahr 2022.
Koordinaten der Zählstelle als simple feature anlegen, da nur so weitere sf-Funktionen verwendet werden können.
= st_as_sf(d_Jawe, coords = c("Koor_UTM32_E", "Koor_UTM32_N"), crs = 25832) d_Jawe_sf
Exemplarisch nur Werte der A43, die auch vorhanden sind. Blöderweise nur noch 1 Wert über.
<- d_Jawe_sf |>
d_Jawe_sf filter(Str_Kl == "A" & Str_Nr == "43") |>
drop_na(DTV_Kfz_MobisSo_Q)
= d_Jawe_sf %>%
d_Jawe_sf # find out which autobahn is closest by
mutate(nearest_autobahn_id = st_nearest_feature(st_zm(.), a43))%>%
# calculate distance to closest autobahn
mutate(nearest_autobahn_distance = st_distance(st_zm(.), a43[nearest_autobahn_id, ], by_element = TRUE))
= d_Jawe_sf |>
d_Jawe_sf2 as_tibble() |>
select(DZ_Nr, nearest_autobahn_id, DTV_Kfz_MobisSo_Q, !geometry)
TO-DO / Frage an Sebastian: Sind die Werte realistisch?
Variable für Anzahl der Jahre festlegen
= 1 t
= a43 |>
a43_2 left_join(d_Jawe_sf2, by = c("rownumber" = "nearest_autobahn_id")) |>
mutate(UR = (10^6*Anzahl_U_G)/ (365*DTV_Kfz_MobisSo_Q * Sk_Laenge_km* t), UD = (Anzahl_U_G)/(Sk_Laenge_km))
Unfalldichte Plot A43
ggplot () +
geom_sf(data = a43_2, size = 2, mapping = aes(color = UD)) +
scale_color_viridis_b(direction = -1) +
labs(title = "Unfalldichten nach Abschnitten der A43 im Jahr 2022",
color = "Unfalldichte") +
theme(plot.title = element_text(size=10))
Unfallrate Plot A43
ggplot () +
geom_sf(data = a43_2, size = 2, mapping = aes(color = UR)) +
scale_color_distiller(palette = 8 , direction = 1) +
labs(title = "Unfallraten nach Abschnitten der A43 im Jahr 2022",
color = "Unfallrate") +
theme(plot.title = element_text(size=10))
3.2.2 Vergleich mit mehr Daten/anderer Autobahn
Unfalldaten einlesen und bearbeiten
<- strecke |>
a3 filter(Str_Kennung == "A3" & Sk_Achse == "Hauptachse") |>
mutate(rownumber = row_number())
Unfälle filtern:
= unfaelle %>%
unfaelle_3 # find out which autobahn is closest by
mutate(nearest_autobahn_id = st_nearest_feature(st_zm(.), a3)) %>%
# calculate distance to closest autobahn
mutate(nearest_autobahn_distance = st_distance(st_zm(.), a3[nearest_autobahn_id, ], by_element = TRUE))
= unfaelle_3 |>
unfaelle_autobahn_a3 filter(as.double(nearest_autobahn_distance) <= 15) |>
st_zm()
Unfälle zählen:
= unfaelle_autobahn_a3 %>%
autobahnen_accident_count_a3 as_tibble() %>%
select(-geometry) %>%
count(nearest_autobahn_id, UKATEGORIE) %>%
spread(UKATEGORIE, n) %>%
rename(Anzahl_UK1 = `1`,Anzahl_UK2 = `2`, Anzahl_UK3 = `3`) %>%
replace(is.na(.), 0) %>%
mutate(Anzahl_U_G = Anzahl_UK1 +Anzahl_UK2 + Anzahl_UK3)
Verbinden mit Daten der A3:
= a3 |>
a3 left_join(autobahnen_accident_count_a3, by = c("rownumber" = "nearest_autobahn_id"))
#a3 <- replace(a3, is.na(a3), 0)
Zählstellendaten einlesen und verarbeiten
= st_as_sf(d_Jawe, coords = c("Koor_UTM32_E", "Koor_UTM32_N"), crs = 25832) d_Jawe_a3
Exemplarisch nur Werte der A43, die auch vorhanden sind. Blöderweise nur noch 1 Wert über.
<- d_Jawe_a3 |>
d_Jawe_a3 filter(Str_Kl == "A" & Str_Nr == "3") |>
drop_na(DTV_Kfz_MobisSo_Q)
= d_Jawe_a3 %>%
d_Jawe_a3 # find out which autobahn is closest by
mutate(nearest_autobahn_id = st_nearest_feature(st_zm(.), a3))%>%
# calculate distance to closest autobahn
mutate(nearest_autobahn_distance = st_distance(st_zm(.), a3[nearest_autobahn_id, ], by_element = TRUE))
= d_Jawe_a3 |>
d_Jawe_a3_2 as_tibble() |>
select(DZ_Nr, nearest_autobahn_id, DTV_Kfz_MobisSo_Q, !geometry)
= a3 |>
a3_2 left_join(d_Jawe_a3_2, by = c("rownumber" = "nearest_autobahn_id")) |>
mutate(UR = (10^6*Anzahl_U_G)/ (365*DTV_Kfz_MobisSo_Q * Sk_Laenge_km* t), UD = (Anzahl_U_G)/(Sk_Laenge_km))
Unfalldichte Plot A3
ggplot () +
geom_sf(data = a3_2, size = 2, mapping = aes(color = UD)) +
scale_color_viridis_b(direction = -1) +
labs(title = "Unfalldichten nach Abschnitten der A3 im Jahr 2022",
color = "Unfalldichte") +
theme(plot.title = element_text(size=10))
Unfallrate Plot A3
ggplot () +
geom_sf(data = a3_2, size = 2, mapping = aes(color = UR)) +
scale_color_distiller(palette = 8 , direction = 1) +
labs(title = "Unfallraten nach Abschnitten der A3 im Jahr 2022",
color = "Unfallrate") +
theme(plot.title = element_text(size=10))