Cyclistic Bike-Share Analysis

EDA
data cleaning
data manipulation
data visualization
R

My Capstone Project for the Google Data Analytics Professional Certificate.

Sandra Jurela
2022-04-12

Foreword

In September 2021 I have completed the Google Data Analytics Professional Certificate Program hosted on Coursera. The program is very extensive and covers all the steps of the data analysis process as taught by Google (ask, prepare process, analyze, share, and act). It consists of 8 courses, the last of which is dedicated to a capstone project. As a passionate cyclist I have chosen the Cyclistic bike-share analysis case study to showcase what I have learned. I hope you’ll like it!

Note: The original project is published on Kaggle in November 2021. In this version, instead of Tableau Public, I used the leaflet package to visualize the most popular starting stations.

Introduction

In this case study I am a junior data analyst working in the marketing analyst team at Cyclistic, a fictional bike-share company in Chicago. The director of marketing believes the company’s future success depends on maximizing the number of annual memberships. Therefore, my team wants to understand how casual riders and annual members use Cyclistic bikes differently. From these insights, my team will design a new marketing strategy to convert casual riders into annual members. But first, Cyclistic executives must approve our recommendations, so they must be backed up with compelling data insights and professional data visualizations.

Three questions will guide the future marketing program:

  1. How do annual members and casual riders use Cyclistic bikes differently?
  2. Why would casual riders buy Cyclistic annual memberships?
  3. How can Cyclistic use digital media to influence casual riders to become members?

Lily Moreno, the director of marketing and my manager has assigned me the first question to answer.

PART I: Ask

In the first step of the data analysis process we identify the business task and consider key stakeholders.

Business task
How do annual members and casual riders use Cyclistic bikes differently?

Primary Stakeholders

  1. Lily Moreno: the Director of Marketing and my manager
  2. Cyclistic Executive Team: the notoriously detail-oriented executive team who will decide whether to approve the recommended marketing program.

Secondary Stakeholders

  1. Cyclistic Marketing Analytics Team: a team of data analysts who are responsible for collecting, analyzing, and reporting data that helps guide Cyclistic marketing strategy (my team)

PART II: Prepare

The objective of this step is to prepare data for the analysis. I will use the past 12 months of Cyclitis’s historical trip data (from September 2020 to August 2021) to analyze and identify trends. Because Cyclistic is a fictional company, for the purposes of this case study I will use data from a real bike-share company in Chicago, Divvy. The data has been made available for public use by Motivate International Inc. under this license and can be downloaded here.

The data is released on a monthly schedule and anonymized. It is reliable, original, comprehensive, current, and cited.

I have downloaded 12 csv files (datasets). Each dataset contains historical trip data for an individual month. In all 12 datasets each variable has its own column, each observation has its own row, and each value has its own cell. Therefore, I can conclude that the datasets are tidy.

There are 13 columns (variables) in each csv file. Metadata isn’t provided but most of the variables are self-explanatory.


No Column Name Data Type Definition
1 ride_id Text Unique ride ID
2 rideable_type Text Classic, docked, or electric bike
3 started_at Date & Time Trip start day and time
4 ended_at Date & Time Trip end day and time
5 start_station_name Text Trip start station name
6 start_station_id Text Trip start station ID
7 end_station_name Text Trip end station name
8 end_station_id Text Trip end station ID
9 start_lat Numeric Trip start station latitude
10 start_lng Numeric Trip start station longitude
11 end_lat Numeric Trip end station latitude
12 end_lng Numeric Trip end station longitude
13 member_casual Text User type (casual or member)


Only two variables need further clarification:


Note: If we want to show the most popular stations for each group on the map, each station must have unique geographical coordinates. This is not the case for trips taken with electric bikes. Each such ride has its own starting and ending coordinates, regardless of the start or end station. The problem is illustrated in the following maps made in Tableau:

Start station frequency for classic and docked bikes

Figure 1: Start station frequency for classic and docked bikes

Start station frequency for electric bikes

Figure 2: Start station frequency for electric bikes

Hence, I will additionally use the publicly available file, Divvy_Bicycle_Stations.csv, that contains a list of all stations and corresponding geographical coordinates (link). This file is updated regularly. My version is from October, 2021. I’ll also use it to check current station names.

Setting up the programming environment

Reading the datasets

# historical monthly trip data
sep_2020 <- read_csv("data/202009-divvy-tripdata.csv")
oct_2020 <- read_csv("data/202010-divvy-tripdata.csv")
nov_2020 <- read_csv("data/202011-divvy-tripdata.csv")
dec_2020 <- read_csv("data/202012-divvy-tripdata.csv")
jan_2021 <- read_csv("data/202101-divvy-tripdata.csv")
feb_2021 <- read_csv("data/202102-divvy-tripdata.csv")
mar_2021 <- read_csv("data/202103-divvy-tripdata.csv")
apr_2021 <- read_csv("data/202104-divvy-tripdata.csv")
may_2021 <- read_csv("data/202105-divvy-tripdata.csv")
jun_2021 <- read_csv("data/202106-divvy-tripdata.csv")
jul_2021 <- read_csv("data/202107-divvy-tripdata.csv")
aug_2021 <- read_csv("data/202108-divvy-tripdata.csv")

# current Divvy stations with coordinates
divvy_stations <- read_csv("data/Divvy_Bicycle_Stations.csv")

In order to bind all 12 dataframes into a single dataframe they need to have consistent column names and data types. I will now check if the dataframes are row-bindable.

compare_df_cols_same(
  sep_2020, oct_2020, nov_2020, dec_2020, jan_2021, feb_2021, mar_2021, 
  apr_2021, may_2021, jun_2021, jul_2021, aug_2021,
  bind_method = c("bind_rows", "rbind"),
  verbose = TRUE
)
       column_name     ..1     ..2     ..3       ..4       ..5
1   end_station_id numeric numeric numeric character character
2 start_station_id numeric numeric numeric character character
        ..6       ..7       ..8       ..9      ..10      ..11
1 character character character character character character
2 character character character character character character
       ..12
1 character
2 character
[1] FALSE

Columns start_station_id and end_station_id in the first three datasets (2020-Sep to 2020-Nov) have a numeric data type. I will convert them to characters.

sep_2020 <- mutate(sep_2020, start_station_id = as.character(start_station_id), 
                   end_station_id = as.character(end_station_id))
oct_2020 <- mutate(oct_2020, start_station_id = as.character(start_station_id), 
                   end_station_id = as.character(end_station_id))
nov_2020 <- mutate(nov_2020, start_station_id = as.character(start_station_id), 
                   end_station_id = as.character(end_station_id))

Binding individual month’s dataframes into one big dataframe.

all_trips <- bind_rows(sep_2020, oct_2020, nov_2020, dec_2020, jan_2021, feb_2021, 
                       mar_2021, apr_2021, may_2021, jun_2021, jul_2021, aug_2021)

Data overview

# data dimensions (rows x columns)
dim_desc(all_trips)
[1] "[4,913,072 x 13]"
rmarkdown::paged_table(head(all_trips)) 
glimpse(all_trips)
Rows: 4,913,072
Columns: 13
$ ride_id            <chr> "2B22BD5F95FB2629", "A7FB70B4AFC6CAF2", "…
$ rideable_type      <chr> "electric_bike", "electric_bike", "electr…
$ started_at         <dttm> 2020-09-17 14:27:11, 2020-09-17 15:07:31…
$ ended_at           <dttm> 2020-09-17 14:44:24, 2020-09-17 15:07:45…
$ start_station_name <chr> "Michigan Ave & Lake St", "W Oakdale Ave …
$ start_station_id   <chr> "52", NA, NA, "246", "24", "94", "291", N…
$ end_station_name   <chr> "Green St & Randolph St", "W Oakdale Ave …
$ end_station_id     <chr> "112", NA, NA, "249", "24", NA, "256", NA…
$ start_lat          <dbl> 41.88669, 41.94000, 41.94000, 41.95606, 4…
$ start_lng          <dbl> -87.62356, -87.64000, -87.64000, -87.6689…
$ end_lat            <dbl> 41.88357, 41.94000, 41.94000, 41.96398, 4…
$ end_lng            <dbl> -87.64873, -87.64000, -87.64000, -87.6382…
$ member_casual      <chr> "casual", "casual", "casual", "casual", "…
head(all_trips$started_at)
[1] "2020-09-17 14:27:11 UTC" "2020-09-17 15:07:31 UTC"
[3] "2020-09-17 15:09:04 UTC" "2020-09-17 18:10:46 UTC"
[5] "2020-09-17 15:16:13 UTC" "2020-09-17 18:37:04 UTC"

Overview of the dataframe with current Divvy stations and corresponding coordinates.

dim_desc(divvy_stations)
[1] "[785 x 8]"
rmarkdown::paged_table(head(divvy_stations))
# making column names clean
divvy_stations <- divvy_stations %>% 
    set_names(names(.) %>% str_replace(" ", "_") %>% str_to_lower())

names(divvy_stations)
[1] "id"               "station_name"     "total_docks"     
[4] "docks_in service" "status"           "latitude"        
[7] "longitude"        "location"        


PART III - Process

In this step I am going to explore the data further and finally clean it.

Right now I can aggregate data only at the ride level, so I am going to create 3 new columns year_month, day_of_week, and hour extracted from the datetime column started_at and convert them to factors where needed.

all_trips <- all_trips %>% 
  mutate(year_month = format(as.Date(all_trips$started_at), "%Y-%m") %>% as.factor(),
         day_of_week = wday(started_at, label = TRUE, abbr = FALSE, 
                            week_start = getOption("lubridate.week.start", 1)),
         hour = hour(started_at) %>% as.factor()) 

Calculating and creating a new column ride_length in minutes, then converting it to a numeric data type and rounding to 2 decimal places.

all_trips <- all_trips %>% 
  mutate(ride_length = difftime(ended_at, started_at, units="mins") %>% as.numeric() %>% round(2))

Checking if everything is OK.

rmarkdown::paged_table(sample_n(all_trips, 10))


All is good! Let’s see the summary statistics.

skim_without_charts(all_trips)
Table 1: Data summary
Name all_trips
Number of rows 4913072
Number of columns 17
_______________________
Column type frequency:
character 7
factor 3
numeric 5
POSIXct 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
ride_id 0 1.00 16 16 0 4912863 0
rideable_type 0 1.00 11 13 0 3 0
start_station_name 450045 0.91 3 53 0 757 0
start_station_id 450571 0.91 1 36 0 1293 0
end_station_name 491380 0.90 10 53 0 756 0
end_station_id 491764 0.90 1 36 0 1293 0
member_casual 0 1.00 6 6 0 2 0

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
year_month 0 1 FALSE 12 202: 822410, 202: 804352, 202: 729595, 202: 532958
day_of_week 0 1 TRUE 7 Sat: 889412, Sun: 758229, Fri: 719239, Wed: 648981
hour 0 1 FALSE 24 17: 499035, 18: 435037, 16: 415752, 15: 353319

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100
start_lat 0 1 41.90 0.04 41.64 41.88 41.90 41.93 42.08
start_lng 0 1 -87.65 0.03 -87.84 -87.66 -87.64 -87.63 -87.52
end_lat 5015 1 41.90 0.04 41.51 41.88 41.90 41.93 42.15
end_lng 5015 1 -87.65 0.03 -88.07 -87.66 -87.64 -87.63 -87.44
ride_length 0 1 21.14 317.71 -29049.97 7.18 12.80 23.27 55944.15

Variable type: POSIXct

skim_variable n_missing complete_rate min max median n_unique
started_at 0 1 2020-09-01 00:00:07 2021-08-31 23:59:35 2021-05-26 16:51:05 4137017
ended_at 0 1 2020-09-01 00:04:43 2021-09-01 17:37:35 2021-05-26 17:12:45 4124534


By observing the data summary we can notice the following problems that need to be addressed:

Removing duplicate rows based on ride_id column

Each row represents one observation (trip). Based on the previous summary, there is a total of 4,913,072 rows and 4,912,863 unique ride_id values, meaning there are 209 rows of duplicated data. I will remove them.

all_trips_v2 <- all_trips[!duplicated(all_trips$ride_id), ] 

nrow(all_trips) - nrow(all_trips_v2)
[1] 209

Renaming column member_casual to user_type

all_trips_v2 <- rename(all_trips_v2, user_type = member_casual)

Inspecting observations with missing values in end_lat and end_lng column

all_trips_NA <- filter(all_trips_v2, is.na(end_lat) & is.na(end_lng))
all_trips_NA %>% 
  filter(between(ride_length, 1, 180)) %>%
  summarise(mean_ride_length = mean(ride_length))
# A tibble: 1 × 1
  mean_ride_length
             <dbl>
1             51.5
all_trips_v2 %>% 
  filter(between(ride_length, 1, 180)) %>% 
  summarise(mean_ride_length = mean(ride_length))
# A tibble: 1 × 1
  mean_ride_length
             <dbl>
1             19.4
ftable(all_trips_NA$user_type, all_trips_NA$year_month, all_trips_NA$rideable_type)
                classic_bike docked_bike
                                        
casual 2020-09             0         325
       2020-10             0         180
       2020-11             0          93
       2020-12            31           4
       2021-01            22           0
       2021-02            58           0
       2021-03           110           0
       2021-04           187           0
       2021-05           339           0
       2021-06           525           0
       2021-07           583           0
       2021-08           561           0
member 2020-09             0         464
       2020-10             0         294
       2020-11             0         191
       2020-12            47          28
       2021-01            81           0
       2021-02           156           0
       2021-03            57           0
       2021-04            80           0
       2021-05           113           0
       2021-06           192           0
       2021-07           148           0
       2021-08           145           0

Conclusion: in this subset there are 5015 observations (0.1%) across all months; only classic and docked bikes; average ride length is unusually high (51 min) compared to the whole dataset (19.4 min). These rides ended somewhere outside of the station for some reason (traffic accident, malfunction, etc.). I will remove this subset from the dataset.

all_trips_v2 <- setdiff(all_trips_v2, all_trips_NA)

I won’t need the columns with coordinates anymore, so I’ll remove them to make my dataframe lighter. Later on, I’ll join the coordinates from the divvy_stations dataframe.

all_trips_v2 <- all_trips_v2 %>% 
  select(-c(start_lat, start_lng, end_lat, end_lng))

Removing trips

Looking for specific values in the start_station_name column associated with Divvy test and repair stations.

Show code and output
unique(all_trips_v2$start_station_name)
  [1] "Michigan Ave & Lake St"                               
  [2] "W Oakdale Ave & N Broadway"                           
  [3] "Ashland Ave & Belle Plaine Ave"                       
  [4] "Fairbanks Ct & Grand Ave"                             
  [5] "Clark St & Armitage Ave"                              
  [6] "Wells St & Evergreen Ave"                             
  [7] NA                                                     
  [8] "Michigan Ave & 18th St"                               
  [9] "Mies van der Rohe Way & Chestnut St"                  
 [10] "Halsted St & Polk St"                                 
 [11] "Albany Ave & Bloomingdale Ave"                        
 [12] "Lake Shore Dr & Diversey Pkwy"                        
 [13] "Elston Ave & Wabansia Ave"                            
 [14] "Clybourn Ave & Division St"                           
 [15] "Campbell Ave & Fullerton Ave"                         
 [16] "Clark St & Lake St"                                   
 [17] "Sawyer Ave & Irving Park Rd"                          
 [18] "Financial Pl & Ida B Wells Dr"                        
 [19] "Wells St & Huron St"                                  
 [20] "Shedd Aquarium"                                       
 [21] "Streeter Dr & Grand Ave"                              
 [22] "Bissell St & Armitage Ave"                            
 [23] "Franklin St & Lake St"                                
 [24] "Sedgwick St & Huron St"                               
 [25] "Dearborn Pkwy & Delaware Pl"                          
 [26] "Halsted St & Dickens Ave"                             
 [27] "Clark St & Schiller St"                               
 [28] "Michigan Ave & Washington St"                         
 [29] "Aberdeen St & Jackson Blvd"                           
 [30] "Wilton Ave & Diversey Pkwy"                           
 [31] "Wells St & Hubbard St"                                
 [32] "Archer (Damen) Ave & 37th St"                         
 [33] "Franklin St & Monroe St"                              
 [34] "Dearborn St & Monroe St"                              
 [35] "Morgan St & Lake St"                                  
 [36] "Broadway & Granville Ave"                             
 [37] "Columbus Dr & Randolph St"                            
 [38] "California Ave & Milwaukee Ave"                       
 [39] "Milwaukee Ave & Cuyler Ave"                           
 [40] "Wells St & Concord Ln"                                
 [41] "Ashland Ave & Wellington Ave"                         
 [42] "Sheridan Rd & Buena Ave"                              
 [43] "Cottage Grove Ave & 83rd St"                          
 [44] "LaSalle Dr & Huron St"                                
 [45] "Michigan Ave & 14th St"                               
 [46] "Damen Ave & Division St"                              
 [47] "Museum of Science and Industry"                       
 [48] "Wells St & Polk St"                                   
 [49] "Clark St & North Ave"                                 
 [50] "Milwaukee Ave & Grand Ave"                            
 [51] "Wentworth Ave & 104th St"                             
 [52] "Rush St & Cedar St"                                   
 [53] "Lincoln Park Conservatory"                            
 [54] "Lake Shore Dr & Wellington Ave"                       
 [55] "Dearborn St & Erie St"                                
 [56] "Adler Planetarium"                                    
 [57] "Leavitt St & Addison St"                              
 [58] "Damen Ave & Madison St"                               
 [59] "Sheffield Ave & Willow St"                            
 [60] "McClurg Ct & Illinois St"                             
 [61] "Indiana Ave & Roosevelt Rd"                           
 [62] "Orleans St & Hubbard St"                              
 [63] "Seeley Ave & Roscoe St"                               
 [64] "Clark St & Grace St"                                  
 [65] "Wabash Ave & Grand Ave"                               
 [66] "Clark St & Schreiber Ave"                             
 [67] "Paulina Ave & North Ave"                              
 [68] "Southport Ave & Waveland Ave"                         
 [69] "Wentworth Ave & Cermak Rd"                            
 [70] "Buckingham Fountain"                                  
 [71] "Fort Dearborn Dr & 31st St"                           
 [72] "Francisco Ave & Foster Ave"                           
 [73] "Sheridan Rd & Loyola Ave"                             
 [74] "Clinton St & Madison St"                              
 [75] "Halsted St & Clybourn Ave"                            
 [76] "Halsted St & Wrightwood Ave"                          
 [77] "Peoria St & Jackson Blvd"                             
 [78] "Ellis Ave & 60th St"                                  
 [79] "Michigan Ave & Madison St"                            
 [80] "Lakefront Trail & Bryn Mawr Ave"                      
 [81] "Lake Shore Dr & North Blvd"                           
 [82] "Clark St & Bryn Mawr Ave"                             
 [83] "University Ave & 57th St"                             
 [84] "Ashland Ave & Blackhawk St"                           
 [85] "Larrabee St & Armitage Ave"                           
 [86] "Damen Ave & Pierce Ave"                               
 [87] "Damen Ave & Melrose Ave"                              
 [88] "Racine Ave & Belmont Ave"                             
 [89] "Franklin St & Illinois St"                            
 [90] "Broadway & Thorndale Ave"                             
 [91] "Ashland Ave & Chicago Ave"                            
 [92] "Honore St & Division St"                              
 [93] "Southport Ave & Wrightwood Ave"                       
 [94] "Clark St & Winnemac Ave"                              
 [95] "Eastlake Ter & Rogers Ave"                            
 [96] "Clarendon Ave & Junior Ter"                           
 [97] "Lake Shore Dr & Monroe St"                            
 [98] "Kedzie Ave & Milwaukee Ave"                           
 [99] "Michigan Ave & 8th St"                                
