##First Step: Install necessary packages
install.packages(“tidyverse”) install.packages(“conflicted”)
install.packages(“here”) install.packages(“skimr”)
install.packages(“janitor”) install.packages(“dplyr”) library(tidyverse)
library(conflicted) library(here) library(skimr) library(janitor)
library(dplyr) conflict_prefer(“filter”, “dplyr”) conflict_prefer(“lag”,
“dplyr”) ##Load csv files to the workspace q1_2019 <-
read_csv(“Divvy_Trips_2019_Q1.csv”) q1_2020 <-
read_csv(“Divvy_Trips_2020_Q1.csv”) ##Display column names
colnames(q1_2019) colnames(q1_2020) ## Rename columns of q1_2019 to
compatible with q1_2020 (q1_2019 <- rename(q1_2019 ,ride_id = trip_id
,rideable_type = bikeid ,started_at = start_time ,ended_at = end_time
,start_station_name = from_station_name ,start_station_id =
from_station_id ,end_station_name = to_station_name ,end_station_id =
to_station_id ,member_casual = usertype )) ##Chaeck structure of both
data frames
str(q1_2019) str(q1_2020) ##change data type q1_2019 <-
mutate(q1_2019, ride_id = as.character(ride_id) ,rideable_type =
as.character(rideable_type)) ## Create new data frame named “all_trips”
with merging data from q1_2019 & q1_2020
all_trips <- bind_rows(q1_2019, q1_2020)#, q3_2019)#, q4_2019,
q1_2020) ## Remove unnecessary columns from q1_2019 all_trips <-
all_trips %>%
select(-c(start_lat, start_lng, end_lat, end_lng, birthyear, gender,
“tripduration”)) ##check new data frame:all_trips colnames(all_trips)
#List of column names nrow(all_trips) #How many rows are in data frame?
dim(all_trips) #Dimensions of the data frame? head(all_trips) #See the
first 6 rows of data frame. Also tail(all_trips) str(all_trips) #See
list of columns and data types (numeric, character, etc)
summary(all_trips) #Statistical summary of data. Mainly for numerics
##Merging columns table(all_trips\(member_casual) all_trips <- all_trips
%>% mutate(member_casual =
recode(member_casual ,"Subscriber" =
"member" ,"Customer" = "casual"))
table(all_trips\)member_casual) all_trips\(date <- as.Date(all_trips\)started_at)
#The default format is yyyy-mm-dd all_trips\(month <-
format(as.Date(all_trips\)date), “%m”) all_trips\(day <- format(as.Date(all_trips\)date),
“%d”) all_trips\(year <-
format(as.Date(all_trips\)date), “%Y”) all_trips\(day_of_week <-
format(as.Date(all_trips\)date), “%A”) all_trips\(ride_length <-
difftime(all_trips\)ended_at,all_trips\(started_at) str(all_trips)
all_trips\)ride_length <-
as.numeric(as.character(all_trips\(ride_length))
is.numeric(all_trips\)ride_length) ## Create new data
frame:all_trips_v2 & analyze all_trips_v2 <-
all_trips[!(all_trips\(start_station_name ==
"HQ QR" | all_trips\)ride_length<0),]
mean(all_trips_v2\(ride_length) #straight
average (total ride length / rides)
median(all_trips_v2\)ride_length) #midpoint number in the
ascending array of ride lengths max(all_trips_v2\(ride_length) #longest ride
min(all_trips_v2\)ride_length) #shortest ride
aggregate(all_trips_v2\(ride_length ~
all_trips_v2\)member_casual, FUN = mean)
aggregate(all_trips_v2\(ride_length ~
all_trips_v2\)member_casual, FUN = median)
aggregate(all_trips_v2\(ride_length ~
all_trips_v2\)member_casual, FUN = max)
aggregate(all_trips_v2\(ride_length ~
all_trips_v2\)member_casual, FUN = min)
aggregate(all_trips_v2\(ride_length ~
all_trips_v2\)member_casual + all_trips_v2\(day_of_week, FUN = mean)
all_trips_v2\)day_of_week <- ordered(all_trips_v2\(day_of_week, levels=c("Sunday",
"Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"))
aggregate(all_trips_v2\)ride_length ~ all_trips_v2\(member_casual + all_trips_v2\)day_of_week,
FUN = mean) all_trips_v2 %>% mutate(weekday = wday(started_at, label
= TRUE)) %>% #creates weekday field using wday()
group_by(member_casual, weekday) %>% #groups by usertype and weekday
summarise(number_of_rides = n() #calculates the number of rides and
average duration ,average_duration = mean(ride_length)) %>% #
calculates the average duration arrange(member_casual, weekday) # sorts
##Visualization all_trips_v2 %>% mutate(weekday = wday(started_at,
label = TRUE)) %>% group_by(member_casual, weekday) %>%
summarise(number_of_rides = n() ,average_duration = mean(ride_length))
%>% arrange(member_casual, weekday) %>% ggplot(aes(x = weekday, y
= number_of_rides, fill = member_casual)) + geom_col(position = “dodge”)
all_trips_v2 %>% mutate(weekday = wday(started_at, label = TRUE))
%>% group_by(member_casual, weekday) %>% summarise(number_of_rides
= n() ,average_duration = mean(ride_length)) %>%
arrange(member_casual, weekday) %>% ggplot(aes(x = weekday, y =
average_duration, fill = member_casual)) + geom_col(position =
“dodge”)
counts <- aggregate(all_trips_v2\(ride_length ~ all_trips_v2\)member_casual + all_trips_v2$day_of_week, FUN = mean) write.csv(counts,“F:/Google_Data_Anlysis/8.Project/counts_1.csv”, row.names=FALSE)