Dane Pamuspusan
Dossier № 04 Tableau · Geospatial In flight · 2026

TransitPulse Sydney.

Mapping public-transport equity across Greater Sydney — one Opal tap at a time.

RoleSolo · design + build
StatusIn flight
Duration~6 weeks
ToolsTableau · Python · SQL

Sydney is a city of two transport realities. Five minutes from the CBD you can hop between four train lines without thinking. An hour out, families wait 40 minutes for a bus that connects them to a single station. TransitPulse makes that gap visible — and quantifiable.

The question

Public-transport conversations in Sydney tend to revolve around the CBD. But the most interesting story isn’t in the centre, it’s in the suburbs the timetable forgot. I wanted a single dashboard a planner, journalist, or curious commuter could open and immediately answer: how well does my suburb actually connect?

What it does

  • Suburb-level access score combining bus, train, light rail and ferry frequency within a 10-minute walk.
  • Equity overlay that joins access with ABS SEIFA disadvantage indices to surface mismatches between need and service.
  • Time-of-day heatmap showing how reliable a suburb’s options actually are at 7am, 7pm, and 11pm — not just the weekday timetable headline.
  • “What changed?” view comparing pre- and post-2024 timetable shifts so users can see where service quietly improved or shrank.

The data stack

Three public sources, stitched together:

  • Transport for NSW GTFS feeds — every scheduled stop and trip in Greater Sydney.
  • Opal tap-on aggregates from the Open Data Hub, used to weight the access score by actual ridership.
  • ABS SEIFA + SA2 boundaries for the equity layer.

Cleaning happens in Python (pandas + geopandas) — collapsing 1.2M GTFS stop-times into a per-suburb frequency matrix — then loads into Tableau via a hyper extract for snappy interactivity.

Tools used

Tableau DesktopTableau PublicPython · pandasgeopandasSQLGTFSABS SEIFA

Design choices

The temptation with a dataset this rich is to throw fifteen filters at the user. I deliberately resisted. The landing view answers a single question — “how well does my suburb connect?” — and only on click does the dashboard expand into the equity and time-of-day layers. Colour stays restrained to a single diverging red-grey ramp so the eye lands on outliers, not chart junk.

What I learned

The hardest part wasn’t the SQL or the geospatial join — it was deciding what not to show. An access score is only useful if a non-technical reader can trust it in three seconds. Version four of the dashboard had fewer charts than version one, and was dramatically better. Building TransitPulse sharpened my instinct for stakeholder-first BI: lead with the headline, let the curious drill down.

What’s next

Two extensions on the roadmap: (1) an embeddable widget any Sydney council comms team could drop on their site, and (2) a small predictive layer flagging suburbs at risk of falling below the access threshold under proposed timetable changes.