[100] "Clinton St & Jackson Blvd"                            
[101] "Lincoln Ave & Sunnyside Ave"                          
[102] "Lake Park Ave & 53rd St"                              
[103] "Desplaines St & Kinzie St"                            
[104] "Lake Park Ave & 35th St"                              
[105] "Kingsbury St & Kinzie St"                             
[106] "Dayton St & North Ave"                                
[107] "Lakeview Ave & Fullerton Pkwy"                        
[108] "Paulina St & Howard St"                               
[109] "Clarendon Ave & Leland Ave"                           
[110] "Chicago Ave & Sheridan Rd"                            
[111] "May St & Cullerton St"                                
[112] "Wood St & Milwaukee Ave"                              
[113] "Green St & Madison St"                                
[114] "Western Ave & Winnebago Ave"                          
[115] "Broadway & Cornelia Ave"                              
[116] "Orleans St & Merchandise Mart Plaza"                  
[117] "McClurg Ct & Erie St"                                 
[118] "Dorchester Ave & 49th St"                             
[119] "Sheffield Ave & Wrightwood Ave"                       
[120] "Shore Dr & 55th St"                                   
[121] "Larrabee St & Kingsbury St"                           
[122] "Damen Ave & Wellington Ave"                           
[123] "Wood St & Chicago Ave"                                
[124] "Desplaines St & Jackson Blvd"                         
[125] "LaSalle St & Illinois St"                             
[126] "State St & Kinzie St"                                 
[127] "Richmond St & Diversey Ave"                           
[128] "Sedgwick St & Schiller St"                            
[129] "Southport Ave & Wellington Ave"                       
[130] "Eberhart Ave & 61st St"                               
[131] "MLK Jr Dr & 29th St"                                  
[132] "Indiana Ave & 26th St"                                
[133] "Humboldt Blvd & Armitage Ave"                         
[134] "Damen Ave & Chicago Ave"                              
[135] "Burling St & Diversey Pkwy"                           
[136] "Franklin St & Adams St (Temp)"                        
[137] "Greenview Ave & Jarvis Ave"                           
[138] "Mies van der Rohe Way & Chicago Ave"                  
[139] "Racine Ave & 18th St"                                 
[140] "Kedzie Ave & Roosevelt Rd"                            
[141] "Ridge Blvd & Howard St"                               
[142] "Canal St & Adams St"                                  
[143] "Lake Shore Dr & Ohio St"                              
[144] "Ritchie Ct & Banks St"                                
[145] "Clinton St & Lake St"                                 
[146] "Noble St & Milwaukee Ave"                             
[147] "Logan Blvd & Elston Ave"                              
[148] "Austin Blvd & Lake St"                                
[149] "Wabash Ave & Roosevelt Rd"                            
[150] "Loomis St & Lexington St"                             
[151] "Wabash Ave & 9th St"                                  
[152] "Larrabee St & Oak St"                                 
[153] "Wells St & Walton St"                                 
[154] "Ashland Ave & Wrightwood Ave"                         
[155] "Orleans St & Chestnut St (NEXT Apts)"                 
[156] "Clark St & Jarvis Ave"                                
[157] "Larrabee St & Menomonee St"                           
[158] "Broadway & Waveland Ave"                              
[159] "Clark St & Elmdale Ave"                               
[160] "Racine Ave & Washington Blvd"                         
[161] "Ellis Ave & 58th St"                                  
[162] "Racine Ave & Fullerton Ave"                           
[163] "Drake Ave & Fullerton Ave"                            
[164] "Indiana Ave & 31st St"                                
[165] "Broadway & Berwyn Ave"                                
[166] "Kingsbury St & Erie St"                               
[167] "Dearborn St & Van Buren St"                           
[168] "Clark St & Newport St"                                
[169] "Ogden Ave & Race Ave"                                 
[170] "Clinton St & Roosevelt Rd"                            
[171] "Sheridan Rd & Lawrence Ave"                           
[172] "Larrabee St & Webster Ave"                            
[173] "Green St & Randolph St"                               
[174] "Leavitt St & Belmont Ave"                             
[175] "Kosciuszko Park"                                      
[176] "Michigan Ave & Jackson Blvd"                          
[177] "Montrose Harbor"                                      
[178] "Lincoln Ave & Winona St"                              
[179] "Aberdeen St & Randolph St"                            
[180] "Clark St & Berwyn Ave"                                
[181] "Ada St & Washington Blvd"                             
[182] "Clark St & Elm St"                                    
[183] "Ashland Ave & Division St"                            
[184] "Ashland Ave & Grand Ave"                              
[185] "Federal St & Polk St"                                 
[186] "Lake Shore Dr & Belmont Ave"                          
[187] "W Armitage Ave & N Sheffield Ave"                     
[188] "Burling St (Halsted) & Diversey Pkwy (Temp)"          
[189] "Lincoln Ave & Diversey Pkwy"                          
[190] "Winchester Ave & Elston Ave"                          
[191] "Field Blvd & South Water St"                          
[192] "Stetson Ave & South Water St"                         
[193] "Cityfront Plaza Dr & Pioneer Ct"                      
[194] "Wabash Ave & Wacker Pl"                               
[195] "Carpenter St & Huron St"                              
[196] "Kimbark Ave & 53rd St"                                
[197] "Larrabee St & North Ave"                              
[198] "Larrabee St & Division St"                            
[199] "Fairfield Ave & Roosevelt Rd"                         
[200] "Sheridan Rd & Noyes St (NU)"                          
[201] "Chicago Ave & Dempster St"                            
[202] "Hermitage Ave & Polk St"                              
[203] "Central Park Ave & Elbridge Ave"                      
[204] "State St & 33rd St"                                   
[205] "Greenwood Ave & 47th St"                              
[206] "Chicago Ave & Washington St"                          
[207] "Broadway & Ridge Ave"                                 
[208] "Sheffield Ave & Kingsbury St"                         
[209] "Pine Grove Ave & Irving Park Rd"                      
[210] "California Ave & Montrose Ave"                        
[211] "Sheridan Rd & Montrose Ave"                           
[212] "Clark St & Randolph St"                               
[213] "Calumet Ave & 18th St"                                
[214] "Spaulding Ave & Armitage Ave"                         
[215] "Damen Ave & Cortland St"                              
[216] "Wells St & Elm St"                                    
[217] "Winthrop Ave & Lawrence Ave"                          
[218] "Clark St & Lincoln Ave"                               
[219] "Western Ave & Division St"                            
[220] "Millennium Park"                                      
[221] "Sheridan Rd & Irving Park Rd"                         
[222] "Milwaukee Ave & Wabansia Ave"                         
[223] "Greenview Ave & Diversey Pkwy"                        
[224] "Rush St & Superior St"                                
[225] "Desplaines St & Randolph St"                          
[226] "Pine Grove Ave & Waveland Ave"                        
[227] "Emerald Ave & 31st St"                                
[228] "Cannon Dr & Fullerton Ave"                            
[229] "Michigan Ave & Ida B Wells Dr"                        
[230] "Halsted St & 47th Pl"                                 
[231] "LaSalle St & Washington St"                           
[232] "Halsted St & 18th St"                                 
[233] "Southport Ave & Roscoe St"                            
[234] "Ogden Ave & Chicago Ave"                              
[235] "Jefferson St & Monroe St"                             
[236] "Walsh Park"                                           
[237] "California Ave & Francis Pl (Temp)"                   
[238] "Michigan Ave & Oak St"                                
[239] "Sheridan Rd & Columbia Ave"                           
[240] "Burnham Harbor"                                       
[241] "Cottage Grove Ave & Oakwood Blvd"                     
[242] "Western Ave & Leland Ave"                             
[243] "Clark St & Drummond Pl"                               
[244] "Theater on the Lake"                                  
[245] "McCormick Place"                                      
[246] "Lincoln Ave & Waveland Ave"                           
[247] "Monticello Ave & Irving Park Rd"                      
[248] "California Ave & Byron St"                            
[249] "Glenwood Ave & Morse Ave"                             
[250] "Lincoln Ave & Fullerton Ave"                          
[251] "State St & 19th St"                                   
[252] "Damen Ave & Leland Ave"                               
[253] "Albany Ave & Montrose Ave"                            
[254] "Wilton Ave & Belmont Ave"                             
[255] "State St & Pearson St"                                
[256] "Field Museum"                                         
[257] "Wacker Dr & Washington St"                            
[258] "Kedzie Ave & Palmer Ct"                               
[259] "Sheffield Ave & Waveland Ave"                         
[260] "Washtenaw Ave & Lawrence Ave"                         
[261] "Broadway & Belmont Ave"                               
[262] "Sheffield Ave & Wellington Ave"                       
[263] "Halsted St & Willow St"                               
[264] "Dauphin Ave & 103rd St"                               
[265] "Throop (Loomis) St & Taylor St"                       
[266] "Western Ave & Lunt Ave"                               
[267] "Broadway & Barry Ave"                                 
[268] "Damen Ave & Grand Ave"                                
[269] "Ashland Ave & 63rd St"                                
[270] "Avers Ave & Belmont Ave"                              
[271] "California Ave & North Ave"                           
[272] "Damen Ave & Thomas St (Augusta Blvd)"                 
[273] "Clifton Ave & Armitage Ave"                           
[274] "Morgan Ave & 14th Pl"                                 
[275] "Constance Ave & 95th St"                              
[276] "Southport Ave & Clybourn Ave"                         
[277] "Greenview Ave & Fullerton Ave"                        
[278] "Ravenswood Ave & Lawrence Ave"                        
[279] "Bernard St & Elston Ave"                              
[280] "Franklin St & Jackson Blvd"                           
[281] "Sheffield Ave & Webster Ave"                          
[282] "South Shore Dr & 67th St"                             
[283] "Vernon Ave & 75th St"                                 
[284] "Ashland Ave & Grace St"                               
[285] "Kedzie Ave & Foster Ave"                              
[286] "State St & Randolph St"                               
[287] "Harper Ave & 59th St"                                 
[288] "Damen Ave & Clybourn Ave"                             
[289] "Sheridan Rd & Greenleaf Ave"                          
[290] "Lincoln Ave & Roscoe St"                              
[291] "State St & Harrison St"                               
[292] "Dusable Harbor"                                       
[293] "Cottage Grove Ave & 43rd St"                          
[294] "Broadway & Wilson Ave"                                
[295] "Christiana Ave & Lawrence Ave"                        
[296] "Clark St & Leland Ave"                                
[297] "Daley Center Plaza"                                   
[298] "St. Clair St & Erie St"                               
[299] "Union Ave & Root St"                                  
[300] "State St & 29th St"                                   
[301] "Paulina St & Montrose Ave"                            
[302] "Halsted St & Roscoe St"                               
[303] "Clark St & Wellington Ave"                            
[304] "Broadway & Argyle St"                                 
[305] "Michigan Ave & Pearson St"                            
[306] "Southport Ave & Belmont Ave"                          
[307] "Blue Island Ave & 18th St"                            
[308] "Franklin St & Chicago Ave"                            
[309] "Southport Ave & Irving Park Rd"                       
[310] "Leavitt St & Armitage Ave"                            
[311] "Clark St & 9th St (AMLI)"                             
[312] "Wentworth Ave & 24th St (Temp)"                       
[313] "Orleans St & Elm St"                                  
[314] "Dodge Ave & Church St"                                
[315] "Budlong Woods Library"                                
[316] "Wabash Ave & Adams St"                                
[317] "Halsted St & 35th St"                                 
[318] "Stockton Dr & Wrightwood Ave"                         
[319] "Artesian Ave & Hubbard St"                            
[320] "Racine Ave & 13th St"                                 
[321] "State St & 123rd St"                                  
[322] "Talman Ave & Addison St"                              
[323] "Albany Ave & 26th St"                                 
[324] "Damen Ave & Cullerton St"                             
[325] "Eberhart Ave & 131st St"                              
[326] "Clark St & Wrightwood Ave"                            
[327] "Bennett Ave & 79th St"                                
[328] "Dorchester Ave & 63rd St"                             
[329] "State St & 35th St"                                   
[330] "Leavitt St & North Ave"                               
[331] "Damen Ave & Charleston St"                            
[332] "Wolcott (Ravenswood) Ave & Montrose Ave"              
[333] "Western Ave & Congress Pkwy"                          
[334] "Racine Ave & Randolph St"                             
[335] "Lincoln Ave & Belmont Ave"                            
[336] "Rush St & Hubbard St"                                 
[337] "Drake Ave & Montrose Ave"                             
[338] "Damen Ave & Sunnyside Ave"                            
[339] "Big Marsh Park"                                       
[340] "Sedgwick St & North Ave"                              
[341] "Wallace St & 35th St"                                 
[342] "Leavitt St & Archer Ave"                              
[343] "Marine Dr & Ainslie St"                               
[344] "Halsted St & 37th St"                                 
[345] "Central Park Ave & Ogden Ave"                         
[346] "Clinton St & Tilden St"                               
[347] "Warren Park West"                                     
[348] "Lake Park Ave & 47th St"                              
[349] "Clark St & Chicago Ave"                               
[350] "Avondale Ave & Irving Park Rd"                        
[351] "Wabash Ave & 16th St"                                 
[352] "Western Ave & Fillmore St"                            
[353] "Kilbourn Ave & Milwaukee Ave"                         
[354] "Wood St & Hubbard St"                                 
[355] "California Ave & Division St"                         
[356] "Cornell Ave & Hyde Park Blvd"                         
[357] "Ellis Ave & 55th St"                                  
[358] "California Ave & Altgeld St"                          
[359] "Benson Ave & Church St"                               
[360] "May St & Taylor St"                                   
[361] "Delano Ct & Roosevelt Rd"                             
[362] "Morgan St & 18th St"                                  
[363] "Wolcott Ave & Polk St"                                
[364] "Jeffery Blvd & 71st St"                               
[365] "Sedgwick St & Webster Ave"                            
[366] "Lakefront Trail & Wilson Ave"                         
[367] "Canal St & Jackson Blvd"                              
[368] "Glenwood Ave & Touhy Ave"                             
[369] "2112 W Peterson Ave"                                  
[370] "Loomis St & Archer Ave"                               
[371] "Phillips Ave & 79th St"                               
[372] "Pulaski Rd & Lake St"                                 
[373] "Clarendon Ave & Gordon Ter"                           
[374] "Central Ave & Chicago Ave"                            
[375] "LaSalle St & Adams St"                                
[376] "Rhodes Ave & 32nd St"                                 
[377] "Western Ave & Roscoe St"                              
[378] "Knox Ave & Montrose Ave"                              
[379] "LaSalle St & Jackson Blvd"                            
[380] "Dearborn St & Adams St"                               
[381] "Broadway & Sheridan Rd"                               
[382] "Calumet Ave & 21st St"                                
[383] "Marshfield Ave & Cortland St"                         
[384] "Wells St & 19th St"                                   
[385] "Clark St & Lunt Ave"                                  
[386] "Western Ave & Monroe St"                              
[387] "Milwaukee Ave & Rockwell St"                          
[388] "Stony Island Ave & 90th St"                           
[389] "Cottage Grove Ave & 111th Pl"                         
[390] "Campbell Ave & North Ave"                             
[391] "Pulaski Rd & Congress Pkwy"                           
[392] "Elizabeth (May) St & Fulton St"                       
[393] "Halsted St & Archer Ave"                              
[394] "Eckhart Park"                                         
[395] "Dauphin Ave & 87th St"                                
[396] "Prairie Ave & 43rd St"                                
[397] "Woodlawn Ave & 55th St"                               
[398] "Western Ave & Walton St"                              
[399] "Leavitt St & Lawrence Ave"                            
[400] "Racine Ave & 35th St"                                 
[401] "Wabash Ave & Cermak Rd"                               
[402] "California Ave & 23rd Pl"                             
[403] "Stave St & Armitage Ave"                              
[404] "Sheffield Ave & Fullerton Ave"                        
[405] "California Ave & Fletcher St"                         
[406] "Laflin St & Cullerton St"                             
[407] "Shields Ave & 28th Pl"                                
[408] "Racine Ave & Congress Pkwy"                           
[409] "Princeton Ave & Garfield Blvd"                        
[410] "State St & Van Buren St"                              
[411] "Clinton St & Washington Blvd"                         
[412] "Damen Ave & Coulter St"                               
[413] "Wood St & Augusta Blvd"                               
[414] "Fairbanks St & Superior St"                           
[415] "Pulaski Rd & Eddy St (Temp)"                          
[416] "Clark St & Montrose Ave"                              
[417] "Loomis St & Jackson Blvd"                             
[418] "Western Ave & 24th St"                                
[419] "Canal St & Madison St"                                
[420] "Damen Ave & Pershing Rd"                              
[421] "California Ave & Lake St"                             
[422] "Jeffery Blvd & 67th St"                               
[423] "Ravenswood Ave & Irving Park Rd"                      
[424] "Spaulding Ave & Division St"                          
[425] "South Shore Dr & 71st St"                             
[426] "Morgan St & Polk St"                                  
[427] "Lincoln Ave & Belle Plaine Ave"                       
[428] "Leavitt St & Chicago Ave"                             
[429] "State St & 95th St"                                   
[430] "Elmwood Ave & Austin St"                              
[431] "Oglesby Ave & 100th St"                               
[432] "Dodge Ave & Mulford St"                               
[433] "St. Louis Ave & Balmoral Ave"                         
[434] "Ellis Ave & 53rd St"                                  
[435] "Halsted St & 111th St"                                
[436] "Lake Park Ave & 56th St"                              
[437] "MLK Jr Dr & 56th St"                                  
[438] "Halsted St & North Branch St"                         
[439] "Major Taylor Trail & 115th St"                        
[440] "Racine Ave & Wrightwood Ave"                          
[441] "Calumet Ave & 51st St"                                
[442] "Wood St & Taylor St"                                  
[443] "Racine Ave & 15th St"                                 
[444] "900 W Harrison St"                                    
[445] "Bosworth Ave & Howard St"                             
[446] "Ashland Ave & Augusta Blvd"                           
[447] "Aberdeen St & Monroe St"                              
[448] "Western Ave & Granville Ave"                          
[449] "Greenwood Ave & 91st St"                              
[450] "Damen Ave & Foster Ave"                               
[451] "Michigan Ave & 71st St"                               
[452] "Prairie Ave & Garfield Blvd"                          
[453] "Stony Island Ave & 71st St"                           
[454] "Southport Ave & Clark St"                             
[455] "Damen Ave & 51st St"                                  
[456] "Canal St & Monroe St"                                 
[457] "Smith Park"                                           
[458] "Manor Ave & Leland Ave"                               
[459] "MLK Jr Dr & Pershing Rd"                              
[460] "Canal St & Taylor St"                                 
[461] "Ridge Blvd & Touhy Ave"                               
[462] "California Ave & Cortez St"                           
[463] "Central St & Girard Ave"                              
[464] "Central Park Ave & Bloomingdale Ave"                  
[465] "Jeffery Blvd & 91st St"                               
[466] "Ashland Ave & 13th St"                                
[467] "Baltimore Ave & 87th St"                              
[468] "WATSON TESTING - DIVVY"                               
[469] "Halsted St & 96th St"                                 
[470] "Clark St & Columbia Ave"                              
[471] "Blackstone Ave & Hyde Park Blvd"                      
[472] "Damen Ave & Walnut (Lake) St"                         
[473] "Calumet Ave & 33rd St"                                
[474] "Kildare Ave & Montrose Ave"                           
[475] "Paulina St & Flournoy St"                             
[476] "Kimball Ave & Belmont Ave"                            
[477] "Cottage Grove Ave & 51st St"                          
[478] "Campbell Ave & Montrose Ave"                          
[479] "Wood St & Taylor St (Temp)"                           
[480] "Paulina St & 18th St"                                 
[481] "Troy St & Elston Ave"                                 
[482] "Halsted St & 104th St"                                
[483] "Evanston Civic Center"                                
[484] "Shields Ave & 43rd St"                                
[485] "Indiana Ave & 103rd St"                               
[486] "Kedzie Ave & Lake St"                                 
[487] "Kedzie Ave & Chicago Ave"                             
[488] "Halsted St & Maxwell St"                              
[489] "Kostner Ave & Lake St"                                
[490] "Keystone Ave & Montrose Ave"                          
[491] "California Ave & 21st St"                             
[492] "Morgan St & 31st St"                                  
[493] "Keystone Ave & Fullerton Ave"                         
[494] "Kedzie Ave & Bryn Mawr Ave"                           
[495] "Kedzie Ave & 24th St"                                 
[496] "Elizabeth St & 47th St"                               
[497] "MLK Jr Dr & 47th St"                                  
[498] "Austin Blvd & Chicago Ave"                            
[499] "Throop St & Taylor St"                                
[500] "Ashland Ave & Lake St"                                
[501] "Ravenswood Ave & Berteau Ave"                         
[502] "Cherry Ave & Blackhawk St"                            
[503] "Clark St & Ida B Wells Dr"                            
[504] "Lincoln Ave & Addison St"                             
[505] "Western Ave & Howard St"                              
[506] "Claremont Ave & Hirsch St"                            
[507] "Canal St & Harrison St"                               
[508] "Hoyne Ave & 47th St"                                  
[509] "MLK Jr Dr & 83rd St"                                  
[510] "Ashland Ave & 69th St"                                
[511] "Ashland Ave & Archer Ave"                             
[512] "Rockwell St & Eastwood Ave"                           
[513] "Leavitt St & Division St"                             
[514] "Laramie Ave & Madison St"                             
[515] "Hoyne Ave & Balmoral Ave"                             
[516] "Racine Ave & Garfield Blvd"                           
[517] "Woodlawn Ave & 75th St"                               
[518] "State St & Pershing Rd"                               
[519] "Western Ave & 21st St"                                
[520] "Central Ave & Lake St"                                
[521] "University Library (NU)"                              
[522] "Woodlawn Ave & Lake Park Ave"                         
[523] "Troy St & North Ave"                                  
[524] "DuSable Museum"                                       
[525] "Ogden Ave & Roosevelt Rd"                             
[526] "Elizabeth St & 92nd St"                               
[527] "Sangamon St & Washington Blvd"                        
[528] "Clinton St & 18th St"                                 
[529] "Stewart Ave & 63rd St"                                
[530] "Kedzie Ave & Leland Ave"                              
[531] "Millard Ave & 26th St"                                
[532] "Wentworth Ave & 63rd St"                              
[533] "Prospect Sq & 91st St"                                
[534] "Latrobe Ave & Chicago Ave"                            
[535] "Valli Produce - Evanston Plaza"                       
[536] "Kedzie Ave & Harrison St"                             
[537] "Wentworth Ave & 35th St"                              
[538] "Central Park Ave & North Ave"                         
[539] "Ashland Ave & Pershing Rd"                            
[540] "Central Park Blvd & 5th Ave"                          
[541] "Conservatory Dr & Lake St"                            
[542] "Austin Blvd & Madison St"                             
[543] "Halsted St & 21st St"                                 
[544] "Stony Island Ave & 64th St"                           
[545] "Ogden Ave & Congress Pkwy"                            
[546] "Kilbourn Ave & Irving Park Rd"                        
[547] "Oakley Ave & Irving Park Rd"                          
[548] "Cottage Grove Ave & 47th St"                          
[549] "Central St Metra"                                     
[550] "Lincolnwood Dr & Central St"                          
[551] "South Shore Dr & 74th St"                             
[552] "Clinton St & Polk St"                                 
[553] "Indiana Ave & 40th St"                                
[554] "Wolcott Ave & Fargo Ave"                              
[555] "Vincennes Ave & 75th St"                              
[556] "Warren Park East"                                     
[557] "Washtenaw Ave & Ogden Ave"                            
[558] "Wentworth Ave & 33rd St"                              
[559] "Western Blvd & 48th Pl"                               
[560] "Cottage Grove Ave & 67th St"                          
[561] "Winchester (Ravenswood) Ave & Balmoral Ave"           
[562] "Emerald Ave & 28th St"                                
[563] "Greenwood Ave & 97th St"                              
[564] "Vernon Ave & 107th St"                                
[565] "Ashland Ave & 78th St"                                
[566] "Wood St & 35th St"                                    
[567] "Halsted St & Roosevelt Rd"                            
[568] "Greenwood Ave & 79th St"                              
[569] "Shields Ave & 31st St"                                
[570] "East End Ave & 87th St"                               
[571] "Calumet Ave & 35th St"                                
[572] "Drake Ave & Addison St"                               
[573] "Wabash Ave & 87th St"                                 
[574] "Stony Island Ave & 82nd St"                           
[575] "State St & 54th St"                                   
[576] "Cottage Grove Ave & 78th St"                          
[577] "Oakley Ave & Touhy Ave"                               
[578] "Marshfield Ave & 44th St"                             
[579] "Racine Ave & 61st St"                                 
[580] "Avenue O & 134th St"                                  
[581] "Malcolm X College"                                    
[582] "Cornell Dr & Hayes Dr"                                
[583] "Cicero Ave & Lake St"                                 
[584] "Ashland Ave & McDowell Ave"                           
[585] "Torrence Ave & 106th St"                              
[586] "Eggleston Ave & 92nd St"                              
[587] "Calumet Ave & 71st St"                                
[588] "Normal Ave & Archer Ave"                              
[589] "Karlov Ave & Madison St"                              
[590] "State St & 79th St"                                   
[591] "Ashland Ave & 50th St"                                
[592] "Maplewood Ave & Peterson Ave"                         
[593] "Clark St & Touhy Ave"                                 
[594] "Yates Blvd & 75th St"                                 
[595] "Stewart Ave & 83rd St"                                
[596] "Marquette Ave & 89th St"                              
[597] "Central Park Ave & 24th St"                           
[598] "Evans Ave & 75th St"                                  
[599] "Sacramento Blvd & Franklin Blvd"                      
[600] "Halsted St & 63rd St"                                 
[601] "63rd St Beach"                                        
[602] "Kostner Ave & Adams St"                               
[603] "Ashland Ave & 66th St"                                
[604] "State St & 76th St"                                   
[605] "Summit Ave & 86th St"                                 
[606] "Stony Island Ave & 67th St"                           
[607] "Vernon Ave & 79th St"                                 
[608] "Laramie Ave & Kinzie St"                              
[609] "Central Ave & Madison St"                             
[610] "Stony Island Ave & South Chicago Ave"                 
[611] "Cottage Grove Ave & 63rd St"                          
[612] "Halsted St & 69th St"                                 
[613] "Kedzie Ave & 21st St"                                 
[614] "Halsted St & 78th St"                                 
[615] "Houston Ave & 92nd St"                                
[616] "Michigan Ave & 114th St"                              
[617] "Eberhart Ave & 91st St"                               
[618] "Rainbow Beach"                                        
[619] "Throop St & 52nd St"                                  
[620] "MLK Jr Dr & 63rd St"                                  
[621] "Stony Island Ave & 75th St"                           
[622] "Exchange Ave & 79th St"                               
[623] "Marshfield Ave & 59th St"                             
[624] "Princeton Ave & 47th St"                              
[625] "Perry Ave & 69th St"                                  
[626] "Racine Ave & 65th St"                                 
[627] "Morgan St & Pershing Rd"                              
[628] "Commercial Ave & 83rd St"                             
[629] "Halsted St & 51st St"                                 
[630] "Ewing Ave & Burnham Greenway"                         
[631] "Phillips Ave & 83rd St"                               
[632] "Clyde Ave & 87th St"                                  
[633] "May St & 69th St"                                     
[634] "Damen Ave & 59th St"                                  
[635] "Halsted St & 56th St"                                 
[636] "Ashland Ave & Garfield Blvd"                          
[637] "Western Ave & 28th St"                                
[638] "Jeffery Blvd & 76th St"                               
[639] "Loomis Blvd & 84th St"                                
[640] "Central Ave & Harrison St"                            
[641] "Cicero Ave & Flournoy St"                             
[642] "Halsted St & 73rd St"                                 
[643] "Cicero Ave & Quincy St"                               
[644] "Laramie Ave & Gladys Ave"                             
[645] "Ellis Ave & 83rd St"                                  
[646] "Kenton Ave & Madison St"                              
[647] "California Ave & 26th St"                             
[648] "South Chicago Ave & Elliot Ave"                       
[649] "Halsted St & 59th St"                                 
[650] "Wabash Ave & 83rd St"                                 
[651] "Ashland Ave & 74th St"                                
[652] "Torrence Ave & 126th Pl"                              
[653] "Seeley Ave & Garfield Blvd"                           
[654] "Eggleston Ave & 69th St"                              
[655] "Rhodes Ave & 71st St"                                 
[656] "Carpenter St & 63rd St"                               
[657] "Cottage Grove Ave & 71st St"                          
[658] "South Chicago Ave & 83rd St"                          
[659] "HUBBARD ST BIKE CHECKING (LBS-WH-TEST)"               
[660] "Walden Pkwy & 100th St"                               
[661] "Burnham Greenway & 105th St"                          
[662] "Elizabeth St & 59th St"                               
[663] "Major Taylor Trail & 124th St"                        
[664] "Avenue O & 118th St"                                  
[665] "N Clark St & W Elm St"                                
[666] "St. Louis Ave & Fullerton Ave"                        
[667] "New St & Illinois St"                                 
[668] "Hale Ave & 107th St"                                  
[669] "Bradley Park"                                         
[670] "Commercial Ave & 130th St"                            
[671] "Vincennes Ave & 104th St"                             
[672] "Western Ave & 111th St"                               
[673] "Ada St & 113th St"                                    
[674] "Lawndale Ave & 111th St"                              
[675] "Homewood Ave & 115th St"                              
[676] "Western Ave & 104th St"                               
[677] "Hegewisch Metra Station"                              
[678] "S Michigan Ave & E 118th St"                          
[679] "Dodge Ave & Main St"                                  
[680] "Base - 2132 W Hubbard Warehouse"                      
[681] "N Green St & W Lake St"                               
[682] "Commercial Ave & 100th St"                            
[683] "N Paulina St & Lincoln Ave"                           
[684] "N Southport Ave & W Newport Ave"                      
[685] "Malcolm X College Vaccination Site"                   
[686] "Broadway & Wilson - Truman College Vaccination Site"  
[687] "W Washington Blvd & N Peoria St"                      
[688] "Kedzie Ave & 110th St"                                
[689] "N Sheffield Ave & W Wellington Ave"                   
[690] "N Carpenter St & W Lake St"                           
[691] "Halsted & 63rd - Kennedy-King Vaccination Site"       
[692] "Western & 28th - Velasquez Institute Vaccination Site"
[693] "Chicago State University"                             
[694] "Damen Ave & Wabansia Ave"                             
[695] "N Damen Ave & W Wabansia St"                          
[696] "S Wentworth Ave & W 111th St"                         
[697] "N Hampden Ct & W Diversey Ave"                        
[698] "Altgeld Gardens"                                      
[699] "Hampden Ct & Diversey Ave"                            
[700] "Kedzie Ave & 104th St"                                
[701] "Avenue L & 114th St"                                  
[702] "Calumet Park"                                         
[703] "Elston Ave & Cortland St"                             
[704] "Loomis St & 89th St"                                  
[705] "Woodlawn & 103rd - Olive Harvey Vaccination Site"     
[706] "W 103rd St & S Avers Ave"                             
[707] "WEST CHI-WATSON"                                      
[708] "Yates Blvd & 93rd St"                                 
[709] "Maryland Ave & 104th St"                              
[710] "S Aberdeen St & W 106th St"                           
[711] "Lyft Driver Center Private Rack"                      
[712] "Cicero Ave & Grace St"                                
[713] "DuSable Lake Shore Dr & Belmont Ave"                  
[714] "DuSable Lake Shore Dr & Monroe St"                    
[715] "DuSable Lake Shore Dr & North Blvd"                   
[716] "DuSable Lake Shore Dr & Ohio St"                      
[717] "DuSable Lake Shore Dr & Wellington Ave"               
[718] "DuSable Lake Shore Dr & Diversey Pkwy"                
[719] "Kildare Ave & 26th St"                                
[720] "Tripp Ave & 31st St"                                  
[721] "Halsted St & 18th St (Temp)"                          
[722] "Lawndale Ave & 16th St"                               
[723] "Spaulding Ave & 16th St"                              
[724] "Homan Ave & Fillmore St"                              
[725] "Lavergne & Fullerton"                                 
[726] "DIVVY CASSETTE REPAIR MOBILE STATION"                 
[727] "Kilpatrick Ave & Parker Ave"                          
[728] "Central Park Ave & Douglas Blvd"                      
[729] "Lamon Ave & Belmont Ave"                              
[730] "Long Ave & Belmont Ave"                               
[731] "Meade Ave & Diversey Ave"                             
[732] "Long Ave & Belden Ave"                                
[733] "Tripp Ave & 15th St"                                  
[734] "Mason Ave & Belmont Ave"                              
[735] "Parkside Ave & Armitage Ave"                          
[736] "Keeler Ave & Roosevelt Rd"                            
[737] "Pulaski Rd & 21st St"                                 
[738] "Central Ave & Parker Ave"                             
[739] "Lawndale Ave & 30th St"                               
[740] "Meade Ave & Addison St"                               
[741] "Kilbourn & Roscoe"                                    
[742] "Mulligan Ave & Wellington Ave"                        
[743] "Lockwood Ave & Wrightwood Ave"                        
[744] "Plainfield & Irving Park"                             
[745] "Narragansett Ave & School St"                         
[746] "Central Ave & Roscoe St"                              
[747] "351"                                                  
[748] "Long & Irving Park"                                   
[749] "Komensky Ave & 31st St"                               
[750] "Kilbourn & Belden"                                    
[751] "Kostner Ave & Wrightwood Ave"                         
[752] "North Ave & New England Ave"                          
[753] "Harding Ave & 26th St"                                
[754] "Harlem Ave & Grace St"                                
[755] "Oketo Ave & Addison St"                               
[756] "Roscoe & Harlem"                                      
[757] "Lamon Ave & Armitage Ave"                             
[758] "Sayre & Diversey"                                     

