Tyler A. Green

In Transit

Author: Tyler Green (page 1 of 3)

Graphing Transit Systems, Part III – Centrality Extended

This is the third post diving into the graph structure of the New York City subway system. Read the first two for more background!

At the start of last post, I threw out two questions:

  1. Does the network structure of the New York City subway indicate Times Square is a critical station, or is that just where the most riders board?
  2. Can all stations in a transit network be important?

We discussed the difference between centrality metrics and node importance metrics. The former identify important nodes in a network, while the latter ranks nodes by importance. We’ll use the node importance metrics to answer these questions.

To support our discussion, I whipped up a map showing the MTA subway ridership data by itself using Carto. Here’s the interactive map! The data is from the years 2010 to 2015 and is provided by the MTA.

Does the network structure of the New York City subway indicate Times Square is a critical station, or is that just where the most riders board?

To answer this question, I calculated the correlation between ridership and centrality. In the scatter plots below, the independent variable is the centrality score per station, and the dependent variable is the ridership at that station, averaged over the years 2010 through 2015. This might seem backwards, but I chose this because the centrality metric is a reflection of the network structure and we are studying the effect of network structure on ridership.


The correlation coefficient for these two data sets show a moderate positive correlation.

  • Closeness centrality, r = 0.43
  • Outward accessibility, r = 0.30

Remember, correlation does not imply causation, but these figures suggest that for an increase in the centrality metric, you can expect a moderate increase in ridership.

Did you notice Times Square on the scatter plots? Yep, with an average annual ridership of almost 63 million, it’s the outlier. Based on its position on the horizontal axis, closeness centrality thinks Times Square is an important station in the network, while outward accessibility does not. If you remember from last post, PageRank also finds Times Square to be important and Katz just confused us all. That answers our first question!

Before we go on, I have a theory that any outlier in these plots are the result of externalities. For example, the average ridership at Yankee Stadium – 161 St is 8.7 million, but its neighboring stations have ridership of 1.3, 3, 3, and 4.3 million each on average. What is its externality? The world-famous New York Yankees. Times Square – 42 St is a similar situation. Not only is it a transfer point for 12 NYC subway services, it is also below the mega tourist attraction and its namesake, Times Square. I have no hard data on this outliers theory, but more research could be done on this!

Can all stations in a transit network be important?

Why would we want all stations to be “important”? If our goal is for all citizens to have equal access to quality to public transportation, we would like everyone to live near a station which provides this gateway. A transit network will always have stations which are more centrally located than others, but is it possible to minimize the differences between the most connected and the least connected stations? Let’s see how do our metrics evaluate the structure of another world-class network in this regard. Enter Paris, its minimal geographical constraints, and its lovely radial network.

The two histograms below sit on the same range on the horizontal axis. The count on the vertical axis is the number of stations which fall into the horizontal range represented by its bar. As you can see, Paris has many, many stations which score higher than all of New York City’s.


There is one large caveat here: land area. Officially, the area of New York City is 302.6 square miles, while Paris is only 40.7 square miles. Another metric is longest subway line: New York’s A train extends 31 miles, while Paris’ Line 13 is just over 15 miles. Closeness centrality uses shortest path between station pairs, which in my graph, are the number of seconds for a trip. A 31-mile subway trip will take longer than a 15-mile subway trip, so this metrics are stacked against New York City subway and the large area it covers.

Concerning our question, even though Paris’ stations score much higher than New York’s, they are not all equal. This gets back to my earlier point: there will be an importance continuum among stations, but improving the importance of the least connected stations can still provide a benefit to citizens.

Next, let’s look at this histograms for New York and Paris outward accessibility scores.

There is not as much difference between New York City and Paris in the histograms for outward accessibility. This metric is independent of network area or subway line length, so this does not surprise me. It may hint that more of the difference between the networks for closeness centrality may be due to geographical area.

If you look at the densest parts of the Paris network and see how interconnected it is, the upper bound for its accessibility distribution being higher than New York’s also will not be a surprise.

Next Stop

Now that we have evaluated the centrality of multiple transit networks and performed limited cross-network comparisons, I want to know whether these metrics can tell us the best future subway routes. For example, given the budget for a single new subway line, what is the best route for this new line? It will be a very empirical and barely human analysis, so we may have to take the results with a grain or six of salt, but hopefully the results will have value besides making shapes on maps.

See you then!

Graphing Transit Systems, Part II – Centrality

This post is the second of three four looking into the graph structure of the New York City subway system. In the previous post, I discussed a frontend I built to visualize a depth-first search, breadth-first search, and shortest path algorithm. I ended with a discussion of centrality algorithms. We pick up our hero there…

Centrality metrics identify important nodes in a graph. In the gtfs-graph world, nodes represent subway stations. Why might we want to identify important stations in the NYC subway network? Honestly, my initial reason was I thought it sounded cool. I was curious to see if there are numbers (besides ridership…we’ll get to that in the next post!) to rank stations which align with our human perception of important stations in the system. Meaning: does the network structure indicate Times Square is a critical station, or is that just where the most riders board? That was the first question I wanted to explore. The next question would challenge the Lake Wobegon effect. That is: can all stations in a network be important?

To answer these questions, I created a web app for three cities and their heavy rail networks:

Each city has results for four centrality metrics: PageRank, Katz centrality, closeness centrality, and outward accessibility. I will be discussing the results in terms of the New York City network.

It is worth noting at this point that analyzing a transit network only using stops and edges is a very simplified model. To make any real decisions on the system as it relates to the city and population it serves, we would need to consider population density and employment centers at minimum. Knowing that, let’s proceed!

PageRank

If PageRank sounds familiar to you, it’s likely because it is the algorithm used by book publishers to identify pages, and definitely not because it was invented by Google co-founders Larry Page and Sergey Brin to rank web pages for their search engine. In this algorithm, a node’s importance is derived from the importance of all the nodes which link to it. Mapped over to transit, a station’s importance is derived from the importance of all the stations which have direct connections to it.

The PageRank results look interesting and definitely pick out important stations, but they do not give us insight into the entire distribution of stations.

The PageRank results look interesting and definitely pick out important stations, but they do not give us insight into the entire distribution of stations.

