Este documento de R Markdown desarrolla los pasos del análisis de datos del caso requisito para finalizar la formación certificada como Profesional de Análisis de Datos de Google.
- Introducción
- Escenario
- Preguntas
- Preparación y procesamiento de datos
- Análisis
- Acciones
El desarrollo de este caso es requisito para la culminación de la formación crtificada como Profesional de Análisis de Datos de Google.
Para su elabaración se siguieron los pasos del proceso de análisis de datos:
- Preguntar
- Preparar
- Procesar
- Análizar
- Compartir
- Actuar
Eres un analista de datos júnior que trabaja en el equipo de analistas de marketing de Cyclistic, una empresa de bicicletas compartidas de Chicago. La directora de marketing cree que el éxito futuro de la empresa depende de maximizar la cantidad de membresías anuales. Por lo tanto, tu equipo quiere entender qué diferencias existen en el uso de las bicicletas Cyclistic entre los ciclistas ocasionales y los miembros anuales. Sin embargo, antes de eso, los ejecutivos de Cyclistic deben aprobar tus recomendaciones; por eso, debes respaldar tu propuesta con una visión convincente de los datos y visualizaciones profesionales de los mismos.
¿En qué se diferencian los socios anuales y los ciclistas ocasionales con respecto al uso de las bicicletas de Cyclistic?
¿Por qué los ciclistas ocasionales comprarían membresías anuales de Cyclistic?
¿Cómo puede usar Cyclistic los medios digitales para influenciar a los ciclistas ocasionales a convertirse en miembros?
La directora Lily Moreno asgnó a este analista junior la primera pregunta.
- La información de Divvy Trip Data, es suministrada por Motivate International Inc., bajo esta licencia. El origen de los datos es directo de Cyclistic por lo tanto son confiables, originales, íntegros, actuales y citados (ROCCC).
- Una vez descargados los datos se realiza copia de los mismos para conservar su integridad, posteriormente se escogen los últimos doce (12) meses de datos para el análisis los cuales se encuentran en archivos .csv por cada mes.
- La herramienta seleccionada para el proceso de los datos es R Studio por su eficiencia en el manejo de archivos de gran tamaño.
Preparar:
Carga de librerias previa instalación de las mismas.
library(tidyverse) # análisis y manipulación de datos
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2) # visualización de datos
library(lubridate) # análisis y manipulación de datos
getwd() #Visualización del directorio de trabajo para la busqueda de los datos a analizar
## [1] "/Users/andresgomez/Documents/DA Projects/Caso Cyclistic"
Importación de los conjuntos de datos.
apr23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202304-divvy-tripdata.csv")
## Rows: 426590 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
may23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202305-divvy-tripdata.csv")
## Rows: 604827 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
jun23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202306-divvy-tripdata.csv")
## Rows: 719618 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
jul23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202307-divvy-tripdata.csv")
## Rows: 767650 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
ago23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202308-divvy-tripdata.csv")
## Rows: 771693 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
sep23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202309-divvy-tripdata.csv")
## Rows: 666371 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
oct23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202310-divvy-tripdata.csv")
## Rows: 537113 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
nov23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202311-divvy-tripdata.csv")
## Rows: 362518 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dec23 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202312-divvy-tripdata.csv")
## Rows: 224073 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
jan24 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202401-divvy-tripdata.csv")
## Rows: 144873 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
feb24 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202402-divvy-tripdata.csv")
## Rows: 223164 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
mar24 <- read_csv("/Users/andresgomez/Documents/DA Projects/Caso Cyclistic/data_csv/202403-divvy-tripdata.csv")
## Rows: 301687 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (7): ride_id, rideable_type, start_station_name, start_station_id, end_...
## dbl (4): start_lat, start_lng, end_lat, end_lng
## dttm (2): started_at, ended_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Verificación de los datos y su consistencia.
colnames(apr23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(may23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(jun23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(jul23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(ago23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(sep23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(oct23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(nov23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(dec23)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(jan24)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(feb24)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
colnames(mar24)
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "start_lat"
## [10] "start_lng" "end_lat" "end_lng"
## [13] "member_casual"
La cantidad de columnas en todos los archivos es consistente, son 13.
Verificación de la estructura de los archivos.
str(apr23)
## spc_tbl_ [426,590 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:426590] "8FE8F7D9C10E88C7" "34E4ED3ADF1D821B" "5296BF07A2F77CB5" "40759916B76D5D52" ...
## $ rideable_type : chr [1:426590] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
## $ started_at : POSIXct[1:426590], format: "2023-04-02 08:37:28" "2023-04-19 11:29:02" ...
## $ ended_at : POSIXct[1:426590], format: "2023-04-02 08:41:37" "2023-04-19 11:52:12" ...
## $ start_station_name: chr [1:426590] NA NA NA NA ...
## $ start_station_id : chr [1:426590] NA NA NA NA ...
## $ end_station_name : chr [1:426590] NA NA NA NA ...
## $ end_station_id : chr [1:426590] NA NA NA NA ...
## $ start_lat : num [1:426590] 41.8 41.9 41.9 41.9 41.9 ...
## $ start_lng : num [1:426590] -87.6 -87.7 -87.7 -87.7 -87.7 ...
## $ end_lat : num [1:426590] 41.8 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:426590] -87.6 -87.7 -87.7 -87.7 -87.6 ...
## $ member_casual : chr [1:426590] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(may23)
## spc_tbl_ [604,827 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:604827] "0D9FA920C3062031" "92485E5FB5888ACD" "FB144B3FC8300187" "DDEB93BC2CE9AA77" ...
## $ rideable_type : chr [1:604827] "electric_bike" "electric_bike" "electric_bike" "classic_bike" ...
## $ started_at : POSIXct[1:604827], format: "2023-05-07 19:53:48" "2023-05-06 18:54:08" ...
## $ ended_at : POSIXct[1:604827], format: "2023-05-07 19:58:32" "2023-05-06 19:03:35" ...
## $ start_station_name: chr [1:604827] "Southport Ave & Belmont Ave" "Southport Ave & Belmont Ave" "Halsted St & 21st St" "Carpenter St & Huron St" ...
## $ start_station_id : chr [1:604827] "13229" "13229" "13162" "13196" ...
## $ end_station_name : chr [1:604827] NA NA NA "Damen Ave & Cortland St" ...
## $ end_station_id : chr [1:604827] NA NA NA "13133" ...
## $ start_lat : num [1:604827] 41.9 41.9 41.9 41.9 42 ...
## $ start_lng : num [1:604827] -87.7 -87.7 -87.6 -87.7 -87.7 ...
## $ end_lat : num [1:604827] 41.9 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:604827] -87.7 -87.7 -87.7 -87.7 -87.7 ...
## $ member_casual : chr [1:604827] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(jun23)
## spc_tbl_ [719,618 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:719618] "6F1682AC40EB6F71" "622A1686D64948EB" "3C88859D926253B4" "EAD8A5E0259DEC88" ...
## $ rideable_type : chr [1:719618] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
## $ started_at : POSIXct[1:719618], format: "2023-06-05 13:34:12" "2023-06-05 01:30:22" ...
## $ ended_at : POSIXct[1:719618], format: "2023-06-05 14:31:56" "2023-06-05 01:33:06" ...
## $ start_station_name: chr [1:719618] NA NA NA NA ...
## $ start_station_id : chr [1:719618] NA NA NA NA ...
## $ end_station_name : chr [1:719618] NA NA NA NA ...
## $ end_station_id : chr [1:719618] NA NA NA NA ...
## $ start_lat : num [1:719618] 41.9 41.9 42 42 42 ...
## $ start_lng : num [1:719618] -87.7 -87.7 -87.7 -87.7 -87.7 ...
## $ end_lat : num [1:719618] 41.9 41.9 41.9 42 42 ...
## $ end_lng : num [1:719618] -87.7 -87.7 -87.6 -87.7 -87.7 ...
## $ member_casual : chr [1:719618] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(jul23)
## spc_tbl_ [767,650 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:767650] "9340B064F0AEE130" "D1460EE3CE0D8AF8" "DF41BE31B895A25E" "9624A293749EF703" ...
## $ rideable_type : chr [1:767650] "electric_bike" "classic_bike" "classic_bike" "electric_bike" ...
## $ started_at : POSIXct[1:767650], format: "2023-07-23 20:06:14" "2023-07-23 17:05:07" ...
## $ ended_at : POSIXct[1:767650], format: "2023-07-23 20:22:44" "2023-07-23 17:18:37" ...
## $ start_station_name: chr [1:767650] "Kedzie Ave & 110th St" "Western Ave & Walton St" "Western Ave & Walton St" "Racine Ave & Randolph St" ...
## $ start_station_id : chr [1:767650] "20204" "KA1504000103" "KA1504000103" "13155" ...
## $ end_station_name : chr [1:767650] "Public Rack - Racine Ave & 109th Pl" "Milwaukee Ave & Grand Ave" "Damen Ave & Pierce Ave" "Clinton St & Madison St" ...
## $ end_station_id : chr [1:767650] "877" "13033" "TA1305000041" "TA1305000032" ...
## $ start_lat : num [1:767650] 41.7 41.9 41.9 41.9 42 ...
## $ start_lng : num [1:767650] -87.7 -87.7 -87.7 -87.7 -87.7 ...
## $ end_lat : num [1:767650] 41.7 41.9 41.9 41.9 42 ...
## $ end_lng : num [1:767650] -87.7 -87.6 -87.7 -87.6 -87.6 ...
## $ member_casual : chr [1:767650] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(ago23)
## spc_tbl_ [771,693 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:771693] "903C30C2D810A53B" "F2FB18A98E110A2B" "D0DEC7C94E4663DA" "E0DDDC5F84747ED9" ...
## $ rideable_type : chr [1:771693] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
## $ started_at : POSIXct[1:771693], format: "2023-08-19 15:41:53" "2023-08-18 15:30:18" ...
## $ ended_at : POSIXct[1:771693], format: "2023-08-19 15:53:36" "2023-08-18 15:45:25" ...
## $ start_station_name: chr [1:771693] "LaSalle St & Illinois St" "Clark St & Randolph St" "Clark St & Randolph St" "Wells St & Elm St" ...
## $ start_station_id : chr [1:771693] "13430" "TA1305000030" "TA1305000030" "KA1504000135" ...
## $ end_station_name : chr [1:771693] "Clark St & Elm St" NA NA NA ...
## $ end_station_id : chr [1:771693] "TA1307000039" NA NA NA ...
## $ start_lat : num [1:771693] 41.9 41.9 41.9 41.9 41.9 ...
## $ start_lng : num [1:771693] -87.6 -87.6 -87.6 -87.6 -87.6 ...
## $ end_lat : num [1:771693] 41.9 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:771693] -87.6 -87.6 -87.6 -87.6 -87.7 ...
## $ member_casual : chr [1:771693] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(sep23)
## spc_tbl_ [666,371 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:666371] "011C1903BF4E2E28" "87DB80E048A1BF9F" "7C2EB7AF669066E3" "57D197B010269CE3" ...
## $ rideable_type : chr [1:666371] "classic_bike" "classic_bike" "electric_bike" "classic_bike" ...
## $ started_at : POSIXct[1:666371], format: "2023-09-23 00:27:50" "2023-09-02 09:26:43" ...
## $ ended_at : POSIXct[1:666371], format: "2023-09-23 00:33:27" "2023-09-02 09:38:19" ...
## $ start_station_name: chr [1:666371] "Halsted St & Wrightwood Ave" "Clark St & Drummond Pl" "Financial Pl & Ida B Wells Dr" "Clark St & Drummond Pl" ...
## $ start_station_id : chr [1:666371] "TA1309000061" "TA1307000142" "SL-010" "TA1307000142" ...
## $ end_station_name : chr [1:666371] "Sheffield Ave & Wellington Ave" "Racine Ave & Fullerton Ave" "Racine Ave & 15th St" "Racine Ave & Belmont Ave" ...
## $ end_station_id : chr [1:666371] "TA1307000052" "TA1306000026" "13304" "TA1308000019" ...
## $ start_lat : num [1:666371] 41.9 41.9 41.9 41.9 41.9 ...
## $ start_lng : num [1:666371] -87.6 -87.6 -87.6 -87.6 -87.6 ...
## $ end_lat : num [1:666371] 41.9 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:666371] -87.7 -87.7 -87.7 -87.7 -87.7 ...
## $ member_casual : chr [1:666371] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(oct23)
## spc_tbl_ [537,113 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:537113] "4449097279F8BBE7" "9CF060543CA7B439" "667F21F4D6BDE69C" "F92714CC6B019B96" ...
## $ rideable_type : chr [1:537113] "classic_bike" "electric_bike" "electric_bike" "classic_bike" ...
## $ started_at : POSIXct[1:537113], format: "2023-10-08 10:36:26" "2023-10-11 17:23:59" ...
## $ ended_at : POSIXct[1:537113], format: "2023-10-08 10:49:19" "2023-10-11 17:36:08" ...
## $ start_station_name: chr [1:537113] "Orleans St & Chestnut St (NEXT Apts)" "Desplaines St & Kinzie St" "Orleans St & Chestnut St (NEXT Apts)" "Desplaines St & Kinzie St" ...
## $ start_station_id : chr [1:537113] "620" "TA1306000003" "620" "TA1306000003" ...
## $ end_station_name : chr [1:537113] "Sheffield Ave & Webster Ave" "Sheffield Ave & Webster Ave" "Franklin St & Lake St" "Franklin St & Lake St" ...
## $ end_station_id : chr [1:537113] "TA1309000033" "TA1309000033" "TA1307000111" "TA1307000111" ...
## $ start_lat : num [1:537113] 41.9 41.9 41.9 41.9 41.9 ...
## $ start_lng : num [1:537113] -87.6 -87.6 -87.6 -87.6 -87.6 ...
## $ end_lat : num [1:537113] 41.9 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:537113] -87.7 -87.7 -87.6 -87.6 -87.6 ...
## $ member_casual : chr [1:537113] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(nov23)
## spc_tbl_ [362,518 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:362518] "4EAD8F1AD547356B" "6322270563BF5470" "B37BDE091ECA38E0" "CF0CA5DD26E4F90E" ...
## $ rideable_type : chr [1:362518] "electric_bike" "electric_bike" "electric_bike" "classic_bike" ...
## $ started_at : POSIXct[1:362518], format: "2023-11-30 21:50:05" "2023-11-03 09:44:02" ...
## $ ended_at : POSIXct[1:362518], format: "2023-11-30 22:13:27" "2023-11-03 10:17:15" ...
## $ start_station_name: chr [1:362518] "Millennium Park" "Broadway & Sheridan Rd" "State St & Pearson St" "Theater on the Lake" ...
## $ start_station_id : chr [1:362518] "13008" "13323" "TA1307000061" "TA1308000001" ...
## $ end_station_name : chr [1:362518] "Pine Grove Ave & Waveland Ave" "Broadway & Sheridan Rd" "State St & Pearson St" "Theater on the Lake" ...
## $ end_station_id : chr [1:362518] "TA1307000150" "13323" "TA1307000061" "TA1308000001" ...
## $ start_lat : num [1:362518] 41.9 42 41.9 41.9 41.9 ...
## $ start_lng : num [1:362518] -87.6 -87.7 -87.6 -87.6 -87.6 ...
## $ end_lat : num [1:362518] 41.9 42 41.9 41.9 41.9 ...
## $ end_lng : num [1:362518] -87.6 -87.6 -87.6 -87.6 -87.6 ...
## $ member_casual : chr [1:362518] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(dec23)
## spc_tbl_ [224,073 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:224073] "C9BD54F578F57246" "CDBD92F067FA620E" "ABC0858E52CBFC84" "F44B6F0E8F76DC90" ...
## $ rideable_type : chr [1:224073] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
## $ started_at : POSIXct[1:224073], format: "2023-12-02 18:44:01" "2023-12-02 18:48:19" ...
## $ ended_at : POSIXct[1:224073], format: "2023-12-02 18:47:51" "2023-12-02 18:54:48" ...
## $ start_station_name: chr [1:224073] NA NA NA NA ...
## $ start_station_id : chr [1:224073] NA NA NA NA ...
## $ end_station_name : chr [1:224073] NA NA NA NA ...
## $ end_station_id : chr [1:224073] NA NA NA NA ...
## $ start_lat : num [1:224073] 41.9 41.9 41.9 42 41.9 ...
## $ start_lng : num [1:224073] -87.7 -87.7 -87.6 -87.7 -87.6 ...
## $ end_lat : num [1:224073] 41.9 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:224073] -87.7 -87.6 -87.6 -87.7 -87.6 ...
## $ member_casual : chr [1:224073] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(jan24)
## spc_tbl_ [144,873 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:144873] "C1D650626C8C899A" "EECD38BDB25BFCB0" "F4A9CE78061F17F7" "0A0D9E15EE50B171" ...
## $ rideable_type : chr [1:144873] "electric_bike" "electric_bike" "electric_bike" "classic_bike" ...
## $ started_at : POSIXct[1:144873], format: "2024-01-12 15:30:27" "2024-01-08 15:45:46" ...
## $ ended_at : POSIXct[1:144873], format: "2024-01-12 15:37:59" "2024-01-08 15:52:59" ...
## $ start_station_name: chr [1:144873] "Wells St & Elm St" "Wells St & Elm St" "Wells St & Elm St" "Wells St & Randolph St" ...
## $ start_station_id : chr [1:144873] "KA1504000135" "KA1504000135" "KA1504000135" "TA1305000030" ...
## $ end_station_name : chr [1:144873] "Kingsbury St & Kinzie St" "Kingsbury St & Kinzie St" "Kingsbury St & Kinzie St" "Larrabee St & Webster Ave" ...
## $ end_station_id : chr [1:144873] "KA1503000043" "KA1503000043" "KA1503000043" "13193" ...
## $ start_lat : num [1:144873] 41.9 41.9 41.9 41.9 41.9 ...
## $ start_lng : num [1:144873] -87.6 -87.6 -87.6 -87.6 -87.7 ...
## $ end_lat : num [1:144873] 41.9 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:144873] -87.6 -87.6 -87.6 -87.6 -87.6 ...
## $ member_casual : chr [1:144873] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(feb24)
## spc_tbl_ [223,164 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:223164] "FCB05EB1758F85E8" "7FB986AD5D3DE9D6" "40CA13E15B5B470D" "D47A1660919E8861" ...
## $ rideable_type : chr [1:223164] "classic_bike" "classic_bike" "electric_bike" "classic_bike" ...
## $ started_at : POSIXct[1:223164], format: "2024-02-03 14:14:18" "2024-02-05 21:10:06" ...
## $ ended_at : POSIXct[1:223164], format: "2024-02-03 14:21:00" "2024-02-05 21:15:44" ...
## $ start_station_name: chr [1:223164] "Clark St & Newport St" "Michigan Ave & Washington St" "Leavitt St & Armitage Ave" "Southport Ave & Waveland Ave" ...
## $ start_station_id : chr [1:223164] "632" "13001" "TA1309000029" "13235" ...
## $ end_station_name : chr [1:223164] "Southport Ave & Waveland Ave" "Wabash Ave & Grand Ave" "Milwaukee Ave & Wabansia Ave" "Southport Ave & Belmont Ave" ...
## $ end_station_id : chr [1:223164] "13235" "TA1307000117" "13243" "13229" ...
## $ start_lat : num [1:223164] 41.9 41.9 41.9 41.9 41.8 ...
## $ start_lng : num [1:223164] -87.7 -87.6 -87.7 -87.7 -87.6 ...
## $ end_lat : num [1:223164] 41.9 41.9 41.9 41.9 41.8 ...
## $ end_lng : num [1:223164] -87.7 -87.6 -87.7 -87.7 -87.6 ...
## $ member_casual : chr [1:223164] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
str(mar24)
## spc_tbl_ [301,687 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ ride_id : chr [1:301687] "64FBE3BAED5F29E6" "9991629435C5E20E" "E5C9FECD5B71BEBD" "4CEA3EC8906DAEA8" ...
## $ rideable_type : chr [1:301687] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
## $ started_at : POSIXct[1:301687], format: "2024-03-05 18:33:11" "2024-03-06 17:15:14" ...
## $ ended_at : POSIXct[1:301687], format: "2024-03-05 18:51:48" "2024-03-06 17:16:04" ...
## $ start_station_name: chr [1:301687] NA NA NA NA ...
## $ start_station_id : chr [1:301687] NA NA NA NA ...
## $ end_station_name : chr [1:301687] NA NA NA NA ...
## $ end_station_id : chr [1:301687] NA NA NA NA ...
## $ start_lat : num [1:301687] 41.9 41.9 41.9 41.9 41.9 ...
## $ start_lng : num [1:301687] -87.7 -87.6 -87.6 -87.6 -87.7 ...
## $ end_lat : num [1:301687] 42 41.9 41.9 41.9 41.9 ...
## $ end_lng : num [1:301687] -87.7 -87.6 -87.6 -87.6 -87.7 ...
## $ member_casual : chr [1:301687] "member" "member" "member" "member" ...
## - attr(*, "spec")=
## .. cols(
## .. ride_id = col_character(),
## .. rideable_type = col_character(),
## .. started_at = col_datetime(format = ""),
## .. ended_at = col_datetime(format = ""),
## .. start_station_name = col_character(),
## .. start_station_id = col_character(),
## .. end_station_name = col_character(),
## .. end_station_id = col_character(),
## .. start_lat = col_double(),
## .. start_lng = col_double(),
## .. end_lat = col_double(),
## .. end_lng = col_double(),
## .. member_casual = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
La estructura de los 12 archivos es consistente.
Procesar
Consolidación de los 12 archivos en uno solo llamado “all_trips”.
all_trips <- bind_rows(apr23, may23, jun23, jul23, ago23, sep23, oct23, nov23, dec23, jan24, feb24, mar24)
Eliminación de las columnas que no se van a utilizar.
all_trips <- all_trips %>%
select(-c(start_lat, start_lng, end_lat, end_lng))
Limpieza de los datos.
Verificación del archivo unificado.
colnames(all_trips) # Chequeo de las columnas
## [1] "ride_id" "rideable_type" "started_at"
## [4] "ended_at" "start_station_name" "start_station_id"
## [7] "end_station_name" "end_station_id" "member_casual"
nrow(all_trips) # Verificación de la cantidad de lineas
## [1] 5750177
dim(all_trips) # Dimensiones de la base de datos
## [1] 5750177 9
head(all_trips) # Visualización de las 6 primeras filas
## # A tibble: 6 × 9
## ride_id rideable_type started_at ended_at
## <chr> <chr> <dttm> <dttm>
## 1 8FE8F7D9C10E88C7 electric_bike 2023-04-02 08:37:28 2023-04-02 08:41:37
## 2 34E4ED3ADF1D821B electric_bike 2023-04-19 11:29:02 2023-04-19 11:52:12
## 3 5296BF07A2F77CB5 electric_bike 2023-04-19 08:41:22 2023-04-19 08:43:22
## 4 40759916B76D5D52 electric_bike 2023-04-19 13:31:30 2023-04-19 13:35:09
## 5 77A96F460101AC63 electric_bike 2023-04-19 12:05:36 2023-04-19 12:10:26
## 6 8D6A2328E19DC168 electric_bike 2023-04-19 12:17:34 2023-04-19 12:21:38
## # ℹ 5 more variables: start_station_name <chr>, start_station_id <chr>,
## # end_station_name <chr>, end_station_id <chr>, member_casual <chr>
str(all_trips) # Chequeo de la lista de columnas y tipo de datos
## tibble [5,750,177 × 9] (S3: tbl_df/tbl/data.frame)
## $ ride_id : chr [1:5750177] "8FE8F7D9C10E88C7" "34E4ED3ADF1D821B" "5296BF07A2F77CB5" "40759916B76D5D52" ...
## $ rideable_type : chr [1:5750177] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
## $ started_at : POSIXct[1:5750177], format: "2023-04-02 08:37:28" "2023-04-19 11:29:02" ...
## $ ended_at : POSIXct[1:5750177], format: "2023-04-02 08:41:37" "2023-04-19 11:52:12" ...
## $ start_station_name: chr [1:5750177] NA NA NA NA ...
## $ start_station_id : chr [1:5750177] NA NA NA NA ...
## $ end_station_name : chr [1:5750177] NA NA NA NA ...
## $ end_station_id : chr [1:5750177] NA NA NA NA ...
## $ member_casual : chr [1:5750177] "member" "member" "member" "member" ...
summary(all_trips) # Resumen estadistico de la base de datos. Principalente los datos númericos
## ride_id rideable_type started_at
## Length:5750177 Length:5750177 Min. :2023-04-01 00:00:02.00
## Class :character Class :character 1st Qu.:2023-06-18 06:36:25.00
## Mode :character Mode :character Median :2023-08-15 15:05:34.00
## Mean :2023-08-27 16:18:39.27
## 3rd Qu.:2023-10-20 07:21:24.00
## Max. :2024-03-31 23:59:11.00
## ended_at start_station_name start_station_id
## Min. :2023-04-01 00:03:10.00 Length:5750177 Length:5750177
## 1st Qu.:2023-06-18 07:12:24.00 Class :character Class :character
## Median :2023-08-15 15:23:36.00 Mode :character Mode :character
## Mean :2023-08-27 16:37:03.42
## 3rd Qu.:2023-10-20 07:33:11.00
## Max. :2024-04-01 02:35:26.00
## end_station_name end_station_id member_casual
## Length:5750177 Length:5750177 Length:5750177
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
table(all_trips$member_casual) # Verificación de la cantidad de tipos de usuarios que existen en member_casual
##
## casual member
## 2068127 3682050
Se evidencia que los archivos posteriores a 2020 contienen las etiquetas deseadas y son consistentes en la nueva base de datos; de modo que no requeriremos realizar cambios.
Adición de columnas mes, día y año.
all_trips$date <- as.Date(all_trips$started_at) # Formato por defecto yyyy-mm-dd
all_trips$month <- format(as.Date(all_trips$date), "%m") # mes
all_trips$day <- format(as.Date(all_trips$date), "%d") # día
all_trips$year <- format(as.Date(all_trips$date), "%Y") # año
all_trips$day_of_week <- format(as.Date(all_trips$date), "%A") # día de la semana
Adición de la columna “ride_lenght” para calcular el tiempo de cada recorrido en segundos.
all_trips$ride_length <- difftime(all_trips$ended_at,all_trips$started_at) # "ride_lenght es la diferencia entre el inicio y el fin del viaje
Verificación de los datos.
str(all_trips) # Verificación de la estructura y las adiciones creadas
## tibble [5,750,177 × 15] (S3: tbl_df/tbl/data.frame)
## $ ride_id : chr [1:5750177] "8FE8F7D9C10E88C7" "34E4ED3ADF1D821B" "5296BF07A2F77CB5" "40759916B76D5D52" ...
## $ rideable_type : chr [1:5750177] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
## $ started_at : POSIXct[1:5750177], format: "2023-04-02 08:37:28" "2023-04-19 11:29:02" ...
## $ ended_at : POSIXct[1:5750177], format: "2023-04-02 08:41:37" "2023-04-19 11:52:12" ...
## $ start_station_name: chr [1:5750177] NA NA NA NA ...
## $ start_station_id : chr [1:5750177] NA NA NA NA ...
## $ end_station_name : chr [1:5750177] NA NA NA NA ...
## $ end_station_id : chr [1:5750177] NA NA NA NA ...
## $ member_casual : chr [1:5750177] "member" "member" "member" "member" ...
## $ date : Date[1:5750177], format: "2023-04-02" "2023-04-19" ...
## $ month : chr [1:5750177] "04" "04" "04" "04" ...
## $ day : chr [1:5750177] "02" "19" "19" "19" ...
## $ year : chr [1:5750177] "2023" "2023" "2023" "2023" ...
## $ day_of_week : chr [1:5750177] "Sunday" "Wednesday" "Wednesday" "Wednesday" ...
## $ ride_length : 'difftime' num [1:5750177] 249 1390 120 219 ...
## ..- attr(*, "units")= chr "secs"
is.numeric(all_trips$ride_length) # Chequeo de los datos de "ride_lenght" debe ser númerico
## [1] FALSE
all_trips$ride_length <- as.numeric(as.character(all_trips$ride_length)) # Transformación a númerico
is.numeric(all_trips$ride_length) # Chequeo de los datos de "ride_lenght" debe ser númerico
## [1] TRUE
Eliminación de los datos errados (tiempos negativos en “ride_lenght”) y creación del dataframe con los datos limpios.
all_trips_v2 <- all_trips[!(all_trips$ride_length <= 0),]
Análisis de los tiempos recorridos.
mean(all_trips_v2$ride_length) # Promedio
## [1] 1105.36
median(all_trips_v2$ride_length) # Mediana
## [1] 578
max(all_trips_v2$ride_length) # Máximo
## [1] 5909344
min(all_trips_v2$ride_length) # Mínimo
## [1] 1
Resumen de los datos de “ride_lenght”.
summary(all_trips_v2$ride_length)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 329 578 1105 1025 5909344
Comparativo entre usuarios miembros y casuales.
aggregate(all_trips_v2$ride_length ~ all_trips_v2$member_casual, FUN = mean) # Promedio
## all_trips_v2$member_casual all_trips_v2$ride_length
## 1 casual 1703.1228
## 2 member 769.6318
aggregate(all_trips_v2$ride_length ~ all_trips_v2$member_casual, FUN = median) # Mediana
## all_trips_v2$member_casual all_trips_v2$ride_length
## 1 casual 719
## 2 member 517
aggregate(all_trips_v2$ride_length ~ all_trips_v2$member_casual, FUN = max) # Máxima
## all_trips_v2$member_casual all_trips_v2$ride_length
## 1 casual 5909344
## 2 member 93588
aggregate(all_trips_v2$ride_length ~ all_trips_v2$member_casual, FUN = min) # Mínima
## all_trips_v2$member_casual all_trips_v2$ride_length
## 1 casual 1
## 2 member 1
Tiempo promedio de viaje cada día para cada usuario.
aggregate(all_trips_v2$ride_length ~ all_trips_v2$member_casual + all_trips_v2$day_of_week, FUN = mean)
## all_trips_v2$member_casual all_trips_v2$day_of_week all_trips_v2$ride_length
## 1 casual Friday 1647.1534
## 2 member Friday 759.4896
## 3 casual Monday 1675.6471
## 4 member Monday 733.0348
## 5 casual Saturday 1923.6042
## 6 member Saturday 848.4967
## 7 casual Sunday 1978.2761
## 8 member Sunday 857.2019
## 9 casual Thursday 1488.6221
## 10 member Thursday 736.8132
## 11 casual Tuesday 1531.8276
## 12 member Tuesday 746.4648
## 13 casual Wednesday 1458.7379
## 14 member Wednesday 741.0205
Se organizan los días de la semana iniciando en domingo y finalizando en sábado.
all_trips_v2$day_of_week <- ordered(all_trips_v2$day_of_week, levels=c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
Consulta de los promedios de cada dia por usuario
aggregate(all_trips_v2$ride_length ~ all_trips_v2$member_casual + all_trips_v2$day_of_week, FUN = mean)
## all_trips_v2$member_casual all_trips_v2$day_of_week all_trips_v2$ride_length
## 1 casual Sunday 1978.2761
## 2 member Sunday 857.2019
## 3 casual Monday 1675.6471
## 4 member Monday 733.0348
## 5 casual Tuesday 1531.8276
## 6 member Tuesday 746.4648
## 7 casual Wednesday 1458.7379
## 8 member Wednesday 741.0205
## 9 casual Thursday 1488.6221
## 10 member Thursday 736.8132
## 11 casual Friday 1647.1534
## 12 member Friday 759.4896
## 13 casual Saturday 1923.6042
## 14 member Saturday 848.4967
Compartir
Esta fase se complementa con la siguienete presentación diseñada en Tableau Public.
- El análisis de los datos nos evidecia que los usuarios casuales superan en 37% el promedio de viajes de los miembros, es decir tienen trayectos más largos.
- Los usuarios casuales aumentan sus recorridos en los meses más cálidos, mientras los miembros mantienen su promedio durante los doce (12) meses.
- El comportamiento en la semana también se incrementa por parte de los usuarios casuales los fines de semana.
- El tipo de bicicleta predilecto por parte de los usuarios casuales son clásico y docked. Los miembros solo se inclinan por las clásicas y las eléctricas. -Acorde a los hallazgos podemos concluir que los usuarios miembros utilizan el servicio como medio de transporte regular para sus labores diarias, mientras los miembros casuales dan un uso recreativo.
- Acorde a los hallazgos del análisis la estrategía debe ser dirigida a los hábitos de los usuarios.
- Enfocar las campañas hacía los fines de semana para captar más la atención de los usuarios casuales.
- Diseñar un incentivo por distancias recorridas que cutive la atención de los usuarios casuales.
- Analizar mas a fondo los datos para segmentar las estrategias de marketing en las estaciones donde predominan los usuarios casuales.