Creating a vector of station names identified as Divvy test and repair stations.

trs_name <- c("Base – 2132 W Hubbard Warehouse", 
              "DIVVY CASSETTE REPAIR MOBILE STATION", 
              "HUBBARD ST BIKE CHECKING (LBS-WH-TEST)", 
              "WATSON TESTING - DIVVY", 
              "WEST CHI-WATSON")

Looking for specific values in the start_station_id column associated with Divvy test and repair stations.

Show code and output
unique(all_trips_v2$start_station_id)
   [1] "52"                                  
   [2] NA                                    
   [3] "246"                                 
   [4] "24"                                  
   [5] "94"                                  
   [6] "291"                                 
   [7] "273"                                 
   [8] "145"                                 
   [9] "108"                                 
  [10] "511"                                 
  [11] "329"                                 
  [12] "315"                                 
  [13] "138"                                 
  [14] "504"                                 
  [15] "38"                                  
  [16] "485"                                 
  [17] "89"                                  
  [18] "53"                                  
  [19] "3"                                   
  [20] "35"                                  
  [21] "113"                                 
  [22] "164"                                 
  [23] "111"                                 
  [24] "140"                                 
  [25] "225"                                 
  [26] "301"                                 
  [27] "43"                                  
  [28] "21"                                  
  [29] "13"                                  
  [30] "212"                                 
  [31] "645"                                 
  [32] "287"                                 
  [33] "49"                                  
  [34] "71"                                  
  [35] "454"                                 
  [36] "195"                                 
  [37] "123"                                 
  [38] "589"                                 
  [39] "289"                                 
  [40] "250"                                 
  [41] "306"                                 
  [42] "585"                                 
  [43] "627"                                 
  [44] "168"                                 
  [45] "130"                                 
  [46] "424"                                 
  [47] "175"                                 
  [48] "126"                                 
  [49] "84"                                  
  [50] "712"                                 
  [51] "172"                                 
  [52] "673"                                 
  [53] "157"                                 
  [54] "110"                                 
  [55] "341"                                 
  [56] "492"                                 
  [57] "215"                                 
  [58] "93"                                  
  [59] "26"                                  
  [60] "255"                                 
  [61] "636"                                 
  [62] "308"                                 
  [63] "165"                                 
  [64] "199"                                 
  [65] "453"                                 
  [66] "16"                                  
  [67] "227"                                 
  [68] "120"                                 
  [69] "2"                                   
  [70] "150"                                 
  [71] "471"                                 
  [72] "451"                                 
  [73] "77"                                  
  [74] "331"                                 
  [75] "349"                                 
  [76] "134"                                 
  [77] "426"                                 
  [78] "197"                                 
  [79] "459"                                 
  [80] "268"                                 
  [81] "460"                                 
  [82] "423"                                 
  [83] "333"                                 
  [84] "288"                                 
  [85] "69"                                  
  [86] "228"                                 
  [87] "226"                                 
  [88] "672"                                 
  [89] "458"                                 
  [90] "350"                                 
  [91] "17"                                  
  [92] "190"                                 
  [93] "325"                                 
  [94] "523"                                 
  [95] "245"                                 
  [96] "76"                                  
  [97] "260"                                 
  [98] "623"                                 
  [99] "638"                                 
 [100] "243"                                 
 [101] "419"                                 
 [102] "56"                                  
 [103] "406"                                 
 [104] "133"                                 
 [105] "60"                                  
 [106] "313"                                 
 [107] "515"                                 
 [108] "251"                                 
 [109] "603"                                 
 [110] "171"                                 
 [111] "61"                                  
 [112] "198"                                 
 [113] "116"                                 
 [114] "303"                                 
 [115] "100"                                 
 [116] "142"                                 
 [117] "416"                                 
 [118] "302"                                 
 [119] "247"                                 
 [120] "48"                                  
 [121] "162"                                 
 [122] "637"                                 
 [123] "107"                                 
 [124] "181"                                 
 [125] "47"                                  
 [126] "501"                                 
 [127] "236"                                 
 [128] "153"                                 
 [129] "431"                                 
 [130] "237"                                 
 [131] "147"                                 
 [132] "507"                                 
 [133] "128"                                 
 [134] "332"                                 
 [135] "286"                                 
 [136] "520"                                 
 [137] "173"                                 
 [138] "15"                                  
 [139] "435"                                 
 [140] "514"                                 
 [141] "192"                                 
 [142] "99"                                  
 [143] "180"                                 
 [144] "66"                                  
 [145] "29"                                  
 [146] "258"                                 
 [147] "532"                                 
 [148] "59"                                  
 [149] "320"                                 
 [150] "321"                                 
 [151] "364"                                 
 [152] "46"                                  
 [153] "166"                                 
 [154] "620"                                 
 [155] "517"                                 
 [156] "28"                                  
 [157] "304"                                 
 [158] "457"                                 
 [159] "654"                                 
 [160] "328"                                 
 [161] "87"                                  
 [162] "503"                                 
 [163] "272"                                 
 [164] "294"                                 
 [165] "74"                                  
 [166] "624"                                 
 [167] "632"                                 
 [168] "186"                                 
 [169] "57"                                  
 [170] "323"                                 
 [171] "144"                                 
 [172] "112"                                 
 [173] "664"                                 
 [174] "499"                                 
 [175] "284"                                 
 [176] "249"                                 
 [177] "472"                                 
 [178] "621"                                 
 [179] "463"                                 
 [180] "346"                                 
 [181] "176"                                 
 [182] "210"                                 
 [183] "277"                                 
 [184] "41"                                  
 [185] "334"                                 
 [186] "152"                                 
 [187] "505"                                 
 [188] "7"                                   
 [189] "264"                                 
 [190] "196"                                 
 [191] "194"                                 
 [192] "92"                                  
 [193] "322"                                 
 [194] "27"                                  
 [195] "359"                                 
 [196] "436"                                 
 [197] "604"                                 
 [198] "625"                                 
 [199] "261"                                 
 [200] "500"                                 
 [201] "148"                                 
 [202] "252"                                 
 [203] "597"                                 
 [204] "461"                                 
 [205] "20"                                  
 [206] "254"                                 
 [207] "481"                                 
 [208] "231"                                 
 [209] "51"                                  
 [210] "338"                                 
 [211] "506"                                 
 [212] "219"                                 
 [213] "182"                                 
 [214] "253"                                 
 [215] "141"                                 
 [216] "305"                                 
 [217] "90"                                  
 [218] "240"                                 
 [219] "158"                                 
 [220] "319"                                 
 [221] "161"                                 
 [222] "96"                                  
 [223] "232"                                 
 [224] "339"                                 
 [225] "34"                                  
 [226] "45"                                  
 [227] "411"                                 
 [228] "98"                                  
 [229] "202"                                 
 [230] "229"                                 
 [231] "54"                                  
 [232] "73"                                  
 [233] "628"                                 
 [234] "259"                                 
 [235] "85"                                  
 [236] "660"                                 
 [237] "4"                                   
 [238] "265"                                 
 [239] "239"                                 
 [240] "220"                                 
 [241] "177"                                 
 [242] "62"                                  
 [243] "257"                                 
 [244] "484"                                 
 [245] "487"                                 
 [246] "447"                                 
 [247] "127"                                 
 [248] "178"                                 
 [249] "242"                                 
 [250] "480"                                 
 [251] "117"                                 
 [252] "106"                                 
 [253] "97"                                  
 [254] "18"                                  
 [255] "290"                                 
 [256] "114"                                 
 [257] "475"                                 
 [258] "296"                                 
 [259] "115"                                 
 [260] "224"                                 
 [261] "695"                                 
 [262] "19"                                  
 [263] "467"                                 
 [264] "300"                                 
 [265] "214"                                 
 [266] "563"                                 
 [267] "496"                                 
 [268] "276"                                 
 [269] "183"                                 
 [270] "223"                                 
 [271] "137"                                 
 [272] "701"                                 
 [273] "307"                                 
 [274] "188"                                 
 [275] "344"                                 
 [276] "640"                                 
 [277] "36"                                  
 [278] "327"                                 
 [279] "355"                                 
 [280] "571"                                 
 [281] "347"                                 
 [282] "470"                                 
 [283] "44"                                  
 [284] "425"                                 
 [285] "163"                                 
 [286] "354"                                 
 [287] "230"                                 
 [288] "5"                                   
 [289] "6"                                   
 [290] "271"                                 
 [291] "293"                                 
 [292] "474"                                 
 [293] "326"                                 
 [294] "81"                                  
 [295] "211"                                 
 [296] "408"                                 
 [297] "193"                                 
 [298] "297"                                 
 [299] "299"                                 
 [300] "156"                                 
 [301] "295"                                 
 [302] "25"                                  
 [303] "154"                                 
 [304] "129"                                 
 [305] "31"                                  
 [306] "318"                                 
 [307] "309"                                 
 [308] "394"                                 
 [309] "132"                                 
 [310] "23"                                  
 [311] "600"                                 
 [312] "468"                                 
 [313] "39"                                  
 [314] "279"                                 
 [315] "324"                                 
 [316] "376"                                 
 [317] "136"                                 
 [318] "714"                                 
 [319] "491"                                 
 [320] "444"                                 
 [321] "124"                                 
 [322] "716"                                 
 [323] "340"                                 
 [324] "578"                                 
 [325] "428"                                 
 [326] "184"                                 
 [327] "213"                                 
 [328] "310"                                 
 [329] "238"                                 
 [330] "382"                                 
 [331] "88"                                  
 [332] "131"                                 
 [333] "125"                                 
 [334] "479"                                 
 [335] "316"                                 
 [336] "717"                                 
 [337] "118"                                 
 [338] "278"                                 
 [339] "9"                                   
 [340] "465"                                 
 [341] "262"                                 
 [342] "438"                                 
 [343] "68"                                  
 [344] "450"                                 
 [345] "267"                                 
 [346] "337"                                 
 [347] "483"                                 
 [348] "72"                                  
 [349] "644"                                 
 [350] "591"                                 
 [351] "285"                                 
 [352] "216"                                 
 [353] "417"                                 
 [354] "420"                                 
 [355] "502"                                 
 [356] "596"                                 
 [357] "22"                                  
 [358] "626"                                 
 [359] "14"                                  
 [360] "342"                                 
 [361] "11"                                  
 [362] "143"                                 
 [363] "639"                                 
 [364] "75"                                  
 [365] "525"                                 
 [366] "456"                                 
 [367] "366"                                 
 [368] "579"                                 
 [369] "528"                                 
 [370] "312"                                 
 [371] "550"                                 
 [372] "40"                                  
 [373] "263"                                 
 [374] "493"                                 
 [375] "592"                                 
 [376] "283"                                 
 [377] "37"                                  
 [378] "256"                                 
 [379] "370"                                 
 [380] "58"                                  
 [381] "218"                                 
 [382] "432"                                 
 [383] "381"                                 
 [384] "222"                                 
 [385] "705"                                 
 [386] "698"                                 
 [387] "160"                                 
 [388] "535"                                 
 [389] "217"                                 
 [390] "206"                                 
 [391] "86"                                  
 [392] "706"                                 
 [393] "410"                                 
 [394] "248"                                 
 [395] "374"                                 
 [396] "311"                                 
 [397] "367"                                 
 [398] "42"                                  
 [399] "442"                                 
 [400] "185"                                 
 [401] "67"                                  
 [402] "498"                                 
 [403] "208"                                 
 [404] "401"                                 
 [405] "32"                                  
 [406] "385"                                 
 [407] "33"                                  
 [408] "91"                                  
 [409] "167"                                 
 [410] "657"                                 
 [411] "635"                                 
 [412] "488"                                 
 [413] "234"                                 
 [414] "146"                                 
 [415] "281"                                 
 [416] "174"                                 
 [417] "546"                                 
 [418] "378"                                 
 [419] "352"                                 
 [420] "244"                                 
 [421] "510"                                 
 [422] "12"                                  
 [423] "241"                                 
 [424] "298"                                 
 [425] "659"                                 
 [426] "690"                                 
 [427] "598"                                 
 [428] "697"                                 
 [429] "662"                                 
 [430] "469"                                 
 [431] "418"                                 
 [432] "711"                                 
 [433] "345"                                 
 [434] "421"                                 
 [435] "365"                                 
 [436] "713"                                 
 [437] "343"                                 
 [438] "415"                                 
 [439] "317"                                 
 [440] "274"                                 
 [441] "109"                                 
 [442] "522"                                 
 [443] "30"                                  
 [444] "80"                                  
 [445] "452"                                 
 [446] "702"                                 
 [447] "464"                                 
 [448] "674"                                 
 [449] "204"                                 
 [450] "356"                                 
 [451] "292"                                 
 [452] "554"                                 
 [453] "191"                                 
 [454] "643"                                 
 [455] "477"                                 
 [456] "179"                                 
 [457] "414"                                 
 [458] "466"                                 
 [459] "622"                                 
 [460] "602"                                 
 [461] "641"                                 
 [462] "704"                                 
 [463] "275"                                 
 [464] "693"                                 
 [465] "676"                                 
 [466] "700"                                 
 [467] "449"                                 
 [468] "121"                                 
 [469] "656"                                 
 [470] "149"                                 
 [471] "630"                                 
 [472] "383"                                 
 [473] "497"                                 
 [474] "351"                                 
 [475] "482"                                 
 [476] "205"                                 
 [477] "490"                                 
 [478] "709"                                 
 [479] "661"                                 
 [480] "409"                                 
 [481] "696"                                 
 [482] "377"                                 
 [483] "373"                                 
 [484] "282"                                 
 [485] "536"                                 
 [486] "495"                                 
 [487] "348"                                 
 [488] "280"                                 
 [489] "619"                                 
 [490] "494"                                 
 [491] "441"                                 
 [492] "553"                                 
 [493] "200"                                 
 [494] "524"                                 
 [495] "119"                                 
 [496] "314"                                 
 [497] "666"                                 
 [498] "50"                                  
 [499] "330"                                 
 [500] "527"                                 
 [501] "159"                                 
 [502] "169"                                 
 [503] "551"                                 
 [504] "586"                                 
 [505] "566"                                 
 [506] "368"                                 
 [507] "478"                                 
 [508] "658"                                 
 [509] "540"                                 
 [510] "655"                                 
 [511] "559"                                 
 [512] "569"                                 
 [513] "407"                                 
 [514] "203"                                 
 [515] "531"                                 
 [516] "605"                                 
 [517] "413"                                 
 [518] "509"                                 
 [519] "422"                                 
 [520] "434"                                 
 [521] "689"                                 
 [522] "233"                                 
 [523] "170"                                 
 [524] "649"                                 
 [525] "476"                                 
 [526] "443"                                 
 [527] "390"                                 
 [528] "684"                                 
 [529] "642"                                 
 [530] "599"                                 
 [531] "433"                                 
 [532] "405"                                 
 [533] "508"                                 
 [534] "547"                                 
 [535] "533"                                 
 [536] "518"                                 
 [537] "544"                                 
 [538] "135"                                 
 [539] "95"                                  
 [540] "122"                                 
 [541] "590"                                 
 [542] "486"                                 
 [543] "336"                                 
 [544] "601"                                 
 [545] "663"                                 
 [546] "399"                                 
 [547] "103"                                 
 [548] "201"                                 
 [549] "519"                                 
 [550] "568"                                 
 [551] "448"                                 
 [552] "437"                                 
 [553] "403"                                 
 [554] "594"                                 
 [555] "429"                                 
 [556] "462"                                 
 [557] "207"                                 
 [558] "703"                                 
 [559] "699"                                 
 [560] "683"                                 
 [561] "369"                                 
 [562] "55"                                  
 [563] "576"                                 
 [564] "402"                                 
 [565] "686"                                 
 [566] "335"                                 
 [567] "489"                                 
 [568] "595"                                 
 [569] "583"                                 
 [570] "646"                                 
 [571] "575"                                 
 [572] "526"                                 
 [573] "549"                                 
 [574] "562"                                 
 [575] "631"                                 
 [576] "653"                                 
 [577] "529"                                 
 [578] "552"                                 
 [579] "707"                                 
 [580] "691"                                 
 [581] "393"                                 
 [582] "209"                                 
 [583] "534"                                 
 [584] "573"                                 
 [585] "555"                                 
 [586] "455"                                 
 [587] "353"                                 
 [588] "396"                                 
 [589] "677"                                 
 [590] "692"                                 
 [591] "440"                                 
 [592] "570"                                 
 [593] "375"                                 
 [594] "388"                                 
 [595] "101"                                 
 [596] "545"                                 
 [597] "565"                                 
 [598] "572"                                 
 [599] "685"                                 
 [600] "102"                                 
 [601] "574"                                 
 [602] "530"                                 
 [603] "542"                                 
 [604] "577"                                 
 [605] "427"                                 
 [606] "391"                                 
 [607] "439"                                 
 [608] "681"                                 
 [609] "694"                                 
 [610] "682"                                 
 [611] "398"                                 
 [612] "556"                                 
 [613] "430"                                 
 [614] "270"                                 
 [615] "580"                                 
 [616] "560"                                 
 [617] "412"                                 
 [618] "392"                                 
 [619] "564"                                 
 [620] "548"                                 
 [621] "581"                                 
 [622] "384"                                 
 [623] "718"                                 
 [624] "582"                                 
 [625] "708"                                 
 [626] "567"                                 
 [627] "561"                                 
 [628] "386"                                 
 [629] "558"                                 
 [630] "446"                                 
 [631] "395"                                 
 [632] "687"                                 
 [633] "541"                                 
 [634] "538"                                 
 [635] "678"                                 
 [636] "539"                                 
 [637] "543"                                 
 [638] "584"                                 
 [639] "537"                                 
 [640] "445"                                 
 [641] "665"                                 
 [642] "593"                                 
 [643] "587"                                 
 [644] "679"                                 
 [645] "720"                                 
 [646] "557"                                 
 [647] "650"                                 
 [648] "652"                                 
 [649] "648"                                 
 [650] "400"                                 
 [651] "588"                                 
 [652] "671"                                 
 [653] "721"                                 
 [654] "710"                                 
 [655] "647"                                 
 [656] "715"                                 
 [657] "719"                                 
 [658] "723"                                 
 [659] "731"                                 
 [660] "722"                                 
 [661] "726"                                 
 [662] "728"                                 
 [663] "727"                                 
 [664] "730"                                 
 [665] "725"                                 
 [666] "724"                                 
 [667] "732"                                 
 [668] "13157"                               
 [669] "TA1309000006"                        
 [670] "KA1503000043"                        
 [671] "TA1309000014"                        
 [672] "TA1305000006"                        
 [673] "13042"                               
 [674] "TA1307000127"                        
 [675] "TA1306000003"                        
 [676] "TA1306000006"                        
 [677] "TA1306000011"                        
 [678] "SL-013"                              
 [679] "13124"                               
 [680] "13137"                               
 [681] "13074"                               
 [682] "TA1309000066"                        
 [683] "TA1307000138"                        
 [684] "TA1307000052"                        
 [685] "TA1309000059"                        
 [686] "13268"                               
 [687] "KA1503000002"                        
 [688] "TA1307000140"                        
 [689] "13294"                               
 [690] "TA1307000062"                        
 [691] "15655"                               
 [692] "TA1307000064"                        
 [693] "TA1306000010"                        
 [694] "13058"                               
 [695] "13179"                               
 [696] "KA1504000076"                        
 [697] "13431"                               
 [698] "KA1503000070"                        
 [699] "13197"                               
 [700] "13006"                               
 [701] "KA1503000040"                        
 [702] "TA1307000129"                        
 [703] "TA1307000159"                        
 [704] "13326"                               
 [705] "SL-009"                              
 [706] "TA1307000120"                        
 [707] "13332"                               
 [708] "TA1305000011"                        
 [709] "TA1307000070"                        
 [710] "TA1305000030"                        
 [711] "TA1309000008"                        
 [712] "15545"                               
 [713] "13162"                               
 [714] "TA1307000039"                        
 [715] "13164"                               
 [716] "KA1504000104"                        
 [717] "13353"                               
 [718] "13022"                               
 [719] "13036"                               
 [720] "13139"                               
 [721] "KA1503000064"                        
 [722] "16920"                               
 [723] "13243"                               
 [724] "13017"                               
 [725] "TA1305000001"                        
 [726] "13028"                               
 [727] "TA1307000121"                        
 [728] "TA1307000130"                        
 [729] "SL-005"                              
 [730] "13165"                               
 [731] "TA1308000019"                        
 [732] "KA1503000041"                        
 [733] "TA1305000009"                        
 [734] "KA1503000072"                        
 [735] "TA1309000004"                        
 [736] "TA1309000035"                        
 [737] "KA1504000129"                        
 [738] "TA1306000007"                        
 [739] "TA1309000043"                        
 [740] "KA1503000034"                        
 [741] "KA1504000140"                        
 [742] "TA1307000126"                        
 [743] "KA1503000012"                        
 [744] "TA1307000166"                        
 [745] "TA1305000041"                        
 [746] "TA1309000019"                        
 [747] "15628"                               
 [748] "TA1308000049"                        
 [749] "TA1305000035"                        
 [750] "KA1504000116"                        
 [751] "13224"                               
 [752] "KA1504000149"                        
 [753] "TA1307000156"                        
 [754] "13276"                               
 [755] "TA1306000032"                        
 [756] "13136"                               
 [757] "15664"                               
 [758] "15529"                               
 [759] "13134"                               
 [760] "TA1307000041"                        
 [761] "KA1503000022"                        
 [762] "KA1504000096"                        
 [763] "TA1308000005"                        
 [764] "13409"                               
 [765] "13229"                               
 [766] "13109"                               
 [767] "15578"                               
 [768] "17660"                               
 [769] "TA1309000018"                        
 [770] "KA1504000103"                        
 [771] "KA1504000106"                        
 [772] "TA1309000007"                        
 [773] "TA1309000001"                        
 [774] "13389"                               
 [775] "13253"                               
 [776] "20252.0"                             
 [777] "13292"                               
 [778] "KA1504000159"                        
 [779] "20110"                               
 [780] "KA1504000164"                        
 [781] "15491"                               
 [782] "13245"                               
 [783] "15546"                               
 [784] "TA1307000128"                        
 [785] "TA1309000037"                        
 [786] "13258"                               
 [787] "RP-004"                              
 [788] "13156"                               
 [789] "TA1305000022"                        
 [790] "TA1307000005"                        
 [791] "13263"                               
 [792] "20116"                               
 [793] "15640"                               
 [794] "TA1309000049"                        
 [795] "TA1309000039"                        
 [796] "20207"                               
 [797] "TA1308000002"                        
 [798] "13277"                               
 [799] "13241"                               
 [800] "TA1305000010"                        
 [801] "KA1504000135"                        
 [802] "18016"                               
 [803] "13303"                               
 [804] "KA1504000082"                        
 [805] "KA1503000047"                        
 [806] "KA1503000033"                        
 [807] "KA1504000148"                        
 [808] "13133"                               
 [809] "TA1309000011"                        
 [810] "15692"                               
 [811] "15645"                               
 [812] "TA1309000055"                        
 [813] "16940"                               
 [814] "20238"                               
 [815] "20120"                               
 [816] "TA1307000163"                        
 [817] "13071"                               
 [818] "13213"                               
 [819] "20205"                               
 [820] "16903"                               
 [821] "20109"                               
 [822] "TA1307000161"                        
 [823] "20236"                               
 [824] "15682"                               
 [825] "KA1503000013"                        
 [826] "KA1503000018"                        
 [827] "SL-011"                              
 [828] "TA1308000050"                        
 [829] "TA1307000131"                        
 [830] "13296"                               
 [831] "13073"                               
 [832] "TA1308000021"                        
 [833] "13146"                               
 [834] "TA1305000029"                        
 [835] "TA1305000014"                        
 [836] "13323"                               
 [837] "TA1305000005"                        
 [838] "13269"                               
 [839] "TA1309000029"                        
 [840] "13008"                               
 [841] "15691"                               
 [842] "KA1503000053"                        
 [843] "13206"                               
 [844] "TA1305000037"                        
 [845] "KA1503000038"                        
 [846] "13290"                               
 [847] "16943"                               
 [848] "15631"                               
 [849] "20231"                               
 [850] "KA1504000161"                        
 [851] "TA1309000063"                        
 [852] "TA1308000038"                        
 [853] "15470"                               
 [854] "13091"                               
 [855] "15644"                               
 [856] "20233"                               
 [857] "KA1503000054"                        
 [858] "TA1307000119"                        
 [859] "20227"                               
 [860] "13341"                               
 [861] "TA1308000001"                        
 [862] "TA1309000061"                        
 [863] "18069"                               
 [864] "KA1504000093"                        
 [865] "15535"                               
 [866] "TA1305000039"                        
 [867] "TA1307000111"                        
 [868] "TA1308000029"                        
 [869] "KA1503000020"                        
 [870] "KA1503000075"                        
 [871] "KA1504000167"                        
 [872] "18062"                               
 [873] "15623"                               
 [874] "KA1503000044"                        
 [875] "15634"                               
 [876] "20221"                               
 [877] "KA1504000168"                        
 [878] "15654"                               
 [879] "20222"                               
 [880] "13053"                               
 [881] "15534"                               
 [882] "16950"                               
 [883] "651"                                 
 [884] "Hubbard Bike-checking (LBS-WH-TEST)" 
 [885] "KA1706005015"                        
 [886] "18022"                               
 [887] "TA1309000053"                        
 [888] "KA1706005007"                        
 [889] "15550"                               
 [890] "15632"                               
 [891] "13056"                               
 [892] "15689"                               
 [893] "13247"                               
 [894] "TA1306000008"                        
 [895] "KA1504000141"                        
 [896] "KA1503000068"                        
 [897] "KA1503000052"                        
 [898] "15667"                               
 [899] "KA1504000156"                        
 [900] "15575"                               
 [901] "15446"                               
 [902] "20226"                               
 [903] "E007"                                
 [904] "KA1503000045"                        
 [905] "E002"                                
 [906] "KA1503000003"                        
 [907] "13307"                               
 [908] "15442"                               
 [909] "13045"                               
 [910] "TA1307000001"                        
 [911] "13379"                               
 [912] "15642"                               
 [913] "15539"                               
 [914] "TA1308000036"                        
 [915] "15530"                               
 [916] "TA1305000025"                        
 [917] "TA1309000002"                        
 [918] "KA1504000142"                        
 [919] "TA1308000026"                        
 [920] "16937"                               
 [921] "E008"                                
 [922] "15449"                               
 [923] "20229"                               
 [924] "16913"                               
 [925] "15622"                               
 [926] "KA1504000151"                        
 [927] "KA1504000113"                        
 [928] "15646"                               
 [929] "TA1308000014"                        
 [930] "TA1309000021"                        
 [931] "TA1308000007"                        
 [932] "13345"                               
 [933] "13331"                               
 [934] "TA1308000013"                        
 [935] "16806"                               
 [936] "KA1504000134"                        
 [937] "15666"                               
 [938] "KA1504000109"                        
 [939] "TA1309000003"                        
 [940] "TA1309000025"                        
 [941] "TA1307000158"                        
 [942] "15615"                               
 [943] "TA1309000032"                        
 [944] "KA1504000091"                        
 [945] "13191"                               
 [946] "20105"                               
 [947] "16010"                               
 [948] "TA1305000004"                        
 [949] "E011"                                
 [950] "KA150400009X"                        
 [951] "KA1504000097"                        
 [952] "13285"                               
 [953] "TA1308000006"                        
 [954] "KA1504000155"                        
 [955] "KA1504000130"                        
 [956] "LF-005"                              
 [957] "13300"                               
 [958] "KA1504000152"                        
 [959] "13193"                               
 [960] "13029"                               
 [961] "KA1503000059"                        
 [962] "20242"                               
 [963] "KA1503000028"                        
 [964] "TA1308000045"                        
 [965] "TA1309000030"                        
 [966] "KA1503000065"                        
 [967] "KA1504000086"                        
 [968] "20244"                               
 [969] "KA1503000025"                        
 [970] "TA1308000035"                        
 [971] "13061"                               
 [972] "TA1309000041"                        
 [973] "13143"                               
 [974] "KA1504000175"                        
 [975] "TA1307000149"                        
 [976] "RN-"                                 
 [977] "13216"                               
 [978] "TA1306000002"                        
 [979] "KA1504000090"                        
 [980] "13256"                               
 [981] "TA1307000160"                        
 [982] "WL-008"                              
 [983] "13288"                               
 [984] "KA1504000147"                        
 [985] "KA1503000021"                        
 [986] "KA1503000023"                        
 [987] "KA1503000049"                        
 [988] "13196"                               
 [989] "15445"                               
 [990] "13221"                               
 [991] "KA17018068"                          
 [992] "15621"                               
 [993] "13398"                               
 [994] "TA1307000107"                        
 [995] "13128"                               
 [996] "TA1307000048"                        
 [997] "TA1309000010"                        
 [998] "13084"                               
 [999] "TA1306000009"                        