I was giddy while implementing this and my brain swirled with grand visions of unlocking new insights to generations-old transit networks. As it turns out, PageRank is not a great model for a transit network. Let’s look at an example.

In the NYC PageRank view, you can see that Times Square comes out on top. Let’s collectively channel our inner undergrad physics lab student and breathe a sigh of relief that the numbers show us what we expected. Phewwwwwww. However, if we look at one of its neighbors, 34 St – 11 Av AKA the 7 train extension, we see that it ranks last. Not just maybe not top ten or top 100, but dead last. PageRank is saying that the 7 train extension produced a station that is literally the least important in the NYC network.

Have no fear Andrew Cuomo, let’s consider the model again. If you throw in sample numbers using the PageRank formula, you can see that the above behavior is correct. 34 St – 11 Av only has one “link” and that node’s PageRank is high, but it also has a high out-degree. Using the random surfer / random transit rider model, a rider passing through Times Square is not likely to end up at 34 St – 11 Av. Sorry 7 train, but PageRank is just does not do your $2.4 billion price tag justice. Let’s see how the other centrality metrics view the subway network!

Poor 34 St - 11 Av doesn't get any love from PageRank. The data on the right shows the top 10 stations serve several subway routes each. This is not a coincidence; PageRank picks out highly connected nodes.

Poor 34 St – 11 Av doesn’t get any love from PageRank. The data on the right shows the top 10 stations serve several subway routes each. This is not a coincidence; PageRank picks out highly connected nodes.

Katz Centrality

Katz Centrality builds on PageRank by considering all walks between two stops in a network, as opposed to only the shortest path between nodes. This appealed to me in a transit context because in a dense network such as Paris, there are often numerous routes between any two stops. This built-in redundancy has been brought up recently as a weakness of the DC metro during the on-going two-track vs. four-track debate and how it affects the maintenance window for a major heavy rail system.

Now is a good time to mention that I would highly recommend the Wikipedia entry for Katz centrality and all the metrics in this post. The original Katz paper is insightful as well.

The results from Katz are……confusing. If you picked South Ferry as the most important MTA station, you either love platform extenders or misguidedly added the Staten Island Ferry to your subway network. The Staten Island Railway data is included in the MTA subway GTFS feed, so I kept it on my map. Closeness centrality (up next!) requires all nodes to be reachable from every other node, so I threw a fake edge in to the graph to represent the ferry. Believe me: the results were just as confusing before I added the ferry route. Due to the multiplicative nature of Katz centrality, the resulting distribution ranges from 0.00244 (Ozone Park – Lefferts Blvd) to 693,246.863 (St George, just across from South Ferry on the south-bound ferry).

Here’s all the insight I can offer on Katz centrality: all traffic between two well-connected sections of the graph (Staten Island and the entire rest of the MTA subway) has to pass through two stations: South Ferry and St George. Therefore, they are “important” and “central” and I am “confused” and “ready to talk about other metrics.”

Katz says the subway network is equally unimpressive. Except for South Ferry. What a champ.

Katz says the subway network is equally unimpressive. Except for South Ferry. What a champ.

Closeness Centrality

My friend Calvin and I half made-up, half realized-it-was-already-a-thing, a centrality metric which promised a return to the fundamentals. Closeness centrality (or as Cal and I called it, the squiggly-doo) is intuitive in that the closer a node is to all other nodes, the more “central” it is. It does this by ranking a node by the sum of the shortest paths to all other nodes in the network. As you may remember from last post, the distance of each edge in our network is the number of seconds to travel via that route segment according to that system’s GTFS feed.

At this point of confusing results from two metrics, I discovered the term “node influence metrics.” These metrics seek to answer my second question from earlier: can all nodes in a network be important? PageRank and Katz identify important nodes, but only the top of their resulting distribution should be considered. This means the metric results for the bottom half of the distribution are more or less meaningless. Technically, closeness centrality is not a node influence metric, but I treat it as such. Intuition tells me that its results have meaning for the entire distribution of nodes. Please comment if you feel otherwise!

Neapolitan ice cream anyone? Closeness centrality results have no surprises.

Neapolitan ice cream anyone? Closeness centrality results have no surprises.

Manhattan stations are ranked highly by closeness centrality. This uniformity is in contrast to the Manhattan results for outward accessibility.

Manhattan stations are ranked highly by closeness centrality. This uniformity is in contrast to the Manhattan results for outward accessibility.

The closeness centrality results are extremely straightforward. Subway stations on Manhattan score higher because riders can reach all other stations in less time there than elsewhere. The opposite is true for Far Rockaway. This algorithm will play an important role in the next post!

Outward Accessibility

Outward accessibility is one of the primary node influence metrics. It produces a normalized version of diversity entropy proposed in this paper by Travençolo and Costa. A node ranks highly when many unique paths can be taken from it over a course of random walks of varying distances. Sections of a graph which rank highly by this metric are found to have high network redundancy and high accessibility from the rest of the network. Redundancy and accessibility are both critical when evaluating a transit network, so this seemed like a good fit!

One drawback to the outward accessibility metric is performance and repeatability. Before calculating the actual metric, one must perform a series of random walks of varying distances from each node. For these walks to be representative, the walk count must be high, which can lengthen execution time of the analysis. Due to the nature of random calculations, the answers change every time! This could be solved by using a consistent random number generator seed when running the analysis, or by always running enough random walks for the results to converge.

Outward accessibility gives us the weather map similar to closeness centrality, but are its individual stations ranked similarly?

Outward accessibility gives us the weather map appearance similar to closeness centrality, but are its individual stations ranked similarly?

Outward accessibility picks out hotspots of importance in a graph network. These can vary slightly due to the random nature of this algorithm, but should converge over time with enough random walks.

Outward accessibility picks out hot spots of importance in a graph network. These can vary slightly due to the random nature of this algorithm, but should converge over time with enough random walks.

The results for outward accessibility appear to parallel those of closeness centrality at first glance. However, a closer look at the accessibility results shows hot spots. The metric tells us these are the nodes which allow riders to traverse the most unique routes in a given distance. Translated to the real world, this is valuable to the rider’s perception of a transit network. If I can go to 20 different stations within 10 subway stops (on any route), my location is better served by public transit than if I can only go to 10 stations within 10 stops.

