STEP 4: CONDUCT DESCRIPTIVE ANALYSIS
mean(clean_data$ride_length)
## [1] 17.27148
median(clean_data$ride_length)
## [1] 10.93333
max(clean_data$ride_length)
## [1] 1439.367
min(clean_data$ride_length)
## [1] 1
Total number of rides by each usertype and rideable type
total_ride_by_user <-
clean_data %>%
group_by(user_type) %>%
summarise(total_ride = n()) %>%
mutate(per_of_ride = (round(total_ride / sum(total_ride),4 )) * 100) %>%
arrange(desc(total_ride))
total_ride_by_user
total_ride_by_rideabletype <-
clean_data %>%
group_by(rideable_type) %>%
summarise(total_ride = n()) %>%
mutate(per_of_ride = (round(total_ride / sum(total_ride),4 )) * 100) %>%
arrange(desc(total_ride))
total_ride_by_rideabletype
Total number of ride by each usertype per the type of ride
totalride_user_per_rideabletype <-
clean_data %>%
group_by(rideable_type,user_type) %>%
summarise(total_ride = n(),.groups = "drop") %>%
mutate(per_of_ride = (round(total_ride / sum(total_ride),4 )) * 100) %>%
arrange(desc(total_ride))
totalride_user_per_rideabletype
Total number of rides and total ride length by each usertype and
rideable type
total_ride_length_usertype <-
clean_data %>%
group_by(user_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length)) %>%
mutate(per_of_ride = (round(total_ride / sum(total_ride),4 )) * 100) %>%
mutate(per_of_ride_length = (round(total_ride_length / sum(total_ride_length ),4 )) * 100) %>%
arrange(desc(total_ride_length))
total_ride_length_usertype
total_ride_length_rideabletype <-
clean_data %>%
group_by(rideable_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length)) %>%
mutate(per_of_ride = (round(total_ride / sum(total_ride),4 )) * 100) %>%
mutate(per_of_ride_length = (round(total_ride_length / sum(total_ride_length ),4 )) * 100) %>%
arrange(desc(total_ride_length))
total_ride_length_rideabletype
Total number of rides and total ride length by each user type per
the type of ride
totalridelength_user_per_rideabletype <-
clean_data %>%
group_by(user_type, rideable_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length), .groups = "drop") %>%
mutate(per_of_ride = (round(total_ride / sum(total_ride),4 )) * 100) %>%
mutate(per_of_ride_length = (round(total_ride_length / sum(total_ride_length ),4 )) * 100) %>%
arrange(desc(total_ride_length))
totalridelength_user_per_rideabletype
Average and max ride length for each usertype
avg_max_usertype <-
clean_data %>%
group_by(user_type) %>%
summarise(max_ride_length = max(ride_length)
,average_ride_length = mean(ride_length)) %>%
arrange(desc(max_ride_length))
avg_max_usertype
Average and max ride length for each rideable type
avg_max_rideabletype <-
clean_data %>%
group_by(rideable_type) %>%
summarise(max_ride_length = max(ride_length)
,average_ride_length = mean(ride_length)) %>%
arrange(desc(max_ride_length))
avg_max_rideabletype
Average and max ride length for each usertype by rideable type
clean_data %>%
group_by(user_type, rideable_type) %>%
summarise(max_ride_length = max(ride_length)
,average_ride_length = mean(ride_length),.groups = "drop") %>%
arrange(desc(max_ride_length))
No of rides, ride length, average ride length, max ride length by
usertype for each weekday
clean_data$weekdays <- ordered(clean_data$weekdays, levels=c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
user_type_weekday <-
clean_data %>%
group_by(weekdays, user_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length),.groups = "drop") %>%
arrange(weekdays, user_type)
user_type_weekday
No of rides, ride length, average ride length, max ride length for
rideable for each weekday
rideable_type_weekday <-
clean_data %>%
group_by(weekdays, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length), .groups = "drop") %>%
arrange(weekdays, rideable_type)
rideable_type_weekday
No of ride, ride length, average ride length, max ride length by
each usertype for rideable type on each weekday
user_rideable_weekday <-
clean_data %>%
group_by(weekdays,user_type, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length), .groups = "drop") %>%
arrange(weekdays, user_type, rideable_type)
user_rideable_weekday
No of ride, ride length, average ride length, max ride length by
usertype for each daytype
user_type_daytype <-
clean_data %>%
group_by(day_type, user_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length),.groups = "drop") %>%
arrange(day_type, user_type)
user_type_daytype
No of ride, ride length, average ride length, max ride length for
rideable for each day type
rideable_type_daytype <-
clean_data %>%
group_by(day_type, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length), .groups = "drop") %>%
arrange(day_type, rideable_type)
rideable_type_daytype
No of ride, ride length, average ride length, max ride length by
each usertype for rideable type on each daytype
user_rideable_daytype <-
clean_data %>%
group_by(day_type,user_type, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length), .groups = "drop") %>%
arrange(day_type, user_type, rideable_type)
user_rideable_daytype
No of ride, ride length, average ride length, max ride length by
usertype for each time period
clean_data$time_period <- ordered(clean_data$time_period, levels=c("Morning", "Afternoon", "Evening", "Night"))
user_type_time_period <-
clean_data %>%
group_by(time_period, user_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),.groups = "drop") %>%
arrange(time_period, user_type)
user_type_time_period
No of rides, ride length, average ride length, max ride length for
rideable for each time period
rideable_type_time_period <-
clean_data %>%
group_by(time_period, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length), .groups = "drop") %>%
arrange(time_period, rideable_type)
rideable_type_time_period
No of rides, ride length, average ride length, max ride length by
each usertype for rideable type on each time period
user_rideable_time_period <-
clean_data %>%
group_by(time_period,user_type, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length), .groups = "drop") %>%
arrange(time_period, user_type, rideable_type)
user_rideable_time_period
No of rides, ride length, average ride length, max ride length by
usertype for each month
clean_data$month <- ordered(clean_data$month, levels=c("September", "October", "November", "December", "January", "February", "March", "April", "May", "June", "July", "August"))
user_type_month <-
clean_data %>%
group_by(month, user_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length),.groups = "drop") %>%
arrange(month, user_type)
user_type_month
No of ride, ride length, average ride length, max ride length for
rideable for each month
rideable_type_month <-
clean_data %>%
group_by(month, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length),.groups = "drop") %>%
arrange(month, rideable_type)
rideable_type_month
No of ride, ride length, average ride length, max ride length by
each usertype for rideable type on each month
user_rideable_month <-
clean_data %>%
group_by(month, user_type, rideable_type) %>%
summarise(total_ride = n(),
total_ride_length = sum(ride_length),
max_ride_length = max(ride_length),
average_ride_length = mean(ride_length),.groups = "drop") %>%
arrange(month, user_type, rideable_type)
user_rideable_month
Top 10 starting station for member users
top_10_member <-
clean_data %>%
filter(user_type == "Member") %>%
group_by(start_station_name, user_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length), .groups = "drop") %>%
arrange(desc(total_ride)) %>%
head(10)
top_10_member
Top 10 starting station for member users
top_10_casual <-
clean_data %>%
filter(user_type == "Casual") %>%
group_by(start_station_name, user_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length), .groups = "drop") %>%
arrange(desc(total_ride)) %>%
head(10)
top_10_casual
Top 10 starting station for rideable type
top_10_classicbike <-
clean_data %>%
filter(rideable_type == "Classic_bike") %>%
group_by(start_station_name, rideable_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length), .groups = "drop") %>%
arrange(desc(total_ride)) %>%
head(10)
top_10_classicbike
Top 10 starting station for rideable type
top_10_dockedbike <-
clean_data %>%
filter(rideable_type == "Docked_bike") %>%
group_by(start_station_name, rideable_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length), .groups = "drop") %>%
arrange(desc(total_ride)) %>%
head(10)
top_10_dockedbike
Top 10 starting station for rideable type
top_10_electricbike <-
clean_data %>%
filter(rideable_type == "Electric_bike") %>%
group_by(start_station_name, rideable_type) %>%
summarise(total_ride = n()
,total_ride_length = sum(ride_length), .groups = "drop") %>%
arrange(desc(total_ride)) %>%
head(10)
top_10_electricbike
Data Visualization
Total number of rides by users for the type of ride
totalride_user_per_rideabletype %>%
ggplot(mapping = aes(x= rideable_type, y = total_ride, fill = user_type))+
geom_col(position= "dodge")+
labs(title = "The total number of rides by users for each type of ride",x="Type of ride by users",y="No of Rides")+
geom_text(aes(label = total_ride), vjust=1.2,position = position_dodge(0.9), size=3)+
theme(text = element_text(size = 9))

