Fiddling with the GMT Open Data Portal
1 Impetus
Green Mountain Transit (GMT) is a public transit operator serving routes in Northern Vermont, largely centered around the Burlington metro area. Having lived in Burlington throughout my years at the University of Vermont, and now returning post-grad school, I have had the pleasure of being at least passingly familiar with GMT. What I did not know, and what I think is pretty cool, is that GMT publishes some of its data to a nice and straightforward online portal, providing a number of cool charts and maps to pair with datasets detailing things like ridership over the past few years. The site is also obviously made with Quarto, using the default theming, and I have a hunch that the table outputs are from R with the DT package, both things naturally making the site cooler because I like R and Quarto. Now, for absolutely no reason at all, I stumbled upon this site and thought it would be fun to fiddle with the data available to present some more cool figures/charts. I certainly was not searching up GMT data sources to do something like this because there was an opening there to get to work with this stuff for money. That’s crazy; don’t think like that. As an aside, while fiddling, I came to further appreciate just how big of a role UVM (the college-attending population at-large) plays in Burlington; even down to its visible impacts on the data seen here.
2 Fiddling
2.1 Data
The datasets available include ridership, fare transactions, and estimated boardings by stop. These are broken down by month and route/group/stop (respectively), with data available for fiscal year 2026 for all three. Ridership data is available for fiscal year 2025 as well, but the others are only available for 2026 onward. The fiscal year for GMT begins on July 1st, so 2026 covers July 2025 through June 2026. All of the datasets also have data for July 2026 available as part of their 2027 releases. We can combine what periods are available across each to land on one covering July 1st, 2025 to July 31st, 2026 for all 3. Below is the R code for loading the data I snagged from the open data website (click to expand the callout block). Not all of the data loaded is even used here, I was kind of figuring out what looked cool/useful as I was going along; if you are prudish about copy-pasting the same code over and over instead of being ultra-clean and making 20 functions then avert your eyes.
2.2 Some Basic Visualizations
Below are some basic (but fun!) charts for each of the groups of data just to see what we’re working with; later on we’ll get to some more complex ones. The charts in this tabset are just ones that were easy to do and that I didn’t notice among the many already on the site.
For these ridership charts, I constructed an extra datapoint called “Average Weekday Ridership,” which is calculated by taking the weekday ridership figures from the existing data and dividing them by 5. This, obviously, does not reflect the actual ridership trends for a given day of the week (I’d suppose that some weekdays people may ride the bus more) but it is helpful to have a general comparison of weekday ridership compared to Saturday and Sunday. Also, like elsewhere on the site, just click on the plots to expand them.
What are some easy takeaways? Well we can see ridership fluctuate pretty distinctly along the periods of the Fall and Spring semesters at UVM (and to a lesser extent, Champlain College). We can also see that ridership overall among the two most trafficked routes (1 and 2) are down over the past year when compared to the year prior; route 1 especially.
We see a notable change in the proportions of fare groups and funding sources that is mirrored by the Fall and Spring semesters; specifically seeing a rise in sponsored fares and partnered funding, respectively. If we look at the data for partner fare transactions via UVM, we see this same thing.
This dataset in particular is fantastic because and has some lovely stuff that I can and will use later for cooler visualizations1, but for now let’s keep it simple. Below is a single chart to show an interesting thing. We’ve grouped by stop_id and split it over by year to find the difference in sum total annual estimated boardings among stops. We drop stop_id values with less than 1000 boardings in a whole year and/or are only seen in one year to keep things sane. We take this, and identify the 20 stops with the largest decline in estimated boardings from 2025 to 2026. Instead of putting the full addresses of those stops in the chart, I’ve added a table to the right for reference.
| stop_id | stop_name |
|---|---|
| 805484 | S. Winooski Avenue at Bank Street |
| 805490 | University Heights |
| 805492 | Dorset Street at Peoples United Bank |
| 805529 | Dorset Street at Barnes & Noble |
| 805531 | University Heights |
| 805947 | Dorset Street at Blue Mall |
| 805756 | Colchester Avenue at Fleming Museum |
| 805815 | College Parkway at Campus Rd. (Saint Mikes West Entrance) |
| 805606 | S Union Street at Opposite King Street |
| 4255578 | South Burlington City Center |
2.3 Cool Stuff
2.3.1 A Map!
Pretty self-explanatory; below is a map that is somewhat similar to the “Ridership by Stop” ArcGIS dashboard from GMT (seen here), but focuses on a greater crop of stop_ids. We take the data for our whole period (July 2025 to July 2026) and plot all stop_id observations with greater than 999 total boardings in that year. Hovering over any one stop will reveal a tooltip detailing the estimated boardings by route at that stop. You can select routes to filter for across stops and you can pan/zoom to your heart’s content; you probably will want to do so because I made the dots pretty small.





