Die Analyse von Fahrplandaten im öffentlichen Nahverkehr stellt viele Herausforderungen an Datenwissenschaftler und Entwickler. Besonders wenn Linien in zwei entgegengesetzte Richtungen verkehren, wird die korrekte Zuordnung der Fahrtrichtungen essenziell für sinnvolle Auswertungen und Visualisierungen. In Städten wie Trondheim wird oft eine Richtung als „Inbound“ und die Gegenrichtung als „Outbound“ bezeichnet. Doch was, wenn eben diese Richtungsbezeichnungen nicht konstant bleiben? Genau diese Problematik offenbart sich in komplexen realen Datensätzen, und hier setzt moderne SQL-Analyse an, um die Orientierung wiederherzustellen. Die Fragestellung ist klar: Wie können wir alle Busse so umdrehen, dass sie automatisch die richtige Fahrtrichtung erhalten – unabhängig von inkonsistenten oder schwankenden Richtungsbezeichnungen? Ein gängiges Problem im öffentlichen Nahverkehr ist, dass die in den Daten gespeicherten Richtungsangaben nicht stabil über die Zeit sind.
An einem Tag kann die Fahrt von Punkt A nach Punkt B als „Inbound“ gelten und am nächsten Tag plötzlich als „Outbound“. Das führt zu Verwirrungen, wenn man etwa mittlere Verspätungen oder Fahrgastzahlen je Richtung analysieren will – die zugrundeliegende Definition der Richtung wechselt plötzlich und sorgt für verzerrte Ergebnisse. Die Folge ist, dass Visualisierungen und Auswertungen kaum aussagekräftig sind, da die Grundannahme einer konstanten Definition der Fahrtrichtung nicht mehr gilt. Um diese Herausforderung anzugehen, greift man auf leistungsfähige SQL-Datenbanken wie DuckDB zurück. DuckDB erlaubt mit seinen erweiterten Funktionen und Window-Funktionen komplexe Analysen in einem Arbeitsschritt.
Ein entscheidender Schritt dabei ist es, anhand der Daten selbst eine „kanonische“ Definition der Fahrtrichtung zu erarbeiten – also eine Art stabilen Bezugspunkt, mit dem sich die Richtungen über die Zeit korrekt und einheitlich benennen lassen. Die Ausgangssituation sind Datensätze, die aus Echtzeit- oder Planungsfahrten bestehen und einzelne „Legs“ – also die Fahrtabschnitte von einem Haltepunkt zum nächsten – erfassen. Wichtige Attribute sind neben der Linie (lineRef) die Fahrtrichtung (directionRef), die Fahrt-ID (serviceJourneyId), der Zeitpunkt sowie die Start- und Zielhaltestellen der jeweiligen Teilstrecke. Im Mittelpunkt steht jedoch das Problem, dass das Feld directionRef keine verlässliche, stabile Kennung für die Fahrtrichtung darstellt. Zunächst wird untersucht, ob die inkonsistente Richtungskennzeichnung zufällig oder systematisch zustande kommt.
Für eine Linienreferenz wie 'ATB:Line:2_3' zeigt sich, dass die Anzahl der Fahrten, die als „Inbound“ und „Outbound“ bezeichnet werden, über einen längeren Zeitraum recht ausgeglichen ist. Auf den ersten Blick wirkt die Aufteilung logisch. Doch bei genauerer Betrachtung und unter Verwendung von Filterkriterien auf bestimmte Haltestellen wie „Studentersamfundet“ und „Nidarosdomen“ wird deutlich, dass sich am Übergang eines bestimmten Zeitraums die Bedeutung der Richtungskennzeichnung wie von Zauberhand umkehrt. Anstatt zwei fixe Richtungen über die Zeit zu haben, „drehen sich die Busse einfach um“. Um dieses Problem technisch zu lösen, kann anstelle von directionRef ein neues, stabileres Kriterium eingeführt werden.
Dieses basiert auf der tatsächlich gefahrenen Strecke des Fahrzeugs und deren Start- und Endhaltestellen. SQL bietet dafür fortschrittliche Funktionen: Window Functions etwa können in einem einzigen Schritt über Partitionen von Fahrten hinweg den jeweils frühesten Start- und den letzten Zielpunkt aus einer Reihe von Haltestellenfolgen ermitteln. Dadurch wird für jede Einzelfahrt ein erkennbares Streckenprofil definiert, unabhängig von der wechselhaften Angabe in directionRef. Auf Grundlage dieser Informationen lassen sich zu jedem Fahrtsegment sogenanntes „origin“ und „destination“ zuordnen – also Start- und Zielhaltestellen, die die Richtung der Linie eindeutig charakterisieren. Indem man diese Daten aggregiert und die am häufigsten auftretenden Kombinationen von Start- und Zielhaltestellen pro Linie und Tag ermittelt, kann man eine Tabelle aufbauen, die eine stabile Zuordnung von Fahrtagen und Linien zu einer definierten Routennamenbezeichnung vornimmt.
Dies ist der Schlüssel, um trotz instabiler directionRef-Angaben eine konsistente Analyse der Fahrten zu ermöglichen. Darüber hinaus ist es hilfreich, diese Ergebnisse um einen sogenannten „canonical direction“-Wert zu erweitern. Dabei wird für jede Linie mit ihrer charakteristischen Start-Ziel-Kombination die Fahrtrichtung durch die erste beobachtete directionRef bestimmt und über alle Zeiten hinweg als Referenz genutzt. Diese konstante Referenz erleichtert nicht nur die Analyse, sondern sorgt auch dafür, dass Visualisierungen ihre Aussagekraft behalten und über verschiedene Zeiträume vergleichbar bleiben. Die Vorteile dieser Methodik zeigen sich deutlich bei der weiteren Datenanalyse.
Beispielsweise können mittels solcher stabilisierter Richtungszuordnungen aggregierte Fahrplandaten über Monate oder Jahre hinweg verglichen werden, ohne dass die Ursache gedrehter Linien die Ergebnisse verfälscht. Zudem ermöglichen die klar definierten Richtungen eine präzisere Auswertung von Verspätungsstatistiken, Auslastungen und anderen relevanten Kennzahlen des öffentlichen Nahverkehrs. Technisch ist diese Methode besonders elegant, weil aufwendige Subqueries und manuelle Datenbereinigungen überflüssig werden. DuckDBs Unterstützung von Window Functions und der QUALIFY-Klausel erlaubt effiziente und übersichtliche Abfragen. So kann die komplexe Logik in verständlichen Schritten abgebildet werden – angefangen bei der Identifikation der Ursprungs- und Zielhaltestellen, über die Aggregation der Häufigkeiten, bis hin zur finalen Festlegung der kanonischen Fahrtrichtung.
Darüber hinaus zeigt sich, dass die Stabilisierung der Fahrtrichtung nicht nur bei der Untersuchung einzelner Linien hilfreich ist, sondern sich mit diesem Verfahren skalierbar auf größere Datensätze anwenden lässt. So lassen sich Datenmengen im Bereich von mehreren zehn Millionen Fahrten problemlos verarbeiten. Das ist insbesondere für Verkehrsunternehmen und kommunale Verkehrsplaner interessant, die ihren öffentlichen Nahverkehr datengestützt optimieren wollen. Ein weiterer Aspekt betrifft die Visualisierung. Mit stabilen und nachvollziehbaren Richtungsbezeichnungen können Visualisierungstools wie Seaborn in Python genutzt werden, um Fahrplandaten übersichtlich darzustellen und Entwicklungen über Zeiträume von Monaten oder Jahren abzubilden.
Dies fördert Transparenz und erleichtert die Kommunikation mit Stakeholdern sowie die Erstellung von Berichten. Zusammenfassend wird klar, dass die Kombination von detailliertem Domänenwissen und moderner Datenbanktechnologie eine leistungsstarke Lösung für ein verbreitetes Problem im öffentlichen Nahverkehr ist. Die einfache Annahme, dass eine Fahrtrichtung konstant bleibt, wird durch realitätsnahe Daten widerlegt. Gleichzeitig zeigen sich technisch ausgefeilte Verfahren, die diese Schwäche elegant ausgleichen. Damit öffnet sich ein spannendes Feld für weitere Untersuchungen und Optimierungen.
Beispielsweise könnten Verbesserungen hinsichtlich der Behandlung von Linien mit variierenden Routen oder der Einbeziehung zusätzlicher Fahrtdaten vorgenommen werden. Auch die Anwendung bei anderen Verkehrsmitteln wie Straßenbahnen oder U-Bahnen ist denkbar. Die vorgestellten Methoden und Werkzeuge bieten somit nicht nur eine kurzfristige Lösung, sondern schaffen die Grundlagen für eine langfristig robuste und transparente Datenanalyse im Bereich des öffentlichen Personennahverkehrs. Wer sich im Datenumfeld des Nahverkehrs bewegt, sollte diese Erkenntnisse und Techniken unbedingt kennen und verwenden, um zuverlässige und aussagekräftige Ergebnisse zu erzielen, die Fahrgästen, Planern und Entscheidungsträgern gleichermaßen zugutekommen.