To run this notebook, in your Midterm R Project run the R script first to create the lyftbaywheels dataframe for 2019 and 2020..
Note that the script saves the dataframe to an .Rds, .csv, .feather file in the data_final subdirectory. This can be read into the Global Environment where you answer the questions from the Midterm.
Read the data into the Global Environment so the R Notebook will Preview and Knit.
library(pacman)
p_load(tidyverse, tictoc, feather, naniar, DataExplorer)
Try running your data wrangling R script. Or try using the Source > Source as Local Job …
What is the advantage of using the source() function to run your R script separately?
Only need to run this once. So after you have created a .Rds file you do not need to run this again. So note the eval=FALSE., this prevents the knit from running this R code chunck when knitting your R Notebook
source('lyftbaywheels01-update2020-ver03.R')
Test out some different ways to read a dataframe to the harddrive. The winner is feather!
tic()
lyftbaywheels1 <- readRDS("data_final/lyftbaywheels_final.Rds")
toc()
3.42 sec elapsed
tic()
lyftbaywheels2 <- read_feather("data_final/lyftbaywheels_final.feather")
toc()
0.954 sec elapsed
Your solution to the Midterm should show you have “come up to speed” on the current project of working with and analyzing the LyftBayWheels data.
Answers to the questions:
1. Explain what the GBFS is?
Answer: GBFS stands for General Bikeshare Feed Specification, a standardized data feed for bike share system availability. It is maintained by the North American Bike Share Association.
2. Explain any difficulties you encountered getting the code to work.
Answer: The answer to this question varies.
I have had many difficulties working with the FordGoBike data. My difficulties started with the errors I was receiving the the start_id and end_id variables not being read in correctly with the red_csv(). Figuring out the type conflict took some effort to find this problem. Learning to convert type of columns was a learning experience. Dealing with the day of the week variable was another difficulty. Getting the day of the week was possible with the day() function, but then realizing this is the number for the calendar month, this was not useful. Then discovering the wday() function was very useful, but the label option was necessary to convert to M, Tues, W, Th, F values.
Other difficulties:
a. Running out of memory on their computer. The main way to deal with this is to reduce the amount of data imported. So maybe working with on May, June, July 2018 data, rather than working with all of the data. b. Dealing with the missing data. Wlyftbaywheels1hen replacing the age values greater than 100 may change the type of variable to char and then it needs to be returned to integer. c. There were some mistakes in the code. For example, when fixing the type problems with the June, July, August 2018 data files there was a mistake with the end_station_id be assigned the start_station_id. d. libcurl on Windows.
3. The analysis is to work with the data since Lyft BayWheels started, start with the data since May 2019. Modify the code to download the data to be analyzed. How many bike rentals have there been before the COVID-19 lockdown in CA? How many bike rentals were there been after the lockdown? How many bike rentals have there been since the beginning of Lyft BayWheels?
Answer: See the R script that contains the data wrangling steps.
lyftbaywheels1 %>% count()
4. There is a part of the code that uses the as.integer() function for some reason. Explain what this function is being used for in the code.
Answer: The as.integer() function is used in the fordgobike01.Rmd code to change the type of variable, for start_station_id and end_station_id, in the June, July, August 2018 dataframes from char to integer values, which are what they are in the earlier dataframes.
Note that the read_bulk function from the readbulk R package does not have this problem.
5. In 2020, what month had the highest number of riders? What month had the lowest number of riders? Interpret any seasonal patterns.
Answer: The Age variable is created using this code:
lyftbaywheels1 %>% head()
### 6. What start station had the highest number of rides? That is, which start station was used most to start rides?
Answer: July had the highest number of riders. January had the lowest. There seems to be more riders in the summer than in the winter. This is from the number of records/observations/rows. See plot below.
lyftbaywheels1 %>% ggplot(aes(x=as.factor(month))) + geom_bar() + facet_grid(year ~ .)