[1000] "SL-006"                              
[1001] "KA1504000102"                        
[1002] "TA1305000017"                        
[1003] "KA1504000078"                        
[1004] "18025"                               
[1005] "KA1504000110"                        
[1006] "16991"                               
[1007] "RP-005"                              
[1008] "16994"                               
[1009] "E014"                                
[1010] "KA1503000007"                        
[1011] "TA1308000009"                        
[1012] "TA1309000026"                        
[1013] "13257"                               
[1014] "15686"                               
[1015] "13021"                               
[1016] "KA1503000001"                        
[1017] "13235"                               
[1018] "20246.0"                             
[1019] "TA1306000026"                        
[1020] "KA1503000019"                        
[1021] "13434"                               
[1022] "TA1307000139"                        
[1023] "13194"                               
[1024] "20104"                               
[1025] "KA1503000031"                        
[1026] "13108"                               
[1027] "13430"                               
[1028] "KA1503000011"                        
[1029] "KA1503000030"                        
[1030] "18003"                               
[1031] "KP1705001026"                        
[1032] "KA1504000146"                        
[1033] "13016"                               
[1034] "KA1504000079"                        
[1035] "13001"                               
[1036] "TA1306000013"                        
[1037] "TA1306000025"                        
[1038] "13034"                               
[1039] "13427"                               
[1040] "TA1307000115"                        
[1041] "KA1504000101"                        
[1042] "TA1309000064"                        
[1043] "TA1309000027"                        
[1044] "TA1309000036"                        
[1045] "13063"                               
[1046] "15542"                               
[1047] "TA1308000012"                        
[1048] "TA1306000015"                        
[1049] "WL-011"                              
[1050] "KA1503000029"                        
[1051] "KA1503000074"                        
[1052] "13192"                               
[1053] "13289"                               
[1054] "TA1307000136"                        
[1055] "TA1307000143"                        
[1056] "13249"                               
[1057] "13432"                               
[1058] "TA1307000142"                        
[1059] "TA1306000014"                        
[1060] "13319"                               
[1061] "KA1504000133"                        
[1062] "13068"                               
[1063] "15571"                               
[1064] "TA1307000150"                        
[1065] "KA1503000015"                        
[1066] "13150"                               
[1067] "13135"                               
[1068] "13158"                               
[1069] "13265"                               
[1070] "TA1307000151"                        
[1071] "13278"                               
[1072] "13099"                               
[1073] "13037"                               
[1074] "13075"                               
[1075] "TA1309000023"                        
[1076] "TA1305000003"                        
[1077] "TA1309000024"                        
[1078] "13138"                               
[1079] "13160"                               
[1080] "TA1309000015"                        
[1081] "TA1307000144"                        
[1082] "TA1307000006"                        
[1083] "TA1308000031"                        
[1084] "TA1305000020"                        
[1085] "KA1504000127"                        
[1086] "TA1308000047"                        
[1087] "RP-009"                              
[1088] "RP-002"                              
[1089] "13325"                               
[1090] "TA1307000134"                        
[1091] "TA1309000050"                        
[1092] "TA1306000012"                        
[1093] "TA1309000012"                        
[1094] "LP-"                                 
[1095] "KA1504000158"                        
[1096] "KA1504000080"                        
[1097] "TA1306000016"                        
[1098] "TA1307000038"                        
[1099] "18067"                               
[1100] "13085"                               
[1101] "13242"                               
[1102] "RP-001"                              
[1103] "SL-010"                              
[1104] "15585"                               
[1105] "KA1504000114"                        
[1106] "13155"                               
[1107] "WL-012"                              
[1108] "18058"                               
[1109] "SL-007"                              
[1110] "13266"                               
[1111] "KA1504000143"                        
[1112] "13089"                               
[1113] "KA1503000066"                        
[1114] "13081"                               
[1115] "TA1308000043"                        
[1116] "KA1504000160"                        
[1117] "KA1503000046"                        
[1118] "KA1503000051"                        
[1119] "KA17018054"                          
[1120] "20119"                               
[1121] "16906"                               
[1122] "TA1307000124"                        
[1123] "13304"                               
[1124] "20243"                               
[1125] "TA1309000042"                        
[1126] "20234"                               
[1127] "20254.0"                             
[1128] "18017"                               
[1129] "KA1503000073"                        
[1130] "KA1503000027"                        
[1131] "13080"                               
[1132] "KA1504000128"                        
[1133] "13033"                               
[1134] "13259"                               
[1135] "KA1504000117"                        
[1136] "16933"                               
[1137] "16948"                               
[1138] "16912"                               
[1139] "KA1503000069"                        
[1140] "15651"                               
[1141] "TA1309000058"                        
[1142] "20239"                               
[1143] "TA1308000023"                        
[1144] "15687"                               
[1145] "15597"                               
[1146] "KA1503000055"                        
[1147] "TA1307000066"                        
[1148] "KA1503000071"                        
[1149] "RP-006"                              
[1150] "15544"                               
[1151] "16921"                               
[1152] "13154"                               
[1153] "KA1503000032"                        
[1154] "13354"                               
[1155] "KA1503000004"                        
[1156] "13050"                               
[1157] "20232"                               
[1158] "20206"                               
[1159] "16932"                               
[1160] "13338"                               
[1161] "KA1503000010"                        
[1162] "20121"                               
[1163] "20107"                               
[1164] "20210"                               
[1165] "KA1503000009"                        
[1166] "13420"                               
[1167] "13011"                               
[1168] "15648"                               
[1169] "16953"                               
[1170] "13083"                               
[1171] "13102"                               
[1172] "16905"                               
[1173] "13144"                               
[1174] "RP-008"                              
[1175] "SL-008"                              
[1176] "15685"                               
[1177] "20127"                               
[1178] "20223"                               
[1179] "TA1307000113"                        
[1180] "13217"                               
[1181] "TA1307000117"                        
[1182] "KA1504000139"                        
[1183] "TA1307000153"                        
[1184] "20108"                               
[1185] "TA1305000032"                        
[1186] "TA1305000002"                        
[1187] "13132"                               
[1188] "KA1503000024"                        
[1189] "20235"                               
[1190] "20131"                               
[1191] "15541"                               
[1192] "15443"                               
[1193] "KA1504000126"                        
[1194] "20218"                               
[1195] "RP-007"                              
[1196] "KA1503000005"                        
[1197] "TA1308000046"                        
[1198] "15652"                               
[1199] "15668"                               
[1200] "SL-012"                              
[1201] "15624"                               
[1202] "E006"                                
[1203] "TA1309000067"                        
[1204] "20230"                               
[1205] "TA1309000051"                        
[1206] "TA1305000034"                        
[1207] "TA1307000061"                        
[1208] "16918"                               
[1209] "20118"                               
[1210] "20129"                               
[1211] "TA1307000044"                        
[1212] "13215"                               
[1213] "KA1504000171"                        
[1214] "13059"                               
[1215] "13271"                               
[1216] "TA1308000022"                        
[1217] "TA1309000033"                        
[1218] "TA1307000164"                        
[1219] "15653"                               
[1220] "15643"                               
[1221] "TA1306000029"                        
[1222] "13163"                               
[1223] "KA1503000014"                        
[1224] "13248"                               
[1225] "15650"                               
[1226] "13096"                               
[1227] "KA1504000162"                        
[1228] "20103"                               
[1229] "16907"                               
[1230] "20203"                               
[1231] "16916"                               
[1232] "20215"                               
[1233] "20225"                               
[1234] "20253.0"                             
[1235] "16915"                               
[1236] "20257.0"                             
[1237] "20247.0"                             
[1238] "20204"                               
[1239] "20113"                               
[1240] "20130"                               
[1241] "20124"                               
[1242] "20256.0"                             
[1243] "16970"                               
[1244] "20112"                               
[1245] "20251.0"                             
[1246] "20214"                               
[1247] "15599"                               
[1248] "20245"                               
[1249] "20228"                               
[1250] "20123"                               
[1251] "20101"                               
[1252] "20208"                               
[1253] "20106"                               
[1254] "20.0"                                
[1255] "20211"                               
[1256] "20258.0"                             
[1257] "20128"                               
[1258] "20217"                               
[1259] "20248.0"                             
[1260] "20213"                               
[1261] "20212"                               
[1262] "20125"                               
[1263] "202480.0"                            
[1264] "20201"                               
[1265] "20220"                               
[1266] "20224"                               
[1267] "201022"                              
[1268] "20133"                               
[1269] "20202"                               
[1270] "20249.0"                             
[1271] "DIVVY 001"                           
[1272] "20237"                               
[1273] "20134"                               
[1274] "20126"                               
[1275] "20999"                               
[1276] "365.0"                               
[1277] "368.0"                               
[1278] "362.0"                               
[1279] "366.0"                               
[1280] "364.0"                               
[1281] "DIVVY CASSETTE REPAIR MOBILE STATION"
[1282] "358"                                 
[1283] "329.0"                               
[1284] "363.0"                               
[1285] "473"                                 
[1286] "20209"                               
[1287] "330.0"                               
[1288] "331.0"                               
[1289] "334.0"                               
[1290] "360"                                 
[1291] "397"                                 
[1292] "335.0"                               
[1293] "332.0"                               
[1294] "357"                                 