Accessibility also has a strange property of ranking end stations higher. The logic is that if I start from the second from the end station, half of my random walks will go outwards and produce little diversity entropy. Conversely, if I start from the end station, all of my walks will go towards the potentially more diverse part of the graph. I emailed the paper authors to comment on this behavior, but have not heard back. If you are reading this, Travençolo or Costa, please comment with insight!

Next Stop

If you’ve hung with me this long and have noticed I haven’t answered either question posed at the start of this post, I’m going to grant you a short break. In the next post, we’ll discuss how the closeness centrality and outward accessibility results correlate to the NYC subway ridership numbers, as well as how these metrics compare between NYC and Paris. I hope you’ll stay on board!

Graphing Transit Systems

I’ve been away from the blogging world for a while! The last few months included a fantastic and inspiring trip to Transportation Camp NYC and loads of (mostly) fun weekend work on transit graphs.

In a hodgepodge effort to improve on Javascript, learn React, create a generic graph representation of a GTFS feed, and implement a few graph algorithms, I finally have a working TRANSIT GRAPH DEMO.

Why transit graphs?

While reviewing algorithms on Jason Park’s algorithm visualizer, I thought, “WE CAN APPLY THESE TO TRANSIT.” It was a moment of pure destiny. To call it multidisciplinary intrigue would be underselling my excitement. Of course, I was not the first person to connect transit and graphs; Google Maps, Open Trip Planner, and Mapzen’s Valhalla are all built on graph representations.

My original goal was to display an animated graph traversal of the New York City subway system. I’ve ended up with a platform to study graph algorithms on transit maps. (I learned that if I’m unsure what I’m building, just call it a platform. The solutions will follow.)

As is the norm in 2016 JavaScript, I used almost as many tools and libraries as there are NYC subway stations. My goal in all projects is to use as little custom data as possible, so I stuck with my Boston model and loaded the MTA GTFS feed into an Amazon RDS Postgres instance. The backend is a Node.js server which boots up after constructing a graph. I used the new ES6 ‘class’ keyword to create a TransitGraph in the style of the object-oriented languages I was raised on. The original frontend was written using JQuery, but when I reached the point of implementing an autocomplete search box, I knew I needed to up my tool game. Enter: React. Facebook’s documentation on the library is quite comprehensive and I latched on to the object-oriented feel and state-based programming model. All the data (stops and routes/edges) is communicated via WebSocket that persists through an entire client connection.

As you can see when using the graph demo, there are three modes. A bit on each…

Shortest Path

Dijkstra’s is the classic gateway algorithm to finding shortest paths in graphs. Wikipedia’s explanation is as clear-worded as I’ve read, so I’ll defer to them:

It picks the unvisited vertex with the lowest distance, calculates the distance through it to each unvisited neighbor, and updates the neighbor’s distance if smaller.

Fire up the algorithm visualizer for to help picture this. In my graph, the edge weights are the time between stations. After running Dijkstra’s, we have an ordered sequence of nodes which represent the shortest path between the origin and destination and the time it would take to do so.

A sample shortest-path from 50th St to 1 Av. The routes are calculated from the GTFS feed based on the trips that pass through that stop. This can periodically result in slightly different route listings than the official MTA map.

A sample shortest path from 50th St to 1 Av. The routes which serve each station are derived from the GTFS feed based on the trips that pass through that stop. This can periodically result in slightly different route listings than the official MTA map.

The user interface to pick the origin and destination nodes. I studied Pinterest's CSS to help build the stop tokens that populate the input fields when selected. The route details at the bottom uses "display: flex;", a tip I picked up from the Google Maps CSS.

The user interface to pick the origin and destination nodes. I studied Pinterest’s CSS to help build the stop tokens that populate the input fields when selected. The route details at the bottom uses “display: flex”, a tip I picked up from the Google Maps CSS.

Sound familiar? Google Maps transit directions do the exact same time. And much better! Knowing when to switch trains becomes a luxury after using my tool.

Depth-First Search

A depth-first search, or DFS as the real algorithm geeks call it, is a classic traversal method for both graphs and trees. The idea of a traversal is to visit all the nodes in the graph which can be reached given a starting node. The depth-first variety is contrasted with the breadth-first procedure (up next!) in that, given a starting node, one of its neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, then one of it’s neighbors is visited, and so on. Was there anything weird about that last sentence? This is a recursive algorithm! When a visited node has no unvisited neighbors, the algorithm pops back up the call stack, testing for unvisited neighbors at each level.

A snapshot of visited nodes early in a depth-first search from Yankee Stadium. A red line segment is an edge that has been visited, but not unvisited, while a blue line segment has already been unvisited. As the recursive function pops higher up the call stack, more edges turn blue.

A snapshot of visited nodes early in a depth-first search from 161 St – Yankee Stadium. A red line segment is an edge that has been visited, but not unvisited, while a blue line segment has already been unvisited. As the recursive function pops higher up the call stack, more edges turn blue.

We can see that at the completion of a DFS from 161 St - Yankee Stadium, the entire MTA subway system has been visited. The nodes that have not been visited are the Staten Island railway, which has no rail connections to the subway system and therefore no edges in my graph.

We can see that at the completion of a DFS from 161 St – Yankee Stadium, the entire MTA subway system has been visited. The nodes that have not been visited are the Staten Island railway, which has no rail connections to the subway system and therefore no edges in my graph.

Breadth-First Search

A breadth-first search is another traversal variant whose lofty goal is to identify connected components of a graph while providing zero valuable info to passengers riding transit. (Now would be a good time to say that identifying connected components will play a key role in merging nodes during a later step in this project. Traversals are a necessary part of any graph analyzer’s toolkit!) As you may have guessed, a BFS goes wide before it goes deep. From a given node, all of its neighboring nodes are visited before any of their neighbors are visited. This produces a different exploration pattern, which is illustrated in the following three images.

A snapshot early in a breadth-first search from Queensboro Plaza. We see that the visited nodes are spreading outward from the source. Think: diseases. Depth-first search is how you solve a maze and breadth-first search is how you get sick.

