← All projects

Google Data Analytics capstone

Cyclistic ride-share analysis

4.29 million cleaned rides, compared across duration, weekday, and season to inform membership ideas.

RSQLGoogle BigQuerytidyversedplyrggplot2lubridateplotlyTableau
The problem
The membership campaign needed a clearer picture of how casual riders and annual members used the service.
My approach
I combined twelve months of trips in R, compared duration and timing, and presented the patterns in Tableau.
The result
An analysis of 4,293,274 cleaned rides with membership ideas tied to observed behavior. The campaigns remain recommendations to test.

StatusCompleted case study

My roleI defined the comparison, prepared the data, analyzed the patterns, and connected the findings to membership ideas.

See what I delivered →
Cyclistic dashboard comparing membership, stations, monthly rides, weekday totals, and ride duration across 4,293,274 rides.
Published Tableau dashboard · 2022 Divvy ridesOpen full image ↗

THE PROJECT IN CONTEXT

The starting question was straightforward: how do annual members and casual riders use the same bike-share service differently? I completed this case study for the Google Data Analytics certificate, using public Divvy trip records to explore what those differences might mean for a membership campaign.

I wanted the result to explain rider behavior clearly enough to suggest a next step. That meant looking beyond a single total and comparing ride length, the weekly pattern, and the way activity changed across the year.

The Work

A membership question, grounded in trips

The case study frames annual membership as the business opportunity. The available records describe trips, so I could investigate how the two rider groups used the service. I could not ask individual riders why they chose a casual pass or whether a particular offer would convince them to subscribe.

I used those boundaries to keep the analysis focused. Duration helps distinguish shorter trips from longer outings. Day of week provides another view of use. Month adds the seasonal context that would be lost if I treated the entire year as one average.

One year of data, one comparison

I combined twelve monthly files from 2022 into a shared working dataset in R. After cleaning, the analysis contained 4,293,274 rides. Combining the files gave me a full-year view while retaining the member-versus-casual distinction needed for the question.

I compared members and casual riders across the same measures in R: ride duration, day of week, and month. I then brought the results into Tableau, where readers could explore those views together and compare the timing and length of trips.

I kept ride duration, weekday, and seasonal views separate rather than forcing them into one headline. A difference in ride length answers a different question from a difference in total ride volume, and either can look different once the time of year changes.

  • Checked column names and data types across twelve monthly files, corrected November’s timestamp format, and combined the files in R.
  • Derived date, month, weekday, and ride duration fields from trip timestamps for consistent rider comparisons.
  • Removed negative-duration and incomplete records, then excluded trips shorter than one minute or longer than fifteen hours from the final comparison.
  • Compared rider counts and ride-duration summaries by membership type, weekday, and month, using ggplot2 and plotly to show the patterns.
  • Used SQL in Google BigQuery to support exploratory analysis alongside the R notebook.

The groups did not ride the same way

Casual riders took longer rides than annual members. Their activity increased from May through September, and their volume was higher Friday through Sunday than Monday through Thursday. Together, those observations gave the membership question more shape than a simple count of the two groups.

The seasonal and weekly patterns suggest that a single message may not fit every potential member. They provide a reason to investigate leisure-oriented offers alongside a commute-focused campaign, while keeping those interpretations separate from what the trip records directly show.

Ideas to test, with a reason behind each one

I proposed seasonal promotions, rewards points, and a campaign around commuting. Those ideas connect to the observed behavior: seasonal timing for the warmer-month increase, incentives for repeat use, and a clearer explanation of the value of membership for a regular trip.

Each recommendation gives the membership team a specific idea to test and a reason for testing it. A pilot would need to track repeat use, subscriptions, and whether riders remained members after an offer ended.

From rider behavior to a campaign hypothesis
ObservationProposed actionWhat a test would need to establish
Casual activity increases May through SeptemberSeasonal membership promotionsWhether seasonal offers produce subscriptions that continue beyond the promotion
Casual volume is higher Friday through SundayRewards for repeat useWhether the incentive changes repeat use and membership conversion
The groups differ in ride duration and weekly useA campaign explaining membership value for commutingWhether the message fits riders who make regular trips

THE DELIVERABLES

What I delivered

  • R notebook documenting data preparation, comparisons, and recommendations.
  • A working analysis of 4,293,274 cleaned 2022 rides from twelve monthly source files.
  • Tableau dashboard presenting member and casual-rider patterns.

THE OUTCOME

Where the work stands

Completed a public-data case study that connects rider behavior to specific membership ideas, with the analysis available for review.

SCOPE AND LIMITATIONS

What the work establishes

Completed for the Google Data Analytics certificate using public trip data.

Trip records describe observed use; they do not establish riders’ motivations or a campaign’s conversion rate.

The proposed membership campaigns have not been tested.

INTERACTIVE TABLEAU DASHBOARD

Explore the analysis

Open the dashboard here to explore the views and filters.

Open in Tableau ↗

On smaller screens, scroll sideways to explore the full dashboard. For a larger workspace, or if the embedded view does not load, open the dashboard in Tableau.

NEXT CASE STUDYUS traffic accident analysis →