Creating a vector of station ids identified as ids associated with Divvy test and repair stations.

trs_id <- c("DIVVY 001",
            "DIVVY CASSETTE REPAIR MOBILE STATION",
            "Hubbard Bike-checking (LBS-WH-TEST)")

Keeping only trips that are relevant for the analysis.

all_trips_v2 <- all_trips_v2 %>%
  filter(!start_station_name %in% trs_name &
         !end_station_name %in% trs_name &
         !start_station_id %in% trs_id &
         !end_station_id %in% trs_id &
         between(ride_length, 1, 180))
dim_desc(all_trips_v2)
[1] "[4,804,459 x 13]"

Inspecting the difference between the number of station ids and number of stations

all_trips_v2 %>% 
  group_by(start_station_name, start_station_id) %>% 
  summarise(min_datetime = min(started_at), max_datetime = max(started_at), 
            count = n(),.groups = 'drop') %>%
  arrange(start_station_name, min_datetime) %>% 
  head(30) %>% 
  kableExtra::kbl() %>% 
  kableExtra::kable_styling(c("striped", "hover", "condensed", "responsive"))
start_station_name start_station_id min_datetime max_datetime count
2112 W Peterson Ave 456 2020-09-01 10:20:07 2020-11-30 17:57:38 295
2112 W Peterson Ave KA1504000155 2020-12-01 20:57:23 2021-08-31 19:04:10 766
351 351 2021-08-04 16:31:29 2021-08-07 23:59:38 2
63rd St Beach 101 2020-09-01 06:32:10 2020-11-29 09:15:38 645
63rd St Beach 15491 2020-12-01 12:13:32 2021-08-31 18:59:18 1716
900 W Harrison St 109 2020-09-01 00:10:07 2020-11-30 21:37:27 1540
900 W Harrison St 13028 2020-12-01 05:57:08 2021-08-31 23:32:29 4379
Aberdeen St & Jackson Blvd 21 2020-09-01 05:21:41 2020-11-30 18:00:59 2762
Aberdeen St & Jackson Blvd 13157 2020-12-01 05:47:45 2021-08-31 21:53:55 7855
Aberdeen St & Monroe St 80 2020-09-01 06:26:54 2020-11-30 16:31:57 2126
Aberdeen St & Monroe St 13156 2020-12-01 00:36:33 2021-08-31 23:57:23 7547
Aberdeen St & Randolph St 621 2020-09-01 05:48:49 2020-11-30 21:05:51 1934
Aberdeen St & Randolph St 18062 2020-12-01 07:23:39 2021-08-31 22:02:47 6648
Ada St & 113th St 727 2020-10-07 19:34:30 2020-11-26 22:29:45 20
Ada St & 113th St 20129 2020-12-13 13:21:13 2021-08-26 14:36:13 65
Ada St & Washington Blvd 346 2020-09-01 04:34:53 2020-11-30 20:44:42 1928
Ada St & Washington Blvd 13353 2020-12-01 07:19:09 2021-08-31 23:42:08 6191
Adler Planetarium 341 2020-09-01 07:04:27 2020-11-30 15:22:52 3961
Adler Planetarium 13431 2020-12-01 15:08:23 2021-08-31 22:11:50 11668
Albany Ave & 26th St 444 2020-09-02 17:49:47 2020-11-29 13:42:10 104
Albany Ave & 26th St 15691 2020-12-03 15:37:34 2021-08-31 17:12:28 230
Albany Ave & Bloomingdale Ave 511 2020-09-01 08:41:29 2020-11-30 17:06:57 988
Albany Ave & Bloomingdale Ave 15655 2020-12-01 16:19:50 2021-08-31 22:50:08 3469
Albany Ave & Montrose Ave 480 2020-09-01 08:32:40 2020-11-30 15:48:55 614
Albany Ave & Montrose Ave 15621 2020-12-01 19:31:21 2021-08-31 19:36:53 1496
Altgeld Gardens 20212 2021-04-29 19:12:19 2021-08-24 18:21:22 84
Archer (Damen) Ave & 37th St 645 2020-09-01 22:34:37 2020-11-30 09:44:16 150
Archer (Damen) Ave & 37th St 18022 2020-12-01 17:30:51 2021-08-31 17:10:59 396
Artesian Ave & Hubbard St 376 2020-09-01 07:34:15 2020-11-30 20:07:33 886
Artesian Ave & Hubbard St 15664 2020-12-01 07:46:23 2021-08-31 16:56:55 1564