7. Using the Amelia R package and the missmap() function determine the rate of missing data in the month of June 2020. Or try the visdat package and the vis_miss() function. Or check out the the naniar R package. (This might not work on your computer if you have too little RAM.) If you cannot get your code to run, sample the data first.
Answer: Write your answer.
lyftbaywheels1 %>% select(start_station_id, start_station_name) %>%
count(start_station_id, start_station_name) %>%
arrange(desc(n))
8. What Type of rider uses the Lyft BayWheels more? Subscribers or Customers?
Answer: Calculations are after the tables.
Age:
Mean age by gender:
lyftbaywheels1 %>% head()
LS0tCnRpdGxlOiAiU3RhdC4gNjUwIC0gTWlkdGVybSBTb2x1dGlvbiIKYXV0aG9yOiAiRXJpYyBBLiBTdWVzcyIKZGF0ZTogJzIwMjAtMDktMTYnCm91dHB1dDoKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KClRvIHJ1biB0aGlzIG5vdGVib29rLCBpbiB5b3VyIE1pZHRlcm0gUiBQcm9qZWN0IHJ1biB0aGUgUiBzY3JpcHQgZmlyc3QgdG8gY3JlYXRlIHRoZSBseWZ0YmF5d2hlZWxzIGRhdGFmcmFtZSBmb3IgMjAxOSBhbmQgMjAyMC4uCgpOb3RlIHRoYXQgdGhlIHNjcmlwdCBzYXZlcyB0aGUgZGF0YWZyYW1lIHRvIGFuIC5SZHMsIC5jc3YsIC5mZWF0aGVyIGZpbGUgaW4gdGhlICpkYXRhX2ZpbmFsKiBzdWJkaXJlY3RvcnkuICBUaGlzIGNhbiBiZSByZWFkIGludG8gdGhlIEdsb2JhbCBFbnZpcm9ubWVudCB3aGVyZSB5b3UgYW5zd2VyIHRoZSBxdWVzdGlvbnMgZnJvbSB0aGUgTWlkdGVybS4KClJlYWQgdGhlIGRhdGEgaW50byB0aGUgR2xvYmFsIEVudmlyb25tZW50IHNvIHRoZSBSIE5vdGVib29rIHdpbGwgUHJldmlldyBhbmQgS25pdC4KCmBgYHtyfQpsaWJyYXJ5KHBhY21hbikKCnBfbG9hZCh0aWR5dmVyc2UsIHRpY3RvYywgYXJyb3csIG5hbmlhciwgRGF0YUV4cGxvcmVyKQpgYGAKClRyeSBydW5uaW5nIHlvdXIgZGF0YSB3cmFuZ2xpbmcgUiBzY3JpcHQuICBPciB0cnkgdXNpbmcgdGhlIFNvdXJjZSA+IFNvdXJjZSBhcyBMb2NhbCBKb2IgLi4uCgpXaGF0IGlzIHRoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgdGhlIHNvdXJjZSgpIGZ1bmN0aW9uIHRvIHJ1biB5b3VyIFIgc2NyaXB0IHNlcGFyYXRlbHk/CgpPbmx5IG5lZWQgdG8gcnVuIHRoaXMgb25jZS4gU28gYWZ0ZXIgeW91IGhhdmUgY3JlYXRlZCBhIC5SZHMgZmlsZSB5b3UgZG8gbm90IG5lZWQgdG8gcnVuIHRoaXMgYWdhaW4uICBTbyBub3RlIHRoZSBldmFsPUZBTFNFLiwgdGhpcyBwcmV2ZW50cyB0aGUga25pdCBmcm9tIHJ1bm5pbmcgdGhpcyBSIGNvZGUgY2h1bmNrIHdoZW4ga25pdHRpbmcgeW91ciBSIE5vdGVib29rCgpgYGB7ciwgZXZhbD1GQUxTRX0Kc291cmNlKCdseWZ0YmF5d2hlZWxzMDEtdXBkYXRlMjAyMC12ZXIwMy5SJykKYGBgCgpUZXN0IG91dCBzb21lIGRpZmZlcmVudCB3YXlzIHRvIHJlYWQgYSBkYXRhZnJhbWUgdG8gdGhlIGhhcmRkcml2ZS4gIFRoZSB3aW5uZXIgaXMgZmVhdGhlciEKCmBgYHtyfQp0aWMoKQpseWZ0YmF5d2hlZWxzMSA8LSByZWFkUkRTKCJkYXRhX2ZpbmFsL2x5ZnRiYXl3aGVlbHNfZmluYWwuUmRzIikKdG9jKCkKCmBgYAoKYGBge3J9CnRpYygpCmx5ZnRiYXl3aGVlbHMyIDwtIHJlYWRfZmVhdGhlcigiZGF0YV9maW5hbC9seWZ0YmF5d2hlZWxzX2ZpbmFsLmZlYXRoZXIiKQp0b2MoKQpgYGAKCllvdXIgc29sdXRpb24gdG8gdGhlIE1pZHRlcm0gc2hvdWxkIHNob3cgeW91IGhhdmUgImNvbWUgdXAgdG8gc3BlZWQiIG9uIHRoZSBjdXJyZW50IHByb2plY3Qgb2Ygd29ya2luZyB3aXRoIGFuZCBhbmFseXppbmcgdGhlIEx5ZnRCYXlXaGVlbHMgZGF0YS4KCiMjIEFuc3dlcnMgdG8gdGhlIHF1ZXN0aW9uczoKCiMjIyAxLiBFeHBsYWluIHdoYXQgdGhlIEdCRlMgaXM/CgoqKkFuc3dlcjoqKiBHQkZTIHN0YW5kcyBmb3IgR2VuZXJhbCBCaWtlc2hhcmUgRmVlZCBTcGVjaWZpY2F0aW9uLCBhIHN0YW5kYXJkaXplZCBkYXRhIGZlZWQgZm9yIGJpa2Ugc2hhcmUgc3lzdGVtIGF2YWlsYWJpbGl0eS4gIEl0IGlzIG1haW50YWluZWQgYnkgdGhlIFtOb3J0aCBBbWVyaWNhbiBCaWtlIFNoYXJlIEFzc29jaWF0aW9uXShodHRwOi8vd3d3Lm5hYnNhLm5ldCkuCgojIyMgMi4gRXhwbGFpbiBhbnkgZGlmZmljdWx0aWVzIHlvdSBlbmNvdW50ZXJlZCBnZXR0aW5nIHRoZSBjb2RlIHRvIHdvcmsuCgoqKkFuc3dlcjoqKiBUaGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gdmFyaWVzLgoKSSBoYXZlIGhhZCBtYW55IGRpZmZpY3VsdGllcyB3b3JraW5nIHdpdGggdGhlIEZvcmRHb0Jpa2UgZGF0YS4gIE15IGRpZmZpY3VsdGllcyBzdGFydGVkIHdpdGggdGhlIGVycm9ycyBJIHdhcyByZWNlaXZpbmcgdGhlIHRoZSBzdGFydF9pZCBhbmQgZW5kX2lkIHZhcmlhYmxlcyBub3QgYmVpbmcgcmVhZCBpbiBjb3JyZWN0bHkgd2l0aCB0aGUgcmVkX2NzdigpLiAgRmlndXJpbmcgb3V0IHRoZSB0eXBlIGNvbmZsaWN0IHRvb2sgc29tZSBlZmZvcnQgdG8gZmluZCB0aGlzIHByb2JsZW0uICBMZWFybmluZyB0byBjb252ZXJ0IHR5cGUgb2YgY29sdW1ucyB3YXMgYSBsZWFybmluZyBleHBlcmllbmNlLiAgRGVhbGluZyB3aXRoIHRoZSBkYXkgb2YgdGhlIHdlZWsgdmFyaWFibGUgd2FzIGFub3RoZXIgZGlmZmljdWx0eS4gIEdldHRpbmcgdGhlIGRheSBvZiB0aGUgd2VlayB3YXMgcG9zc2libGUgd2l0aCB0aGUgZGF5KCkgZnVuY3Rpb24sIGJ1dCB0aGVuIHJlYWxpemluZyB0aGlzIGlzIHRoZSBudW1iZXIgZm9yIHRoZSBjYWxlbmRhciBtb250aCwgdGhpcyB3YXMgbm90IHVzZWZ1bC4gIFRoZW4gZGlzY292ZXJpbmcgdGhlIHdkYXkoKSBmdW5jdGlvbiB3YXMgdmVyeSB1c2VmdWwsIGJ1dCB0aGUgbGFiZWwgb3B0aW9uIHdhcyBuZWNlc3NhcnkgdG8gY29udmVydCB0byBNLCBUdWVzLCBXLCBUaCwgRiB2YWx1ZXMuCgpPdGhlciBkaWZmaWN1bHRpZXM6ICAKICAgIGEuIFJ1bm5pbmcgb3V0IG9mIG1lbW9yeSBvbiB0aGVpciBjb21wdXRlci4gIFRoZSBtYWluIHdheSB0byBkZWFsIHdpdGggdGhpcyBpcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBkYXRhIGltcG9ydGVkLiAgU28gbWF5YmUgd29ya2luZyB3aXRoIG9uIE1heSwgSnVuZSwgSnVseSAyMDE4IGRhdGEsIHJhdGhlciB0aGFuIHdvcmtpbmcgd2l0aCBhbGwgb2YgdGhlIGRhdGEuCiAgICBiLiBEZWFsaW5nIHdpdGggdGhlIG1pc3NpbmcgZGF0YS4gIFdseWZ0YmF5d2hlZWxzMWhlbiByZXBsYWNpbmcgdGhlIGFnZSB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEwMCBtYXkgY2hhbmdlIHRoZSB0eXBlIG9mIHZhcmlhYmxlIHRvIGNoYXIgYW5kIHRoZW4gaXQgbmVlZHMgdG8gYmUgcmV0dXJuZWQgdG8gaW50ZWdlci4KICAgIGMuIFRoZXJlIHdlcmUgc29tZSBtaXN0YWtlcyBpbiB0aGUgY29kZS4gIEZvciBleGFtcGxlLCB3aGVuIGZpeGluZyB0aGUgdHlwZSBwcm9ibGVtcyB3aXRoIHRoZSBKdW5lLCBKdWx5LCBBdWd1c3QgMjAxOCBkYXRhIGZpbGVzIHRoZXJlIHdhcyBhIG1pc3Rha2Ugd2l0aCB0aGUgZW5kX3N0YXRpb25faWQgYmUgYXNzaWduZWQgdGhlIHN0YXJ0X3N0YXRpb25faWQuCiAgICBkLiBsaWJjdXJsIG9uIFdpbmRvd3MuCgojIyMgMy4gVGhlIGFuYWx5c2lzIGlzIHRvIHdvcmsgd2l0aCB0aGUgZGF0YSBzaW5jZSBMeWZ0IEJheVdoZWVscyBzdGFydGVkLCBzdGFydCB3aXRoIHRoZSBkYXRhIHNpbmNlIE1heSAyMDE5LiBNb2RpZnkgdGhlIGNvZGUgdG8gZG93bmxvYWQgdGhlIGRhdGEgdG8gYmUgYW5hbHl6ZWQuIEhvdyBtYW55IGJpa2UgcmVudGFscyBoYXZlIHRoZXJlIGJlZW4gYmVmb3JlIHRoZSBDT1ZJRC0xOSBsb2NrZG93biBpbiBDQT8gSG93IG1hbnkgYmlrZSByZW50YWxzIHdlcmUgdGhlcmUgYmVlbiBhZnRlciB0aGUgbG9ja2Rvd24/IEhvdyBtYW55IGJpa2UgcmVudGFscyBoYXZlIHRoZXJlIGJlZW4gc2luY2UgdGhlIGJlZ2lubmluZyBvZiBMeWZ0IEJheVdoZWVscz8KCioqQW5zd2VyOioqICBTZWUgdGhlIFIgc2NyaXB0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgd3JhbmdsaW5nIHN0ZXBzLgoKIEJlZm9yZSBDT1ZJRC0xOSAgICAgfCA/ICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSAKIEFmdGVyIENPVklELTE5ICAgICAgfCAzLDIyOSwxNzcJICAgCiAKIApgYGB7cn0KbHlmdGJheXdoZWVsczEgJT4lIGNvdW50KCkKYGBgCiAKCiMjIyA0LiBUaGVyZSBpcyBhIHBhcnQgb2YgdGhlIGNvZGUgdGhhdCB1c2VzIHRoZSBhcy5pbnRlZ2VyKCkgZnVuY3Rpb24gZm9yIHNvbWUgcmVhc29uLiBFeHBsYWluIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIGZvciBpbiB0aGUgY29kZS4KICAgIAoqKkFuc3dlcjoqKiBUaGUgYXMuaW50ZWdlcigpIGZ1bmN0aW9uIGlzIHVzZWQgaW4gdGhlIGZvcmRnb2Jpa2UwMS5SbWQgY29kZSB0byBjaGFuZ2UgdGhlIHR5cGUgb2YgdmFyaWFibGUsIGZvciBzdGFydF9zdGF0aW9uX2lkIGFuZCBlbmRfc3RhdGlvbl9pZCwgaW4gdGhlIEp1bmUsIEp1bHksIEF1Z3VzdCAyMDE4IGRhdGFmcmFtZXMgZnJvbSAqY2hhciogdG8gKmludGVnZXIqIHZhbHVlcywgd2hpY2ggYXJlIHdoYXQgdGhleSBhcmUgaW4gdGhlIGVhcmxpZXIgZGF0YWZyYW1lcy4KCk5vdGUgdGhhdCB0aGUgcmVhZF9idWxrIGZ1bmN0aW9uIGZyb20gdGhlIHJlYWRidWxrIFIgcGFja2FnZSBkb2VzIG5vdCBoYXZlIHRoaXMgcHJvYmxlbS4KICAgIAojIyMgNS4gSW4gMjAyMCwgd2hhdCBtb250aCBoYWQgdGhlIGhpZ2hlc3QgbnVtYmVyIG9mIHJpZGVycz8gV2hhdCBtb250aCBoYWQgdGhlIGxvd2VzdCBudW1iZXIgb2YgcmlkZXJzPyBJbnRlcnByZXQgYW55IHNlYXNvbmFsIHBhdHRlcm5zLgoKKipBbnN3ZXI6KiogIFRoZSBBZ2UgdmFyaWFibGUgaXMgY3JlYXRlZCB1c2luZyB0aGlzIGNvZGU6CgogaGlnaGVzdCAgICAgfCA/ICAgICAgICAKLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gCiBsb3dlc3QgICAgICB8ID8gIAogCmBgYHtyfQpseWZ0YmF5d2hlZWxzMSAlPiUgaGVhZCgpCmBgYAogCiAjIyMgNi4gV2hhdCBzdGFydCBzdGF0aW9uIGhhZCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgcmlkZXM/IFRoYXQgaXMsIHdoaWNoIHN0YXJ0IHN0YXRpb24gd2FzIHVzZWQgbW9zdCB0byBzdGFydCByaWRlcz8KCioqQW5zd2VyOioqICoqSnVseSoqIGhhZCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgcmlkZXJzLiAgKipKYW51YXJ5KiogaGFkIHRoZSBsb3dlc3QuICBUaGVyZSBzZWVtcyB0byBiZSBtb3JlIHJpZGVycyBpbiB0aGUgc3VtbWVyIHRoYW4gaW4gdGhlIHdpbnRlci4gIFRoaXMgaXMgZnJvbSB0aGUgbnVtYmVyIG9mIHJlY29yZHMvb2JzZXJ2YXRpb25zL3Jvd3MuICBTZWUgcGxvdCBiZWxvdy4KCmBgYHtyfQpseWZ0YmF5d2hlZWxzMSAlPiUgZ2dwbG90KGFlcyh4PWFzLmZhY3Rvcihtb250aCkpKSArIGdlb21fYmFyKCkgKyBmYWNldF9ncmlkKHllYXIgfiAuKQpgYGAKCiMjIyA3LiBVc2luZyB0aGUgQW1lbGlhIFIgcGFja2FnZSBhbmQgdGhlIG1pc3NtYXAoKSBmdW5jdGlvbiBkZXRlcm1pbmUgdGhlIHJhdGUgb2YgbWlzc2luZyBkYXRhIGluIHRoZSBtb250aCBvZiBKdW5lIDIwMjAuIE9yIHRyeSB0aGUgdmlzZGF0IHBhY2thZ2UgYW5kIHRoZSB2aXNfbWlzcygpIGZ1bmN0aW9uLiBPciBjaGVjayBvdXQgdGhlIHRoZSBuYW5pYXIgUiBwYWNrYWdlLiAoVGhpcyBtaWdodCBub3Qgd29yayBvbiB5b3VyIGNvbXB1dGVyIGlmIHlvdSBoYXZlIHRvbyBsaXR0bGUgUkFNLikgSWYgeW91IGNhbm5vdCBnZXQgeW91ciBjb2RlIHRvIHJ1biwgc2FtcGxlIHRoZSBkYXRhIGZpcnN0LgoKKipBbnN3ZXI6KiogV3JpdGUgeW91ciBhbnN3ZXIuCgpgYGB7cn0KbHlmdGJheXdoZWVsczEgJT4lIHNlbGVjdChzdGFydF9zdGF0aW9uX2lkLCBzdGFydF9zdGF0aW9uX25hbWUpICU+JQogIGNvdW50KHN0YXJ0X3N0YXRpb25faWQsIHN0YXJ0X3N0YXRpb25fbmFtZSkgJT4lCiAgYXJyYW5nZShkZXNjKG4pKQpgYGAKCiMjIyA4LiBXaGF0IFR5cGUgb2YgcmlkZXIgdXNlcyB0aGUgTHlmdCBCYXlXaGVlbHMgbW9yZT8gU3Vic2NyaWJlcnMgb3IgQ3VzdG9tZXJzPwoKKipBbnN3ZXI6KiogIENhbGN1bGF0aW9ucyBhcmUgYWZ0ZXIgdGhlIHRhYmxlcy4KCioqQWdlOioqIAoKTWluICB8ICBNYXggIHwgIE1lYW4KLS0tLSB8IC0tLS0tIHwgLS0tLS0KMTggICB8ICA5OSAgIHwgIDM3LjEzCgoqKk1lYW4gYWdlIGJ5IGdlbmRlcjoqKgoKRmVtYWxlICAgfCAgTWFsZSAgfCBPdGhlcgotLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tCjM1LjcgICAgIHwgMzcuNTggIHwgMzcuMTEKCgpgYGB7cn0KbHlmdGJheXdoZWVsczEgJT4lIGhlYWQoKQpgYGAKCgoKCg==