The total ride length by each user type and rideable type
total_ride_length_usertype %>%
ggplot(mapping = aes(x= user_type, y = total_ride_length, fill = user_type))+
geom_col(position= "dodge")+
labs(title = "The total ride length by user type in mins",x="User type",y="Total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2), "mins")), vjust=1.6, position = position_dodge(0.7), size=3)+
theme(text = element_text(size = 9))

total_ride_length_usertype %>%
ggplot(aes(x= "", y = per_of_ride_length, fill = user_type))+
geom_col()+
coord_polar(theta = "y")+
labs(title = "Percentage of ride length")+
theme(legend.position="top",
text = element_text(size = 10))+
geom_text(aes(label = paste(user_type, paste(per_of_ride_length, "%"), sep = "\n")),
position = position_stack(vjust = 0.5), size = 3, color = "black")

total_ride_length_rideabletype %>%
ggplot(mapping = aes(x= rideable_type, y = total_ride_length, fill = rideable_type))+
geom_col(position= "dodge")+
labs(title = "The total ride length for rideable type in mins",x="Rideable type",y="Total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.7), size=3)+
theme(text = element_text(size = 9))

total_ride_length_rideabletype %>%
ggplot(aes(x= "", y = per_of_ride_length, fill = rideable_type))+
geom_col()+
coord_polar(theta = "y")+
labs(title = "Percentage of ride length")+
theme(legend.position="top",
text = element_text(size = 10))+
geom_text(aes(label = paste(rideable_type, paste(per_of_ride_length, "%"), sep = "\n")),
position = position_stack(vjust = 0.5), size = 3, color = "black")

Total number of rides and total ride length by each user type per
the type of ride
totalridelength_user_per_rideabletype %>%
ggplot(mapping = aes(x= rideable_type, y = total_ride_length, fill = user_type))+
geom_col(position= "dodge")+
labs(title = "The total ride length by user type in mins",x="User type",y="Total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2), "mins")), vjust=1.6, position = position_dodge(0.7), size=2)+
theme(text = element_text(size = 9))

Max and Average ride length for user type
avg_max_usertype %>%
ggplot(mapping = aes(x= user_type, y = max_ride_length, fill = user_type))+
geom_col(position= "dodge")+
labs(title = "Max ride length by each user type",x="User type",y="Max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 9))

avg_max_usertype %>%
ggplot(mapping = aes(x= user_type, y = average_ride_length, fill = user_type))+
geom_col(position= "dodge")+
labs(title = "Average ride length by each user type",x="User type",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 9))

Max and Average ride length for rideable type
avg_max_rideabletype %>%
ggplot(mapping = aes(x= rideable_type, y = max_ride_length, fill = rideable_type))+
geom_col(position= "dodge")+
labs(title = "Max ride length by each rideable type",x="Rideable type",y="Max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 9))

avg_max_rideabletype %>%
ggplot(mapping = aes(x= rideable_type, y = average_ride_length, fill = rideable_type))+
geom_col(position= "dodge")+
labs(title = "Average ride length by each rideable type",x="Rideable type",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 9))

Average and max ride by users for each type of ride
clean_data %>%
group_by(rideable_type, user_type) %>%
summarise(average_ride_length = mean(ride_length),.groups = "drop") %>%
arrange(rideable_type)%>%
ggplot(mapping = aes(x= rideable_type, y = average_ride_length, fill = user_type))+
geom_col(position= "dodge")+
labs(title = "Average ride length by users for each type of ride",x="Type of ride by users",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

clean_data %>%
group_by(rideable_type, user_type) %>%
summarise(Max_ride_length = max(ride_length),.groups = "drop") %>%
arrange(rideable_type)%>%
ggplot(mapping = aes(x= rideable_type, y = Max_ride_length, fill = user_type))+
geom_col(position= "dodge")+
labs(title = "Max ride length by users for each type of ride",x="Type of ride by users",y="Max ride length")+
geom_text(aes(label = paste(round(Max_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

No of rides, ride length, average ride length, max ride length by
user type for each weekday
user_type_weekday %>%
ggplot(mapping = aes(x= weekdays, y =total_ride, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "Total no of rides by each user type for each week day",x="Week days",y="No of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_weekday %>%
ggplot(mapping = aes(x= weekdays, y =total_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "The total ride length by each user type for each week day",x="Week days",y="Total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2), "mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_weekday %>%
ggplot(mapping = aes(x= weekdays, y =average_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "The average ride length by each user type for each week day",x="Week days",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_weekday %>%
ggplot(mapping = aes(x= weekdays, y =max_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "The max ride length by each user type for each week day",x="Week days",y="Max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

No of rides, ride length, average ride length, max ride length by
rideable type for each weekday
rideable_type_weekday%>%
ggplot(mapping = aes(x= weekdays, y =total_ride, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "Total no of rides by each rideable type for each week day",x="Week days",y="No of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_weekday %>%
ggplot(mapping = aes(x= weekdays, y =total_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "Total ride length by each rideable type for each week day",x="Week days",y="total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_weekday %>%
ggplot(mapping = aes(x= weekdays, y =average_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "Average ride length by each rideable type for each week day",x="Week days",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_weekday %>%
ggplot(mapping = aes(x= weekdays, y =max_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "The max ride length by each rideable type for each week day",x="Week days",y="Max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

No of rides, ride length, average ride length, max ride length by
rideable type for each day type
rideable_type_daytype%>%
ggplot(mapping = aes(x= day_type, y =total_ride, fill =rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "Total no of rides by each rideable type for each day type",x="Day type",y="No of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_daytype %>%
ggplot(mapping = aes(x= day_type, y =total_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "total ride length by each rideable type for each day type",x="Day type",y="total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_daytype %>%
ggplot(mapping = aes(x= day_type, y =average_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "Average ride length by each rideable type for each day type",x="Day type",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_daytype %>%
ggplot(mapping = aes(x= day_type, y =max_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "The max ride length by each rideable type for each day type",x="Day type",y="Max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

No of rides, ride length, average ride length, max ride length by
user type for each day type
user_type_daytype %>%
ggplot(mapping = aes(x= day_type, y =total_ride,fill =user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "Total no of rides by each user type for each day type",x="Day type",y="number_of_rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_daytype %>%
ggplot(mapping = aes(x= day_type, y =total_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "total ride length by each user type for each day type",x="Day type",y="total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_daytype %>%
ggplot(mapping = aes(x= day_type, y =average_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "Average ride length by each user type for each day type",x="Day type",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_daytype %>%
ggplot(mapping = aes(x= day_type, y =max_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "The max ride length by each user type for each day type",x="Day type",y="Max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

No of rides by rideable type for each time period
rideable_type_time_period %>%
ggplot(mapping = aes(x= time_period, y =total_ride, fill =rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
labs(title = "Total no of rides by each rideable type for each time period",x="Time period",y="number_of_rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

No of rides and total ride length by users for each time period
user_type_time_period %>%
ggplot(mapping = aes(x= time_period, y =total_ride,fill =user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "Total no of rides by each user type for each time period",x="Time period",y="number_of_rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 9))

user_type_time_period %>%
ggplot(mapping = aes(x= time_period, y =total_ride_length, fill =user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
labs(title = "Total ride length by each user type for each time period",x="Time period",y="Total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=3)+
theme(text = element_text(size = 9))

No of rides, ride length, average ride length, max ride length by
rideable type for each month
rideable_type_month %>%
ggplot(mapping = aes(x= month, y =total_ride, fill =rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Total no of rides by each rideable type for each month (September 2021 - August 2022)",x="Months",y="number_of_rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 9))

rideable_type_month %>%
ggplot(mapping = aes(x= month, y =total_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "total ride length by each rideable type for each month (September 2021 - August 2022)",x="Months",y="total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_month%>%
ggplot(mapping = aes(x= month, y =average_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Average ride length by each rideable type for each month (September 2021 - August 2022)",x="Months",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

rideable_type_month%>%
ggplot(mapping = aes(x= month, y =max_ride_length, fill = rideable_type))+
geom_line(aes(group = rideable_type, color = rideable_type), size = 4)+
geom_point(aes(group = rideable_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Max ride length by each rideable type for each month (September 2021 - August 2022)",x="Months",y="Max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

No of rides, ride length, average ride length, max ride length by
user type for each month
user_type_month %>%
ggplot(mapping = aes(x= month, y =total_ride, fill =user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "No of rides by each user type for each month (September 2021 - August 2022)",x="Months",y="number_of_rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_month %>%
ggplot(mapping = aes(x= month, y =total_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "total ride length by each user type for each month (September 2021 - August 2022)",x="Months",y="total ride length")+
geom_text(aes(label = paste(round(total_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_month %>%
ggplot(mapping = aes(x= month, y =average_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Average ride length by each user type for each month (September 2021 - August 2022)",x="Months",y="Average ride length")+
geom_text(aes(label = paste(round(average_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

user_type_month %>%
ggplot(mapping = aes(x= month, y =max_ride_length, fill = user_type))+
geom_line(aes(group = user_type, color = user_type), size = 4)+
geom_point(aes(group = user_type), size = 1)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Max ride length by each user type for each month (September 2021 - August 2022)",x="Months",y="max ride length")+
geom_text(aes(label = paste(round(max_ride_length, digits = 2),"mins")), vjust=1.6,position = position_dodge(0.9), size=2)+
theme(text = element_text(size = 7))

Top 10 starting station for users
top_10_member %>%
ggplot(mapping = aes(x= start_station_name, y = total_ride, fill = user_type))+
geom_col(position= "dodge")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Top 10 starting station for member users",x="Start station name",y="Number of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.7), size=2)+
theme(text = element_text(size = 7))

top_10_casual %>%
ggplot(mapping = aes(x= start_station_name, y = total_ride, fill = user_type))+
geom_col(position= "dodge")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Top 10 starting station for casual users",x="Start station name",y="Number of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.7), size=2)+
theme(text = element_text(size = 7))

Top 10 starting station for rideable type
top_10_classicbike %>%
ggplot(mapping = aes(x= start_station_name, y = total_ride, fill = rideable_type))+
geom_col(position= "dodge")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Top 30 starting station for classic bike riders",x="Start station name",y="Number of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.7), size=2)+
theme(text = element_text(size = 7))

top_10_classicbike %>%
ggplot(mapping = aes(x= start_station_name, y = total_ride, fill = rideable_type))+
geom_col(position= "dodge")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Top 15 starting station for docked bike riders",x="Start station name",y="Number of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.7), size=2)+
theme(text = element_text(size = 7))

top_10_classicbike %>%
ggplot(mapping = aes(x= start_station_name, y = total_ride, fill = rideable_type))+
geom_col(position= "dodge")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))+
labs(title = "Top 10 starting station for electric bike riders",x="Start station name",y="Number of rides")+
geom_text(aes(label = total_ride), vjust=1.6,position = position_dodge(0.7), size=2)+
theme(text = element_text(size = 7))

Findings and Recommendations
1. Based on my analysis, it appears that members have a much higher
number of rides on electric and classic bikes than casual users.
However, casual users have a much longer total ride distance than
members. It is my recommendation that Cyclist should implement
relationship marketing in order to enable them to develop a better
connection with casual users. This will enable them to ensure an
emotional connection with the brand. A prompt and efficient response to
all customer inquiries on all platforms.
2. Cyclist should create a new membership program
a. There should be a membership program targeted at casual members
during the summer months (May - October). The longest ride length is
experienced by casual users during this period.
b. Membership should include access to all three types of bikes,
since all causal members use all the three types of bikes available at
Cyclist.
c. The membership program should allow unlimited weekends rides of
45 minutes (above average ride length) on classic bikes.
i. Casual users ride more often during weekends, and classic bikes
are the bikes most often used.
ii. Membership programs should allow bikes to be ridden for longer
than 30 minutes at a time, regardless of the type of bicycle.
d. A discount for afternoon and evening rides as we have more casual
users at these times.
e. Docked bike member users should be given a discounted price since
it is only used by casual users.
f. Provide discounted pricing for starting stations that have a
record of usership for all types of riders (Streeter Dr & Grand
Ave)
#Notable Places in the Area ##### • The Chicago Children’s Museum
##### • Lake Point Tower : Residential ##### • Navy Pier: Lake ##### •
Milton Lee Olive: Public part
Cyclistic bike share power point presentation
Scope of work
Ogunnubi Abiodun Tobi | Oct 2022