Conclusion: Divvy has changed station ids for most stations at the beginning of December 2020. This will not affect the analysis so I will leave it as is. What is important is that at the time of a ride each station has been assigned a unique id. Let’s see why this change happened.

Creating a 3-dimensional frequency table.

ftable(all_trips_v2$user_type, all_trips_v2$year_month, all_trips_v2$rideable_type)
                classic_bike docked_bike electric_bike
                                                      
casual 2020-09             0      166860         57251
       2020-10             0       77464         63230
       2020-11             0       44729         41296
       2020-12         11129        4801         13526
       2021-01          8141        2026          7552
       2021-02          5491        1196          3077
       2021-03         44734       15100         22385
       2021-04         69391       23795         40221
       2021-05        121322       41444         87520
       2021-06        183950       49440        127428
       2021-07        236632       55529        139456
       2021-08        225733       43517        134755
member 2020-09             0      226706         68014
       2020-10             0      152039         85355
       2020-11             0      103106         65012
       2020-12         58556        7660         33450
       2021-01         52683           1         24681
       2021-02         28540           0          9846
       2021-03        105476           0         36713
       2021-04        141562           0         55563
       2021-05        182005           0         87425
       2021-06        242527           0        109475
       2021-07        260782           0        112381
       2021-08        268693           0        116087

From September to November 2020 there were only two rideable types, docked_bike and electric_bike. At the beginning of December 2020 new rideable type is introduced, the classic_bike, and a distinction is made between the docked_bike and the classic_bike. Since the beginning of 2021, casual riders can use classic and docked bikes, while annual members only classic bikes. Therefore, we can not conclude a preference for one rideable type over another between casuals and members. Later on I will convert all docked bikes into classics and compare preferences for classic or electric bikes.

Checking if any station has changed its name at some point

all_trips_v2 %>% 
  group_by(start_station_id, year_month) %>%
  summarise(n_distinct_start_station_name = n_distinct(start_station_name), 
            .groups = 'drop') %>% 
  filter(n_distinct_start_station_name > 1) %>% 
  kableExtra::kbl()
start_station_id year_month n_distinct_start_station_name
13074 2021-01 2
13099 2021-07 2
13221 2021-07 2
13300 2021-07 2
19 2020-09 2
26 2020-10 2
317 2020-09 2
332 2020-09 2
351 2021-08 2
503 2020-10 2
625 2020-11 2
631 2021-01 2
704 2020-09 2
709 2020-09 2
725 2020-10 2
E011 2020-12 2
LF-005 2021-07 2
TA1305000039 2021-05 2
TA1306000029 2021-07 2
TA1307000041 2021-07 2
TA1309000039 2021-07 2
TA1309000049 2021-07 2
NA 2020-09 4
NA 2020-10 3
NA 2020-11 4
start_id <- c("13074", "13099", "13300", "19", "26", "317", "332", "351", "503",
              "625", "631", "704", "709", "725", "E011", "LF-005", "TA1305000039",
              "TA1306000029", "TA1307000041", "TA1309000039", "TA1309000049")
all_trips_v2 %>%
  filter(start_station_id %in% start_id) %>% 
  group_by(start_station_id, start_station_name) %>%
  summarise(min_datetime = min(started_at), max_datetime = max(started_at), 
            count = n(), .groups = 'drop' ) %>% 
  arrange(start_station_id, min_datetime) %>% 
  kableExtra::kbl()
start_station_id start_station_name min_datetime max_datetime count
13074 Broadway & Wilson Ave 2020-12-01 09:29:54 2021-01-26 19:50:38 425
13074 Broadway & Wilson - Truman College Vaccination Site 2021-01-27 14:35:48 2021-08-31 22:38:18 6036
13099 Halsted St & 18th St 2020-12-01 06:10:22 2021-07-28 12:51:03 1616
13099 Halsted St & 18th St (Temp) 2021-07-26 16:35:28 2021-08-31 23:54:30 509
13300 Lake Shore Dr & Monroe St 2020-12-01 08:26:56 2021-07-21 10:45:56 25133
13300 DuSable Lake Shore Dr & Monroe St 2021-07-20 19:20:12 2021-08-31 23:38:38 9220
19 Throop (Loomis) St & Taylor St 2020-09-01 00:06:50 2020-09-30 07:08:15 811
19 Throop St & Taylor St 2020-09-30 06:11:29 2020-11-30 17:30:36 1048
26 McClurg Ct & Illinois St 2020-09-01 05:05:44 2020-10-21 09:26:26 3877
26 New St & Illinois St 2020-10-18 17:00:24 2020-11-30 21:27:44 1234
317 Wood St & Taylor St 2020-09-01 09:42:40 2020-09-22 09:09:28 417
317 Wood St & Taylor St (Temp) 2020-09-02 14:44:03 2020-11-30 22:32:47 1241
317 Long Ave & Belmont Ave 2021-07-27 21:37:39 2021-08-30 11:23:10 34
332 Burling St (Halsted) & Diversey Pkwy (Temp) 2020-09-01 07:32:26 2020-09-23 15:16:31 1204
332 Burling St & Diversey Pkwy 2020-09-23 16:14:35 2020-11-30 23:05:39 2286
351 Cottage Grove Ave & 51st St 2020-09-01 12:43:12 2020-11-30 23:21:30 385
351 Mulligan Ave & Wellington Ave 2021-08-03 16:01:18 2021-08-30 17:06:17 41
351 351 2021-08-04 16:31:29 2021-08-07 23:59:38 2
503 Drake Ave & Fullerton Ave 2020-09-01 04:40:18 2020-10-01 13:50:08 447
503 St. Louis Ave & Fullerton Ave 2020-10-01 19:53:17 2020-11-30 20:20:55 392
625 Chicago Ave & Dempster St 2020-09-01 09:51:04 2020-11-30 21:35:09 731
625 Dodge Ave & Main St 2020-11-29 14:43:14 2020-11-29 15:25:01 3
631 Malcolm X College 2020-09-01 14:36:58 2021-01-23 18:39:19 311
631 Malcolm X College Vaccination Site 2021-01-27 19:13:29 2021-08-31 18:31:05 979
704 Jeffery Blvd & 91st St 2020-09-03 06:59:22 2020-09-20 15:05:01 19
704 Avenue O & 134th St 2020-09-23 18:40:05 2020-11-11 15:42:28 34
709 Halsted St & 104th St 2020-09-15 18:26:12 2020-09-16 08:01:57 8
709 Michigan Ave & 114th St 2020-09-17 18:27:01 2020-11-28 19:38:12 20
725 Western Ave & 104th St 2020-10-06 14:38:17 2020-10-06 14:38:17 1
725 Halsted St & 104th St 2020-10-13 13:05:17 2020-11-12 11:20:12 23
E011 Chicago Ave & Dempster St 2020-12-01 18:39:42 2020-12-01 18:39:42 1
E011 Dodge Ave & Main St 2020-12-20 18:35:35 2021-08-31 16:08:19 309
LF-005 Lake Shore Dr & North Blvd 2020-12-01 07:21:59 2021-07-21 10:39:07 23613
LF-005 DuSable Lake Shore Dr & North Blvd 2021-07-01 17:21:59 2021-08-31 21:30:07 12941
TA1305000039 Marshfield Ave & Cortland St 2020-12-01 06:57:11 2021-05-26 09:06:13 2396
TA1305000039 Elston Ave & Cortland St 2021-05-23 14:50:25 2021-08-31 22:54:49 3587
TA1306000029 Lake Shore Dr & Ohio St 2020-12-01 05:10:32 2021-07-21 09:34:21 11047
TA1306000029 DuSable Lake Shore Dr & Ohio St 2021-07-21 10:59:27 2021-08-31 23:47:54 4458
TA1307000041 Lake Shore Dr & Wellington Ave 2020-12-01 08:32:58 2021-07-21 10:31:29 11320
TA1307000041 DuSable Lake Shore Dr & Wellington Ave 2021-07-21 08:38:05 2021-08-31 21:16:41 5318
TA1309000039 Lake Shore Dr & Diversey Pkwy 2020-12-01 06:19:39 2021-07-21 10:50:30 11543
TA1309000039 DuSable Lake Shore Dr & Diversey Pkwy 2021-07-21 10:55:37 2021-08-31 22:12:24 5376
TA1309000049 Lake Shore Dr & Belmont Ave 2020-12-01 01:39:00 2021-07-21 10:03:25 11101
TA1309000049 DuSable Lake Shore Dr & Belmont Ave 2021-07-18 14:31:44 2021-08-31 22:52:17 5449