A snapshot early in a breadth-first search from Queensboro Plaza. We see that the visited nodes are spreading outward from the source. Think: diseases. Depth-first search is how you solve a maze and breadth-first search is how you get sick.

A bit farther in the breadth-first search, we can see the disease...err...graph traversal has continued to spread outward.

A bit farther in the breadth-first search, we can see the disease…err…graph traversal has continued to spread outward.

The completion of the breadth-first search. There are no blue edges because this is not a recursive algorithm.

The visited edges at the completion of the breadth-first search. There are no blue edges because this is not a recursive algorithm.

What’s next?

“gtfs-graph” (the GitHub project name for now – please help me come up with a better one!) is built to be system-agnostic. I have graph representations for Boston and Paris in addition to New York City. While the GTFS standard allowed me to construct all three graphs in similar ways, there were still a few quirks, resulting mainly from how the different systems represent sub-stops (parent/child or northbound/southbound).

Recently, I have been implementing centrality algorithms to see how the results varied from system to system. Paris’ RATP heavy rail lines certainly look to have higher connectivity than Boston’s hub-centric design, and I’m working to find the numbers to prove this. If I can indeed prove this, I’d like to use a genetic algorithm to efficiently enhance (add lines and stops) a system to match the connected-ness/centrality distribution/equity/whatever-metric-I-end-up-with of a higher quality system.

After implementing Google’s PageRank algorithm, I decided it is a poor model for transit. The rankings currently displayed are a modified version of closeness centrality. I really enjoyed this white paper on a node importance algorithm and plan to implement this soon. It uses random walks to calculate the entropy of a given node after a given number of steps.

I hope to have a much more detailed most on these metrics in the coming weeks! I would love to hear any thoughts or ideas you might have about any or all of this!

Let’s build awesome things to help transit, cities, and, most of all, people.

LIVE: The Boston T Party

I’m a few months late on this one, but I recently wanted to learn about WebSockets and GTFS-realtime feeds. The result: a real-time Boston transit map! I apologize if you were expecting a historical reenactment.

Try clicking on a marker for more information on the subway/bus/light rail/commuter rail vehicle it represents!

The sidebar of the application appears when you click on a vehicle. The area could be populated with tons more info from the GTFS static feed!

The sidebar of the application appears when you click on a vehicle. This area could be populated with tons more info from the GTFS static feed!

How It’s Built

The app runs on a Node.js server that accepts both a socket connection and an API call. Why both? Ask two-months-ago me. A new socket connection is formed when a client (web browser) connects to the server. The server periodically polls for the latest GTFS-realtime update (which the MBTA posts updates to http://developer.mbta.com/lib/GTRTFS/Alerts/VehiclePositions.pb every ~18 seconds) and decodes the resulting protocol buffer using the Google gtfs-realtime-bindings. The decoded data is then broadcast to all socket connections. The frontend client is a simple AngularJS controller which manages the socket connection and updates the markers with the latest vehicle position information.

The basic architecture described until this point can operate completely independent from a GTFS static feed, but this would only produce a bunch of dots on a map which move periodically. Which, don’t get me wrong, made me ecstatic when that was all I had. But linking up a GTFS static feed gives each dot context. I decided to load the MBTA feed into a Postgres database on Amazon’s Relation Database Service using this schema. The GTFS static connection allows for two features: 1) the client issues an API call to fetch the route and headsign when you click on a vehicle, which is fulfilled by the server through a database query, and 2) the colored route lines are pre-generated into a GeoJSON file using a Node.js script which runs a database query to fetch the official MBTA color for each route.

The purple lines are the commuter rail routes. I chuckled the first time these lines loaded and I kept have to zoom out to see where they stop. To Providence and beyond!

The purple lines represent the commuter rail routes. I chuckled the first time these lines loaded and I kept having to zoom out to see where they stop. To Providence and beyond!

Up Next

