# A tibble: 6 × 13
ride_id rideable_type started_at ended_at start_station_name start_station_id
<chr> <chr> <chr> <chr> <chr> <dbl>
1 EACB191… docked_bike 2020-01-2… 2020-01… Western Ave & Lel… 239
2 8FED874… docked_bike 2020-01-3… 2020-01… Clark St & Montro… 234
3 789F3C2… docked_bike 2020-01-0… 2020-01… Broadway & Belmon… 296
4 C9A388D… docked_bike 2020-01-0… 2020-01… Clark St & Randol… 51
5 943BC3C… docked_bike 2020-01-3… 2020-01… Clinton St & Lake… 66
6 6D9C8A6… docked_bike 2020-01-1… 2020-01… Wells St & Hubbar… 212
# ℹ 7 more variables: end_station_name <chr>, end_station_id <dbl>,
# start_lat <dbl>, start_lng <dbl>, end_lat <dbl>, end_lng <dbl>,
# member_casual <chr>
Cyclistic Analysis
1. Business Task
Cyclistic’s goal is to maximize annual memberships by converting casual riders into members.
This report analyzes historical trip data to answer:
- How do annual members and casual riders use Cyclistic bikes differently?
- Why would casual riders buy Cyclistic annual memberships?
- How can Cyclistic use digital media to influence casual riders to become members?
2. Data Sources
Cyclistic (Divvy) public trip data, covering the first quarter of the 2020 rides in Chicago.
The
.csv
file includes ride IDs, timestamps, stations, rideable types, and rider type (member_casual
).
3. Data Cleaning and Processing
- Convert date/time fields to proper datetime.
- Create new columns for ride length, day of week, and month.
- Remove data errors (rides <1 minute or >24 hours).
Rows: 418,901
Columns: 16
$ ride_id <chr> "EACB19130B0CDA4A", "8FED874C809DC021", "789F3C21E4…
$ rideable_type <chr> "docked_bike", "docked_bike", "docked_bike", "docke…
$ started_at <dttm> 2020-01-21 20:06:59, 2020-01-30 14:22:39, 2020-01-…
$ ended_at <dttm> 2020-01-21 20:14:30, 2020-01-30 14:26:22, 2020-01-…
$ start_station_name <chr> "Western Ave & Leland Ave", "Clark St & Montrose Av…
$ start_station_id <dbl> 239, 234, 296, 51, 66, 212, 96, 96, 212, 38, 117, 1…
$ end_station_name <chr> "Clark St & Leland Ave", "Southport Ave & Irving Pa…
$ end_station_id <dbl> 326, 318, 117, 24, 212, 96, 212, 212, 96, 100, 632,…
$ start_lat <dbl> 41.9665, 41.9616, 41.9401, 41.8846, 41.8856, 41.889…
$ start_lng <dbl> -87.6884, -87.6660, -87.6455, -87.6319, -87.6418, -…
$ end_lat <dbl> 41.9671, 41.9542, 41.9402, 41.8918, 41.8899, 41.884…
$ end_lng <dbl> -87.6674, -87.6644, -87.6530, -87.6206, -87.6343, -…
$ member_casual <chr> "member", "member", "member", "member", "member", "…
$ ride_length <dbl> 7.516667, 3.716667, 2.850000, 8.816667, 5.533333, 4…
$ day_of_week <ord> Tuesday, Thursday, Thursday, Monday, Thursday, Frid…
$ month <ord> Jan, Jan, Jan, Jan, Jan, Jan, Jan, Jan, Jan, Jan, J…
4. Analysis
Compare casual riders vs. members.
# A tibble: 2 × 2
member_casual avg_duration
<chr> <dbl>
1 casual 40.1
2 member 11.6
# A tibble: 14 × 3
member_casual day_of_week rides
<chr> <ord> <int>
1 casual Sunday 14754
2 casual Monday 3671
3 casual Tuesday 4542
4 casual Wednesday 5141
5 casual Thursday 4175
6 casual Friday 4591
7 casual Saturday 7428
8 member Sunday 35475
9 member Monday 61356
10 member Tuesday 69105
11 member Wednesday 63386
12 member Thursday 60600
13 member Friday 54931
14 member Saturday 29746
5. Visualizations
6. Key Findings
- Casual riders tend to ride longer trips, mostly on weekends (leisure).
- Members ride shorter, more frequent trips, mostly on weekdays (commuting).
- Casual riders start more rides from tourist hotspots; members from neighborhood/work hubs.
7. Recommendations
- Weekend → Weekday conversion: Promote weekday commuting discounts for casual riders.
- Station-based campaigns: Target tourist stations with digital ads promoting cost savings of memberships.
- Digital media strategy: Use Instagram/TikTok campaigns, plus automated emails to casual riders after multiple single rides, highlighting savings of annual membership.