Among other changes, in July 2021 Chicago renamed the iconic Lake Shore Drive to honor its city’s ‘founder’ Jean Baptiste Point DuSable. It is now known as DuSable Lake Shore Drive. You can read the story here.

I will now recode old station names in the start_station_name and end_station_name column with new ones. This step is necessary if we want to get an accurate list of the most popular stations.

all_trips_v2 <- all_trips_v2 %>% 
  mutate(start_station_name = recode(start_station_name, 
        "Broadway & Wilson Ave" = "Broadway & Wilson - Truman College Vaccination Site",
        "Halsted St & 18th St" = "Halsted St & 18th St (Temp)",
        "Lake Shore Dr & Monroe St" = "DuSable Lake Shore Dr & Monroe St",
        "Throop (Loomis) St & Taylor St" = "Throop St & Taylor St",
        "McClurg Ct & Illinois St" = "New St & Illinois St",
        "Burling St (Halsted) & Diversey Pkwy (Temp)" = "Burling St & Diversey Pkwy",
        "Drake Ave & Fullerton Ave" = "St. Louis Ave & Fullerton Ave",
        "Malcolm X College" = "Malcolm X College Vaccination Site",
        "Lake Shore Dr & North Blvd" = "DuSable Lake Shore Dr & North Blvd",
        "Marshfield Ave & Cortland St" = "Elston Ave & Cortland St",
        "Lake Shore Dr & Ohio St" = "DuSable Lake Shore Dr & Ohio St",
        "Lake Shore Dr & Wellington Ave" = "DuSable Lake Shore Dr & Wellington Ave",
        "Lake Shore Dr & Diversey Pkwy" = "DuSable Lake Shore Dr & Diversey Pkwy",
        "Lake Shore Dr & Belmont Ave" = "DuSable Lake Shore Dr & Belmont Ave")) %>% 
  mutate(end_station_name = recode(end_station_name, 
        "Broadway & Wilson Ave" = "Broadway & Wilson - Truman College Vaccination Site",
        "Halsted St & 18th St" = "Halsted St & 18th St (Temp)",
        "Lake Shore Dr & Monroe St" = "DuSable Lake Shore Dr & Monroe St",
        "Throop (Loomis) St & Taylor St" = "Throop St & Taylor St",
        "McClurg Ct & Illinois St" = "New St & Illinois St",
        "Burling St (Halsted) & Diversey Pkwy (Temp)" = "Burling St & Diversey Pkwy",
        "Drake Ave & Fullerton Ave" = "St. Louis Ave & Fullerton Ave",
        "Malcolm X College" = "Malcolm X College Vaccination Site",
        "Lake Shore Dr & North Blvd" = "DuSable Lake Shore Dr & North Blvd",
        "Marshfield Ave & Cortland St" = "Elston Ave & Cortland St",
        "Lake Shore Dr & Ohio St" = "DuSable Lake Shore Dr & Ohio St",
        "Lake Shore Dr & Wellington Ave" = "DuSable Lake Shore Dr & Wellington Ave",
        "Lake Shore Dr & Diversey Pkwy" = "DuSable Lake Shore Dr & Diversey Pkwy",
        "Lake Shore Dr & Belmont Ave" = "DuSable Lake Shore Dr & Belmont Ave"))

Inspecting observations with missing values (NAs) in the start_station_name, start_station_id, end_station_name, and end_station_id column.

all_trips_NA2 <- all_trips_v2 %>% 
  filter(is.na(start_station_name) | 
           is.na(end_station_name) | 
           is.na(start_station_id) | 
           is.na(end_station_id))

# number of NAs in each column
colSums(is.na(all_trips_NA2))
           ride_id      rideable_type         started_at 
                 0                  0                  0 
          ended_at start_station_name   start_station_id 
                 0             433066             433555 
  end_station_name     end_station_id          user_type 
            465210             465557                  0 
        year_month        day_of_week               hour 
                 0                  0                  0 
       ride_length 
                 0 
table(all_trips_NA2$year_month, all_trips_NA2$rideable_type)
         
          classic_bike electric_bike
  2020-09            0         30366
  2020-10            0         47049
  2020-11            0         35629
  2020-12          108         16863
  2021-01          135         12485
  2021-02          107          5956
  2021-03          182         21691
  2021-04          161         37194
  2021-05          197         77127
  2021-06          346        115639
  2021-07          473        124787
  2021-08          378        125277
# contingency table for the whole dataset
table(all_trips_v2$year_month, all_trips_v2$rideable_type)
         
          classic_bike docked_bike electric_bike
  2020-09            0      393566        125265
  2020-10            0      229503        148585
  2020-11            0      147835        106308
  2020-12        69685       12461         46976
  2021-01        60824        2027         32233
  2021-02        34031        1196         12923
  2021-03       150210       15100         59098
  2021-04       210953       23795         95784
  2021-05       303327       41444        174945
  2021-06       426477       49440        236903
  2021-07       497414       55529        251837
  2021-08       494426       43517        250842
all_trips_NA2 %>%   
  count(user_type)
# A tibble: 2 × 2
  user_type      n
  <chr>      <int>
1 casual    322694
2 member    329456
summary(all_trips_NA2$ride_length)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    6.82   12.38   17.82   22.13  180.00 

Deleting the observations with missing values can reduce the statistical power of the analysis. We must understand why the data is missing. The reason for missing values here is the fact that electric bikes can be parked outside of the stations within a service area. You can find more information here. In Zone 1, an out-of-station parking fee ($2) will be charged. In Zone 2, the out-of-station parking fee will be waived to account for the lower density of stations.

There is no way to substitute missing vales and nothing indicates that something is wrong with this subset. If I delete it I will lose a small percentage of rides taken with classic bikes (0.1%) and a lot of rides taken with electric bikes (42%). I will keep this observations.

Renaming rideable_type column to bike_type, and recoding docked_bike to classic_bike

As stated before, comparing casual riders and annual members by rideable_type is not appropriate. Still, I would like to compare them by the bike_type.

all_trips_v2 <- all_trips_v2 %>% 
  rename(bike_type = rideable_type) %>%
  mutate(bike_type = recode(bike_type, "docked_bike" = "classic_bike"))
all_trips_v2 %>%
  count(bike_type)
# A tibble: 2 × 2
  bike_type           n
  <chr>           <int>
1 classic_bike  3262760
2 electric_bike 1541699

Final dataset ready for analysis

# selecting columns needed for analysis
all_trips_v2 <- all_trips_v2 %>% 
  select(start_station_name, end_station_name, user_type, year_month, day_of_week, 
         hour, ride_length, bike_type)
# final dataset dimensions
dim_desc(all_trips_v2)
[1] "[4,804,459 x 8]"
# proportion of trips removed
(nrow(all_trips) - nrow(all_trips_v2)) / nrow(all_trips) 
[1] 0.02210694
# Writing file
all_trips_v2 %>% write_rds("data/all_trips_202009-202108_cln.rds")

PART IV - Analyze & Share

In this step I will try to find an answer to the question “How do annual members and casual riders use Cyclistic bikes differently?” and share my key findings by analyzing the following:

# theme customization
my_theme <- theme(plot.title=element_text(size=14),
                  plot.subtitle=element_text(size=10),
                  axis.text.x=element_text(size=10),
                  axis.text.y=element_text(size=10),
                  axis.title.x=element_text(size=10),
                  axis.title.y=element_text(size=10),
                  strip.text = element_text(size=12),
                  legend.title=element_text(size=11),
                  legend.text=element_text(size=11))

my_colors <- c("#355273", "#FF3030") 

Number of rides

Total Rides by User Type

total_rides_by_user_type <- all_trips_v2 %>% 
  select(user_type) %>% 
  group_by(user_type) %>% 
  summarise(total_rides = n(), .groups = 'drop') %>% 
  mutate(percentage = scales::percent(total_rides/sum(total_rides), accuracy = 0.1))

knitr::kable(total_rides_by_user_type)
user_type total_rides percentage
casual 2170121 45.2%
member 2634338 54.8%
# making a donut chart with webr package
webr::PieDonut(total_rides_by_user_type, aes(user_type, count = total_rides), r0 = 0.7, r1 = 0.9,
               labelpositionThreshold = 1, showPieName = FALSE, 
               pieAlpha = 1) + 
  scale_fill_manual(values = my_colors) +
  annotate(geom = 'text', x = 0, y = 0, 
           label = str_c("Totak Rides: ", round(sum(total_rides_by_user_type$total_rides)/1e6, 1), "M"),
           size = 4.7) +
  theme_void()

Total Rides by Month

Show code and table output
total_rides_by_month <- all_trips_v2 %>% 
  select(user_type, year_month) %>% 
  group_by(user_type, year_month) %>% 
  summarise(total_rides = n()) %>% 
  mutate(percentage = scales::percent(total_rides/sum(total_rides), accuracy = 0.1)) %>% 
  ungroup()
  
knitr::kable(total_rides_by_month) 
user_type year_month total_rides percentage
casual 2020-09 224111 10.3%
casual 2020-10 140694 6.5%
casual 2020-11 86025 4.0%
casual 2020-12 29456 1.4%
casual 2021-01 17719 0.8%
casual 2021-02 9764 0.4%
casual 2021-03 82219 3.8%
casual 2021-04 133407 6.1%
casual 2021-05 250286 11.5%
casual 2021-06 360818 16.6%
casual 2021-07 431617 19.9%
casual 2021-08 404005 18.6%
member 2020-09 294720 11.2%
member 2020-10 237394 9.0%
member 2020-11 168118 6.4%
member 2020-12 99666 3.8%
member 2021-01 77365 2.9%
member 2021-02 38386 1.5%
member 2021-03 142189 5.4%
member 2021-04 197125 7.5%
member 2021-05 269430 10.2%
member 2021-06 352002 13.4%
member 2021-07 373163 14.2%
member 2021-08 384780 14.6%
ggplot(total_rides_by_month, aes(x = year_month, y = total_rides, fill = user_type)) + 
  geom_col(width = 0.65, position = position_dodge(0.75)) + 
  scale_y_continuous(labels = scales::comma) +
  scale_fill_manual(values = my_colors) +
  labs(title = "Total Rides by Month", subtitle = "September 2020 - August 2021",
       x = "", y = "", fill = "User Type") + 
  my_theme +
  theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "top")

It is evident that the number of rides through the months directly correlates with the weather. Weather history in Chicago (Weather Spark) for the period September 2020 - August 2021 reveals common temperatures throughout the year with the exception of February 2021 (freezing, snow) and the summer months June, July,and August 2021 (above-average temperatures).

The number of rides taken by casuals exceeded the number of rides taken by members only in June, July and August 2021, during which time casual rides account for 55.1% of total casual rides.

The number of rides by casuals in relation to members is much lower in the period from October 2020 to January 2021. The possible cause is the COVID-19 pandemic, We can see the number of new cases per capita in the following animation.

Total Rides by Day of the Week

Show code and table output
total_rides_by_dow <- all_trips_v2 %>% 
  select(user_type, day_of_week) %>% 
  group_by(user_type, day_of_week) %>% 
  summarise(total_rides = n()) %>% 
  mutate(percentage = scales::percent(total_rides/sum(total_rides), accuracy = 0.1)) %>% 
  ungroup()

knitr::kable(total_rides_by_dow)
user_type day_of_week total_rides percentage
casual Monday 244484 11.3%
casual Tuesday 236599 10.9%
casual Wednesday 236314 10.9%
casual Thursday 242190 11.2%
casual Friday 314444 14.5%
casual Saturday 486516 22.4%
casual Sunday 409574 18.9%
member Monday 357796 13.6%
member Tuesday 393073 14.9%
member Wednesday 399560 15.2%
member Thursday 383457 14.6%
member Friday 388557 14.7%
member Saturday 381707 14.5%
member Sunday 330188 12.5%
ggplot(total_rides_by_dow, aes(x = day_of_week, y = total_rides, fill = user_type)) + 
  geom_col(width = 0.65, position = position_dodge(0.75)) + 
  scale_y_continuous(labels = scales::comma) +
  scale_fill_manual(values = my_colors) +
  labs(title = "Total Rides by Day of the Week", subtitle = "September 2020 - August 2021",
       x = "", y = "", fill = "User Type") +
  my_theme +
  theme(legend.position = "top")

Casual riders prefer Saturday rides (22.4% of total casual rides). Sunday is the second highest day (18.9%), followed by Friday (14.5%). Rides from Monday to Thursday are equally split (11%).

Members’ rides are much more evenly split (13-15%). Members took the least rides on Sundays (12.5%).

Total Rides by Hour

Show code and table output
total_rides_by_hour <- all_trips_v2 %>%
  select(user_type, hour) %>% 
  group_by(user_type, hour) %>% 
  summarise(total_rides = n()) %>% 
  mutate(percentage = scales::percent(total_rides/sum(total_rides), accuracy = 0.1)) %>% 
  ungroup()

knitr::kable(total_rides_by_hour) 
user_type hour total_rides percentage
casual 0 43483 2.0%
casual 1 30951 1.4%
casual 2 19563 0.9%
casual 3 10690 0.5%
casual 4 7551 0.3%
casual 5 9465 0.4%
casual 6 20186 0.9%
casual 7 35908 1.7%
casual 8 50059 2.3%
casual 9 61548 2.8%
casual 10 87265 4.0%
casual 11 116385 5.4%
casual 12 141729 6.5%
casual 13 152618 7.0%
casual 14 159007 7.3%
casual 15 167520 7.7%
casual 16 182248 8.4%
casual 17 208923 9.6%
casual 18 187132 8.6%
casual 19 143626 6.6%
casual 20 105533 4.9%
casual 21 86832 4.0%
casual 22 79799 3.7%
casual 23 62100 2.9%
member 0 24795 0.9%
member 1 15890 0.6%
member 2 9038 0.3%
member 3 5144 0.2%
member 4 6306 0.2%
member 5 24432 0.9%
member 6 71187 2.7%
member 7 126402 4.8%
member 8 139994 5.3%
member 9 109507 4.2%
member 10 111689 4.2%
member 11 137262 5.2%
member 12 160348 6.1%
member 13 158130 6.0%
member 14 157059 6.0%
member 15 177986 6.8%
member 16 224585 8.5%
member 17 279870 10.6%
member 18 239079 9.1%
member 19 169026 6.4%
member 20 110341 4.2%
member 21 77320 2.9%
member 22 58519 2.2%
member 23 40429 1.5%
ggplot(total_rides_by_hour, aes(x = hour, y = total_rides, color = user_type)) +
  geom_line(aes(group = user_type), size = 1) +
  scale_y_continuous(labels = scales::comma) +
  scale_color_manual(values = my_colors) +
  labs(title = "Total Rides by Hour", subtitle = "September 2020 - August 2021",
       x = "", y = "", color = "User Type") +
  expand_limits(y = 3e5) +
  my_theme +
  theme(legend.position = "top")

