stiehler.dev Marian Stiehler

Brücken in Deutschland

Ich verdanke die Idee zu dem folgenden Projekt Marco Thiel von der Universität Aberdeen, der ein ganz ähnliches Projekt vor mir veröffentlicht hat. Unsere Umsetzung unterscheidet sich aber leicht voneinander: Ich verwende GeoListPlot, er verwendet eine eigene Implementierung zur Darstellung der Daten.


Das Bundesamt für Straßenwesen veröffentlicht auf seiner Homepage eine Liste mit allen Brücken, für die sie zuständig sind (das sind die Brücken an Bundesfernstraßen). Das Interessante an dieser Statistik ist, dass sie für jede Brücke Positions-Daten enthält.

Das Ziel dieser kleinen Datenanalyse ist die grafische Darstellung aller Brücken, die in schlechtem Zustand sind.

Zunächst lade ich die entsprechenden Daten als Excel-Datei herunter und importiere sie in Mathematica:

data = Import["/Users/marianstiehler/Desktop/Mathematica/Zustandsnoten-excel.xlsx"]

Mathematica zeigt daraufhin eine Kurzübersicht der Tabelle an. Die Daten, die uns interessieren, stecken in den beiden letzten Spalten: Positionsdaten nach UTM32-Standard. Da wir die Anfangsdaten nicht brauchen, extrahieren wir nur die Positionsdaten und speichern sie in dataclean. Dabei übernehmen wir nur solche Daten, die auch angegeben sind (manche Brücken sind ohne Positionsdaten verzeichnet) und lassen die erste Zeile der Tabelle weg (die enthält die Spaltenköpfe):

dataclean = Cases[data[[1, 2 ;;, -2 ;;]], {_Real, _Real}]

Nun geht es daran, die Daten in ein Format zu konvertieren, mit dem Mathematica etwas anfangen kann. Das ist relativ einfach:

GeoPosition[GeoGridPosition[dataclean, GeoProjectionData["UTMZone32"]]]

Das Ergebnis sind 50.808 Koordinatenpärchen. Diese Koordinaten lassen sich per GeoListPlot grafisch darstellen – nur leider dauert die Berechnung ewig. Marco Thiel hat einen Workaround gefunden, der die Darstellung massiv beschleunigt, aber auf den möchte ich hier nicht eingehen, denn er ist nicht von mir. Ich warte stattdessen brav ab. Der Befehl zur grafischen Darstellung lautet:

GeoListPlot[GeoPosition[GeoGridPosition[dataclean,GeoProjectionData["UTMZone32"]]], GeoRange -> "Country", ImageSize -> Full]

(Für den Fall, dass Mathematica mit der Zahl an zu plottenden Daten schlicht überfordert ist, gibt es die Möglichkeit, die Menge der Koordinatenpaare mit dataclean[[;;10000]] etwa auf die ersten 10.000 einzuschränken.)

Wenn GeoListPlot erfolgreich verläuft, ist das Ergebnis eine Deutschlandkarte mit allen Brücken, die durch das Amt für Straßenwesen betreut werden:

Ich möchte nun eine Karte aller Brücken erstellen, die in schlechtem Zustand sind – Note 3 und schlechter. Dazu extrahiere ich die Daten erneut, dieses Mal zusammen mit der Note, und sortiere sie nach Note:

datacleangrade = Sort[Cases[data[[1, 2 ;;, -3 ;;]], {_Real, _Real, _Real}]]

Dann stelle ich fest, an welcher Position das erste Mal eine 3 auftritt:

Position[datacleangrade[[All, 1]], 3., 1, 1]

Jetzt plotte ich die entsprechenden Brücken wie oben:

Ein GeoSmoothHistogram macht noch deutlicher, wo in Deutschland die Probleme liegen – naturgemäß an den Orten, die besonders viele Brücken aufweisen: