In this notebook I download and unzip the Ford Go Bike data.

library(tidyverse)
library(tictoc)
library(ggmap)
library(skimr)
library(lubridate)
library(forcats)
library(kableExtra)

Set working directory.

setwd("~/GitHub/Stat6620/fordgobike")

Create a directory /data in your directory. Download the files. First one is not zipped, the remaining are zipped.

URL <- "https://s3.amazonaws.com/fordgobike-data/2017-fordgobike-tripdata.csv"
download.file(URL, destfile = "./data/2017-fordgobike-tripdata.csv", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0  112M    0  169k    0     0   169k      0  0:11:19  0:00:01  0:11:18  162k
  0  112M    0 1002k    0     0   501k      0  0:03:49  0:00:02  0:03:47  489k
  2  112M    2 2362k    0     0   787k      0  0:02:26  0:00:03  0:02:23  775k
  4  112M    4 4759k    0     0  1189k      0  0:01:36  0:00:04  0:01:32 1176k
  7  112M    7 8736k    0     0  1747k      0  0:01:05  0:00:05  0:01:00 1769k
 12  112M   12 13.9M    0     0  2385k      0  0:00:48  0:00:06  0:00:42 2828k
 18  112M   18 20.9M    0     0  3066k      0  0:00:37  0:00:07  0:00:30 4092k
 26  112M   26 29.8M    0     0  3827k      0  0:00:30  0:00:08  0:00:22 5650k
 35  112M   35 40.4M    0     0  4607k      0  0:00:25  0:00:09  0:00:16 7341k
 46  112M   46 52.7M    0     0  5404k      0  0:00:21  0:00:10  0:00:11 9060k
 59  112M   59 66.5M    0     0  6197k      0  0:00:18  0:00:11  0:00:07 10.5M
 72  112M   72 81.7M    0     0  6979k      0  0:00:16  0:00:12  0:00:04 12.1M
 87  112M   87 98.9M    0     0  7796k      0  0:00:14  0:00:13  0:00:01 13.8M
100  112M  100  112M    0     0  8861k      0  0:00:13  0:00:13 --:--:-- 15.1M
URL <- "https://s3.amazonaws.com/fordgobike-data/201801-fordgobike-tripdata.csv.zip"
download.file(URL, destfile = "./data/201801-fordgobike-tripdata.csv.zip", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  8 3251k    8  288k    0     0   288k      0  0:00:11  0:00:01  0:00:10  260k
 50 3251k   50 1631k    0     0   815k      0  0:00:03  0:00:02  0:00:01  773k
100 3251k  100 3251k    0     0  1625k      0  0:00:02  0:00:02 --:--:-- 1136k
URL <- "https://s3.amazonaws.com/fordgobike-data/201802-fordgobike-tripdata.csv.zip"
download.file(URL, destfile = "./data/201802-fordgobike-tripdata.csv.zip", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  6 3698k    6  237k    0     0   237k      0  0:00:15  0:00:01  0:00:14  226k
 56 3698k   56 2073k    0     0  1036k      0  0:00:03  0:00:02  0:00:01 1013k
100 3698k  100 3698k    0     0  1849k      0  0:00:02  0:00:02 --:--:-- 1498k
URL <- "https://s3.amazonaws.com/fordgobike-data/201803-fordgobike-tripdata.csv.zip"
download.file(URL, destfile = "./data/201803-fordgobike-tripdata.csv.zip", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0 3901k    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
 16 3901k   16  662k    0     0   662k      0  0:00:05  0:00:01  0:00:04  476k
 91 3901k   91 3551k    0     0  1775k      0  0:00:02  0:00:02 --:--:-- 1485k
100 3901k  100 3901k    0     0  1950k      0  0:00:02  0:00:02 --:--:-- 1600k
URL <- "https://s3.amazonaws.com/fordgobike-data/201804-fordgobike-tripdata.csv.zip"
download.file(URL, destfile = "./data/201804-fordgobike-tripdata.csv.zip", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  2 4613k    2  101k    0     0   101k      0  0:00:45 --:--:--  0:00:45  125k
 26 4613k   26 1240k    0     0  1240k      0  0:00:03  0:00:01  0:00:02  696k
100 4613k  100 4613k    0     0  2306k      0  0:00:02  0:00:02 --:--:-- 1677k
URL <- "https://s3.amazonaws.com/fordgobike-data/201805-fordgobike-tripdata.csv.zip"
download.file(URL, destfile = "./data/201805-fordgobike-tripdata.csv.zip", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  1 6269k    1 86674    0     0  86674      0  0:01:14 --:--:--  0:01:14   98k
 18 6269k   18 1138k    0     0  1138k      0  0:00:05  0:00:01  0:00:04  612k
 73 6269k   73 4588k    0     0  2294k      0  0:00:02  0:00:02 --:--:-- 1604k
100 6269k  100 6269k    0     0  2089k      0  0:00:03  0:00:03 --:--:-- 1995k
URL <- "https://s3.amazonaws.com/fordgobike-data/201806-fordgobike-tripdata.csv.zip"
download.file(URL, destfile = "./data/201806-fordgobike-tripdata.csv.zip", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0 6901k    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  9 6901k    9  628k    0     0   628k      0  0:00:10  0:00:01  0:00:09  478k
 39 6901k   39 2753k    0     0  1376k      0  0:00:05  0:00:02  0:00:03 1190k
 94 6901k   94 6527k    0     0  2175k      0  0:00:03  0:00:03 --:--:-- 1970k
100 6901k  100 6901k    0     0  2300k      0  0:00:03  0:00:03 --:--:-- 2035k
URL <- "https://s3.amazonaws.com/fordgobike-data/201807-fordgobike-tripdata.csv.zip"
download.file(URL, destfile = "./data/201807-fordgobike-tripdata.csv.zip", method="curl")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0 7057k    0 17042    0     0  17042      0  0:07:04 --:--:--  0:07:04 30269
 12 7057k   12  866k    0     0   866k      0  0:00:08  0:00:01  0:00:07  565k
 54 7057k   54 3824k    0     0  1912k      0  0:00:03  0:00:02  0:00:01 1510k
100 7057k  100 7057k    0     0  2352k      0  0:00:03  0:00:03 --:--:-- 2280k

Loop over the one value in the url and filename that changes.

URL <- "https://s3.amazonaws.com/fordgobike-data/2017-fordgobike-tripdata.csv"
download.file(URL, destfile = "./data/2017-fordgobike-tripdata.csv", method="curl")

for (i in 1:7) {
URL <- paste0("https://s3.amazonaws.com/fordgobike-data/20180",i,"-fordgobike-tripdata.csv.zip")
download.file(URL, destfile = paste0("./data/20180",i,"-fordgobike-tripdata.csv.zip"), method="curl")
}

Unzip downloaded files.

unzip("./data/201801-fordgobike-tripdata.csv.zip",exdir="./data")
unzip("./data/201802-fordgobike-tripdata.csv.zip",exdir="./data")
unzip("./data/201803-fordgobike-tripdata.csv.zip",exdir="./data")
unzip("./data/201804-fordgobike-tripdata.csv.zip",exdir="./data")
unzip("./data/201805-fordgobike-tripdata.csv.zip",exdir="./data")
unzip("./data/201806-fordgobike-tripdata.csv.zip",exdir="./data")
unzip("./data/201807-fordgobike-tripdata.csv.zip",exdir="./data")

Clean up data directory.

fn <- "./data/201801-fordgobike-tripdata.csv.zip"
if (file.exists(fn)) file.remove(fn)
[1] TRUE
fn <- "./data/201802-fordgobike-tripdata.csv.zip"
if (file.exists(fn)) file.remove(fn)
[1] TRUE
fn <- "./data/201803-fordgobike-tripdata.csv.zip"
if (file.exists(fn)) file.remove(fn)
[1] TRUE
fn <- "./data/201804-fordgobike-tripdata.csv.zip"
if (file.exists(fn)) file.remove(fn)
[1] TRUE
fn <- "./data/201805-fordgobike-tripdata.csv.zip"
if (file.exists(fn)) file.remove(fn)
[1] TRUE
fn <- "./data/201806-fordgobike-tripdata.csv.zip"
if (file.exists(fn)) file.remove(fn)
[1] TRUE
fn <- "./data/201807-fordgobike-tripdata.csv.zip"
if (file.exists(fn)) file.remove(fn)
[1] TRUE

Read the.csv files

fordgobike2017 <- read_csv(file="./data/2017-fordgobike-tripdata.csv")
fordgobike201801 <- read_csv(file="./data/201801-fordgobike-tripdata.csv")
fordgobike201802 <- read_csv(file="./data/201802-fordgobike-tripdata.csv")
fordgobike201803 <- read_csv(file="./data/201803-fordgobike-tripdata.csv")

|==                                                                                          |   2%
|==                                                                                          |   2%
|===                                                                                         |   3%
|===                                                                                         |   3%
|===                                                                                 |   4%    1 MB
|====                                                                                |   5%    1 MB
|====                                                                                |   5%    1 MB
|=====                                                                               |   6%    1 MB
|=====                                                                               |   6%    1 MB
|======                                                                              |   7%    1 MB
|======                                                                              |   7%    1 MB
|=======                                                                             |   8%    1 MB
|=======                                                                             |   8%    2 MB
|========                                                                            |   9%    2 MB
|========                                                                            |  10%    2 MB
|=========                                                                           |  10%    2 MB
|=========                                                                           |  11%    2 MB
|==========                                                                          |  11%    2 MB
|==========                                                                          |  12%    2 MB
|==========                                                                          |  12%    2 MB
|===========                                                                         |  13%    3 MB
|===========                                                                         |  14%    3 MB
|============                                                                        |  14%    3 MB
|============                                                                        |  15%    3 MB
|=============                                                                       |  15%    3 MB
|=============                                                                       |  16%    3 MB
|==============                                                                      |  16%    3 MB
|==============                                                                      |  17%    3 MB
|===============                                                                     |  17%    4 MB
|===============                                                                     |  18%    4 MB
|================                                                                    |  19%    4 MB
|================                                                                    |  19%    4 MB
|=================                                                                   |  20%    4 MB
|=================                                                                   |  20%    4 MB
|==================                                                                  |  21%    4 MB
|==================                                                                  |  21%    4 MB
|===================                                                                 |  22%    5 MB
|===================                                                                 |  23%    5 MB
|====================                                                                |  23%    5 MB
|====================                                                                |  24%    5 MB
|=====================                                                               |  24%    5 MB
|=====================                                                               |  25%    5 MB
|=====================                                                               |  25%    5 MB
|======================                                                              |  26%    5 MB
|======================                                                              |  26%    6 MB
|=======================                                                             |  27%    6 MB
|=======================                                                             |  28%    6 MB
|========================                                                            |  28%    6 MB
|========================                                                            |  29%    6 MB
|=========================                                                           |  29%    6 MB
|=========================                                                           |  30%    6 MB
|==========================                                                          |  30%    7 MB
|==========================                                                          |  31%    7 MB
|===========================                                                         |  32%    7 MB
|===========================                                                         |  32%    7 MB
|============================                                                        |  33%    7 MB
|============================                                                        |  33%    7 MB
|=============================                                                       |  34%    7 MB
|=============================                                                       |  34%    7 MB
|==============================                                                      |  35%    8 MB
|==============================                                                      |  35%    8 MB
|===============================                                                     |  36%    8 MB
|===============================                                                     |  37%    8 MB
|================================                                                    |  37%    8 MB
|================================                                                    |  38%    8 MB
|================================                                                    |  38%    8 MB
|=================================                                                   |  39%    8 MB
|=================================                                                   |  39%    9 MB
|==================================                                                  |  40%    9 MB
|==================================                                                  |  41%    9 MB
|===================================                                                 |  41%    9 MB
|===================================                                                 |  42%    9 MB
|====================================                                                |  42%    9 MB
|====================================                                                |  43%    9 MB
|=====================================                                               |  43%    9 MB
|=====================================                                               |  44%   10 MB
|======================================                                              |  44%   10 MB
|======================================                                              |  45%   10 MB
|=======================================                                             |  46%   10 MB
|=======================================                                             |  46%   10 MB
|========================================                                            |  47%   10 MB
|========================================                                            |  47%   10 MB
|=========================================                                           |  48%   10 MB
|=========================================                                           |  48%   11 MB
|==========================================                                          |  49%   11 MB
|==========================================                                          |  49%   11 MB
|==========================================                                          |  50%   11 MB
|===========================================                                         |  51%   11 MB
|===========================================                                         |  51%   11 MB
|============================================                                        |  52%   11 MB
|============================================                                        |  52%   11 MB
|=============================================                                       |  53%   12 MB
|=============================================                                       |  53%   12 MB
|==============================================                                      |  54%   12 MB
|==============================================                                      |  55%   12 MB
|===============================================                                     |  55%   12 MB
|===============================================                                     |  56%   12 MB
|================================================                                    |  56%   12 MB
|================================================                                    |  57%   13 MB
|=================================================                                   |  57%   13 MB
|=================================================                                   |  58%   13 MB
|==================================================                                  |  58%   13 MB
|==================================================                                  |  59%   13 MB
|===================================================                                 |  60%   13 MB
|===================================================                                 |  60%   13 MB
|====================================================                                |  61%   13 MB
|====================================================                                |  61%   14 MB
|====================================================                                |  62%   14 MB
|=====================================================                               |  62%   14 MB
|=====================================================                               |  63%   14 MB
|======================================================                              |  64%   14 MB
|======================================================                              |  64%   14 MB
|=======================================================                             |  65%   14 MB
|=======================================================                             |  65%   14 MB
|========================================================                            |  66%   15 MB
|========================================================                            |  66%   15 MB
|=========================================================                           |  67%   15 MB
|=========================================================                           |  67%   15 MB
|==========================================================                          |  68%   15 MB
|==========================================================                          |  69%   15 MB
|===========================================================                         |  69%   15 MB
|===========================================================                         |  70%   15 MB
|============================================================                        |  70%   16 MB
|============================================================                        |  71%   16 MB
|=============================================================                       |  71%   16 MB
|=============================================================                       |  72%   16 MB
|==============================================================                      |  72%   16 MB
|==============================================================                      |  73%   16 MB
|==============================================================                      |  74%   16 MB
|===============================================================                     |  74%   16 MB
|===============================================================                     |  75%   17 MB
|================================================================                    |  75%   17 MB
|================================================================                    |  76%   17 MB
|=================================================================                   |  76%   17 MB
|=================================================================                   |  77%   17 MB
|==================================================================                  |  77%   17 MB
|==================================================================                  |  78%   17 MB
|===================================================================                 |  79%   17 MB
|===================================================================                 |  79%   18 MB
|====================================================================                |  80%   18 MB
|====================================================================                |  80%   18 MB
|=====================================================================               |  81%   18 MB
|=====================================================================               |  81%   18 MB
|======================================================================              |  82%   18 MB
|======================================================================              |  83%   18 MB
|=======================================================================             |  83%   18 MB
|=======================================================================             |  84%   19 MB
|========================================================================            |  84%   19 MB
|========================================================================            |  85%   19 MB
|========================================================================            |  85%   19 MB
|=========================================================================           |  86%   19 MB
|=========================================================================           |  86%   19 MB
|==========================================================================          |  87%   19 MB
|==========================================================================          |  88%   19 MB
|===========================================================================         |  88%   20 MB
|===========================================================================         |  89%   20 MB
|============================================================================        |  89%   20 MB
|============================================================================        |  90%   20 MB
|=============================================================================       |  90%   20 MB
|=============================================================================       |  91%   20 MB
|==============================================================================      |  92%   20 MB
|==============================================================================      |  92%   21 MB
|===============================================================================     |  93%   21 MB
|===============================================================================     |  93%   21 MB
|================================================================================    |  94%   21 MB
|================================================================================    |  94%   21 MB
|=================================================================================   |  95%   21 MB
|=================================================================================   |  95%   21 MB
|==================================================================================  |  96%   21 MB
|==================================================================================  |  97%   22 MB
|==================================================================================  |  97%   22 MB
|=================================================================================== |  98%   22 MB
|=================================================================================== |  98%   22 MB
|====================================================================================|  99%   22 MB
|====================================================================================|  99%   22 MB
|=====================================================================================| 100%   22 MB
fordgobike201804 <- read_csv(file="./data/201804-fordgobike-tripdata.csv")
fordgobike201805 <- read_csv(file="./data/201805-fordgobike-tripdata.csv")
fordgobike201806 <- read_csv(file="./data/201806-fordgobike-tripdata.csv")
fordgobike201807 <- read_csv(file="./data/201807-fordgobike-tripdata.csv")

|=======                                                                             |   9%    3 MB
|========                                                                            |   9%    3 MB
|========                                                                            |  10%    4 MB
|========                                                                            |  10%    4 MB
|=========                                                                           |  10%    4 MB
|=========                                                                           |  10%    4 MB
|=========                                                                           |  11%    4 MB
|=========                                                                           |  11%    4 MB
|==========                                                                          |  11%    4 MB
|==========                                                                          |  12%    4 MB
|==========                                                                          |  12%    5 MB
|==========                                                                          |  12%    5 MB
|===========                                                                         |  13%    5 MB
|===========                                                                         |  13%    5 MB
|===========                                                                         |  13%    5 MB
|===========                                                                         |  14%    5 MB
|============                                                                        |  14%    5 MB
|============                                                                        |  14%    5 MB
|============                                                                        |  15%    6 MB
|=============                                                                       |  15%    6 MB
|=============                                                                       |  15%    6 MB
|=============                                                                       |  15%    6 MB
|=============                                                                       |  16%    6 MB
|==============                                                                      |  16%    6 MB
|==============                                                                      |  16%    6 MB
|==============                                                                      |  17%    6 MB
|==============                                                                      |  17%    7 MB
|===============                                                                     |  17%    7 MB
|===============                                                                     |  18%    7 MB
|===============                                                                     |  18%    7 MB
|===============                                                                     |  18%    7 MB
|================                                                                    |  19%    7 MB
|================                                                                    |  19%    7 MB
|================                                                                    |  19%    7 MB
|=================                                                                   |  20%    8 MB
|=================                                                                   |  20%    8 MB
|=================                                                                   |  20%    8 MB
|=================                                                                   |  21%    8 MB
|==================                                                                  |  21%    8 MB
|==================                                                                  |  21%    8 MB
|==================                                                                  |  21%    8 MB
|==================                                                                  |  22%    8 MB
|===================                                                                 |  22%    9 MB
|===================                                                                 |  22%    9 MB
|===================                                                                 |  23%    9 MB
|===================                                                                 |  23%    9 MB
|====================                                                                |  23%    9 MB
|====================                                                                |  24%    9 MB
|====================                                                                |  24%    9 MB
|=====================                                                               |  24%   10 MB
|=====================                                                               |  25%   10 MB
|=====================                                                               |  25%   10 MB
|=====================                                                               |  25%   10 MB
|======================                                                              |  26%   10 MB
|======================                                                              |  26%   10 MB
|======================                                                              |  26%   10 MB
|======================                                                              |  26%   10 MB
|=======================                                                             |  27%   11 MB
|=======================                                                             |  27%   11 MB
|=======================                                                             |  27%   11 MB
|=======================                                                             |  28%   11 MB
|========================                                                            |  28%   11 MB
|========================                                                            |  28%   11 MB
|========================                                                            |  29%   11 MB
|=========================                                                           |  29%   11 MB
|=========================                                                           |  29%   12 MB
|=========================                                                           |  30%   12 MB
|=========================                                                           |  30%   12 MB
|==========================                                                          |  30%   12 MB
|==========================                                                          |  31%   12 MB
|==========================                                                          |  31%   12 MB
|==========================                                                          |  31%   12 MB
|===========================                                                         |  31%   12 MB
|===========================                                                         |  32%   13 MB
|===========================                                                         |  32%   13 MB
|===========================                                                         |  32%   13 MB
|============================                                                        |  33%   13 MB
|============================                                                        |  33%   13 MB
|============================                                                        |  33%   13 MB
|=============================                                                       |  34%   13 MB
|=============================                                                       |  34%   13 MB
|=============================                                                       |  34%   14 MB
|=============================                                                       |  35%   14 MB
|==============================                                                      |  35%   14 MB
|==============================                                                      |  35%   14 MB
|==============================                                                      |  36%   14 MB
|==============================                                                      |  36%   14 MB
|===============================                                                     |  36%   14 MB
|===============================                                                     |  36%   14 MB
|===============================                                                     |  37%   15 MB
|===============================                                                     |  37%   15 MB
|================================                                                    |  37%   15 MB
|================================                                                    |  38%   15 MB
|================================                                                    |  38%   15 MB
|=================================                                                   |  38%   15 MB
|=================================                                                   |  39%   15 MB
|=================================                                                   |  39%   15 MB
|=================================                                                   |  39%   16 MB
|==================================                                                  |  40%   16 MB
|==================================                                                  |  40%   16 MB
|==================================                                                  |  40%   16 MB
|==================================                                                  |  41%   16 MB
|===================================                                                 |  41%   16 MB
|===================================                                                 |  41%   16 MB
|===================================                                                 |  42%   16 MB
|===================================                                                 |  42%   17 MB
|====================================                                                |  42%   17 MB
|====================================                                                |  42%   17 MB
|====================================                                                |  43%   17 MB
|=====================================                                               |  43%   17 MB
|=====================================                                               |  43%   17 MB
|=====================================                                               |  44%   17 MB
|=====================================                                               |  44%   17 MB
|======================================                                              |  44%   18 MB
|======================================                                              |  45%   18 MB
|======================================                                              |  45%   18 MB
|======================================                                              |  45%   18 MB
|=======================================                                             |  46%   18 MB
|=======================================                                             |  46%   18 MB
|=======================================                                             |  46%   18 MB
|=======================================                                             |  47%   19 MB
|========================================                                            |  47%   19 MB
|========================================                                            |  47%   19 MB
|========================================                                            |  47%   19 MB
|=========================================                                           |  48%   19 MB
|=========================================                                           |  48%   19 MB
|=========================================                                           |  48%   19 MB
|=========================================                                           |  49%   19 MB
|==========================================                                          |  49%   20 MB
|==========================================                                          |  49%   20 MB
|==========================================                                          |  50%   20 MB
|==========================================                                          |  50%   20 MB
|===========================================                                         |  50%   20 MB
|===========================================                                         |  51%   20 MB
|===========================================                                         |  51%   20 MB
|===========================================                                         |  51%   20 MB
|============================================                                        |  52%   21 MB
|============================================                                        |  52%   21 MB
|============================================                                        |  52%   21 MB
|=============================================                                       |  53%   21 MB
|=============================================                                       |  53%   21 MB
|=============================================                                       |  53%   21 MB
|=============================================                                       |  53%   21 MB
|==============================================                                      |  54%   21 MB
|==============================================                                      |  54%   22 MB
|==============================================                                      |  54%   22 MB
|==============================================                                      |  55%   22 MB
|===============================================                                     |  55%   22 MB
|===============================================                                     |  55%   22 MB
|===============================================                                     |  56%   22 MB
|===============================================                                     |  56%   22 MB
|================================================                                    |  56%   22 MB
|================================================                                    |  57%   23 MB
|================================================                                    |  57%   23 MB
|=================================================                                   |  57%   23 MB
|=================================================                                   |  58%   23 MB
|=================================================                                   |  58%   23 MB
|=================================================                                   |  58%   23 MB
|==================================================                                  |  58%   23 MB
|==================================================                                  |  59%   23 MB
|==================================================                                  |  59%   24 MB
|==================================================                                  |  59%   24 MB
|===================================================                                 |  60%   24 MB
|===================================================                                 |  60%   24 MB
|===================================================                                 |  60%   24 MB
|===================================================                                 |  61%   24 MB
|====================================================                                |  61%   24 MB
|====================================================                                |  61%   24 MB
|====================================================                                |  62%   25 MB
|=====================================================                               |  62%   25 MB
|=====================================================                               |  62%   25 MB
|=====================================================                               |  63%   25 MB
|=====================================================                               |  63%   25 MB
|======================================================                              |  63%   25 MB
|======================================================                              |  63%   25 MB
|======================================================                              |  64%   25 MB
|======================================================                              |  64%   26 MB
|=======================================================                             |  64%   26 MB
|=======================================================                             |  65%   26 MB
|=======================================================                             |  65%   26 MB
|========================================================                            |  65%   26 MB
|========================================================                            |  66%   26 MB
|========================================================                            |  66%   26 MB
|========================================================                            |  66%   26 MB
|=========================================================                           |  67%   27 MB
|=========================================================                           |  67%   27 MB
|=========================================================                           |  67%   27 MB
|=========================================================                           |  68%   27 MB
|==========================================================                          |  68%   27 MB
|==========================================================                          |  68%   27 MB
|==========================================================                          |  69%   27 MB
|==========================================================                          |  69%   28 MB
|===========================================================                         |  69%   28 MB
|===========================================================                         |  69%   28 MB
|===========================================================                         |  70%   28 MB
|============================================================                        |  70%   28 MB
|============================================================                        |  70%   28 MB
|============================================================                        |  71%   28 MB
|============================================================                        |  71%   28 MB
|=============================================================                       |  71%   29 MB
|=============================================================                       |  72%   29 MB
|=============================================================                       |  72%   29 MB
|=============================================================                       |  72%   29 MB
|==============================================================                      |  73%   29 MB
|==============================================================                      |  73%   29 MB
|==============================================================                      |  73%   29 MB
|==============================================================                      |  74%   29 MB
|===============================================================                     |  74%   30 MB
|===============================================================                     |  74%   30 MB
|===============================================================                     |  75%   30 MB
|================================================================                    |  75%   30 MB
|================================================================                    |  75%   30 MB
|================================================================                    |  75%   30 MB
|================================================================                    |  76%   30 MB
|=================================================================                   |  76%   30 MB
|=================================================================                   |  76%   31 MB
|=================================================================                   |  77%   31 MB
|=================================================================                   |  77%   31 MB
|==================================================================                  |  77%   31 MB
|==================================================================                  |  78%   31 MB
|==================================================================                  |  78%   31 MB
|==================================================================                  |  78%   31 MB
|===================================================================                 |  79%   31 MB
|===================================================================                 |  79%   32 MB
|===================================================================                 |  79%   32 MB
|====================================================================                |  80%   32 MB
|====================================================================                |  80%   32 MB
|====================================================================                |  80%   32 MB
|====================================================================                |  80%   32 MB
|=====================================================================               |  81%   32 MB
|=====================================================================               |  81%   32 MB
|=====================================================================               |  81%   33 MB
|=====================================================================               |  82%   33 MB
|======================================================================              |  82%   33 MB
|======================================================================              |  82%   33 MB
|======================================================================              |  83%   33 MB
|======================================================================              |  83%   33 MB
|=======================================================================             |  83%   33 MB
|=======================================================================             |  84%   33 MB
|=======================================================================             |  84%   34 MB
|========================================================================            |  84%   34 MB
|========================================================================            |  85%   34 MB
|========================================================================            |  85%   34 MB
|========================================================================            |  85%   34 MB
|=========================================================================           |  85%   34 MB
|=========================================================================           |  86%   34 MB
|=========================================================================           |  86%   34 MB
|=========================================================================           |  86%   35 MB
|==========================================================================          |  87%   35 MB
|==========================================================================          |  87%   35 MB
|==========================================================================          |  87%   35 MB
|==========================================================================          |  88%   35 MB
|===========================================================================         |  88%   35 MB
|===========================================================================         |  88%   35 MB
|===========================================================================         |  89%   35 MB
|============================================================================        |  89%   36 MB
|============================================================================        |  89%   36 MB
|============================================================================        |  90%   36 MB
|============================================================================        |  90%   36 MB
|=============================================================================       |  90%   36 MB
|=============================================================================       |  90%   36 MB
|=============================================================================       |  91%   36 MB
|=============================================================================       |  91%   36 MB
|==============================================================================      |  91%   37 MB
|==============================================================================      |  92%   37 MB
|==============================================================================      |  92%   37 MB
|==============================================================================      |  92%   37 MB
|===============================================================================     |  93%   37 MB
|===============================================================================     |  93%   37 MB
|===============================================================================     |  93%   37 MB
|================================================================================    |  94%   38 MB
|================================================================================    |  94%   38 MB
|================================================================================    |  94%   38 MB
|================================================================================    |  95%   38 MB
|=================================================================================   |  95%   38 MB
|=================================================================================   |  95%   38 MB
|=================================================================================   |  96%   38 MB
|=================================================================================   |  96%   38 MB
|==================================================================================  |  96%   39 MB
|==================================================================================  |  96%   39 MB
|==================================================================================  |  97%   39 MB
|==================================================================================  |  97%   39 MB
|=================================================================================== |  97%   39 MB
|=================================================================================== |  98%   39 MB
|=================================================================================== |  98%   39 MB
|====================================================================================|  98%   39 MB
|====================================================================================|  99%   40 MB
|====================================================================================|  99%   40 MB
|====================================================================================|  99%   40 MB
|=====================================================================================| 100%   40 MB

Check the head() and tail() of the data.frames that are loaded.

head(fordgobike2017) 
# A tibble: 6 x 15
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1        80110 2017-12-31 16:57:39 2018-01-01 15:12:50               74 Laguna St at Hayes St      
2        78800 2017-12-31 15:56:34 2018-01-01 13:49:55              284 Yerba Buena Center for the~
3        45768 2017-12-31 22:45:48 2018-01-01 11:28:36              245 Downtown Berkeley BART     
4        62172 2017-12-31 17:31:10 2018-01-01 10:47:23               60 8th St at Ringold St       
5        43603 2017-12-31 14:23:14 2018-01-01 02:29:57              239 Bancroft Way at Telegraph ~
6         9226 2017-12-31 22:51:00 2018-01-01 01:24:47               30 San Francisco Caltrain (To~
# ... with 10 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>
head(fordgobike201801)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1        75284 2018-01-31 22:52:35 2018-02-01 19:47:19              120 Mission Dolores Park       
2        85422 2018-01-31 16:13:34 2018-02-01 15:57:17               15 San Francisco Ferry Buildi~
3        71576 2018-01-31 14:23:55 2018-02-01 10:16:52              304 Jackson St at 5th St       
4        61076 2018-01-31 14:53:23 2018-02-01 07:51:20               75 Market St at Franklin St   
5        39966 2018-01-31 19:52:24 2018-02-01 06:58:31               74 Laguna St at Hayes St      
6         6477 2018-01-31 22:58:44 2018-02-01 00:46:41              236 Market St at 8th St        
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
head(fordgobike201802)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1          598 2018-02-28 23:59:47 2018-03-01 00:09:45              284 Yerba Buena Center for the~
2          943 2018-02-28 23:21:16 2018-02-28 23:36:59                6 The Embarcadero at Sansome~
3        18587 2018-02-28 18:20:55 2018-02-28 23:30:42               93 4th St at Mission Bay Blvd~
4        18558 2018-02-28 18:20:53 2018-02-28 23:30:12               93 4th St at Mission Bay Blvd~
5          885 2018-02-28 23:15:12 2018-02-28 23:29:58              308 San Pedro Square           
6          921 2018-02-28 23:14:19 2018-02-28 23:29:40              312 San Jose Diridon Station   
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
head(fordgobike201803)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1        71766 2018-03-31 16:58:33 2018-04-01 12:54:39                4 Cyril Magnin St at Ellis St
2        62569 2018-03-31 19:03:35 2018-04-01 12:26:25               78 Folsom St at 9th St        
3        56221 2018-03-31 20:13:13 2018-04-01 11:50:14              258 University Ave at Oxford St
4        85844 2018-03-31 11:28:07 2018-04-01 11:18:52              186 Lakeside Dr at 14th St     
5         1566 2018-03-31 23:37:56 2018-04-01 00:04:02              193 Grand Ave at Santa Clara A~
6          281 2018-03-31 23:58:07 2018-04-01 00:02:49              197 El Embarcadero at Grand Ave
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
head(fordgobike201804)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1        72393 2018-04-30 22:49:32 2018-05-01 18:56:06                4 Cyril Magnin St at Ellis St
2        81034 2018-04-30 17:46:04 2018-05-01 16:16:39              122 19th St at Mission St      
3        86142 2018-04-30 16:07:13 2018-05-01 16:02:56               41 Golden Gate Ave at Polk St 
4        68839 2018-04-30 17:11:57 2018-05-01 12:19:16              284 Yerba Buena Center for the~
5        59091 2018-04-30 18:45:21 2018-05-01 11:10:13              196 Grand Ave at Perkins St    
6        68093 2018-04-30 15:39:18 2018-05-01 10:34:12               21 Montgomery St BART Station~
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
head(fordgobike201805)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1        56791 2018-05-31 21:41:51 2018-06-01 13:28:22               44 Civic Center/UN Plaza BART~
2        52797 2018-05-31 18:39:53 2018-06-01 09:19:51              186 Lakeside Dr at 14th St     
3        43204 2018-05-31 21:09:48 2018-06-01 09:09:52               17 Embarcadero BART Station (~
4        67102 2018-05-31 14:09:54 2018-06-01 08:48:17              106 Sanchez St at 17th St      
5        58883 2018-05-31 16:07:23 2018-06-01 08:28:47               16 Steuart St at Market St    
6        22858 2018-05-31 23:06:40 2018-06-01 05:27:38              163 Lake Merritt BART Station  
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
head(fordgobike201806)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>              <chr>            <chr>                      
1        59088 2018-06-30 23:32:44 2018-07-01 15:57:33 76               McCoppin St at Valencia St 
2        60358 2018-06-30 21:48:19 2018-07-01 14:34:18 248              Telegraph Ave at Ashby Ave 
3        63654 2018-06-30 20:26:53 2018-07-01 14:07:47 23               The Embarcadero at Steuart~
4        50508 2018-06-30 20:29:59 2018-07-01 10:31:48 58               Market St at 10th St       
5        51697 2018-06-30 18:24:56 2018-07-01 08:46:33 196              Grand Ave at Perkins St    
6        36708 2018-06-30 20:25:34 2018-07-01 06:37:22 8                The Embarcadero at Vallejo~
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <chr>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
head(fordgobike201807)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>              <chr>            <chr>                      
1        59989 2018-07-31 18:20:32 2018-08-01 11:00:22 197              El Embarcadero at Grand Ave
2        60232 2018-07-31 17:24:26 2018-08-01 10:08:18 77               11th St at Natoma St       
3        43864 2018-07-31 21:03:26 2018-08-01 09:14:30 NULL             NULL                       
4        51522 2018-07-31 18:54:23 2018-08-01 09:13:06 114              Rhode Island St at 17th St 
5        83380 2018-07-31 09:22:29 2018-08-01 08:32:09 213              32nd St at Adeline St      
6        49546 2018-07-31 18:44:11 2018-08-01 08:29:57 139              Garfield Square (25th St a~
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <chr>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
tail(fordgobike2017)
# A tibble: 6 x 15
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1          730 2017-06-28 09:58:33 2017-06-28 10:10:44               23 The Embarcadero at Steuart~
2          435 2017-06-28 10:00:54 2017-06-28 10:08:10               81 Berry St at 4th St         
3          431 2017-06-28 09:56:39 2017-06-28 10:03:51               66 3rd St at Townsend St      
4          424 2017-06-28 09:47:36 2017-06-28 09:54:41               21 Montgomery St BART Station~
5          366 2017-06-28 09:47:41 2017-06-28 09:53:47               58 Market St at 10th St       
6          188 2017-06-28 09:49:46 2017-06-28 09:52:55               25 Howard St at 2nd St        
# ... with 10 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>
tail(fordgobike201801)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1          752 2018-01-01 00:19:13 2018-01-01 00:31:46               23 The Embarcadero at Steuart~
2          695 2018-01-01 00:19:58 2018-01-01 00:31:33               23 The Embarcadero at Steuart~
3          600 2018-01-01 00:19:48 2018-01-01 00:29:49               17 Embarcadero BART Station (~
4         1151 2018-01-01 00:09:31 2018-01-01 00:28:43               97 14th St at Mission St      
5          714 2018-01-01 00:07:52 2018-01-01 00:19:47               74 Laguna St at Hayes St      
6          145 2018-01-01 00:07:41 2018-01-01 00:10:06              316 San Salvador St at 1st St  
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
tail(fordgobike201802)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1          404 2018-02-01 00:16:47 2018-02-01 00:23:31               89 Division St at Potrero Ave 
2          136 2018-02-01 00:20:14 2018-02-01 00:22:30              182 19th Street BART Station   
3          345 2018-02-01 00:08:39 2018-02-01 00:14:25              122 19th St at Mission St      
4          439 2018-02-01 00:02:25 2018-02-01 00:09:45              284 Yerba Buena Center for the~
5          524 2018-02-01 00:00:05 2018-02-01 00:08:49              113 Franklin Square            
6          319 2018-02-01 00:00:39 2018-02-01 00:05:59               72 Page St at Scott St        
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
tail(fordgobike201803)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name       
         <int> <dttm>              <dttm>                         <int> <chr>                    
1          594 2018-03-01 00:39:50 2018-03-01 00:49:45               66 3rd St at Townsend St    
2          471 2018-03-01 00:28:29 2018-03-01 00:36:20              180 Telegraph Ave at 23rd St 
3          285 2018-03-01 00:17:32 2018-03-01 00:22:18              183 Telegraph Ave at 19th St 
4          408 2018-03-01 00:13:37 2018-03-01 00:20:25               27 Beale St at Harrison St  
5          368 2018-03-01 00:14:14 2018-03-01 00:20:22               27 Beale St at Harrison St  
6          164 2018-03-01 00:13:31 2018-03-01 00:16:15              240 Haste St at Telegraph Ave
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
tail(fordgobike201804)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1          656 2018-04-01 00:06:53 2018-04-01 00:17:50               45 5th St at Howard St        
2          887 2018-04-01 00:00:08 2018-04-01 00:14:55              194 Lakeshore Ave at Trestle G~
3          387 2018-04-01 00:08:06 2018-04-01 00:14:33               30 San Francisco Caltrain (To~
4          480 2018-04-01 00:06:21 2018-04-01 00:14:21               44 Civic Center/UN Plaza BART~
5          503 2018-04-01 00:04:36 2018-04-01 00:13:00              100 Bryant St at 15th St       
6          192 2018-04-01 00:02:03 2018-04-01 00:05:16              176 MacArthur BART Station     
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
tail(fordgobike201805)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1          392 2018-05-01 00:12:49 2018-05-01 00:19:22              336 Potrero Ave and Mariposa St
2          645 2018-05-01 00:07:24 2018-05-01 00:18:09              186 Lakeside Dr at 14th St     
3          135 2018-05-01 00:15:53 2018-05-01 00:18:09              244 Shattuck Ave at Hearst Ave 
4          316 2018-05-01 00:10:04 2018-05-01 00:15:20               30 San Francisco Caltrain (To~
5          183 2018-05-01 00:12:01 2018-05-01 00:15:05              243 Bancroft Way at College Ave
6           78 2018-05-01 00:02:01 2018-05-01 00:03:20              106 Sanchez St at 17th St      
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
tail(fordgobike201806)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>              <chr>            <chr>                      
1          119 2018-06-01 00:09:28 2018-06-01 00:11:28 105              16th St at Prosper St      
2          491 2018-06-01 00:03:12 2018-06-01 00:11:24 41               Golden Gate Ave at Polk St 
3          507 2018-06-01 00:02:28 2018-06-01 00:10:55 118              Eureka Valley Recreation C~
4          377 2018-06-01 00:04:10 2018-06-01 00:10:27 186              Lakeside Dr at 14th St     
5          391 2018-06-01 00:03:37 2018-06-01 00:10:08 30               San Francisco Caltrain (To~
6          283 2018-06-01 00:02:37 2018-06-01 00:07:21 36               Folsom St at 3rd St        
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <chr>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
tail(fordgobike201807)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>              <chr>            <chr>                      
1          165 2018-07-01 00:08:12 2018-07-01 00:10:58 278              The Alameda at Bush St     
2          130 2018-07-01 00:07:39 2018-07-01 00:09:49 253              Haste St at College Ave    
3          445 2018-07-01 00:02:16 2018-07-01 00:09:42 179              Telegraph Ave at 27th St   
4          490 2018-07-01 00:00:41 2018-07-01 00:08:51 307              SAP Center                 
5          219 2018-07-01 00:04:32 2018-07-01 00:08:12 70               Central Ave at Fell St     
6          368 2018-07-01 00:01:22 2018-07-01 00:07:31 4                Cyril Magnin St at Ellis St
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <chr>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
dim(fordgobike2017)
[1] 519700     15
fordgobike2017 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 519700
fordgobike201801 %>% count()
# A tibble: 1 x 1
      n
  <int>
1 94802
fordgobike201802 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 106718
fordgobike201803 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 111382
fordgobike201804 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 131169
fordgobike201805 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 179125
fordgobike201806 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 195968
fordgobike201807 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 199222
glimpse(fordgobike201805)
Observations: 179,125
Variables: 16
$ duration_sec            <int> 56791, 52797, 43204, 67102, 58883, 22858, 2863, 3189, 3149, 313...
$ start_time              <dttm> 2018-05-31 21:41:51, 2018-05-31 18:39:53, 2018-05-31 21:09:48,...
$ end_time                <dttm> 2018-06-01 13:28:22, 2018-06-01 09:19:51, 2018-06-01 09:09:52,...
$ start_station_id        <int> 44, 186, 17, 106, 16, 163, 197, 61, 61, 61, 61, 61, 211, 66, 19...
$ start_station_name      <chr> "Civic Center/UN Plaza BART Station (Market St at McAllister St...
$ start_station_latitude  <dbl> 37.78107, 37.80132, 37.79225, 37.76324, 37.79413, 37.79732, 37....
$ start_station_longitude <dbl> -122.4117, -122.2626, -122.3971, -122.4307, -122.3944, -122.265...
$ end_station_id          <int> 78, 338, 93, 47, 30, 212, 197, 8, 8, 8, 8, 8, 7, 323, 34, 6, 19...
$ end_station_name        <chr> "Folsom St at 9th St", "13th St at Franklin St", "4th St at Mis...
$ end_station_latitude    <dbl> 37.77372, 37.80319, 37.77041, 37.78095, 37.77660, 37.82493, 37....
$ end_station_longitude   <dbl> -122.4116, -122.2706, -122.3912, -122.3997, -122.3953, -122.260...
$ bike_id                 <int> 1230, 3414, 2677, 4224, 3392, 1235, 152, 1109, 2143, 3374, 3493...
$ user_type               <chr> "Customer", "Subscriber", "Customer", "Subscriber", "Subscriber...
$ member_birth_year       <int> NA, 1983, NA, 1979, 1986, 1992, 1985, NA, NA, NA, NA, NA, NA, 1...
$ member_gender           <chr> NA, "Male", NA, "Male", "Male", "Male", "Male", NA, NA, NA, NA,...
$ bike_share_for_all_trip <chr> "No", "No", "No", "No", "No", "No", "Yes", "No", "No", "No", "N...
glimpse(fordgobike201806)
Observations: 195,968
Variables: 16
$ duration_sec            <int> 59088, 60358, 63654, 50508, 51697, 36708, 46380, 7224, 4294, 22...
$ start_time              <dttm> 2018-06-30 23:32:44, 2018-06-30 21:48:19, 2018-06-30 20:26:53,...
$ end_time                <dttm> 2018-07-01 15:57:33, 2018-07-01 14:34:18, 2018-07-01 14:07:47,...
$ start_station_id        <chr> "76", "248", "23", "58", "196", "8", "237", "284", "240", "133"...
$ start_station_name      <chr> "McCoppin St at Valencia St", "Telegraph Ave at Ashby Ave", "Th...
$ start_station_latitude  <dbl> 37.77166, 37.85596, 37.79146, 37.77662, 37.80889, 37.79995, 37....
$ start_station_longitude <dbl> -122.4224, -122.2598, -122.3910, -122.4174, -122.2565, -122.398...
$ end_station_id          <chr> "95", "239", "50", "88", "272", "4", "237", "284", "240", "55",...
$ end_station_name        <chr> "Sanchez St at 15th St", "Bancroft Way at Telegraph Ave", "2nd ...
$ end_station_latitude    <dbl> 37.76622, 37.86881, 37.78053, 37.77003, 37.85058, 37.78588, 37....
$ end_station_longitude   <dbl> -122.4311, -122.2588, -122.3903, -122.4117, -122.2782, -122.408...
$ bike_id                 <int> 2100, 653, 3235, 3675, 3232, 577, 1764, 779, 2491, 4225, 3972, ...
$ user_type               <chr> "Subscriber", "Customer", "Subscriber", "Subscriber", "Customer...
$ member_birth_year       <int> 1975, NA, 1962, 1992, 1989, NA, NA, 1989, 1996, 1963, 1981, 199...
$ member_gender           <chr> "Male", NA, "Female", "Male", "Female", NA, NA, "Male", "Female...
$ bike_share_for_all_trip <chr> "Yes", "No", "No", "No", "No", "No", "No", "No", "Yes", "Yes", ...
glimpse(fordgobike201807)
Observations: 199,222
Variables: 16
$ duration_sec            <int> 59989, 60232, 43864, 51522, 83380, 49546, 42799, 50603, 54830, ...
$ start_time              <dttm> 2018-07-31 18:20:32, 2018-07-31 17:24:26, 2018-07-31 21:03:26,...
$ end_time                <dttm> 2018-08-01 11:00:22, 2018-08-01 10:08:18, 2018-08-01 09:14:30,...
$ start_station_id        <chr> "197", "77", "NULL", "114", "213", "139", "337", "19", "247", "...
$ start_station_name      <chr> "El Embarcadero at Grand Ave", "11th St at Natoma St", "NULL", ...
$ start_station_latitude  <dbl> 37.80885, 37.77351, 37.41000, 37.76448, 37.82385, 37.75102, 37....
$ start_station_longitude <dbl> -122.2497, -122.4160, -121.9400, -122.4026, -122.2812, -122.411...
$ end_station_id          <chr> "181", "356", "NULL", "345", "198", "356", "196", "16", "266", ...
$ end_station_name        <chr> "Grand Ave at Webster St", "Valencia St at Clinton Park", "NULL...
$ end_station_latitude    <dbl> 37.81138, 37.76919, 37.41000, 37.76647, 37.80781, 37.76919, 37....
$ end_station_longitude   <dbl> -122.2652, -122.4223, -121.9400, -122.3983, -122.2645, -122.422...
$ bike_id                 <int> 1953, 3010, 4273, 1043, 1336, 697, 605, 800, 2432, 3839, 3492, ...
$ user_type               <chr> "Customer", "Subscriber", "Subscriber", "Subscriber", "Subscrib...
$ member_birth_year       <int> 1995, 1994, 1998, 1990, 1982, 1991, 1976, 1972, 1997, 1978, 199...
$ member_gender           <chr> "Male", "Female", "Male", "Female", "Male", "Female", "Female",...
$ bike_share_for_all_trip <chr> "No", "No", "No", "No", "No", "No", "No", "No", "No", "No", "No...
fordgobike201806 <- fordgobike201806 %>%
        mutate(start_station_id = as.integer(start_station_id),
               end_station_id= as.integer(start_station_id) )
NAs introduced by coercion
fordgobike201807 <- fordgobike201807 %>%
        mutate(start_station_id = as.integer(start_station_id),
               end_station_id= as.integer(start_station_id) )
NAs introduced by coercion
fordgobike2018 <- bind_rows(fordgobike201801, fordgobike201802, fordgobike201803, fordgobike201804,
                            fordgobike201805, fordgobike201806, fordgobike201807)
glimpse(fordgobike2018)
Observations: 1,018,386
Variables: 16
$ duration_sec            <int> 75284, 85422, 71576, 61076, 39966, 6477, 453, 180, 996, 825, 13...
$ start_time              <dttm> 2018-01-31 22:52:35, 2018-01-31 16:13:34, 2018-01-31 14:23:55,...
$ end_time                <dttm> 2018-02-01 19:47:19, 2018-02-01 15:57:17, 2018-02-01 10:16:52,...
$ start_station_id        <int> 120, 15, 304, 75, 74, 236, 110, 81, 134, 305, 98, 89, 223, 308,...
$ start_station_name      <chr> "Mission Dolores Park", "San Francisco Ferry Building (Harry Br...
$ start_station_latitude  <dbl> 37.76142, 37.79539, 37.34876, 37.77379, 37.77643, 37.80369, 37....
$ start_station_longitude <dbl> -122.4264, -122.3942, -121.8948, -122.4212, -122.4262, -122.282...
$ end_station_id          <int> 285, 15, 296, 47, 19, 160, 134, 93, 4, 317, 4, 43, 86, 297, 186...
$ end_station_name        <chr> "Webster St at O'Farrell St", "San Francisco Ferry Building (Ha...
$ end_station_latitude    <dbl> 37.78352, 37.79539, 37.32600, 37.78095, 37.78898, 37.80532, 37....
$ end_station_longitude   <dbl> -122.4312, -122.3942, -121.8771, -122.3997, -122.4035, -122.294...
$ bike_id                 <int> 2765, 2815, 3039, 321, 617, 1306, 3571, 1403, 3675, 1453, 1278,...
$ user_type               <chr> "Subscriber", "Customer", "Customer", "Customer", "Subscriber",...
$ member_birth_year       <int> 1986, NA, 1996, NA, 1991, NA, 1988, 1980, 1987, 1994, NA, 1993,...
$ member_gender           <chr> "Male", NA, "Male", NA, "Male", NA, "Male", "Male", "Male", "Fe...
$ bike_share_for_all_trip <chr> "No", "No", "No", "No", "No", "No", "No", "No", "Yes", "Yes", "...
fordgobike2018 %>% select(start_station_id,start_station_name, start_station_latitude,start_station_longitude) %>%
  arrange(start_station_id) %>%
  distinct() %>%
  head() %>%
  kable(, format = "rst")


================  ============================================  ======================  =======================
start_station_id  start_station_name                            start_station_latitude  start_station_longitude
================  ============================================  ======================  =======================
               3  Powell St BART Station (Market St at 4th St)                37.78638                -122.4049
               4  Cyril Magnin St at Ellis St                                 37.78588                -122.4089
               5  Powell St BART Station (Market St at 5th St)                37.78390                -122.4084
               6  The Embarcadero at Sansome St                               37.80477                -122.4032
               7  Frank H Ogawa Plaza                                         37.80456                -122.2717
               8  The Embarcadero at Vallejo St                               37.79995                -122.3985
================  ============================================  ======================  =======================
dim(fordgobike2017)
[1] 519700     15
fordgobike2017 %>% count()
# A tibble: 1 x 1
       n
   <int>
1 519700
nrow(fordgobike201801) + nrow(fordgobike201802) + nrow(fordgobike201803) + nrow(fordgobike201804)
[1] 444071
dim(fordgobike2018)
[1] 1018386      16
fordgobike2018 %>% count()
# A tibble: 1 x 1
        n
    <int>
1 1018386
fordgobike <- bind_rows(fordgobike2017, fordgobike2018)
dim(fordgobike)
[1] 1538086      16
fordgobike %>% count()
# A tibble: 1 x 1
        n
    <int>
1 1538086
dim(fordgobike)
[1] 1538086      16
fordgobike <- fordgobike %>% mutate(age = 2018 - member_birth_year)
fordgobike %>% count() 
# A tibble: 1 x 1
        n
    <int>
1 1538086
dim(fordgobike)
[1] 1538086      17
fordgobike <- fordgobike %>% mutate(year=year(start_time), month=month(start_time), day=day(start_time) )
fordgobike %>% count() 
# A tibble: 1 x 1
        n
    <int>
1 1538086
dim(fordgobike)
[1] 1538086      20
fordgobike <- fordgobike %>% mutate(week_day = wday(start_time) )
levels <- c("M","T","W","TH","F","SAT","SUN")
fordgobike$week_day <- factor(fordgobike$week_day, levels = levels)
fordgobike %>% count() 
# A tibble: 1 x 1
        n
    <int>
1 1538086
dim(fordgobike)
[1] 1538086      21
today()
[1] "2018-09-03"
now()
[1] "2018-09-03 13:19:25 PDT"

Age

fordgobike %>% group_by( age ) %>% count()
fordgobike %>% group_by( age ) %>% summary()
  duration_sec       start_time                     end_time                   start_station_id
 Min.   :   61.0   Min.   :2017-06-28 09:47:36   Min.   :2017-06-28 09:52:55   Min.   :  3.0   
 1st Qu.:  361.0   1st Qu.:2017-11-14 10:08:31   1st Qu.:2017-11-14 10:21:12   1st Qu.: 28.0   
 Median :  569.0   Median :2018-03-15 07:10:23   Median :2018-03-15 07:24:04   Median : 79.0   
 Mean   :  957.4   Mean   :2018-02-22 12:28:46   Mean   :2018-02-22 12:44:43   Mean   :107.7   
 3rd Qu.:  897.0   3rd Qu.:2018-06-02 17:56:46   3rd Qu.:2018-06-02 18:19:06   3rd Qu.:173.0   
 Max.   :86369.0   Max.   :2018-07-31 23:57:19   Max.   :2018-08-01 11:00:22   Max.   :357.0   
                                                                               NA's   :5245    
 start_station_name start_station_latitude start_station_longitude end_station_id 
 Length:1538086     Min.   :37.31          Min.   :-122.44         Min.   :  3.0  
 Class :character   1st Qu.:37.77          1st Qu.:-122.41         1st Qu.: 27.0  
 Mode  :character   Median :37.78          Median :-122.40         Median : 77.0  
                    Mean   :37.77          Mean   :-122.36         Mean   :105.9  
                    3rd Qu.:37.80          3rd Qu.:-122.39         3rd Qu.:171.0  
                    Max.   :45.51          Max.   : -73.57         Max.   :357.0  
                                                                   NA's   :5245   
 end_station_name   end_station_latitude end_station_longitude    bike_id      user_type        
 Length:1538086     Min.   :37.28        Min.   :-122.44       Min.   :  10   Length:1538086    
 Class :character   1st Qu.:37.77        1st Qu.:-122.41       1st Qu.:1045   Class :character  
 Mode  :character   Median :37.78        Median :-122.40       Median :2072   Mode  :character  
                    Mean   :37.77        Mean   :-122.35       Mean   :2021                     
                    3rd Qu.:37.80        3rd Qu.:-122.39       3rd Qu.:2952                     
                    Max.   :45.51        Max.   : -73.57       Max.   :4307                     
                                                                                                
 member_birth_year member_gender      bike_share_for_all_trip      age              year     
 Min.   :1881      Length:1538086     Length:1538086          Min.   : 18.0    Min.   :2017  
 1st Qu.:1976      Class :character   Class :character        1st Qu.: 29.0    1st Qu.:2017  
 Median :1984      Mode  :character   Mode  :character        Median : 34.0    Median :2018  
 Mean   :1982                                                 Mean   : 36.2    Mean   :2018  
 3rd Qu.:1989                                                 3rd Qu.: 42.0    3rd Qu.:2018  
 Max.   :2000                                                 Max.   :137.0    Max.   :2018  
 NA's   :137667                                               NA's   :137667                 
     month           day           week_day      
 Min.   : 1.0   Min.   : 1.00   M      :      0  
 1st Qu.: 4.0   1st Qu.: 8.00   T      :      0  
 Median : 6.0   Median :16.00   W      :      0  
 Mean   : 6.3   Mean   :15.98   TH     :      0  
 3rd Qu.: 9.0   3rd Qu.:24.00   F      :      0  
 Max.   :12.0   Max.   :31.00   (Other):      0  
                                NA's   :1538086  
skim(fordgobike)
Skim summary statistics
 n obs: 1538086 
 n variables: 21 

Variable type: character 
                variable missing complete       n min max empty n_unique
 bike_share_for_all_trip  519700  1018386 1538086   2   3     0        2
        end_station_name       0  1538086 1538086   4  63     0      316
           member_gender  137326  1400760 1538086   4   6     0        3
      start_station_name       0  1538086 1538086   4  63     0      316
               user_type       0  1538086 1538086   8  10     0        2

Variable type: factor 
 variable missing complete       n n_unique                    top_counts ordered
 week_day 1538086        0 1538086        0 NA: 1538086, M: 0, T: 0, W: 0   FALSE

Variable type: integer 
          variable missing complete       n    mean      sd   p0  p25  p50  p75  p100     hist
           bike_id       0  1538086 1538086 2020.6  1152.29   10 1045 2072 2952  4307 ▇▆▆▇▇▇▅▃
               day       0  1538086 1538086   15.98    8.78    1    8   16   24    31 ▇▇▇▇▆▇▇▇
      duration_sec       0  1538086 1538086  957.38 2891.83   61  361  569  897 86369 ▇▁▁▁▁▁▁▁
    end_station_id    5245  1532841 1538086  105.9    92.55    3   27   77  171   357 ▇▅▃▂▂▁▁▁
 member_birth_year  137667  1400419 1538086 1981.8    10.56 1881 1976 1984 1989  2000 ▁▁▁▁▁▂▇▇
  start_station_id    5245  1532841 1538086  107.7    92.97    3   28   79  173   357 ▇▅▃▂▂▁▁▁

Variable type: numeric 
                variable missing complete       n    mean     sd      p0     p25     p50     p75
                     age  137667  1400419 1538086   36.2  10.56    18      29      34      42   
    end_station_latitude       0  1538086 1538086   37.77  0.098   37.28   37.77   37.78   37.8 
   end_station_longitude       0  1538086 1538086 -122.35  0.15  -122.44 -122.41 -122.4  -122.39
                   month       0  1538086 1538086    6.3   3.06     1       4       6       9   
  start_station_latitude       0  1538086 1538086   37.77  0.098   37.31   37.77   37.78   37.8 
 start_station_longitude       0  1538086 1538086 -122.36  0.15  -122.44 -122.41 -122.4  -122.39
                    year       0  1538086 1538086 2017.66  0.47  2017    2017    2018    2018   
    p100     hist
  137    ▇▇▂▁▁▁▁▁
   45.51 ▇▁▁▁▁▁▁▁
  -73.57 ▇▁▁▁▁▁▁▁
   12    ▅▃▇▅▆▅▃▅
   45.51 ▇▁▁▁▁▁▁▁
  -73.57 ▇▁▁▁▁▁▁▁
 2018    ▅▁▁▁▁▁▁▇

Variable type: POSIXct 
   variable missing complete       n        min        max     median n_unique
   end_time       0  1538086 1538086 2017-06-28 2018-08-01 2018-03-15  1538010
 start_time       0  1538086 1538086 2017-06-28 2018-07-31 2018-03-15  1538011
fordgobike %>% ggplot(aes(x=age)) + geom_histogram()

fordgobike %>% filter(age <= 80) %>% ggplot(aes(x=age)) + geom_histogram()

fordgobike %>% filter(age <= 100) %>% ggplot(aes(x=age)) + geom_histogram()

fordgobike %>% filter(age > 100) %>% ggplot(aes(x=age)) + geom_histogram()

fordgobike %>% group_by( member_gender, age ) %>% count()
fordgobike %>% ggplot(aes(x=age, class=member_gender)) + geom_histogram()

fordgobike %>% ggplot(aes(x=age, class=member_gender)) + geom_histogram(aes(y=..density..))

fordgobike %>% filter(age <= 80) %>% ggplot(aes(x=age)) + geom_histogram()

fordgobike %>% filter(age <= 80) %>% ggplot(aes(x=age, color=member_gender)) + 
  geom_histogram(position="identity") + 
  facet_grid(member_gender ~ .)

fordgobike %>% filter(age <= 80) %>% ggplot(aes(x=age, color=member_gender)) + 
  geom_histogram(aes(y=..density..),position="identity") + 
  facet_grid(member_gender ~ .)

Year and day of week.

fordgobike %>% ggplot(aes(x=year)) + geom_bar()

fordgobike %>% ggplot(aes(x=month)) + geom_bar() + facet_grid(year ~ .)

fordgobike %>% ggplot(aes(x=day)) + geom_bar() + facet_grid(year ~ .)

fordgobike2018 <- fordgobike2018 %>% filter(start_station_latitude < 38 & start_station_longitude < 120 )
fordgobike_subset <- fordgobike2018 %>% select(start_station_longitude,start_station_latitude)
fordgobike_subset %>% ggplot(aes(x=start_station_longitude, y=start_station_latitude)) +
  geom_point()

library(biganalytics)
# run in parallel, the doMC package runs on Windows
library(doParallel)
registerDoParallel(cores = 8)
head(fordgobike2018)
# A tibble: 6 x 16
  duration_sec start_time          end_time            start_station_id start_station_name         
         <int> <dttm>              <dttm>                         <int> <chr>                      
1        75284 2018-01-31 22:52:35 2018-02-01 19:47:19              120 Mission Dolores Park       
2        85422 2018-01-31 16:13:34 2018-02-01 15:57:17               15 San Francisco Ferry Buildi~
3        71576 2018-01-31 14:23:55 2018-02-01 10:16:52              304 Jackson St at 5th St       
4        61076 2018-01-31 14:53:23 2018-02-01 07:51:20               75 Market St at Franklin St   
5        39966 2018-01-31 19:52:24 2018-02-01 06:58:31               74 Laguna St at Hayes St      
6         6477 2018-01-31 22:58:44 2018-02-01 00:46:41              236 Market St at 8th St        
# ... with 11 more variables: start_station_latitude <dbl>, start_station_longitude <dbl>,
#   end_station_id <int>, end_station_name <chr>, end_station_latitude <dbl>,
#   end_station_longitude <dbl>, bike_id <int>, user_type <chr>, member_birth_year <int>,
#   member_gender <chr>, bike_share_for_all_trip <chr>
fordgobike_subset2 <- as.matrix(fordgobike_subset)
set.seed <- 123454321
tic()
cl <- bigkmeans(fordgobike_subset2, 3, nstart=8)
toc()
3.84 sec elapsed
head(cl$cluster)
[1] 2 2 3 2 2 1
cl$centers
          [,1]     [,2]
[1,] -122.2660 37.83117
[2,] -122.4072 37.77809
[3,] -121.8953 37.34168
fordgobike_subset %>% ggplot(aes(x=start_station_longitude, y=start_station_latitude, color=cl$cluster)) +
  geom_point()

fordgobike2018 <- fordgobike2018 %>% mutate(clust = cl$cluster)
# City of Oakland  c(-122.2711, 37.8044) )
# https://stackoverflow.com/questions/20621250/simple-approach-to-assigning-clusters-for-new-data-after-k-means-clustering
cl$centers
          [,1]     [,2]
[1,] -122.2660 37.83117
[2,] -122.4072 37.77809
[3,] -121.8953 37.34168
closest.cluster <- function(x) {
  cluster.dist <- apply(cl$centers, 1, function(y) sqrt(sum((x-y)^2)))
  return(which.min(cluster.dist)[1])
}
oak <- closest.cluster(c(-122.2711, 37.8044))
oak
[1] 1
oakland <- fordgobike2018 %>% filter(clust == oak)
oakland %>% ggplot(aes(x=start_station_longitude, y=start_station_latitude)) +
  geom_point()

tic()
cl.km <- kmeans(fordgobike_subset, 3)
toc()
0.39 sec elapsed
cl.km$centers
  start_station_longitude start_station_latitude
1               -122.2660               37.83117
2               -122.4072               37.77809
3               -121.8953               37.34168
# City of Oakland  c(-122.2711, 37.8044) )
fordgobike_subset %>% ggplot(aes(x=start_station_longitude, y=start_station_latitude, color=cl.km$cluster)) +
  geom_point()

NA
dim(cl$centers)
[1] 3 2
bayarea <- get_map(location = c(lon=cl$centers[oak,1], lat=cl$centers[oak,2]), zoom = 12, maptype = "roadmap")
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=37.831171,-122.26603&zoom=12&size=640x640&scale=2&maptype=roadmap&language=en-EN&sensor=false
ggmap(bayarea)

ggmap(bayarea) +
  geom_point(data = oakland, aes(x = start_station_longitude, y = start_station_latitude), size = 0.2, shape = 19) +
  theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank(),
        axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank()
        )
ggsave(filename="oakland.jpg", width = 4, height = 4, units = "cm", plot=last_plot())

ggmap(bayarea) +
  geom_point(data = oakland, aes(x = start_station_longitude, y = start_station_latitude), size = 1, shape = 19) +
  ggtitle("Oakland Ford Go Bike stations")

bayarea <- get_map(location = "hayward")
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=hayward&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=hayward&sensor=false
ggmap(bayarea)

ggmap(bayarea) +
  geom_point(data = fordgobike2018, aes(x = start_station_longitude, y = start_station_latitude, color  = clust, alpha = 0.1), size = 0.2, shape = 19) +
  theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank(),
        axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(),
        legend.position="none")
ggsave(filename="bayarea.jpg", width = 4, height = 4, units = "cm", plot=last_plot())

ggmap(bayarea) +
  geom_point(data = fordgobike2018, aes(x = start_station_longitude, y = start_station_latitude, color  = clust, alpha = 0.1), size = 1, shape = 19) +
  ggtitle("Bay Area Ford Go Bike stations")

Gender of users

fordgobike2018 %>% ggplot(aes(x=member_gender, y=duration_sec)) + geom_bar(stat="Identity") +
  ggtitle("Bay Area")

oakland %>% ggplot(aes(x=member_gender, y=duration_sec)) + geom_bar(stat="Identity") +
  ggtitle("Oakland")

Duration of rides in the Bay Area

fordgobike2018 %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() +
  geom_density(aes(y=..density..)) 

fordgobike2018 %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() +
  geom_density(aes(y=..density..)) 

fordgobike2018 %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(member_gender ~ .)

fordgobike2018 %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(member_gender ~ .)

Durations of rides in Oakland

oakland %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() +
  geom_density(aes(y=..density..)) 

oakland %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() +
  geom_density(aes(y=..density..)) 

oakland %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(member_gender ~ .)

oakland %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(member_gender ~ .)

Duration by City

fordgobike2018 %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() +
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

fordgobike2018 %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() +
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

fordgobike2018 %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

fordgobike2018 %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

Duration in Oakland

oakland %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() +
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

oakland %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() +
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

oakland %>% ggplot(aes(x=duration_sec, y=..density..)) + 
  scale_x_continuous(limits = c(0, 10000)) +
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

oakland %>% ggplot(aes(log(x=duration_sec), y=..density..)) + 
  geom_histogram() + 
  geom_density(aes(y=..density..)) +
  facet_grid(clust ~ .) 

fordgobike2018 %>% filter(clust == 1) %>% 
  group_by( member_gender ) %>%
  summarize(dur_mean = mean(duration_sec), dur_sd = sd(duration_sec)) %>%
  kable(format = "rst")


=============  =========  ========
member_gender   dur_mean    dur_sd
=============  =========  ========
Female          861.2938  2521.980
Male            690.1984  2130.362
Other           914.9140  2826.456
NA             2230.1873  6355.476
=============  =========  ========
fordgobike2018 %>% filter(clust == 2) %>% 
  group_by( member_gender ) %>%
  summarize(dur_mean = mean(duration_sec), dur_sd = sd(duration_sec)) %>%
  kable(format = "rst")


=============  =========  ========
member_gender   dur_mean    dur_sd
=============  =========  ========
Female          928.4383  2306.678
Male            748.3416  1876.665
Other           920.9302  2815.948
NA             2224.1842  5628.010
=============  =========  ========
fordgobike2018 %>% filter(clust == 3) %>% 
  group_by( member_gender ) %>%
  summarize(dur_mean = mean(duration_sec), dur_sd = sd(duration_sec)) %>%
  kable(format = "rst")


=============  =========  ========
member_gender   dur_mean    dur_sd
=============  =========  ========
Female          977.3565  3121.170
Male            752.0847  2361.596
Other          1158.0862  4597.671
NA             2506.8540  6302.026
=============  =========  ========
oakland %>%
  group_by( member_gender ) %>%
  summarize(dur_mean = mean(duration_sec), dur_sd = sd(duration_sec)) %>%
  kable(format = "rst")


=============  =========  ========
member_gender   dur_mean    dur_sd
=============  =========  ========
Female          861.2938  2521.980
Male            690.1984  2130.362
Other           914.9140  2826.456
NA             2230.1873  6355.476
=============  =========  ========
LS0tDQp0aXRsZTogIkZvcmQgR28gQmlrZSINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQpJbiB0aGlzIG5vdGVib29rIEkgZG93bmxvYWQgYW5kIHVuemlwIHRoZSBbRm9yZCBHbyBCaWtlXShodHRwczovL3d3dy5mb3JkZ29iaWtlLmNvbS8pIFtkYXRhXShodHRwczovL3d3dy5mb3JkZ29iaWtlLmNvbS9zeXN0ZW0tZGF0YSkuIA0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeSh0aWN0b2MpDQpsaWJyYXJ5KGdnbWFwKQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShmb3JjYXRzKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KYGBgDQoNClNldCB3b3JraW5nIGRpcmVjdG9yeS4NCg0KYGBge3J9DQpzZXR3ZCgifi9HaXRIdWIvU3RhdDY2MjAvZm9yZGdvYmlrZSIpDQpgYGANCg0KQ3JlYXRlIGEgZGlyZWN0b3J5IC9kYXRhIGluIHlvdXIgZGlyZWN0b3J5LiAgRG93bmxvYWQgdGhlIGZpbGVzLiAgRmlyc3Qgb25lIGlzIG5vdCB6aXBwZWQsIHRoZSByZW1haW5pbmcgYXJlIHppcHBlZC4NCg0KYGBge3J9DQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxNy1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdiINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxNy1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdiIsIG1ldGhvZD0iY3VybCIpDQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxODAxLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxODAxLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsIG1ldGhvZD0iY3VybCIpDQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxODAyLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxODAyLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsIG1ldGhvZD0iY3VybCIpDQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxODAzLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxODAzLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsIG1ldGhvZD0iY3VybCIpDQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxODA0LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxODA0LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsIG1ldGhvZD0iY3VybCIpDQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxODA1LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxODA1LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsIG1ldGhvZD0iY3VybCIpDQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxODA2LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxODA2LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsIG1ldGhvZD0iY3VybCIpDQpVUkwgPC0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9mb3JkZ29iaWtlLWRhdGEvMjAxODA3LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9ICIuL2RhdGEvMjAxODA3LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsIG1ldGhvZD0iY3VybCIpDQpgYGANCg0KTG9vcCBvdmVyIHRoZSBvbmUgdmFsdWUgaW4gdGhlIHVybCBhbmQgZmlsZW5hbWUgdGhhdCBjaGFuZ2VzLg0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KVVJMIDwtICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZm9yZGdvYmlrZS1kYXRhLzIwMTctZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YiDQpkb3dubG9hZC5maWxlKFVSTCwgZGVzdGZpbGUgPSAiLi9kYXRhLzIwMTctZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YiLCBtZXRob2Q9ImN1cmwiKQ0KDQpmb3IgKGkgaW4gMTo3KSB7DQpVUkwgPC0gcGFzdGUwKCJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZm9yZGdvYmlrZS1kYXRhLzIwMTgwIixpLCItZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YuemlwIikNCmRvd25sb2FkLmZpbGUoVVJMLCBkZXN0ZmlsZSA9IHBhc3RlMCgiLi9kYXRhLzIwMTgwIixpLCItZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YuemlwIiksIG1ldGhvZD0iY3VybCIpDQp9DQpgYGANCg0KDQoNClVuemlwIGRvd25sb2FkZWQgZmlsZXMuDQoNCmBgYHtyfQ0KdW56aXAoIi4vZGF0YS8yMDE4MDEtZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YuemlwIixleGRpcj0iLi9kYXRhIikNCnVuemlwKCIuL2RhdGEvMjAxODAyLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsZXhkaXI9Ii4vZGF0YSIpDQp1bnppcCgiLi9kYXRhLzIwMTgwMy1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdi56aXAiLGV4ZGlyPSIuL2RhdGEiKQ0KdW56aXAoIi4vZGF0YS8yMDE4MDQtZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YuemlwIixleGRpcj0iLi9kYXRhIikNCnVuemlwKCIuL2RhdGEvMjAxODA1LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCIsZXhkaXI9Ii4vZGF0YSIpDQp1bnppcCgiLi9kYXRhLzIwMTgwNi1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdi56aXAiLGV4ZGlyPSIuL2RhdGEiKQ0KdW56aXAoIi4vZGF0YS8yMDE4MDctZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YuemlwIixleGRpcj0iLi9kYXRhIikNCmBgYA0KDQpDbGVhbiB1cCBkYXRhIGRpcmVjdG9yeS4NCg0KYGBge3J9DQpmbiA8LSAiLi9kYXRhLzIwMTgwMS1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdi56aXAiDQppZiAoZmlsZS5leGlzdHMoZm4pKSBmaWxlLnJlbW92ZShmbikNCmZuIDwtICIuL2RhdGEvMjAxODAyLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmlmIChmaWxlLmV4aXN0cyhmbikpIGZpbGUucmVtb3ZlKGZuKQ0KZm4gPC0gIi4vZGF0YS8yMDE4MDMtZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YuemlwIg0KaWYgKGZpbGUuZXhpc3RzKGZuKSkgZmlsZS5yZW1vdmUoZm4pDQpmbiA8LSAiLi9kYXRhLzIwMTgwNC1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdi56aXAiDQppZiAoZmlsZS5leGlzdHMoZm4pKSBmaWxlLnJlbW92ZShmbikNCmZuIDwtICIuL2RhdGEvMjAxODA1LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2LnppcCINCmlmIChmaWxlLmV4aXN0cyhmbikpIGZpbGUucmVtb3ZlKGZuKQ0KZm4gPC0gIi4vZGF0YS8yMDE4MDYtZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YuemlwIg0KaWYgKGZpbGUuZXhpc3RzKGZuKSkgZmlsZS5yZW1vdmUoZm4pDQpmbiA8LSAiLi9kYXRhLzIwMTgwNy1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdi56aXAiDQppZiAoZmlsZS5leGlzdHMoZm4pKSBmaWxlLnJlbW92ZShmbikNCmBgYA0KDQpSZWFkIHRoZS5jc3YgZmlsZXMNCg0KYGBge3IgbWVzc2FnZT1GQUxTRX0NCmZvcmRnb2Jpa2UyMDE3IDwtIHJlYWRfY3N2KGZpbGU9Ii4vZGF0YS8yMDE3LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2IikNCmZvcmRnb2Jpa2UyMDE4MDEgPC0gcmVhZF9jc3YoZmlsZT0iLi9kYXRhLzIwMTgwMS1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdiIpDQpmb3JkZ29iaWtlMjAxODAyIDwtIHJlYWRfY3N2KGZpbGU9Ii4vZGF0YS8yMDE4MDItZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YiKQ0KZm9yZGdvYmlrZTIwMTgwMyA8LSByZWFkX2NzdihmaWxlPSIuL2RhdGEvMjAxODAzLWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2IikNCmZvcmRnb2Jpa2UyMDE4MDQgPC0gcmVhZF9jc3YoZmlsZT0iLi9kYXRhLzIwMTgwNC1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdiIpDQpmb3JkZ29iaWtlMjAxODA1IDwtIHJlYWRfY3N2KGZpbGU9Ii4vZGF0YS8yMDE4MDUtZm9yZGdvYmlrZS10cmlwZGF0YS5jc3YiKQ0KZm9yZGdvYmlrZTIwMTgwNiA8LSByZWFkX2NzdihmaWxlPSIuL2RhdGEvMjAxODA2LWZvcmRnb2Jpa2UtdHJpcGRhdGEuY3N2IikNCmZvcmRnb2Jpa2UyMDE4MDcgPC0gcmVhZF9jc3YoZmlsZT0iLi9kYXRhLzIwMTgwNy1mb3JkZ29iaWtlLXRyaXBkYXRhLmNzdiIpDQpgYGANCg0KQ2hlY2sgdGhlIGhlYWQoKSBhbmQgdGFpbCgpIG9mIHRoZSBkYXRhLmZyYW1lcyB0aGF0IGFyZSBsb2FkZWQuDQoNCg0KYGBge3J9DQpoZWFkKGZvcmRnb2Jpa2UyMDE3KSANCmhlYWQoZm9yZGdvYmlrZTIwMTgwMSkNCmhlYWQoZm9yZGdvYmlrZTIwMTgwMikNCmhlYWQoZm9yZGdvYmlrZTIwMTgwMykNCmhlYWQoZm9yZGdvYmlrZTIwMTgwNCkNCmhlYWQoZm9yZGdvYmlrZTIwMTgwNSkNCmhlYWQoZm9yZGdvYmlrZTIwMTgwNikNCmhlYWQoZm9yZGdvYmlrZTIwMTgwNykNCmBgYA0KDQoNCg0KYGBge3J9DQp0YWlsKGZvcmRnb2Jpa2UyMDE3KQ0KdGFpbChmb3JkZ29iaWtlMjAxODAxKQ0KdGFpbChmb3JkZ29iaWtlMjAxODAyKQ0KdGFpbChmb3JkZ29iaWtlMjAxODAzKQ0KdGFpbChmb3JkZ29iaWtlMjAxODA0KQ0KdGFpbChmb3JkZ29iaWtlMjAxODA1KQ0KdGFpbChmb3JkZ29iaWtlMjAxODA2KQ0KdGFpbChmb3JkZ29iaWtlMjAxODA3KQ0KYGBgDQoNCg0KYGBge3J9DQpkaW0oZm9yZGdvYmlrZTIwMTcpDQoNCmZvcmRnb2Jpa2UyMDE3ICU+JSBjb3VudCgpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpmb3JkZ29iaWtlMjAxODAxICU+JSBjb3VudCgpDQpmb3JkZ29iaWtlMjAxODAyICU+JSBjb3VudCgpDQpmb3JkZ29iaWtlMjAxODAzICU+JSBjb3VudCgpDQpmb3JkZ29iaWtlMjAxODA0ICU+JSBjb3VudCgpDQpmb3JkZ29iaWtlMjAxODA1ICU+JSBjb3VudCgpDQpmb3JkZ29iaWtlMjAxODA2ICU+JSBjb3VudCgpDQpmb3JkZ29iaWtlMjAxODA3ICU+JSBjb3VudCgpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KZ2xpbXBzZShmb3JkZ29iaWtlMjAxODA1KQ0KZ2xpbXBzZShmb3JkZ29iaWtlMjAxODA2KQ0KZ2xpbXBzZShmb3JkZ29iaWtlMjAxODA3KQ0KDQoNCmZvcmRnb2Jpa2UyMDE4MDYgPC0gZm9yZGdvYmlrZTIwMTgwNiAlPiUNCiAgICAgICAgbXV0YXRlKHN0YXJ0X3N0YXRpb25faWQgPSBhcy5pbnRlZ2VyKHN0YXJ0X3N0YXRpb25faWQpLA0KICAgICAgICAgICAgICAgZW5kX3N0YXRpb25faWQ9IGFzLmludGVnZXIoc3RhcnRfc3RhdGlvbl9pZCkgKQ0KDQpmb3JkZ29iaWtlMjAxODA3IDwtIGZvcmRnb2Jpa2UyMDE4MDcgJT4lDQogICAgICAgIG11dGF0ZShzdGFydF9zdGF0aW9uX2lkID0gYXMuaW50ZWdlcihzdGFydF9zdGF0aW9uX2lkKSwNCiAgICAgICAgICAgICAgIGVuZF9zdGF0aW9uX2lkPSBhcy5pbnRlZ2VyKHN0YXJ0X3N0YXRpb25faWQpICkNCg0KZm9yZGdvYmlrZTIwMTggPC0gYmluZF9yb3dzKGZvcmRnb2Jpa2UyMDE4MDEsIGZvcmRnb2Jpa2UyMDE4MDIsIGZvcmRnb2Jpa2UyMDE4MDMsIGZvcmRnb2Jpa2UyMDE4MDQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZGdvYmlrZTIwMTgwNSwgZm9yZGdvYmlrZTIwMTgwNiwgZm9yZGdvYmlrZTIwMTgwNykNCg0KZ2xpbXBzZShmb3JkZ29iaWtlMjAxOCkNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCmZvcmRnb2Jpa2UyMDE4ICU+JSBzZWxlY3Qoc3RhcnRfc3RhdGlvbl9pZCxzdGFydF9zdGF0aW9uX25hbWUsIHN0YXJ0X3N0YXRpb25fbGF0aXR1ZGUsc3RhcnRfc3RhdGlvbl9sb25naXR1ZGUpICU+JQ0KICBhcnJhbmdlKHN0YXJ0X3N0YXRpb25faWQpICU+JQ0KICBkaXN0aW5jdCgpICU+JQ0KICBoZWFkKCkgJT4lDQogIGthYmxlKCwgZm9ybWF0ID0gInJzdCIpDQpgYGANCg0KDQoNCg0KYGBge3J9DQpkaW0oZm9yZGdvYmlrZTIwMTcpDQoNCmZvcmRnb2Jpa2UyMDE3ICU+JSBjb3VudCgpDQoNCm5yb3coZm9yZGdvYmlrZTIwMTgwMSkgKyBucm93KGZvcmRnb2Jpa2UyMDE4MDIpICsgbnJvdyhmb3JkZ29iaWtlMjAxODAzKSArIG5yb3coZm9yZGdvYmlrZTIwMTgwNCkNCg0KZGltKGZvcmRnb2Jpa2UyMDE4KQ0KDQpmb3JkZ29iaWtlMjAxOCAlPiUgY291bnQoKQ0KDQpmb3JkZ29iaWtlIDwtIGJpbmRfcm93cyhmb3JkZ29iaWtlMjAxNywgZm9yZGdvYmlrZTIwMTgpDQoNCmRpbShmb3JkZ29iaWtlKQ0KDQoNCmZvcmRnb2Jpa2UgJT4lIGNvdW50KCkNCg0KZGltKGZvcmRnb2Jpa2UpDQoNCmZvcmRnb2Jpa2UgPC0gZm9yZGdvYmlrZSAlPiUgbXV0YXRlKGFnZSA9IDIwMTggLSBtZW1iZXJfYmlydGhfeWVhcikNCg0KZm9yZGdvYmlrZSAlPiUgY291bnQoKSANCg0KZGltKGZvcmRnb2Jpa2UpDQoNCmZvcmRnb2Jpa2UgPC0gZm9yZGdvYmlrZSAlPiUgbXV0YXRlKHllYXI9eWVhcihzdGFydF90aW1lKSwgbW9udGg9bW9udGgoc3RhcnRfdGltZSksIGRheT1kYXkoc3RhcnRfdGltZSkgKQ0KDQpmb3JkZ29iaWtlICU+JSBjb3VudCgpIA0KDQpkaW0oZm9yZGdvYmlrZSkNCg0KZm9yZGdvYmlrZSA8LSBmb3JkZ29iaWtlICU+JSBtdXRhdGUod2Vla19kYXkgPSB3ZGF5KHN0YXJ0X3RpbWUpICkNCg0KbGV2ZWxzIDwtIGMoIk0iLCJUIiwiVyIsIlRIIiwiRiIsIlNBVCIsIlNVTiIpDQoNCmZvcmRnb2Jpa2Ukd2Vla19kYXkgPC0gZmFjdG9yKGZvcmRnb2Jpa2Ukd2Vla19kYXksIGxldmVscyA9IGxldmVscykNCg0KZm9yZGdvYmlrZSAlPiUgY291bnQoKSANCg0KZGltKGZvcmRnb2Jpa2UpDQoNCmBgYA0KDQoNCg0KYGBge3J9DQoNCnRvZGF5KCkNCg0Kbm93KCkNCmBgYA0KDQpBZ2UNCg0KYGBge3Igd2FybmluZz1GQUxTRX0NCmZvcmRnb2Jpa2UgJT4lIGdyb3VwX2J5KCBhZ2UgKSAlPiUgY291bnQoKQ0KDQpmb3JkZ29iaWtlICU+JSBncm91cF9ieSggYWdlICkgJT4lIHN1bW1hcnkoKQ0KDQpza2ltKGZvcmRnb2Jpa2UpDQoNCmZvcmRnb2Jpa2UgJT4lIGdncGxvdChhZXMoeD1hZ2UpKSArIGdlb21faGlzdG9ncmFtKCkNCg0KZm9yZGdvYmlrZSAlPiUgZmlsdGVyKGFnZSA8PSA4MCkgJT4lIGdncGxvdChhZXMoeD1hZ2UpKSArIGdlb21faGlzdG9ncmFtKCkNCg0KZm9yZGdvYmlrZSAlPiUgZmlsdGVyKGFnZSA8PSAxMDApICU+JSBnZ3Bsb3QoYWVzKHg9YWdlKSkgKyBnZW9tX2hpc3RvZ3JhbSgpDQoNCmZvcmRnb2Jpa2UgJT4lIGZpbHRlcihhZ2UgPiAxMDApICU+JSBnZ3Bsb3QoYWVzKHg9YWdlKSkgKyBnZW9tX2hpc3RvZ3JhbSgpDQpgYGANCg0KDQpgYGB7cn0NCmZvcmRnb2Jpa2UgJT4lIGdyb3VwX2J5KCBtZW1iZXJfZ2VuZGVyLCBhZ2UgKSAlPiUgY291bnQoKQ0KDQpmb3JkZ29iaWtlICU+JSBnZ3Bsb3QoYWVzKHg9YWdlLCBjbGFzcz1tZW1iZXJfZ2VuZGVyKSkgKyBnZW9tX2hpc3RvZ3JhbSgpDQoNCmZvcmRnb2Jpa2UgJT4lIGdncGxvdChhZXMoeD1hZ2UsIGNsYXNzPW1lbWJlcl9nZW5kZXIpKSArIGdlb21faGlzdG9ncmFtKGFlcyh5PS4uZGVuc2l0eS4uKSkNCg0KZm9yZGdvYmlrZSAlPiUgZmlsdGVyKGFnZSA8PSA4MCkgJT4lIGdncGxvdChhZXMoeD1hZ2UpKSArIGdlb21faGlzdG9ncmFtKCkNCmBgYA0KDQpgYGB7cn0NCmZvcmRnb2Jpa2UgJT4lIGZpbHRlcihhZ2UgPD0gODApICU+JSBnZ3Bsb3QoYWVzKHg9YWdlLCBjb2xvcj1tZW1iZXJfZ2VuZGVyKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0ocG9zaXRpb249ImlkZW50aXR5IikgKyANCiAgZmFjZXRfZ3JpZChtZW1iZXJfZ2VuZGVyIH4gLikNCg0KZm9yZGdvYmlrZSAlPiUgZmlsdGVyKGFnZSA8PSA4MCkgJT4lIGdncGxvdChhZXMoeD1hZ2UsIGNvbG9yPW1lbWJlcl9nZW5kZXIpKSArIA0KICBnZW9tX2hpc3RvZ3JhbShhZXMoeT0uLmRlbnNpdHkuLikscG9zaXRpb249ImlkZW50aXR5IikgKyANCiAgZmFjZXRfZ3JpZChtZW1iZXJfZ2VuZGVyIH4gLikNCg0KYGBgDQoNClllYXIgYW5kIGRheSBvZiB3ZWVrLg0KDQpgYGB7cn0NCg0KZm9yZGdvYmlrZSAlPiUgZ2dwbG90KGFlcyh4PXllYXIpKSArIGdlb21fYmFyKCkNCmZvcmRnb2Jpa2UgJT4lIGdncGxvdChhZXMoeD1tb250aCkpICsgZ2VvbV9iYXIoKSArIGZhY2V0X2dyaWQoeWVhciB+IC4pDQpmb3JkZ29iaWtlICU+JSBnZ3Bsb3QoYWVzKHg9ZGF5KSkgKyBnZW9tX2JhcigpICsgZmFjZXRfZ3JpZCh5ZWFyIH4gLikNCg0KDQpgYGANCg0KYGBge3J9DQpmb3JkZ29iaWtlMjAxOCA8LSBmb3JkZ29iaWtlMjAxOCAlPiUgZmlsdGVyKHN0YXJ0X3N0YXRpb25fbGF0aXR1ZGUgPCAzOCAmIHN0YXJ0X3N0YXRpb25fbG9uZ2l0dWRlIDwgMTIwICkNCg0KZm9yZGdvYmlrZV9zdWJzZXQgPC0gZm9yZGdvYmlrZTIwMTggJT4lIHNlbGVjdChzdGFydF9zdGF0aW9uX2xvbmdpdHVkZSxzdGFydF9zdGF0aW9uX2xhdGl0dWRlKQ0KDQpmb3JkZ29iaWtlX3N1YnNldCAlPiUgZ2dwbG90KGFlcyh4PXN0YXJ0X3N0YXRpb25fbG9uZ2l0dWRlLCB5PXN0YXJ0X3N0YXRpb25fbGF0aXR1ZGUpKSArDQogIGdlb21fcG9pbnQoKQ0KYGBgDQoNCg0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGJpZ2FuYWx5dGljcykNCg0KIyBydW4gaW4gcGFyYWxsZWwsIHRoZSBkb01DIHBhY2thZ2UgcnVucyBvbiBXaW5kb3dzDQpsaWJyYXJ5KGRvUGFyYWxsZWwpDQpyZWdpc3RlckRvUGFyYWxsZWwoY29yZXMgPSA4KQ0KDQpoZWFkKGZvcmRnb2Jpa2UyMDE4KQ0KDQpmb3JkZ29iaWtlX3N1YnNldDIgPC0gYXMubWF0cml4KGZvcmRnb2Jpa2Vfc3Vic2V0KQ0KDQpzZXQuc2VlZCA8LSAxMjM0NTQzMjENCg0KdGljKCkNCg0KY2wgPC0gYmlna21lYW5zKGZvcmRnb2Jpa2Vfc3Vic2V0MiwgMywgbnN0YXJ0PTgpDQoNCnRvYygpDQoNCmhlYWQoY2wkY2x1c3RlcikNCg0KY2wkY2VudGVycw0KDQpmb3JkZ29iaWtlX3N1YnNldCAlPiUgZ2dwbG90KGFlcyh4PXN0YXJ0X3N0YXRpb25fbG9uZ2l0dWRlLCB5PXN0YXJ0X3N0YXRpb25fbGF0aXR1ZGUsIGNvbG9yPWNsJGNsdXN0ZXIpKSArDQogIGdlb21fcG9pbnQoKQ0KDQpmb3JkZ29iaWtlMjAxOCA8LSBmb3JkZ29iaWtlMjAxOCAlPiUgbXV0YXRlKGNsdXN0ID0gY2wkY2x1c3RlcikNCg0KYGBgDQoNCg0KYGBge3J9DQojIENpdHkgb2YgT2FrbGFuZCAgYygtMTIyLjI3MTEsIDM3LjgwNDQpICkNCg0KIyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDYyMTI1MC9zaW1wbGUtYXBwcm9hY2gtdG8tYXNzaWduaW5nLWNsdXN0ZXJzLWZvci1uZXctZGF0YS1hZnRlci1rLW1lYW5zLWNsdXN0ZXJpbmcNCg0KY2wkY2VudGVycw0KDQpjbG9zZXN0LmNsdXN0ZXIgPC0gZnVuY3Rpb24oeCkgew0KICBjbHVzdGVyLmRpc3QgPC0gYXBwbHkoY2wkY2VudGVycywgMSwgZnVuY3Rpb24oeSkgc3FydChzdW0oKHgteSleMikpKQ0KICByZXR1cm4od2hpY2gubWluKGNsdXN0ZXIuZGlzdClbMV0pDQp9DQoNCm9hayA8LSBjbG9zZXN0LmNsdXN0ZXIoYygtMTIyLjI3MTEsIDM3LjgwNDQpKQ0Kb2FrDQoNCm9ha2xhbmQgPC0gZm9yZGdvYmlrZTIwMTggJT4lIGZpbHRlcihjbHVzdCA9PSBvYWspDQoNCm9ha2xhbmQgJT4lIGdncGxvdChhZXMoeD1zdGFydF9zdGF0aW9uX2xvbmdpdHVkZSwgeT1zdGFydF9zdGF0aW9uX2xhdGl0dWRlKSkgKw0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQoNCg0KYGBge3J9DQp0aWMoKQ0KDQpjbC5rbSA8LSBrbWVhbnMoZm9yZGdvYmlrZV9zdWJzZXQsIDMpDQoNCnRvYygpDQoNCmNsLmttJGNlbnRlcnMNCg0KIyBDaXR5IG9mIE9ha2xhbmQgIGMoLTEyMi4yNzExLCAzNy44MDQ0KSApDQoNCmZvcmRnb2Jpa2Vfc3Vic2V0ICU+JSBnZ3Bsb3QoYWVzKHg9c3RhcnRfc3RhdGlvbl9sb25naXR1ZGUsIHk9c3RhcnRfc3RhdGlvbl9sYXRpdHVkZSwgY29sb3I9Y2wua20kY2x1c3RlcikpICsNCiAgZ2VvbV9wb2ludCgpDQogIA0KDQpgYGANCg0KYGBge3J9DQpkaW0oY2wkY2VudGVycykNCg0KYmF5YXJlYSA8LSBnZXRfbWFwKGxvY2F0aW9uID0gYyhsb249Y2wkY2VudGVyc1tvYWssMV0sIGxhdD1jbCRjZW50ZXJzW29haywyXSksIHpvb20gPSAxMiwgbWFwdHlwZSA9ICJyb2FkbWFwIikNCg0KZ2dtYXAoYmF5YXJlYSkNCg0KZ2dtYXAoYmF5YXJlYSkgKw0KICBnZW9tX3BvaW50KGRhdGEgPSBvYWtsYW5kLCBhZXMoeCA9IHN0YXJ0X3N0YXRpb25fbG9uZ2l0dWRlLCB5ID0gc3RhcnRfc3RhdGlvbl9sYXRpdHVkZSksIHNpemUgPSAwLjIsIHNoYXBlID0gMTkpICsNCiAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSwgYXhpcy50ZXh0Lng9ZWxlbWVudF9ibGFuaygpLCBheGlzLnRpY2tzLng9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQueT1lbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MueT1lbGVtZW50X2JsYW5rKCkNCiAgICAgICAgKQ0KDQpnZ3NhdmUoZmlsZW5hbWU9Im9ha2xhbmQuanBnIiwgd2lkdGggPSA0LCBoZWlnaHQgPSA0LCB1bml0cyA9ICJjbSIsIHBsb3Q9bGFzdF9wbG90KCkpDQoNCmdnbWFwKGJheWFyZWEpICsNCiAgZ2VvbV9wb2ludChkYXRhID0gb2FrbGFuZCwgYWVzKHggPSBzdGFydF9zdGF0aW9uX2xvbmdpdHVkZSwgeSA9IHN0YXJ0X3N0YXRpb25fbGF0aXR1ZGUpLCBzaXplID0gMSwgc2hhcGUgPSAxOSkgKw0KICBnZ3RpdGxlKCJPYWtsYW5kIEZvcmQgR28gQmlrZSBzdGF0aW9ucyIpDQpgYGANCg0KDQoNCmBgYHtyfQ0KYmF5YXJlYSA8LSBnZXRfbWFwKGxvY2F0aW9uID0gImhheXdhcmQiKQ0KDQpnZ21hcChiYXlhcmVhKQ0KDQpnZ21hcChiYXlhcmVhKSArDQogIGdlb21fcG9pbnQoZGF0YSA9IGZvcmRnb2Jpa2UyMDE4LCBhZXMoeCA9IHN0YXJ0X3N0YXRpb25fbG9uZ2l0dWRlLCB5ID0gc3RhcnRfc3RhdGlvbl9sYXRpdHVkZSwgY29sb3IgID0gY2x1c3QsIGFscGhhID0gMC4xKSwgc2l6ZSA9IDAuMiwgc2hhcGUgPSAxOSkgKw0KICB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpLCBheGlzLnRleHQueD1lbGVtZW50X2JsYW5rKCksIGF4aXMudGlja3MueD1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGl0bGUueT1lbGVtZW50X2JsYW5rKCksIGF4aXMudGV4dC55PWVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aWNrcy55PWVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSJub25lIikNCg0KZ2dzYXZlKGZpbGVuYW1lPSJiYXlhcmVhLmpwZyIsIHdpZHRoID0gNCwgaGVpZ2h0ID0gNCwgdW5pdHMgPSAiY20iLCBwbG90PWxhc3RfcGxvdCgpKQ0KDQpnZ21hcChiYXlhcmVhKSArDQogIGdlb21fcG9pbnQoZGF0YSA9IGZvcmRnb2Jpa2UyMDE4LCBhZXMoeCA9IHN0YXJ0X3N0YXRpb25fbG9uZ2l0dWRlLCB5ID0gc3RhcnRfc3RhdGlvbl9sYXRpdHVkZSwgY29sb3IgID0gY2x1c3QsIGFscGhhID0gMC4xKSwgc2l6ZSA9IDEsIHNoYXBlID0gMTkpICsNCiAgZ2d0aXRsZSgiQmF5IEFyZWEgRm9yZCBHbyBCaWtlIHN0YXRpb25zIikNCmBgYA0KDQoNCkdlbmRlciBvZiB1c2Vycw0KDQpgYGB7cn0NCg0KZm9yZGdvYmlrZTIwMTggJT4lIGdncGxvdChhZXMoeD1tZW1iZXJfZ2VuZGVyLCB5PWR1cmF0aW9uX3NlYykpICsgZ2VvbV9iYXIoc3RhdD0iSWRlbnRpdHkiKSArDQogIGdndGl0bGUoIkJheSBBcmVhIikNCg0Kb2FrbGFuZCAlPiUgZ2dwbG90KGFlcyh4PW1lbWJlcl9nZW5kZXIsIHk9ZHVyYXRpb25fc2VjKSkgKyBnZW9tX2JhcihzdGF0PSJJZGVudGl0eSIpICsNCiAgZ2d0aXRsZSgiT2FrbGFuZCIpDQpgYGANCg0KRHVyYXRpb24gb2YgcmlkZXMgaW4gdGhlIEJheSBBcmVhDQoNCmBgYHtyfQ0KZm9yZGdvYmlrZTIwMTggJT4lIGdncGxvdChhZXMoeD1kdXJhdGlvbl9zZWMsIHk9Li5kZW5zaXR5Li4pKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDAwMCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oKSArDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpIA0KDQpmb3JkZ29iaWtlMjAxOCAlPiUgZ2dwbG90KGFlcyhsb2coeD1kdXJhdGlvbl9zZWMpLCB5PS4uZGVuc2l0eS4uKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oKSArDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpIA0KDQpmb3JkZ29iaWtlMjAxOCAlPiUgZ2dwbG90KGFlcyh4PWR1cmF0aW9uX3NlYywgeT0uLmRlbnNpdHkuLikpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMDAwKSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpICsgDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpICsNCiAgZmFjZXRfZ3JpZChtZW1iZXJfZ2VuZGVyIH4gLikNCg0KZm9yZGdvYmlrZTIwMTggJT4lIGdncGxvdChhZXMobG9nKHg9ZHVyYXRpb25fc2VjKSwgeT0uLmRlbnNpdHkuLikpICsgDQogIGdlb21faGlzdG9ncmFtKCkgKyANCiAgZ2VvbV9kZW5zaXR5KGFlcyh5PS4uZGVuc2l0eS4uKSkgKw0KICBmYWNldF9ncmlkKG1lbWJlcl9nZW5kZXIgfiAuKQ0KYGBgDQoNCkR1cmF0aW9ucyBvZiByaWRlcyBpbiBPYWtsYW5kDQoNCg0KYGBge3J9DQpvYWtsYW5kICU+JSBnZ3Bsb3QoYWVzKHg9ZHVyYXRpb25fc2VjLCB5PS4uZGVuc2l0eS4uKSkgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwMDApKSArDQogIGdlb21faGlzdG9ncmFtKCkgKw0KICBnZW9tX2RlbnNpdHkoYWVzKHk9Li5kZW5zaXR5Li4pKSANCg0Kb2FrbGFuZCAlPiUgZ2dwbG90KGFlcyhsb2coeD1kdXJhdGlvbl9zZWMpLCB5PS4uZGVuc2l0eS4uKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oKSArDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpIA0KDQpvYWtsYW5kICU+JSBnZ3Bsb3QoYWVzKHg9ZHVyYXRpb25fc2VjLCB5PS4uZGVuc2l0eS4uKSkgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwMDApKSArDQogIGdlb21faGlzdG9ncmFtKCkgKyANCiAgZ2VvbV9kZW5zaXR5KGFlcyh5PS4uZGVuc2l0eS4uKSkgKw0KICBmYWNldF9ncmlkKG1lbWJlcl9nZW5kZXIgfiAuKQ0KDQpvYWtsYW5kICU+JSBnZ3Bsb3QoYWVzKGxvZyh4PWR1cmF0aW9uX3NlYyksIHk9Li5kZW5zaXR5Li4pKSArIA0KICBnZW9tX2hpc3RvZ3JhbSgpICsgDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpICsNCiAgZmFjZXRfZ3JpZChtZW1iZXJfZ2VuZGVyIH4gLikNCmBgYA0KDQpEdXJhdGlvbiBieSBDaXR5DQoNCmBgYHtyfQ0KZm9yZGdvYmlrZTIwMTggJT4lIGdncGxvdChhZXMoeD1kdXJhdGlvbl9zZWMsIHk9Li5kZW5zaXR5Li4pKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDAwMCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oKSArDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpICsNCiAgZmFjZXRfZ3JpZChjbHVzdCB+IC4pIA0KDQpmb3JkZ29iaWtlMjAxOCAlPiUgZ2dwbG90KGFlcyhsb2coeD1kdXJhdGlvbl9zZWMpLCB5PS4uZGVuc2l0eS4uKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oKSArDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpICsNCiAgZmFjZXRfZ3JpZChjbHVzdCB+IC4pIA0KDQpmb3JkZ29iaWtlMjAxOCAlPiUgZ2dwbG90KGFlcyh4PWR1cmF0aW9uX3NlYywgeT0uLmRlbnNpdHkuLikpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMDAwKSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpICsgDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpICsNCiAgZmFjZXRfZ3JpZChjbHVzdCB+IC4pIA0KDQpmb3JkZ29iaWtlMjAxOCAlPiUgZ2dwbG90KGFlcyhsb2coeD1kdXJhdGlvbl9zZWMpLCB5PS4uZGVuc2l0eS4uKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oKSArIA0KICBnZW9tX2RlbnNpdHkoYWVzKHk9Li5kZW5zaXR5Li4pKSArDQogIGZhY2V0X2dyaWQoY2x1c3QgfiAuKSANCmBgYA0KDQpEdXJhdGlvbiBpbiBPYWtsYW5kDQoNCmBgYHtyfQ0Kb2FrbGFuZCAlPiUgZ2dwbG90KGFlcyh4PWR1cmF0aW9uX3NlYywgeT0uLmRlbnNpdHkuLikpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMDAwKSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpICsNCiAgZ2VvbV9kZW5zaXR5KGFlcyh5PS4uZGVuc2l0eS4uKSkgKw0KICBmYWNldF9ncmlkKGNsdXN0IH4gLikgDQoNCm9ha2xhbmQgJT4lIGdncGxvdChhZXMobG9nKHg9ZHVyYXRpb25fc2VjKSwgeT0uLmRlbnNpdHkuLikpICsgDQogIGdlb21faGlzdG9ncmFtKCkgKw0KICBnZW9tX2RlbnNpdHkoYWVzKHk9Li5kZW5zaXR5Li4pKSArDQogIGZhY2V0X2dyaWQoY2x1c3QgfiAuKSANCg0Kb2FrbGFuZCAlPiUgZ2dwbG90KGFlcyh4PWR1cmF0aW9uX3NlYywgeT0uLmRlbnNpdHkuLikpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMDAwKSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpICsgDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpICsNCiAgZmFjZXRfZ3JpZChjbHVzdCB+IC4pIA0KDQpvYWtsYW5kICU+JSBnZ3Bsb3QoYWVzKGxvZyh4PWR1cmF0aW9uX3NlYyksIHk9Li5kZW5zaXR5Li4pKSArIA0KICBnZW9tX2hpc3RvZ3JhbSgpICsgDQogIGdlb21fZGVuc2l0eShhZXMoeT0uLmRlbnNpdHkuLikpICsNCiAgZmFjZXRfZ3JpZChjbHVzdCB+IC4pIA0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KZm9yZGdvYmlrZTIwMTggJT4lIGZpbHRlcihjbHVzdCA9PSAxKSAlPiUgDQogIGdyb3VwX2J5KCBtZW1iZXJfZ2VuZGVyICkgJT4lDQogIHN1bW1hcml6ZShkdXJfbWVhbiA9IG1lYW4oZHVyYXRpb25fc2VjKSwgZHVyX3NkID0gc2QoZHVyYXRpb25fc2VjKSkgJT4lDQogIGthYmxlKGZvcm1hdCA9ICJyc3QiKQ0KDQoNCmZvcmRnb2Jpa2UyMDE4ICU+JSBmaWx0ZXIoY2x1c3QgPT0gMikgJT4lIA0KICBncm91cF9ieSggbWVtYmVyX2dlbmRlciApICU+JQ0KICBzdW1tYXJpemUoZHVyX21lYW4gPSBtZWFuKGR1cmF0aW9uX3NlYyksIGR1cl9zZCA9IHNkKGR1cmF0aW9uX3NlYykpICU+JQ0KICBrYWJsZShmb3JtYXQgPSAicnN0IikNCg0KDQpmb3JkZ29iaWtlMjAxOCAlPiUgZmlsdGVyKGNsdXN0ID09IDMpICU+JSANCiAgZ3JvdXBfYnkoIG1lbWJlcl9nZW5kZXIgKSAlPiUNCiAgc3VtbWFyaXplKGR1cl9tZWFuID0gbWVhbihkdXJhdGlvbl9zZWMpLCBkdXJfc2QgPSBzZChkdXJhdGlvbl9zZWMpKSAlPiUNCiAga2FibGUoZm9ybWF0ID0gInJzdCIpDQoNCmBgYA0KDQoNCmBgYHtyfQ0Kb2FrbGFuZCAlPiUNCiAgZ3JvdXBfYnkoIG1lbWJlcl9nZW5kZXIgKSAlPiUNCiAgc3VtbWFyaXplKGR1cl9tZWFuID0gbWVhbihkdXJhdGlvbl9zZWMpLCBkdXJfc2QgPSBzZChkdXJhdGlvbl9zZWMpKSAlPiUNCiAga2FibGUoZm9ybWF0ID0gInJzdCIpDQoNCmBgYA0KDQoNCg==