R Shiny Visualization and Insight of MTA Fare Swipe History

Posted on Jul 31, 2017

“Welcome to New York. This is a MetroCard City.”. This is what we often hear when boarding a New York City MTA Bus. In fact, MTA (Metropolitan Transportation Authority) is largest public transportation system in North America. 1 Everyday, million of people, both residents and tourists, reach their destinations on the MTA system. The subway alone comprises 24 lines throughout 5 boroughs. There are more than 19 options for fare types to fit the various needs, ranging from of daily commuters to people just visiting for the day. Now, the biggest question is how to deliver a better service to the MTA passengers while maximize the profit for shareholders, as well as the local business as a whole?

First of all, MTA need to collect enough data to understand the problems and then solve them. They already have access to the data from their fare card swipes in each subway station, MTA bus, Air Train, and Tram. Every day, there is large set of fare card swipe records are loaded into the backyard of MTA database. Some of the datasets are available to public, and we can use the data to note trends in subway ridership and discover more business opportunities surrounding subway stations.

Data Sources

There are two sources you can download the Fare Card History data starting from May 2010.

One is the the MTA website:http://web.mta.info/developers/fare.html and the other is NY state open data website:


Either way, you can get the latest dataset up to the previous week. For the shiny app, the raw data set were downloaded at July 11th 2017. Since most of the downstream analysis are performed based on annual result,  only data from 2011 to 2016 are used for current R shiny development.

Understanding the Data

To understand the dataset, I tried to figure out the dimension, resolution and limitation of the data table. The MTA fare card history file, contains mainly the date of swipe (first week day), fare type, subway station ID, station name and total swipe count aggregated by week. It is intriguing that the fare type in some degree provide demographical information of its user, for example, the Senior/disable fare type apply only to the Senior or Handicapped Rider, while 30 days unlimited type is best for daily commuters.  The analysis will focus on  weekly activity.

Potential user or Stakeholder

One way to narrow down the questions shiny app can possibly answer is to target the potential user or shark holder. By creating interactive data visualization, I am targeting the user who is interested in swipe count information for any form of decision making. For example, the app can help the manager determine whether to add extra service or/and maintenance to meet actual usage needs in a subway station. Another potential target stark holder would be the local business owner near a station who might benefit from adapting the business to according to the passenger demographical information.

Shiny app and Visualization

Here I designed an R shiny monitoring application to visualize the fare card swipe data in an intuitive way.

Click the links  to open shiny:


and source code at my repository: https://github.com/wanggene/MTA.


First, I made an overall manual tab which contains a bar plot of both annual total subway fare card swipes and average monthly swipes from 2010 to 2016.  After calculating the total swipe count in each subway station or each fare type, stations or fare types are ranked based on total swipe counts. Consequently, it becomes much easier to find the top station or most common fare type using the ranked bar plots.


There is  access to information of each subway station or specific fare type.  Click Station ~ Fare Type tub, and use the filter menu to select individual station or fare type. Year based comparison are displayed at each quadrant.





The next menu tab “Timeline” is designed to check a specific time window between 2011 and 2016, and  provide a detailed view if needed. The shiny app also made it easy to look at the swipe count changes through the years, both overall and in specific fare types and specific station.



Finally, the raw dataset is provided for further analysis.

Insight and Business Recommendation

This shiny app made it easy to extract MTA fare card swipe count information based on user's criteria. For example, the overall card swipe count showed a slow increase of usage from 2011 to 2016.  While there wasa slight drop during 2015, that may have been due to the fare hike in November 2015. However, checking by fare type reveals a clear decrease of Full fare type usage since 2011. There was  increased usage of Senior/Disable fare and Mail/Unlimited fare type from 2011 to 2016.  


For businesses, since there are more Senior and disabled rider using MTA subway, it is highly recommended to add more elevator service or maintenance and additional seats inside the subway station. For additional revenue, I recommend discount coupons, flyers or other forms of business promotion can be mailed along with  fare card to Mail/unlimited card user. Small business owner who mainly rely on the subway commuter  should pay attention to population shifts at their neighboring station.


Overall, MTA fare card data provided a straight approach to explore the MTA subway activity. Using the shiny app, it become easier to monitor the passage volume change for a specific card type or in a specific subway station, thus helps the decision making using filtered data and plot for both MTA, passengers and business owner.


[1] http://web.mta.info/mta/network.htm


About Author

Jing Wang

Jing got his PhD degree in Biology from City University of New York in 2008. He then continued his post-doctoral research at Mount Sinai Medical Center, investigating molecular, cellular mechanism of neurodegenerative diseases. He has authored numerous research...
View all posts by Jing Wang >

Related Articles

Leave a Comment

No comments found.

View Posts by Categories

Our Recent Popular Posts

View Posts by Tags

#python #trainwithnycdsa 2019 2020 Revenue 3-points agriculture air quality airbnb airline alcohol Alex Baransky algorithm alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus ames dataset ames housing dataset apartment rent API Application artist aws bank loans beautiful soup Best Bootcamp Best Data Science 2019 Best Data Science Bootcamp Best Data Science Bootcamp 2020 Best Ranked Big Data Book Launch Book-Signing bootcamp Bootcamp Alumni Bootcamp Prep boston safety Bundles cake recipe California Cancer Research capstone car price Career Career Day citibike classic cars classpass clustering Coding Course Demo Course Report covid 19 credit credit card crime frequency crops D3.js data data analysis Data Analyst data analytics data for tripadvisor reviews data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization database Deep Learning Demo Day Discount disney dplyr drug data e-commerce economy employee employee burnout employer networking environment feature engineering Finance Financial Data Science fitness studio Flask flight delay gbm Get Hired ggplot2 googleVis H20 Hadoop hallmark holiday movie happiness healthcare frauds higgs boson Hiring hiring partner events Hiring Partners hotels housing housing data housing predictions housing price hy-vee Income Industry Experts Injuries Instructor Blog Instructor Interview insurance italki Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter las vegas airport lasso regression Lead Data Scienctist Lead Data Scientist leaflet league linear regression Logistic Regression machine learning Maps market matplotlib Medical Research Meet the team meetup methal health miami beach movie music Napoli NBA netflix Networking neural network Neural networks New Courses NHL nlp NYC NYC Data Science nyc data science academy NYC Open Data nyc property NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time performance phoenix pollutants Portfolio Development precision measurement prediction Prework Programming public safety PwC python Python Data Analysis python machine learning python scrapy python web scraping python webscraping Python Workshop R R Data Analysis R language R Programming R Shiny r studio R Visualization R Workshop R-bloggers random forest Ranking recommendation recommendation system regression Remote remote data science bootcamp Scrapy scrapy visualization seaborn seafood type Selenium sentiment analysis sentiment classification Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau teachers team team performance TensorFlow Testimonial tf-idf Top Data Science Bootcamp Top manufacturing companies Transfers tweets twitter videos visualization wallstreet wallstreetbets web scraping Weekend Course What to expect whiskey whiskeyadvocate wildfire word cloud word2vec XGBoost yelp youtube trending ZORI