Data analysis project using R, RStudio, Tableau Public, and publicly available bike-share data to analyze rider behavior, identify trends, and generate business insights.
Author: Lyncold Stephensky CHERY
Date: 2025-08-04
I recently earned the Google Data Analytics Professional Certificate on Coursera. This project is a case study focused on helping the Cyclistic marketing team understand how annual members and casual riders use bikes differently.
The goal of this analysis is to explore rider behavior, discover usage patterns, and provide data-driven recommendations to increase casual rider conversion into annual members.
For this analysis, I used RStudio for data cleaning, processing, analysis, and visualization, and Tableau Public for dashboard creation.
The project follows the six steps of the data analysis process: Ask, Prepare, Process, Analyze, Share, and Act.
Note: The project contains a large dataset in the
data/folder (over 2GB), which has not been uploaded to GitHub due to size limitations. You can access the data directly from the Divvy Bike Share website or contact me for access to the raw data.
Cyclistic aims to increase the conversion of casual riders into annual members. To support this initiative, I analyzed usage data from the past 12 months to identify behavioral differences between members and casual riders.
- Compare usage patterns between members and casual riders
- Identify temporal trends (hours, days, months)
- Provide actionable insights to the marketing team for decision-making
- Language: R
- Packages:
tidyverse,janitor,skimr,ggplot2,scales - Key steps:
- Importing and merging 12 monthly CSV files
See script - Data cleaning
See script - Creating derived variables:
month_order,day_order,season_order - Creating new columns:
ride_durationday_of_weekmonth_of_yearweekend_vs_weekdayhour_of_dayyear_seasons
- Visualizing user behaviors with
ggplot2
See script
- Importing and merging 12 monthly CSV files
The Cyclistic marketing director posed three key questions:
- How do annual members and casual riders use Cyclistic bikes differently?
- Why would casual riders buy an annual membership?
- How can Cyclistic use digital media to encourage this conversion?
The data comes from Divvy Bike Share, covering the period from July 2024 to June 2025.
The 12 CSV files were renamed (2024_07.csv, 2024_08.csv, etc.) and stored in the data/csv_raw folder.
With over 5.5 million rows, RStudio is more suitable than a standard spreadsheet.
Before importing the files into RStudio, I installed all necessary packages (see Methodology and Tools).
- Clean column names:
clean_names() - Remove empty columns/rows:
remove_empty() - Remove duplicates:
distinct() - Drop unnecessary columns (IDs, coordinates, etc.)
- Check for missing values:
colSums(is.na()) - Replace
NAwith"unknown_name" - Descriptive statistics:
skim_without_charts() - Create
ride_duration(in minutes) - Remove rides < 1 min or > 24 hours
- Create derived columns: day, month, hour, etc.
- Export cleaned data:
Cyclistic_Data_Clean_Jul24_to_Jun25.csv
| Detail | Number of Rows |
|---|---|
| Before cleaning | 5,597,030 |
| After cleaning | 5,423,861 |
| Rows removed | 173,169 |
| User Type | Max Duration (min) | Min Duration (min) |
|---|---|---|
| Casual | 1,439 | 2 |
| Member | 1,437 | 2 |
➤ About 36.3% of rides are by casual riders — a strong conversion potential.
➤ High traffic from July to October 2024, decline until February 2025, then recovery.
➤ Peak activity in summer and fall, sharp drop in winter (unfavorable weather).
➤ Saturday is the busiest day, Sunday the least.
➤ Regular weekday usage.
➤ 71.4% of rides occur on weekdays, 28.6% on weekends.
➤ Weekdays: peaks at 08:00 and 17:00 (commuting).
➤ Weekends: steady flow between 08:00 and 20:00.
➤ High concentration between 07:00 and 20:00, peaks at 08:00 and 16:00–18:00.
➤ Electric bikes dominate, followed by classic bikes. Scooters are rarely used.
➤ Both groups follow similar seasonal patterns, with members riding more.
➤ Summer is the most active period for all.
➤ Winter is the slowest.
➤ Members: active Monday to Friday
➤ Casuals: active on weekends, especially Saturday
➤ Members ride mainly on weekdays.
➤ Both groups prefer electric bikes, followed by classic bikes. Low interest in scooters.
➤ Peak hours at 08:00 and 17:00.
➤ Casual: ~20 minutes
➤ Members: ~14 minutes
The data cleaned in R was also visualized in Tableau Public.
View the full dashboard
- Usage frequency: members ride mostly on weekdays, casual riders mostly on weekends.
- Ride duration: longer for casual riders (leisure/tourism).
- Peak times: 08:00 and 17:00, especially on weekdays.
- Seasonality: highest in summer and fall.
- Bike type: electric bikes are most popular.
- Launch seasonal marketing campaigns between May and September, when activity is highest.
- Offer temporary discounts, free trials, or flexible memberships (monthly, quarterly).
- Adapt marketing messages to leisure and tourism use (weekends, holidays, urban exploration).
- Offer sign-up bonuses or discounts on the first months of membership.
- Create a loyalty and referral program to reward engaged users.
- Add exclusive benefits for members: priority access to certain bikes, community events, challenges.
- Increase visibility and availability of bikes in high weekend-traffic areas: parks, tourist zones, leisure centers, waterfronts, etc.
- Adjust maintenance and station restocking schedules based on Saturday peaks.
- Invest in maintenance, geographic distribution, and availability of electric bikes, which are very popular.
- Promote their benefits (fast, easy to use, less effort) in marketing campaigns.
- Use targeted content (emails, social media, blog) based on:
- time of day (e.g., morning campaigns),
- day of week (weekday vs weekend),
- season.
- Create user segments to tailor messages to profiles (casual vs member, frequency, ride duration, etc.).
This project was carried out for educational purposes as part of a case study.
Data comes from Divvy / Lyft and is shared under an open license.

