The map doesn’t have nearly the feature set of NextBus, with gobs of detail about every bus and stop you click on. I do find it clumsy that you have to select routes to view in NextBus, leading me to make sure all the lines appear at load time in my map (or shortly after (#LargeGeoJSONFile)). Feel free to check out the code or even add features yourself; the code lives on GitHub!

A big maintenance issue with the app as constructed is that it requires a manual reload of the GTFS feed after each update by MBTA which changes any trip IDs. The Green Line trains do not have valid trip_ids in the GTFS-realtime feed, so I programmed the app to display any vehicle with an unknown trip_id (one that did not match with the GTFS static feed) as a Green Line trip. After a GTFS static update, you will often see many vehicle markers say they represent a Green Line train, when we really just need to load the new GTFS feed into the Postgres database. Who wants to automate this for me?

You may not need this map to plan your commute from Back Bay to South Station, but it was certainly a fantastic learning experience for me. Many of its components will make an appearance in my next project! (Hint: it involves representing transit networks as a connectivity graph!)

Until next time, ride on!

I never get tired of staring at these colored lines until the markers all jump to their next position! The yellow is the official color specified for the bus routes in the MBTA GTFS static feed. Anyone know the reason for this? It also look like the Silver Line goes a bit crazy right after exiting the Ted Williams Tunnel.

I never get tired of staring at these colored lines until the markers all jump to their next position! The yellow is the official color specified for the bus routes in the MBTA GTFS static feed. Anyone know the reason for this? It also looks like the Silver Line goes a bit crazy right after exiting the Ted Williams Tunnel. Correct me if I’m wrong, but I think this is where Silver Line buses switch from diesel power to trolleybuses?

“Next Stop…Transitland”: A TransportationCamp Colorado Presentation

I attended the inaugural TransportationCamp Colorado was last week! Sticking with the format of an “unconference,” attendees were encouraged to propose their own sessions to present their work and/or lead discussions. I took them up on the format and presented the following slides on Transitland and how I used it to create my New York City transit frequency visualization. We had a really great interactive session with many good ideas exchanged!

Some stories and explanations were left off the slides. Feel free to hit me up for more explanation on anything!

 

The slides can also be downloaded here.

Denver’s A Line Opens with Fanfare

Friday was a celebration worthy of Duke Ellington and John Hickenlooper. “Take the ‘A’ Train” was finally a meaningful phrase for the Denver metro area! Unfortunately, only one of them could make an appearance, while the other’s legacy lives on.  Relive the opening of the RTD University of Colorado A Line with my photo journey below!

The first bus route of the day: Transfort's FLEX from downtown Fort Collins to Boulder. My friend Austin joined me four stops later and we were on our way!

The first bus route of the day: Transfort’s FLEX from downtown Fort Collins to Boulder. My friend Austin joined me four stops later and we were on our way!

Boulder BCycle bike share bikes outside the Downtown Boulder Center. BCycle is the same provider as Denver's bike share, while Fort Collins recently opened with Zagster.

Boulder BCycle bike share bikes sit outside the Downtown Boulder Station. BCycle is also the operator of Denver’s bike share, while Fort Collins’ recently opened with Zagster.

The bus arrival board in Downtown Boulder Station was quite comprehensive, and similar to the one's found in Union Station.

The bus arrival board in Downtown Boulder Station was quite comprehensive, and similar to the ones found in Union Station.

Our second bus of the day: RTD AB from Downtown Boulder Station to DIA! I had not expected a coach-style bus. The driver was initially confused that we wanted return transfer slips. Apparently not many people taking the airport bus return same day! Obviously, they hadn't met transit enthusiasts like us yet.

Our second bus of the day: RTD AB from Downtown Boulder Station to DIA! I had not expected a coach-style bus. The driver was initially confused that we wanted return transfer slips. Apparently not many people taking the airport bus return same day! Obviously, they hadn’t met transit enthusiasts like us yet.

Our first look of 'Denver Airport' station on the new RTD A line! This was taken from the overlook just below the lobby of the new Westin at DIA.

Our first look of ‘Denver Airport’ station on the new RTD A line! This was taken from the overlook just below the lobby of the new Westin at DIA.

The lobby of the Westin reminded me of iconic jet age images, many lost with the destruction of the Pan Am Worldport. One bank of windows overlooks the A line, while the other looks across a pavilion outside the Jeppesen Terminal.

The lobby of the Westin reminded me of iconic jet age images, many lost with the destruction of the Pan Am Worldport. One bank of windows overlooks the A line, while the other looks across a pavilion outside the Jeppesen Terminal.

Colorado Governor John Hickenlooper speaks at the opening for the Regional Transportation District University of Colorado A Line at Denver International Airport on Friday, April 22, 2016. Did I do the AP caption style correctly? Anyway, I should have put the over/under on the number of speakers at 9.5. And taken the over. Except for the protesters up in arms over the $9 fare that began shouting midway through the ceremony, everything went as expected.

Colorado Governor John Hickenlooper speaks at the opening for the Regional Transportation District University of Colorado A Line at Denver International Airport on Friday, April 22, 2016. Did I do the AP caption style correctly? Anyway, I should have put the over/under on the number of speakers at 9.5. And taken the over. Except for the protesters up in arms over the $9 fare that began shouting midway through the ceremony, everything went as expected.

After the ceremony, the public lined up at the "BOARD TRAINS HERE" sign backed by the baby blue branding <a style="display: inline;" href="https://twitter.com/greent_tyler/status/724050085437300737" target="_blank">found everywhere</a> for the #TrainToThePlane. A media run of the train had taken place earlier that morning, so they did not mingle in line with us plebs. While we waited, a band played Duke Ellington's "Take the 'A' Train."

After the ceremony, the public lined up at the “BOARD TRAINS HERE” sign backed by the baby blue branding found everywhere for the #TrainToThePlane. A media run of the train had taken place earlier that morning, so they did not mingle in line with us plebs. While we waited, a band played Duke Ellington’s “Take the ‘A’ Train.”

The five-story escalator from the Westin pavilion to the A line station is the longest in Colorado. And it has art! The visualizations on the back wall were projected out of the fake rocks on the wall. #TheFutureIsHere

The five-story escalator from the Westin pavilion to the A line station is the longest in Colorado. And it has art! The visualizations on the back wall were projected out of the fake rocks on the wall. #TheFutureIsHere

The public makes its way to the first ride on the A line!

The public makes its way to the first ride on the A line!

A portrait to go down in transit lore. If I had been clever in the moment, upon seeing the University of Colorado graphics on the side of the train, I would have said, "That's a wrap!"

A portrait to go down in transit lore. If I had been clever in the moment, upon seeing the University of Colorado graphics on the side of the train, I would have said, “That’s a wrap!”

I wasn't kidding about the baby blue. It was everywhere. We boarded this car!

I wasn’t kidding about the baby blue. It was everywhere. We boarded this car!

The inside of the commuter rail vehicle was immaculate! It had that new train smell. I was taken aback by the imbalanced seating and had to make sure we hadn't accidentally boarded a plane. The vehicles have a top speed of 79 MPH.

The inside of the commuter rail vehicle was immaculate! It had that new train smell. I was taken aback by the imbalanced seating and had to make sure we hadn’t accidentally boarded a plane. The vehicles have a top speed of 79 MPH.

I was excited to finally ride the A line! And if you had asked if my baby blue shirt was in honor of the #TrainToThePlane, I would have answered, "Yes."

I was excited to finally ride the A line! And if you had asked if my baby blue shirt was in honor of the #TrainToThePlane, I would have answered, “Yes.”

I tweeted back and forth with Lisa from @RideRTD and she tracked me down and gave me a sweet squeezy train! I was so calm for the rest of the ride. We departed four minutes early on the inaugural public run of the A line!

I tweeted back and forth with Lisa from @RideRTD and she tracked me down and gave me a sweet squeezy train! I was so calm for the rest of the ride. We departed four minutes early on the inaugural public run of the A line!

The station at 38th and Blake was ready for passengers! Other stations had lines of people waiting to board the first outbound train.

The station at 38th and Blake was ready for passengers! Other stations had lines of people waiting to board the first outbound train.

We passed behind Coors Field as we arrived to Union Station. The Rockies would play (and beat!) the Dodgers on that ground later that day.

We passed behind Coors Field as we arrived to Union Station. The Rockies would play (and beat!) the Dodgers on that ground later that day.

The first passengers arriving at Union Station on the A line!

The first passengers arriving at Union Station on the A line!

We made it! The platform is the first at Union Station with at-grade boarding. Both the light rail vehicles and Amtrak trains require passengers to go up steps to board.

We made it! The platform is the first at Union Station with at-grade boarding. Both the light rail vehicles and Amtrak trains require passengers to go up steps to board.

The passengers on the right wait their turn for a ride on the A line, while those on the left celebrate a smooth inaugural ride.

The passengers on the right wait their turn for a ride on the A line, while those on the left celebrate a smooth inaugural ride.

I love this view because the commuter rail vehicle reminds me of the MTA rolling stock. Denver finally has commuter rail!

I love this view because the commuter rail vehicle reminds me of the MTA rolling stock. Denver finally has commuter rail!

Downtown Denver has come a long way in the last few years. The #TrainToThePlane sits proudly and personified on the backside of Union Station in this photo.

Downtown Denver has come a long way in the last few years. The #TrainToThePlane sits proudly and personified on the backside of Union Station in this photo.

The tracks at Union Station have a neat roof structure! Which doesn't provide much actual roof-age. But it makes for cool photos! Two buildings in development can be seen at the end of the platforms, which will provide even more residential and retail buzz for the LoDo area.

The tracks at Union Station have a neat roof structure! Which doesn’t provide much actual roof-age. But it makes for cool photos! Two buildings in development can be seen at the end of the platforms, which will provide even more residential and retail buzz for the LoDo area.

The queue to board the A line to DIA wrapped around the side of Union Station by the time we arrived on the first train. A public train had left Union Station towards DIA at the same time as ours. The tunnel in the foreground is the entrance to the underground bus depot.

The queue to board the A line to DIA wrapped around the side of Union Station by the time we arrived on the first train. A public train had left Union Station towards DIA at the same time as ours. The tunnel in the foreground is the entrance to the underground bus depot.

The interior of Union Station was bustling! Cities take note: this is a public space to die for.

The interior of Union Station was bustling! Cities take note: this is a public space to die for.

Taking a break from transit, Austin and I made our way up 16th Street Mall to the state capitol!

Taking a break from transit, Austin and I made our way up 16th Street Mall to the state capitol!

One of the stairs near the doors to the capitol is etched with the phrase "One Mile Above Sea Level." The Mile High City, indeed!

One of the stairs near the doors to the capitol is etched with the phrase “One Mile Above Sea Level.” The Mile High City, indeed!

We exercised our rights as citizens willing to walk through a metal detector to experience the rotunda of the Colorado capitol dome.

We exercised our rights as citizens willing to walk through a metal detector to experience the rotunda of the Colorado capitol dome.

The interior of the capitol reminded me of the Minnesota state capitol in St. Paul! Both are incredibly ornate and stately, but feel a tad smaller than the U.S. Capitol building.

The interior of the capitol reminded me of the Minnesota state capitol in St. Paul! Both are incredibly ornate and stately, but feel a tad smaller than the U.S. Capitol building.

There were even representatives working in the Colorado House of Representatives chamber! Considering this was a Friday afternoon, I guess I shouldn't be surprised. The speakers at the ceremony had just praised these individuals' bipartisanship and its impact on the passage and completion of the A line.

There were even representatives working in the Colorado House of Representatives chamber! Considering this was a Friday afternoon, I guess I shouldn’t be surprised. The speakers at the ceremony had just praised these individuals’ bipartisanship and its impact on the passage and completion of the A line.

We joined up with a capitol tour just in time to catch a trip up to the dome!

We joined up with a capitol tour just in time to catch a trip up to the dome!

The views looking westward were stunning! Unfortunately, the mountains were more impressive in real life. It was neat to think how all the grass between the capitol and city building had been covered with fans (including myself!) during the Broncos Super Bowl Parade and celebration just a few short months ago.

The views looking westward were stunning! Unfortunately, the mountains were more impressive in real life. It was neat to think how all the grass between the capitol and city building had been covered with fans (including myself!) during the Broncos Super Bowl Parade and celebration just a few short months ago.

The flags cooperated as I snapped a photo of the city building and the rounded Denver Post building. 16th Street Mall can be seen on the far right.

The flags cooperated as I snapped a photo of the city building and the rounded Denver Post building. 16th Street Mall can be seen on the far right.

And continuing the northward pan, this was the view of downtown Denver from the capitol dome.

And continuing the northward pan, this was the view of downtown Denver from the capitol dome.

This was the staircase we took to reach the dome level at the capitol. I filmed a brief episode for the Discovery Channel in my mind during the trips up and down.

This was the staircase we took to reach the dome level at the capitol. I filmed a brief episode for the Discovery Channel in my mind during the trips up and down.

Walking back towards Union Station, we made our last pass through Civic Center Station. The end-of-line for the Mall Ride is slated for replacement by something glassier, according to Austin.

Walking back towards Union Station, we made our last pass through Civic Center Station. The end-of-line for the Mall Ride is slated for replacement by something glassier, according to Austin.

This semi-protected bike lane on Lawrence Street reminded us that on a day that a train stole the show, mobility options do not stop with heavy rail.

This semi-protected bike lane on Lawrence Street reminded us that on a day that a train stole the show, mobility options do not stop with heavy rail.

We made the journey back to Fort Collins using the Flatiron Flyer “bus rapid transit” from Union Station to Boulder. From there, the FLEX took us north onto the MAX guideway and to our respective stops in FoCo. Our $9 regional RTD day passes worked as fare for both the AB and the Flyer. The A line was free for opening day, and I used my Transfort year pass to board the FLEX. This means, we traveled to Denver and back for only nine dollars. Without Transfort passes, the total would have been $11.50. Once the A line begins revenue service, this route will cost $20.50. Regardless, transit has come a long way in northern Colorado and our (very circuitous) route showed that mobility has reached new heights.

I am excited for the rest of the FasTracks program and am thrilled we had the chance to experience the first public run of the #TrainToThePlane.

Until next time Denver opens a train line, ride on!

Have you gotten to ride the A line yet? What did you think? Let me know in the comments below!

Seeking a Pro Bono* Position in a Transit Dance Video

Objective

I am seeking a pro bono* position in a transit dance video. I intend to use my multimodal excitement to raise awareness, excitement, and ridership of American transit systems. Please contact me if you are in need of someone who can learn dance steps on bus steps. Let’s make transit more visible, safer, and more fun!

Experience

DanceBlue, University of Kentucky Dance Marathon
Lexington, KY
February 2013

I’m the one in the white.

Actually, I may have been wearing blue. We’d been dancing for 23.5 hours at point.

Purdue Night Train Swing Dance Club
West Lafayette, IN
August 2013 – December 2014

If you didn’t get a great sampling of my individual skill from DanceBlue, the following video shows my full repertoire of lindy hop moves and my ability to seemingly read them off the ceiling.

Skills

  • Well-versed at managing life with awkward arms
  • Experience at walking on beat for minutes at a time
  • Ability to provide vision for groups of people though bus windows

Influences

I consider the following two videos required viewing for all participants in my future transit dance videos.

Silver Line Opening
Washington Metropolitan Area Transit Authority

The guy who opens the video inspires me. His energy walking down a suburban street to a train is infectious. I’m moving my shoulders like that right now. You too?

Let’s match (or exceed) this.

Virgin American Safety Video
The airline formerly known as Virgin America

My own flight on Virgin, I was literally grinning ear-to-ear the five minutes before the boarding door closed and the following video is the reason why. I’m not sure whether I love the lyrics or choreography more. “So tonight, get ready to fly, cuz we’re gonna live it on up in the sky”? Genius.

I know this isn’t public transit, but they move people and this video moves me. I hope the Alaskan Airlines’ dancers are stretching and their choreographer is being inspired as we speak.

Let’s match (or exceed) this.

Contact

If you are a transit agency producing promotional media, contact me and we’ll talk.

If you are an enthusiastic transit rider, let’s brainstorm.

Either way, see you on the rails.

* The pro bono part is negotiable.

Bike Share Has Arrived in Fort Collins

I took advantage of a gorgeous Saturday morning to try out Fort Collins’ newest urban mobility option: bike share!

The overall process is quite smooth. Here are your six steps to a ride about the town.

  1. Download the Zagster app and create an account.
  2. Choose from daily, weekly, or yearly memberships.
  3. Enter the code of the bike you wish to use into the app to get the U-lock key.
  4. Unlock the bike.
  5. Ride!
  6. Return the bike to any station, lock it up with the U-lock, and hit “Return it!” on the app.

That’s it! Keep reading for some photos of my experience and details on each component of the bike share.

The Stations

As you can see in the screenshots below, there are several stations scattered throughout Old Town. The second image is a wider map view of Fort Collins, which shows the stations are very concentrated in a single part of town for now. I would expect the station coverage to expand if the program proves successful in the denser section of Fort Collins, following the roll-out model of Chicago’s Divvy bike share.

Map of bike share stations in north Fort Collins.

Map of bike share stations in north Fort Collins.

Bike share stations are concentrated main around Old Town Fort Collins at the system's launch on Friday, April 1st. But this is no joke!

Bike share stations are concentrated main around Old Town Fort Collins at the system’s launch on Friday, April 1st. But this is no joke!

The bike share station at Oak and College.

The bike share station at Oak and College.

The instructions at the Oak and College station have already been "artistically modified."

The instructions at the Oak and College station have already been “artistically modified.”

The Fees

The fee structure is as follows:

  • 24 hour membership for $7, weekly membership for $15, or annual membership for $60.
  • Free to checkout a bike for the first 30 minutes, $2 an hour after that, up to $18 for a single ride.

I’ve included some screenshots showing how you pick your payment plan in the Zagster app. I purchased the 24 hour membership for $7 and had the bike checked out for about 50 minutes, resulting in a $2 usage fee.

Screenshot of the Zapster app for the 24 hour membership.

Screenshot of the Zapster app for the 24 hour membership.

Screenshot of the Zapster app for the weekly membership.

Screenshot of the Zapster app for the weekly membership.

Screenshot of the Zapster app for the annual membership.

Screenshot of the Zapster app for the annual membership.

The Bikes

I could tell the bikes were very new (I was riding on their second day of operation) and mine had a great feel to it! It was a comfortable cruiser with 8 speeds controlled by a single dial on the right hand grip. I would have preferred one higher gear for cruising down Mountain Avenue, but the gear range is quite suitable for most urban biking trips, especially in a town as flat as Fort Collins.

Two codes are important when unlocking the bike. First, you enter the 4-digit code labeled “Zagster.com Bike #” into the app. This code is on the side of the keypad on the rack above the back tire. There is also a longer code on the other side that did not work. The app gave a me a bike not available error when I tried the longer one, so be sure to enter the correct code! After you do this, the app will give you a longer code which you enter on the bike keypad (sandwiched by two presses of the ENT(er) key). This will cause they keypad to open, revealing a key you can use the unlock the U-lock.

The bike even had a bell and basket in front! I saw another bike share user put the U-lock in a slot on the back rack so I did the same. It jiggled a bit while the bike was in motion, so I wonder if some rubber could be added to create a more peaceful ride.

I’m not quite sure what I did to relock the key box when I returned the bike. I locked the U-lock back up to the station, but could not get the key box to close. The sign on the bike says to re-enter your code if you can’t get the box to lock, and I did this and was eventually able to hear the box relock, but I don’t think it was because of me re-entering the code. If you understand the inputs and feedback of this system, please let me know!

The keypad on the back rack of the bike.

The keypad on the back rack of the bike.

Instruction for using the keypad, also on the back rack of the bike.

Instruction for using the keypad, also on the back rack of the bike.

A row of new Zagster bikes at the Oak and College station.

A row of new Zagster bikes at the Oak and College station.

The 4-digit code you type into the app on the side of the keypad.

The 4-digit code you type into the app on the side of the keypad.

The 8-digit code you DO NOT type into the app.

The 8-digit code you DO NOT type into the app.

The slot which holds the U-lock while you ride.

The slot which holds the U-lock while you ride.

Recommendations for the Bike Share

I noticed two features that were missing from the app. First, it did not seem possible to begin a second reservation using the same phone. This would be a major hindrance to renting bikes for a family. I would hope there is actually a way to do this. Does anyone know if I just missed this feature?

Second, the app does not tell you how many bikes are available at each station. I know I did not miss this feature because the technology does not exist at the stations to track this. When I said “Return It!” it was my responsibility to lock the bike up to any station using the provided U-lock. Yes, I returned mine to the same station from which I checked it out, but this is not required, nor known to the app. Bike counts will not affect passerbys, but it could prevent someone from leaving home expecting to rent a bike that may not be at the closest station.

All in all, I was quite pleased with the new Fort Collins bike share! I had a lovely bike ride from Old Town to City Park and back on a comfortable bike. Visible bikes in Old Town are a great addition to an already strong biking culture in this city. I can see the system being very useful for visitors or even residents who came to Old Town without their bike but decide to go on a ride. Almost more than anything, we are seeing mobility options improve in Fort Collins and that should be celebrated!

I know I normally say this about other modes of transit, but until next time…

Ride on!

Have you had any good or bad experiences with the bike share?

My Zagster bike at City Park Lake. The new bike share is a great improvement for mobility in Fort Collins!

My Zagster bike at City Park Lake. The new bike share is a great improvement for mobility in Fort Collins!

Updated: New York City Transit Frequency Visualization

Since I detailed my New York City transit frequency visualization project last month, there have been a few updates. Check out the web tool to view the changes!

What’s new?

  • The frequency buckets have been realigned to better parallel the psychology of how we use transit. The bins now group trips of less than 4 trips per hour, 4 to 8 trips per hour, and more than 8 trips per hour. Less than 4 trips per hour is generally the threshold where riders should consult a schedule before waiting on a curb, so it was important to separate these visually. The thickness of each edge now also increases with frequency.
  • There is now much more coverage in Queens bus data. No, MTA did not see my first update and decide to expand Queens service, though that would be awesome! I communicated with the Transitland team and my tool helped them discover they were previously missing the feed for the MTA Bus Company. It was historically a separate company and still has its own GTFS feed. I came up with some wild conclusions in my previous post on this project, several of which were rendered invalid by the completion of the data set.

What’s up next?

I’d still like to filter the express bus routes, provide finer-grained sorting by mode, and increase the dynamic nature of the tool in general. I’ve been working on an updated Ruby client to pair with the Transitland datastore, and have already updated my project source with the new interface. I’ve also begun dabbling with GTFS-realtime and plan to build a project with this specification soon.

We’re all #InTransit everyday and I hope to have many more updates soon!

What kind of things are you working on? Let me know in the comments below!

The frequency data for subway routes on a Friday morning for New York City transit. The darker the color, the higher the frequency!

The frequency data for subway routes on a Friday morning in New York City. The darker the color, the higher the frequency!

Warning: The Fort Collins Streetcar is Adorable

Transit fans be warned: the Fort Collins streetcar is adorable. It’s no kitten, but Car 21 certainly takes you to an era bygone. I wanted to grab an evening post, tighten the top button on my overcoat, and ride into a romanticized time as I leaned against the rattan-backed seat.

The inside of the Fort Collins streetcar.

The interior of Car 21 in all its glory. Yes, the historically accurate ceiling tie reads “Smoking on Two Rear Seats Only”.

A sign at the trolley barn for the Fort Collins streetcar.

I’m a big fan of this sign inside the Fort Collins Municipal Railway trolley barn. The icon is quite accurate! The streetcar in this icon is traveling right to left. Doing the opposite would be called “back-poling” and is rightly frowned upon for fear of overhead wire disconnects.

Car 21 of the Fort Collins streetcar.

Car 21 ready to depart the trolley barn. The wooden slats on the front form a safety catcher. When an item trips this mechanism, another set of wooden bars behind it drop low to the tracks to catch the item on the track. As one motorman told me, “It’s so you get beat to death rather than run over.” Each end has a safety catcher, since we don’t turn the streetcar around.

Fort Collins streetcar on Mountain Avenue.

Car 21 in the barn is neat, but Car 21 driving down Mountain Avenue is neater! I remember being distracted while taking this photo by the compressor noisily working to reach 50 PSI. Air brakes, am I right? The handle on the top right of the seats is used to switch the seat back when the streetcar changes direction of travel.

A few of the interesting technical components:

  • The two strands of lights along the ceiling are wired in series with the headlights. Just like with old Christmas tree lights, when one goes out, you may have to test them all! (The expected value of the number of lights you’ll have to test before finding the defective one is n / 2, where n is the number of lights in series and assuming each light has equal probability of being defective at that moment. Since that assumption is false, the provided equation is useless. #probability)
  • While 600 V DC comes in through the overhead wire, its path to ground is through the undercarriage and into the tracks. Literally: to ground. This is neat enough by itself, but this also means the electrical path from overhead wire to ground goes through the gear (constant 5:1 ratio on the two electric motors on Car 21) teeth. And this was by design. I was blown away when I learned that!
  • The motorman has control to drop water on the tracks when going around turns to prevent the screeching sound that reminds us that steel-wheeled trains are not easy to turn. The original Fort Collins streetcars used grease, but were run in a less environmentally friendly time. To avoid risking the water tanks freezing, we ran the streetcar at full volume yesterday.
  • The streetcar is equipped with a people counter that is incremented by the motorman with the pull of a handle. It rolls over at 100,000 passengers and gives a mechanical chime so sweet it made me never want to use anything electronic ever again. The car has carried over 260,000 riders since it re-opened in 1984.

Learning about the streetcar led me to pay more attention to the dates on the transit history art at the South Transit Center. Below is a depiction of streetcars at the intersection of Mountain and College. The wye-shaped interchange was famous among train buffs at the time and was known as the “Three-Way Meet”. I’m pretty sure there is another tile commemorating Fort Collins’ final streetcar in 1951, but my bus was early on this day and I prioritized not being stranded over trolley art coverage. I’ll look for it this week!

Fort Collins streetcar transit art at the South Transit Center.

Until next time, ride on!

Older posts