Bit of a repeat project but I focused on a short and simple route in Toronto called 125 Drewry.
I fetched the shape data from the official GTFS and plotted the 2 primary shapes (east and westbound below). You can basically ignore the axis labels - they are in meters east and north of a MTM meridian I think 17T. Also I shifted the one of them up by a bit to isolate them visually.
I took the realtime GPS feed from the TTC and fetched all gps updates for this route for a single day as plotted below. (includes dead mileage on the left)
This step is a bit of a leap but it visualizes the GPS coordinates translated from physical coordinates (in meters) to progress along the GTFS shapes length over time. Vertically stratified by individual vehicle to eliminate visual overlap.
And then I overlap to be able to visually compare with the GTFS schedule.
I fed all this data into a neural network to produce predictions of future performance to produce more accurate nextbus arrival times.
I did all this (and a lot more) to power the Circular Transit Schedule and originally TTC 7 Bathurst In A Storm.