Among members we see spikes in use at 8am and 5pm with another small bump at 12 noon. Annual members are locals and frequent riders. They use bikes to commute to work or school, run errands, or get to appointments.

Among casual riders we see a spike in use at 5pm. Casual riders are one-way commuters. Overall, they tend to ride in the afternoon.

Average ride length

Ride Length summary statistics by user type in minutes.

all_trips_v2 %>%   
  select(user_type, ride_length) %>% 
  group_by(user_type) %>% 
  summarize(min = min(ride_length),
            q1 = quantile(ride_length, 0.25),
            median = median(ride_length),
            mean = mean(ride_length),
            q3 = quantile(ride_length, 0.75),
            max = max(ride_length))
# A tibble: 2 × 7
  user_type   min    q1 median  mean    q3   max
  <chr>     <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>
1 casual        1  9.88   17.2  26.1  31.2  180 
2 member        1  6.12   10.4  13.8  17.8  180.

The average ride length for casuals (26 min) is almost twice as long as the average ride length for members (14 min). On average, rides by casuals last 12 minutes longer than rides by annual members.

Average Ride Length by Day of the Week

Show code and table output
avg_ride_length_by_dow <- all_trips_v2 %>% 
  select(user_type, day_of_week, ride_length) %>% 
  group_by(user_type, day_of_week) %>% 
  summarise(avg_ride_length = mean(ride_length) %>% round(2)) %>% 
  ungroup()

knitr::kable(avg_ride_length_by_dow) 
user_type day_of_week avg_ride_length
casual Monday 26.39
casual Tuesday 23.88
casual Wednesday 23.25
casual Thursday 22.63
casual Friday 24.25
casual Saturday 28.29
casual Sunday 29.76
member Monday 13.34
member Tuesday 13.11
member Wednesday 13.21
member Thursday 13.04
member Friday 13.48
member Saturday 15.35
member Sunday 15.62
ggplot(avg_ride_length_by_dow, aes(x = day_of_week, y = avg_ride_length, fill = user_type)) + 
  geom_col(width = 0.665, position = position_dodge(0.75)) + 
  scale_y_continuous(labels = scales::comma) +
  scale_fill_manual(values = my_colors) +
  labs(title = "Average Ride Length (minute) by Day of the Week",
       subtitle = "September 2020 - August 2021",
       x = "", y = "", fill = "User Type") +
  my_theme +
  theme(legend.position = "top") 

Avaerage ride length for members is constant from Monday to Friday (13 min), with slight increase on Saturdays and Sundays (15 min).

Avaerage ride length for casuals varies during the week (from 22 to 30 min), Highest average ride length is on Sundays (30 min), followed by Saturdays (28 min).

Average Ride Length by Hour

Show code and table output
avg_ride_length_by_hour <- all_trips_v2 %>% 
  select(user_type, hour, ride_length) %>% 
  group_by(user_type, hour) %>% 
  summarise(avg_ride_length = mean(ride_length) %>% round(2)) %>% 
  ungroup()

knitr::kable(avg_ride_length_by_hour)
user_type hour avg_ride_length
casual 0 23.48
casual 1 22.59
casual 2 21.83
casual 3 21.65
casual 4 19.90
casual 5 18.87
casual 6 17.03
casual 7 18.05
casual 8 20.33
casual 9 25.39
casual 10 28.84
casual 11 29.63
casual 12 29.30
casual 13 29.98
casual 14 29.98
casual 15 28.87
casual 16 26.94
casual 17 24.95
casual 18 24.19
casual 19 24.35
casual 20 24.48
casual 21 23.80
casual 22 23.28
casual 23 22.90
member 0 12.72
member 1 13.00
member 2 12.92
member 3 13.16
member 4 12.21
member 5 11.47
member 6 12.26
member 7 12.44
member 8 12.51
member 9 13.02
member 10 13.78
member 11 14.09
member 12 13.93
member 13 14.31
member 14 14.73
member 15 14.56
member 16 14.44
member 17 14.51
member 18 14.28
member 19 13.97
member 20 13.65
member 21 13.37
member 22 13.07
member 23 12.80
ggplot(avg_ride_length_by_hour, aes(x = hour, y = avg_ride_length, color = user_type)) +
  geom_line(aes(group = user_type), size = 1) +
  scale_y_continuous(labels = scales::comma) +
  scale_color_manual(values = my_colors) +
  labs(title = "Average Ride Length (minute) by Hour", subtitle = "September 2020 - August 2021",
       x = "", y = "", color = "User Type") +
  my_theme +
  theme(legend.position = "top")

The longest rides for casuals start in late mornings and afternoons. Average ride length for members is pretty much constant during the day.

Average Ride Length by Hour and Day of the Week

all_trips_v2 %>%
  group_by(user_type, day_of_week, hour) %>%
  summarise(avg_ride_length = mean(ride_length), .groups = 'drop') %>% 
  ggplot(aes(x = hour, y = avg_ride_length, color = user_type)) +
  geom_line(aes(group = user_type), size=1) +
  facet_wrap(~day_of_week) +
  scale_y_continuous(labels = scales::comma) +
  scale_x_discrete(breaks = seq(1, 23, 2)) +
  scale_color_manual(values = my_colors) +
  labs(title = "Average Ride Length by Hour and Day of the Week", 
       subtitle = "September 2020 - August 2021",
       x = "", y = "", color = "User Type") +
  my_theme +
  theme(legend.position = "top")

Bike type usage

biketype_usage <- all_trips_v2 %>% 
  select(user_type, bike_type) %>% 
  group_by(user_type, bike_type) %>% 
  summarise(total_rides = n()) %>% 
  mutate(percentage = scales::percent(total_rides/sum(total_rides), accuracy = 0.1)) %>% 
  ungroup() %>% 
  pivot_wider(-total_rides, names_from = bike_type, values_from = percentage)

knitr::kable(biketype_usage) 
user_type classic_bike electric_bike
casual 66.0% 34.0%
member 69.5% 30.5%

On average, casual riders took 66% of total casual rides with classic bikes and 34% with electric. Members took slightly less rides with electric bikes (30.5%) than casuals.

What is the situation like if we group the rides by month?

Show code and table output
biketype_usage_by_month <- all_trips_v2 %>%
  group_by(user_type, year_month, bike_type) %>% 
  summarise(total_rides = n()) %>% 
  mutate(percentage = scales::percent(total_rides/sum(total_rides), accuracy = 0.01))

knitr::kable(biketype_usage_by_month) 
user_type year_month bike_type total_rides percentage
casual 2020-09 classic_bike 166860 74.45%
casual 2020-09 electric_bike 57251 25.55%
casual 2020-10 classic_bike 77464 55.06%
casual 2020-10 electric_bike 63230 44.94%
casual 2020-11 classic_bike 44729 52.00%
casual 2020-11 electric_bike 41296 48.00%
casual 2020-12 classic_bike 15930 54.08%
casual 2020-12 electric_bike 13526 45.92%
casual 2021-01 classic_bike 10167 57.38%
casual 2021-01 electric_bike 7552 42.62%
casual 2021-02 classic_bike 6687 68.49%
casual 2021-02 electric_bike 3077 31.51%
casual 2021-03 classic_bike 59834 72.77%
casual 2021-03 electric_bike 22385 27.23%
casual 2021-04 classic_bike 93186 69.85%
casual 2021-04 electric_bike 40221 30.15%
casual 2021-05 classic_bike 162766 65.03%
casual 2021-05 electric_bike 87520 34.97%
casual 2021-06 classic_bike 233390 64.68%
casual 2021-06 electric_bike 127428 35.32%
casual 2021-07 classic_bike 292161 67.69%
casual 2021-07 electric_bike 139456 32.31%
casual 2021-08 classic_bike 269250 66.65%
casual 2021-08 electric_bike 134755 33.35%
member 2020-09 classic_bike 226706 76.92%
member 2020-09 electric_bike 68014 23.08%
member 2020-10 classic_bike 152039 64.05%
member 2020-10 electric_bike 85355 35.95%
member 2020-11 classic_bike 103106 61.33%
member 2020-11 electric_bike 65012 38.67%
member 2020-12 classic_bike 66216 66.44%
member 2020-12 electric_bike 33450 33.56%
member 2021-01 classic_bike 52684 68.10%
member 2021-01 electric_bike 24681 31.90%
member 2021-02 classic_bike 28540 74.35%
member 2021-02 electric_bike 9846 25.65%
member 2021-03 classic_bike 105476 74.18%
member 2021-03 electric_bike 36713 25.82%
member 2021-04 classic_bike 141562 71.81%
member 2021-04 electric_bike 55563 28.19%
member 2021-05 classic_bike 182005 67.55%
member 2021-05 electric_bike 87425 32.45%
member 2021-06 classic_bike 242527 68.90%
member 2021-06 electric_bike 109475 31.10%
member 2021-07 classic_bike 260782 69.88%
member 2021-07 electric_bike 112381 30.12%
member 2021-08 classic_bike 268693 69.83%
member 2021-08 electric_bike 116087 30.17%
ggplot(biketype_usage_by_month, aes(x = year_month, y = total_rides, fill = bike_type)) +
  geom_col(color = "black", width = 0.7, position = "fill") +
  facet_wrap(~user_type) +
  scale_y_continuous(labels = scales::percent) +
  scale_fill_manual(breaks = c("classic_bike", "electric_bike"),
                    values = c("#A0CBE8", "#4E79A7")) +
  labs(title = "Bike Type Usage by Month", subtitle = "September 2020 - August 2021",
       x = "", y = "") + 
  my_theme + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "top")

We can see that from October 2020 to January 2021 more rides are taken with electric bikes than on average. Since fewer rides were achieved in those months, both groups had more electric bikes at their disposal.

Top 20 most popular start stations for casuals

top_start_casual <- all_trips_v2 %>% 
  filter(!is.na(start_station_name), user_type == "casual") %>% 
  group_by(user_type, start_station_name) %>% 
  summarise(total_rides = n(), .groups = 'drop') %>%
  arrange(desc(total_rides)) %>% 
  head(20)

top_start_casual
# A tibble: 20 × 3
   user_type start_station_name                 total_rides
   <chr>     <chr>                                    <int>
 1 casual    Streeter Dr & Grand Ave                  55539
 2 casual    DuSable Lake Shore Dr & Monroe St        33604
 3 casual    Millennium Park                          30505
 4 casual    Michigan Ave & Oak St                    27212
 5 casual    DuSable Lake Shore Dr & North Blvd       26677
 6 casual    Theater on the Lake                      21516
 7 casual    Shedd Aquarium                           20644
 8 casual    Wells St & Concord Ln                    17111
 9 casual    Indiana Ave & Roosevelt Rd               16393
10 casual    Clark St & Lincoln Ave                   15450
11 casual    Clark St & Elm St                        15368
12 casual    Clark St & Armitage Ave                  14708
13 casual    Wells St & Elm St                        14695
14 casual    Wabash Ave & Grand Ave                   14577
15 casual    Michigan Ave & Lake St                   14354
16 casual    Dusable Harbor                           14200
17 casual    Michigan Ave & Washington St             13744
18 casual    New St & Illinois St                     13198
19 casual    Michigan Ave & 8th St                    12629
20 casual    Buckingham Fountain                      12321

Top 20 most popular start stations for members

top_start_member <- all_trips_v2 %>% 
  filter(!is.na(start_station_name), user_type == "member") %>% 
  group_by(user_type, start_station_name) %>% 
  summarise(total_rides = n(), .groups = 'drop') %>%
  arrange(desc(total_rides)) %>% 
  head(20)

top_start_member
# A tibble: 20 × 3
   user_type start_station_name                 total_rides
   <chr>     <chr>                                    <int>
 1 member    Clark St & Elm St                        23532
 2 member    Wells St & Concord Ln                    20947
 3 member    Kingsbury St & Kinzie St                 20191
 4 member    Wells St & Elm St                        19067
 5 member    Dearborn St & Erie St                    18145
 6 member    Wells St & Huron St                      17600
 7 member    DuSable Lake Shore Dr & North Blvd       17590
 8 member    Broadway & Barry Ave                     17545
 9 member    St. Clair St & Erie St                   17486
10 member    Theater on the Lake                      16401
11 member    Clark St & Armitage Ave                  16123
12 member    Desplaines St & Kinzie St                15820
13 member    Clark St & Lincoln Ave                   15261
14 member    Wabash Ave & Grand Ave                   14926
15 member    Streeter Dr & Grand Ave                  14458
16 member    Larrabee St & Webster Ave                13948
17 member    Columbus Dr & Randolph St                13942
18 member    Clinton St & Madison St                  13502
19 member    Green St & Madison St                    13421
20 member    Dearborn Pkwy & Delaware Pl              13389

I’m going to bind the top_start_casual and top_start_member dataframe and join coordinates from the divvy_stations dataframe.

top_start_stations <- bind_rows(top_start_casual, top_start_member) %>% 
  left_join(divvy_stations, by = c("start_station_name" = "station_name")) %>% 
  select(user_type, start_station_name, total_rides, latitude, longitude)

knitr::kable(top_start_stations %>% head())
user_type start_station_name total_rides latitude longitude
casual Streeter Dr & Grand Ave 55539 41.89228 -87.61204
casual DuSable Lake Shore Dr & Monroe St 33604 41.88096 -87.61674
casual Millennium Park 30505 41.88103 -87.62408
casual Michigan Ave & Oak St 27212 41.90096 -87.62378
casual DuSable Lake Shore Dr & North Blvd 26677 41.91172 -87.62680
casual Theater on the Lake 21516 41.92628 -87.63083
# creating a new variable to distinguish stations by number of rides
top_start_stations <- top_start_stations %>% 
  mutate(circle_size = case_when(total_rides>10000 & total_rides<=20000 ~ 6,
                                 total_rides>20000 & total_rides<=30000 ~ 7,
                                 total_rides>30000 & total_rides<=40000 ~ 8,
                                 total_rides>40000 & total_rides<=50000 ~ 9,
                                 TRUE ~ 10))

# subsetting top stations for casuals and members
casual <- top_start_stations %>% 
  filter(user_type == "casual")

member <- top_start_stations %>% 
  filter(user_type == "member")

# Creating a color palette
mypalette <- colorFactor(my_colors, domain = top_start_stations$user_type)

# Preparing the text for the tooltip
mytext_cas <- paste(
   "Station: ", casual$start_station_name, "<br/>", 
   "User type: ", casual$user_type, "<br/>", 
   "Total rides: ", casual$total_rides, sep="") %>%
  lapply(htmltools::HTML)

mytext_mem <- paste(
   "Station: ", member$start_station_name, "<br/>", 
   "User type: ", member$user_type, "<br/>", 
   "Total rides: ", member$total_rides, sep="") %>%
  lapply(htmltools::HTML)

# final map
leaflet(top_start_stations) %>% 
  addProviderTiles("CartoDB")  %>% 
  addCircleMarkers(data = casual,
                   fillColor = ~mypalette(user_type), 
                   fillOpacity = 0.7, 
                   color = "white", 
                   radius = ~circle_size, 
                   stroke = FALSE,
                   label = mytext_cas,
                   labelOptions = labelOptions(style = list("font-weight"="normal", 
                padding = "3px 8px"), textsize = "12px", direction = "auto"),
                   group = "casual") %>%
  addCircleMarkers(data = member,
                   fillColor = ~mypalette(user_type), 
                   fillOpacity = 0.7, 
                   color = "white", 
                   radius = ~circle_size, 
                   stroke = FALSE,
                   label = mytext_mem,
                   labelOptions = labelOptions(style = list("font-weight"="normal", 
                padding = "3px 8px"), textsize = "12px", direction = "auto"),
                   group = "member") %>%
  addLegend(pal = mypalette, 
            values = ~user_type, 
            opacity = 0.7, 
            title = "User type", 
            position = "bottomright" ) %>% 
  addLayersControl(overlayGroups = c("casual", "member"),
                   options = layersControlOptions(collapsed = FALSE)) %>% 
  leaflet.extras::addResetMapButton()

Most popular stations for casual riders are Millennium Park and those located along the DuSable Lake Shore Drive. These are all localities for entertainment and leisure activities, which is indicative of the main purpose of these rides.

Most popular stations for members are located nearby or inside the business district, which is indicative of the main purpose of these rides (commuting to work or school, running errands, getting to appointments, and similar).

Note: Most popular starting and destination stations for both casuals and members don’t differ much.

PART V: Act

Casual riders can be locals or visitors (tourists). With our new marketing campaign we should target only locals since there is little chance that visitors would buy annual membership. Unfortunately, there is no way to distinguish locals from visitors in the group of casual riders and this is the main problem with this dataset. For now, I will have to settle for the data I currently have.

My top three recommendations for the new marketing strategy aimed at converting casual riders into annual members:

1. Conduct the marketing campaign during the summer months (June, July, August), mostly on weekends in the afternoon, but also on weekdays around 5pm.

2. Use the fact that casual riders tend to ride 12+ minutes longer than annual members.

3. Act in the areas of stations which are most popular with casual riders.

Thank you for reaching the end of this project! 😉

If you’d like, you can also check my dashboard in Tableau Public.