Preguntar.

Antecedentes:

La directora de marketing cree que el éxito futuro de la empresa depende de maximizar la cantidad de membresías anuales. el objetivo del análisis consiste en entender las diferencias existen en el uso de las bicicletas Cyclistic entre los ciclistas ocasionales y los miembros anuales. Para diseñar nueva estrategia de marketing que permita convertir a los ciclistas ocasionales en miembros anuales.

Interesados:

Ciclystic

Es un programa de bicicletas compartidas que incluye 5,800 bicicletas y 600 estaciones. Cyclistic, ofrece también bicicletas reclinadas, triciclos manuales y bicicletas de carga con la idea de proporcionar mayor inclusividad al servicio de bicicletas compartidas incluye algunas adaptadas para el uso por parte de personas con discapacidad y aquellos que no pueden utilizar una bicicleta estándar de dos ruedas.

La mayoría de los ciclistas eligen las bicicletas tradicionales, alrededor de un 8% de los ciclistas usan las opciones asistidas. Los usuarios de Cyclistic son más propensos a utilizar la bicicleta para recreación, pero alrededor del 30% la utiliza para ir al trabajo cada día

Dirección de Marketing:

Es el área responsable del desarrollo de campañas e iniciativas para promover el programa de bicicletas compartidas. Las campañas pueden incluir correo electrónico, redes sociales y otros canales.

Equipo de análisis computacional de datos de marketing de Cyclistic:

Encargado de recopilar, analizar e informar datos que ayudan a conducir la estrategia de marketing de Cyclistic.

Equipo ejecutivo de Cyclistic:

Encargados de tomar la decisión de aprobar o rechazar el el programa de marketing recomendado.

Preguntas de trabajo

¿En qué se diferencian los socios anuales y los ciclistas ocasionales con respecto al uso de las bicicletas de Cyclistic? Adicionalmente nuestro trabajo deberá guiar a otros equipos para encontrar la respuesta a las siguientes preguntas: ¿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 tarea de este análisis consiste en determinar la respuesta a la primer pregunta. para lo cual haremos uso de los datos relativos a la actividad de los clientes entre los meses de febrero 2023 a enero 2024.

Instrucción clave de la tarea empresarial:

Determinar los rasgos que distinguen a los usuarios casuales de los usuarios con membresía para encontrar similitudes o diferencias clave que emplearse para introducir cambios en la estrategía de mercadeo que los animen a adquirir membresias anuales.

Preparar:

Consideraciones sobre los datos.

Para llevar a cabo este análisis se tomaran como fuente los registros de los 12 meses previos (febrero de 2023 a enero de 2024) disponibles en https://divvy-tripdata.s3.amazonaws.com/index.html Tomaremos los 12 archivos más recientes dado que se nos ha instruido hacer el análisis sobre el último año de operaciones.

Los datos se encuentran organizados en archivos csv, con 14 columnas comunes de datos, aunque a través del tiempo se han dado cambios en los formatos de almacenamiento de la información y en algunos datos se han dejado de registrar en diferentes periodos.

Los datos son originales, y en su mayría consistentes, aunque algunos presentan inconsistencias, el conjunto de datos es público, se encuentra actualizado al mes inmediato anterior, y se permite su uso por parte de la empresa Motivate Internacional Inc. en los siguientes términos:

Una licencia no exclusiva, libre de regalías, limitada y perpetua para acceder, reproducir, analizar, copiar, modificar, distribuir en su producto o servicio y utilizar los Datos para cualquier propósito legal (“Licencia”).

no autoriza a realizar o ayudar a otros a realizar, las siguientes:

Utilizar los Datos de cualquier manera ilegal o para cualquier propósito ilegal;

Alojar, transmitir, publicar, distribuir, sublicenciar o vender los Datos como un conjunto de datos independiente; siempre que, sin embargo, pueda incluir los Datos como material fuente, según corresponda, en análisis, informes o estudios publicados o distribuidos con fines no comerciales;

Acceder a los Datos por medios distintos a la interfaz que se proporciona o autoriza para tal fin;

Eludir cualquier restricción de acceso relacionada con los Datos;

Usar minería de datos u otros métodos de extracción en relación con el sitio web o los Datos;

Intentar correlacionar los Datos con nombres, direcciones u otra información de clientes o Miembros;

Indicar o dar a entender que está afiliado, aprobado, respaldado o patrocinado.

Usar o autorizar a otros a usar, sin el permiso por escrito de los propietarios correspondientes, las marcas comerciales o nombres comerciales, la ciudad de Chicago o cualquier patrocinador del servicio.

Proceso de preparación de los datos

Una vez descargados los datos se ordenan y revisan con una hoja de cálculo para determinar los pasos necesarios de limpieza que requeriran los mismos antes de su procesamiento.

La tarea de limpieza de datos la realizaremos con la Hoja de cálculo de Microsoft Excel, ya que los archivos individuales tienen un tamaño que Excel puede manejar, pero si unimos el conjunto de todos los datos la capaidad de manejo de datos de Excel queda sobrepasada.

Se cambia la nomeclatura de los archivos para reducir la complejidad de sus nombres con la siguiente nomenclatura , empleado los cuatro digitos del año y dos digitos para los meses.

Realizamos un proceso de limpieza de datos en Hoja de Cálculo, y de càlculo de nuevas columnas relevantes para el análisis de datos que nos indiquen tiempo en días, horas, minutos, día de la semana, año, mes y día del inicio del viaje, estos datos nos permitiran realizar los agrupamientos y clasificar los datos. se eliminaran los datos que muestran gran cantidad de valores núlos start_station_name start_station_id end_station_name end_station_id ya que debido a la cantidad de valores faltantes no serán útiles para el análisis.

Las fórmulas empleadas para obtener los valores antes mencionados son:

*Para calcular los días del viaje

time_day_trip =SI(SI.ERROR(DIAS(D2,C2), 0)=0, 0, SI.ERROR(DIAS(D2, C2), 0)-1)

*Para calcular las horas del viaje

time_hr-trip =SI.ERROR(HORA(D2-C2), 0)

*Para calcular los minutos del viaje

time_mn_trip =MINUTO(D2-C2)

*Para calcular los minutos totales de viaje

time_trip = H2 * 24 * 60 + I2 * 60 + J2

*Para determinar el día de la semana en que se realizó el viaje weekday_trip =SI(DIASEM(C3, 1)=1, “1Domingo”, SI(DIASEM(C3, 1)=2, “2Lunes”, SI(DIASEM(C3, 1)=3, “3Martes”, SI(DIASEM(C3, 1)=4, “4Miercoles”, SI(DIASEM(C3, 1)=5, “5Jueves”, SI(DIASEM(C3, 1)=6, “6Viernes”, “7Sabado”))))))

*Para determinar el año del viaje year_trip =AÑO(C2)

*Para determinar el mes del viaje month_trip =MES(C2)

Para determinar el día del viaje day_trip =DIA(C2)

Se analizan los conjuntos de datos y se eliminan aquellos que son incoherentes (viajes con tiempo de recorrido cero).Posteriormente se procede a la creación de las nuevas columnas de datos, y finalmente a la eliminación de las columnas started_at ended_at, así como de las columnas con muchos valores nulos o irrelevantes para este análisis como son start_lat start_lng end_lat end_lng start_station_name end_station_name start_station_id end_station_id ya que la información generada a partir de estas columnas basta para reconstruir los datos eliminados acerca de de la duración de los viajes, las fechas de inicio y los días de la semana, con esta acciones el tamaño de los archivos a analizar disminuye.

Posteriormente a la generación de las nuevas columnas de datos, se procede a buscar y eliminar filas duplicadas, para esta tarea se utilizan el formato condicional la opción marcar duplicados y los filtros por color.

Al inicio del proceso el número total de filas era de 5,674,449, al final del proceso quedaban 5,586,781 filas, es decir se depuraron un total de 87,668 filas con viajes de duración cero, lo que representa el 1.55% del total de los datos.Variando entre el 2.23% para el mes de marzo de 2023 y el 1.18% para el mes de diciembre el rango de filas eliminadas por conjunto de datos mensual.

Fuentes de los datos

Para este paso se procedió a la descarga de los datos a partir de un sitio Web de la empresa que ha puesto a disposición sus datos para realizar análisis, los datos ya se encuentran anonimizados, aunque no se encuentran estándarizados en su totalidad, así mismo se proporcionan licenciados en los terminos ya mencionados.

Procesar

Elegimos utilizar el lenguaje R con el IDE RStudio para el análisis de los conjuntos de datos y la elaboración de los gráficos y tablas necesarios, complementariamente se empleará una software de presentaciones para realizar la presentación de las conclusiones, la metodología de análisis y las conclusiones.

Carga de las librerias:

## ── 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.4.4     ✔ 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

Carga del conjunto de datos

Hacemos la carga de los conjuntos de datos de los archivos csv a marcos de datos con read_csv con la opción show_col_types = FALSE y los asignamos a las variables correspondientes.

Chequeo de su integridad y consistencia

Verificamos los errores detectados con problems:

## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>
## # A tibble: 0 × 5
## # ℹ 5 variables: row <int>, col <int>, expected <chr>, actual <chr>, file <chr>

Dimensionamiento

Utilizando la función dim checamos los tamaños de los conjuntos de datos mensuales.

## [1] 186663     11
## [1] 252915     11
## [1] 417353     11
## [1] 594103     11
## [1] 708494     11
## [1] 755955     11
## [1] 760971     11
## [1] 657924     11
## [1] 530391     11
## [1] 358207     11
## [1] 221438     11
## [1] 142367     11

Verificación de valores nulos.

En el marco de datos se observa que hay valores nulos en las columnas de fechas y horas de algunos viajes, vamos a contar cuantos valores nulos hay por columna de datos. Para localizar los valores nulos por columna usaremos la función sapply:

##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0
##       ride_id rideable_type member_casual  time_dy_trip  time_hr_trip 
##             0             0             0             0             0 
##  time_mn_trip     time_trip  weekday_trip     year_trip    month_trip 
##             0             0             0             0             0 
##      day_trip 
##             0

Podemos observar que no existen valores nulos en la mayoría de las columnas, excepto latitudes y longitudes, pero su número no es significativo.

Verificación de los tipos de datos de cada columna

Usamos la función str para conocer los tipos de catos de cada columna

## spc_tbl_ [186,663 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:186663] "CBCD0D7777F0E45F" "F3EC5FCE5FF39DE9" "E54C1F27FA9354FF" "3D561E04F739CC45" ...
##  $ rideable_type: chr [1:186663] "classic_bike" "electric_bike" "classic_bike" "electric_bike" ...
##  $ member_casual: chr [1:186663] "casual" "casual" "member" "member" ...
##  $ time_dy_trip : num [1:186663] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:186663] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:186663] 14 6 25 27 10 6 5 5 6 5 ...
##  $ time_trip    : num [1:186663] 14 6 25 27 10 6 5 5 6 5 ...
##  $ weekday_trip : chr [1:186663] "3Miercoles" "7Domingo" "7Domingo" "1Lunes" ...
##  $ year_trip    : num [1:186663] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:186663] 2 2 2 2 2 2 2 2 2 2 ...
##  $ day_trip     : num [1:186663] 14 15 19 26 20 24 28 27 8 21 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [252,915 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:252915] "6842AA605EE9FBB3" "F984267A75B99A8C" "FF7CF57CFE026D02" "6B61B916032CB6D6" ...
##  $ rideable_type: chr [1:252915] "electric_bike" "electric_bike" "classic_bike" "classic_bike" ...
##  $ member_casual: chr [1:252915] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:252915] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:252915] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:252915] 2 8 10 15 11 14 7 22 10 12 ...
##  $ time_trip    : num [1:252915] 2 8 10 15 11 14 7 22 10 12 ...
##  $ weekday_trip : chr [1:252915] "6Sabado" "5Viernes" "3Miercoles" "4Jueves" ...
##  $ year_trip    : num [1:252915] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:252915] 3 3 3 3 3 3 3 3 3 3 ...
##  $ day_trip     : num [1:252915] 16 4 31 22 9 22 8 22 16 16 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [417,353 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:417353] "8FE8F7D9C10E88C7" "34E4ED3ADF1D821B" "5296BF07A2F77CB5" "40759916B76D5D52" ...
##  $ rideable_type: chr [1:417353] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
##  $ member_casual: chr [1:417353] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:417353] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:417353] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:417353] 4 23 2 4 5 4 10 5 11 1 ...
##  $ time_trip    : num [1:417353] 4 23 2 4 5 4 10 5 11 1 ...
##  $ weekday_trip : chr [1:417353] "3Miercoles" "3Miercoles" "3Miercoles" "3Miercoles" ...
##  $ year_trip    : num [1:417353] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:417353] 4 4 4 4 4 4 4 4 4 4 ...
##  $ day_trip     : num [1:417353] 2 19 19 19 19 19 19 11 11 19 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [594,103 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:594103] "0D9FA920C3062031" "92485E5FB5888ACD" "FB144B3FC8300187" "DDEB93BC2CE9AA77" ...
##  $ rideable_type: chr [1:594103] "electric_bike" "electric_bike" "electric_bike" "classic_bike" ...
##  $ member_casual: chr [1:594103] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:594103] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:594103] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:594103] 5 9 4 12 9 16 34 5 13 3 ...
##  $ time_trip    : num [1:594103] 5 9 4 12 9 16 34 5 13 3 ...
##  $ weekday_trip : chr [1:594103] "6Sabado" "7Domingo" "3Miercoles" "2Martes" ...
##  $ year_trip    : num [1:594103] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:594103] 5 5 5 5 5 5 5 5 5 5 ...
##  $ day_trip     : num [1:594103] 7 6 21 10 9 30 9 6 15 19 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [708,494 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:708494] "6F1682AC40EB6F71" "622A1686D64948EB" "3C88859D926253B4" "EAD8A5E0259DEC88" ...
##  $ rideable_type: chr [1:708494] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
##  $ member_casual: chr [1:708494] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:708494] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:708494] 0 0 0 0 0 0 0 0 4 0 ...
##  $ time_mn_trip : num [1:708494] 57 3 17 4 4 19 1 8 9 5 ...
##  $ time_trip    : num [1:708494] 57 3 17 4 4 19 1 8 249 5 ...
##  $ weekday_trip : chr [1:708494] "1Lunes" "2Martes" "1Lunes" "1Lunes" ...
##  $ year_trip    : num [1:708494] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:708494] 6 6 6 6 6 6 6 6 6 6 ...
##  $ day_trip     : num [1:708494] 5 5 20 19 19 9 3 2 2 23 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [755,955 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:755955] "9340B064F0AEE130" "D1460EE3CE0D8AF8" "DF41BE31B895A25E" "9624A293749EF703" ...
##  $ rideable_type: chr [1:755955] "electric_bike" "classic_bike" "classic_bike" "electric_bike" ...
##  $ member_casual: chr [1:755955] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:755955] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:755955] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:755955] 16 13 10 5 12 5 7 6 11 12 ...
##  $ time_trip    : num [1:755955] 16 13 10 5 12 5 7 6 11 12 ...
##  $ weekday_trip : chr [1:755955] "7Domingo" "7Domingo" "5Viernes" "6Sabado" ...
##  $ year_trip    : num [1:755955] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:755955] 7 7 7 7 7 7 7 7 7 7 ...
##  $ day_trip     : num [1:755955] 23 23 23 21 8 10 25 7 4 29 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [760,971 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:760971] "903C30C2D810A53B" "F2FB18A98E110A2B" "D0DEC7C94E4663DA" "E0DDDC5F84747ED9" ...
##  $ rideable_type: chr [1:760971] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
##  $ member_casual: chr [1:760971] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:760971] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:760971] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:760971] 12 15 12 9 21 27 12 7 10 6 ...
##  $ time_trip    : num [1:760971] 12 15 12 9 21 27 12 7 10 6 ...
##  $ weekday_trip : chr [1:760971] "5Viernes" "3Miercoles" "3Miercoles" "2Martes" ...
##  $ year_trip    : num [1:760971] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:760971] 8 8 8 8 8 8 8 8 8 8 ...
##  $ day_trip     : num [1:760971] 19 18 30 30 22 24 31 17 24 28 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [657,924 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:657924] "011C1903BF4E2E28" "87DB80E048A1BF9F" "7C2EB7AF669066E3" "57D197B010269CE3" ...
##  $ rideable_type: chr [1:657924] "classic_bike" "classic_bike" "electric_bike" "classic_bike" ...
##  $ member_casual: chr [1:657924] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:657924] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:657924] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:657924] 6 12 11 9 7 11 11 6 10 14 ...
##  $ time_trip    : num [1:657924] 6 12 11 9 7 11 11 6 10 14 ...
##  $ weekday_trip : chr [1:657924] "6Sabado" "1Lunes" "3Miercoles" "1Lunes" ...
##  $ year_trip    : num [1:657924] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:657924] 9 9 9 9 9 9 9 9 9 9 ...
##  $ day_trip     : num [1:657924] 23 2 25 13 18 15 27 17 17 7 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [530,391 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:530391] "4449097279F8BBE7" "9CF060543CA7B439" "667F21F4D6BDE69C" "F92714CC6B019B96" ...
##  $ rideable_type: chr [1:530391] "classic_bike" "electric_bike" "electric_bike" "classic_bike" ...
##  $ member_casual: chr [1:530391] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:530391] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:530391] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:530391] 13 13 4 5 11 15 12 6 22 15 ...
##  $ time_trip    : num [1:530391] 13 13 4 5 11 15 12 6 22 15 ...
##  $ weekday_trip : chr [1:530391] "3Miercoles" "4Jueves" "2Martes" "1Lunes" ...
##  $ year_trip    : num [1:530391] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:530391] 10 10 10 10 10 10 10 10 10 10 ...
##  $ day_trip     : num [1:530391] 8 11 12 24 9 4 31 2 17 17 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [358,207 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:358207] "4EAD8F1AD547356B" "6322270563BF5470" "B37BDE091ECA38E0" "CF0CA5DD26E4F90E" ...
##  $ rideable_type: chr [1:358207] "electric_bike" "electric_bike" "electric_bike" "classic_bike" ...
##  $ member_casual: chr [1:358207] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:358207] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:358207] 0 0 0 0 0 0 1 0 0 0 ...
##  $ time_mn_trip : num [1:358207] 23 33 1 26 34 24 13 22 15 3 ...
##  $ time_trip    : num [1:358207] 23 33 1 26 34 24 73 22 15 3 ...
##  $ weekday_trip : chr [1:358207] "5Viernes" "4Jueves" "3Miercoles" "5Viernes" ...
##  $ year_trip    : num [1:358207] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:358207] 11 11 11 11 11 11 11 11 11 11 ...
##  $ day_trip     : num [1:358207] 30 3 30 8 3 30 9 19 19 9 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [221,438 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:221438] "C9BD54F578F57246" "CDBD92F067FA620E" "ABC0858E52CBFC84" "F44B6F0E8F76DC90" ...
##  $ rideable_type: chr [1:221438] "electric_bike" "electric_bike" "electric_bike" "electric_bike" ...
##  $ member_casual: chr [1:221438] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:221438] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:221438] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:221438] 3 6 8 5 1 11 6 6 5 1 ...
##  $ time_trip    : num [1:221438] 3 6 8 5 1 11 6 6 5 1 ...
##  $ weekday_trip : chr [1:221438] "6Sabado" "7Domingo" "7Domingo" "7Domingo" ...
##  $ year_trip    : num [1:221438] 2023 2023 2023 2023 2023 ...
##  $ month_trip   : num [1:221438] 12 12 12 12 12 12 12 12 12 12 ...
##  $ day_trip     : num [1:221438] 2 2 24 24 24 24 24 24 11 3 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
## spc_tbl_ [142,367 × 11] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ride_id      : chr [1:142367] "C1D650626C8C899A" "EECD38BDB25BFCB0" "F4A9CE78061F17F7" "0A0D9E15EE50B171" ...
##  $ rideable_type: chr [1:142367] "electric_bike" "electric_bike" "electric_bike" "classic_bike" ...
##  $ member_casual: chr [1:142367] "member" "member" "member" "member" ...
##  $ time_dy_trip : num [1:142367] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_hr_trip : num [1:142367] 0 0 0 0 0 0 0 0 0 0 ...
##  $ time_mn_trip : num [1:142367] 7 7 8 30 26 9 9 9 11 9 ...
##  $ time_trip    : num [1:142367] 7 7 8 30 26 9 9 9 11 9 ...
##  $ weekday_trip : chr [1:142367] "1Lunes" "6Sabado" "1Lunes" "3Miercoles" ...
##  $ year_trip    : num [1:142367] 2024 2024 2024 2024 2024 ...
##  $ month_trip   : num [1:142367] 1 1 1 1 1 1 1 1 1 1 ...
##  $ day_trip     : num [1:142367] 12 8 27 29 31 7 5 4 1 3 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ride_id = col_character(),
##   ..   rideable_type = col_character(),
##   ..   member_casual = col_character(),
##   ..   time_dy_trip = col_double(),
##   ..   time_hr_trip = col_double(),
##   ..   time_mn_trip = col_double(),
##   ..   time_trip = col_double(),
##   ..   weekday_trip = col_character(),
##   ..   year_trip = col_double(),
##   ..   month_trip = col_double(),
##   ..   day_trip = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

Revisión de los tipos de datos existentes en cada columna

A continuación usaremos la función head para ver los primeros datos del marco de datos:

## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 CBCD0D7777… classic_bike  casual                   0            0           14
## 2 F3EC5FCE5F… electric_bike casual                   0            0            6
## 3 E54C1F27FA… classic_bike  member                   0            0           25
## 4 3D561E04F7… electric_bike member                   0            0           27
## 5 0CB4B4D53B… electric_bike member                   0            0           10
## 6 C67EB62172… classic_bike  member                   0            0            6
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 6842AA605E… electric_bike member                   0            0            2
## 2 F984267A75… electric_bike member                   0            0            8
## 3 FF7CF57CFE… classic_bike  member                   0            0           10
## 4 6B61B91603… classic_bike  member                   0            0           15
## 5 E55E61A5F1… electric_bike member                   0            0           11
## 6 123AAD6768… classic_bike  member                   0            0           14
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 8FE8F7D9C1… electric_bike member                   0            0            4
## 2 34E4ED3ADF… electric_bike member                   0            0           23
## 3 5296BF07A2… electric_bike member                   0            0            2
## 4 40759916B7… electric_bike member                   0            0            4
## 5 77A96F4601… electric_bike member                   0            0            5
## 6 8D6A2328E1… electric_bike member                   0            0            4
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 0D9FA920C3… electric_bike member                   0            0            5
## 2 92485E5FB5… electric_bike member                   0            0            9
## 3 FB144B3FC8… electric_bike member                   0            0            4
## 4 DDEB93BC2C… classic_bike  member                   0            0           12
## 5 C07B70172F… classic_bike  member                   0            0            9
## 6 2BA66385DF… classic_bike  member                   0            0           16
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 6F1682AC40… electric_bike member                   0            0           57
## 2 622A1686D6… electric_bike member                   0            0            3
## 3 3C88859D92… electric_bike member                   0            0           17
## 4 EAD8A5E025… electric_bike member                   0            0            4
## 5 5A36F21930… electric_bike member                   0            0            4
## 6 CF682EA7D0… electric_bike member                   0            0           19
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 9340B064F0… electric_bike member                   0            0           16
## 2 D1460EE3CE… classic_bike  member                   0            0           13
## 3 DF41BE31B8… classic_bike  member                   0            0           10
## 4 9624A29374… electric_bike member                   0            0            5
## 5 2F68A6A4CD… classic_bike  member                   0            0           12
## 6 9AEE973E6B… classic_bike  member                   0            0            5
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 903C30C2D8… electric_bike member                   0            0           12
## 2 F2FB18A98E… electric_bike member                   0            0           15
## 3 D0DEC7C94E… electric_bike member                   0            0           12
## 4 E0DDDC5F84… electric_bike member                   0            0            9
## 5 7797A4874B… electric_bike member                   0            0           21
## 6 DF4DE734EB… electric_bike member                   0            0           27
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 011C1903BF… classic_bike  member                   0            0            6
## 2 87DB80E048… classic_bike  member                   0            0           12
## 3 7C2EB7AF66… electric_bike member                   0            0           11
## 4 57D197B010… classic_bike  member                   0            0            9
## 5 8A2CEA7C8C… classic_bike  member                   0            0            7
## 6 03F7044D13… electric_bike member                   0            0           11
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 4449097279… classic_bike  member                   0            0           13
## 2 9CF060543C… electric_bike member                   0            0           13
## 3 667F21F4D6… electric_bike member                   0            0            4
## 4 F92714CC6B… classic_bike  member                   0            0            5
## 5 5E34BA5DE9… classic_bike  member                   0            0           11
## 6 F7D7420AFA… electric_bike member                   0            0           15
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 4EAD8F1AD5… electric_bike member                   0            0           23
## 2 6322270563… electric_bike member                   0            0           33
## 3 B37BDE091E… electric_bike member                   0            0            1
## 4 CF0CA5DD26… classic_bike  member                   0            0           26
## 5 EB8381AA64… classic_bike  member                   0            0           34
## 6 B8CF14EA42… electric_bike member                   0            0           24
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 C9BD54F578… electric_bike member                   0            0            3
## 2 CDBD92F067… electric_bike member                   0            0            6
## 3 ABC0858E52… electric_bike member                   0            0            8
## 4 F44B6F0E8F… electric_bike member                   0            0            5
## 5 3C87641328… electric_bike member                   0            0            1
## 6 28C0D6EFB8… electric_bike member                   0            0           11
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>
## # A tibble: 6 × 11
##   ride_id     rideable_type member_casual time_dy_trip time_hr_trip time_mn_trip
##   <chr>       <chr>         <chr>                <dbl>        <dbl>        <dbl>
## 1 C1D650626C… electric_bike member                   0            0            7
## 2 EECD38BDB2… electric_bike member                   0            0            7
## 3 F4A9CE7806… electric_bike member                   0            0            8
## 4 0A0D9E15EE… classic_bike  member                   0            0           30
## 5 33FFC9805E… classic_bike  member                   0            0           26
## 6 C96080812C… classic_bike  member                   0            0            9
## # ℹ 5 more variables: time_trip <dbl>, weekday_trip <chr>, year_trip <dbl>,
## #   month_trip <dbl>, day_trip <dbl>

Revisión de los valores numéricos para evitar valores fuera de rango que afecten validez de nuestros análisis.

Usando la función summary obtenemos un resumen del marco de datos:

##    ride_id          rideable_type      member_casual       time_dy_trip      
##  Length:186663      Length:186663      Length:186663      Min.   : 0.000000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.000000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000000  
##                                                           Mean   : 0.001184  
##                                                           3rd Qu.: 0.000000  
##                                                           Max.   :13.000000  
##   time_hr_trip       time_mn_trip     time_trip        weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :    1.00   Length:186663     
##  1st Qu.: 0.00000   1st Qu.: 5.00   1st Qu.:    5.00   Class :character  
##  Median : 0.00000   Median : 8.00   Median :    8.00   Mode  :character  
##  Mean   : 0.02912   Mean   :10.35   Mean   :   13.81                     
##  3rd Qu.: 0.00000   3rd Qu.:13.00   3rd Qu.:   13.00                     
##  Max.   :23.00000   Max.   :59.00   Max.   :18865.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :2    Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:2    1st Qu.: 8.00  
##  Median :2023   Median :2    Median :14.00  
##  Mean   :2023   Mean   :2    Mean   :15.03  
##  3rd Qu.:2023   3rd Qu.:2    3rd Qu.:21.00  
##  Max.   :2023   Max.   :2    Max.   :28.00
##    ride_id          rideable_type      member_casual       time_dy_trip      
##  Length:252915      Length:252915      Length:252915      Min.   : 0.000000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.000000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000000  
##                                                           Mean   : 0.001052  
##                                                           3rd Qu.: 0.000000  
##                                                           Max.   :11.000000  
##   time_hr_trip     time_mn_trip    time_trip        weekday_trip      
##  Min.   : 0.000   Min.   : 0.0   Min.   :    1.00   Length:252915     
##  1st Qu.: 0.000   1st Qu.: 5.0   1st Qu.:    5.00   Class :character  
##  Median : 0.000   Median : 8.0   Median :    8.00   Mode  :character  
##  Mean   : 0.026   Mean   :10.3   Mean   :   13.38                     
##  3rd Qu.: 0.000   3rd Qu.:13.0   3rd Qu.:   13.00                     
##  Max.   :23.000   Max.   :59.0   Max.   :16808.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :3    Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:3    1st Qu.: 8.00  
##  Median :2023   Median :3    Median :16.00  
##  Mean   :2023   Mean   :3    Mean   :16.32  
##  3rd Qu.:2023   3rd Qu.:3    3rd Qu.:24.00  
##  Max.   :2023   Max.   :3    Max.   :31.00
##    ride_id          rideable_type      member_casual       time_dy_trip      
##  Length:417353      Length:417353      Length:417353      Min.   : 0.000000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.000000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000000  
##                                                           Mean   : 0.001069  
##                                                           3rd Qu.: 0.000000  
##                                                           Max.   :12.000000  
##   time_hr_trip       time_mn_trip     time_trip        weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :    1.00   Length:417353     
##  1st Qu.: 0.00000   1st Qu.: 5.00   1st Qu.:    5.00   Class :character  
##  Median : 0.00000   Median : 9.00   Median :    9.00   Mode  :character  
##  Mean   : 0.04752   Mean   :12.35   Mean   :   16.74                     
##  3rd Qu.: 0.00000   3rd Qu.:16.00   3rd Qu.:   16.00                     
##  Max.   :23.00000   Max.   :59.00   Max.   :18395.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :4    Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:4    1st Qu.:10.00  
##  Median :2023   Median :4    Median :15.00  
##  Mean   :2023   Mean   :4    Mean   :15.61  
##  3rd Qu.:2023   3rd Qu.:4    3rd Qu.:22.00  
##  Max.   :2023   Max.   :4    Max.   :30.00
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:594103      Length:594103      Length:594103      Min.   :0.00e+00  
##  Class :character   Class :character   Class :character   1st Qu.:0.00e+00  
##  Mode  :character   Mode  :character   Mode  :character   Median :0.00e+00  
##                                                           Mean   :9.98e-04  
##                                                           3rd Qu.:0.00e+00  
##                                                           Max.   :2.00e+01  
##   time_hr_trip       time_mn_trip     time_trip        weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :    1.00   Length:594103     
##  1st Qu.: 0.00000   1st Qu.: 6.00   1st Qu.:    6.00   Class :character  
##  Median : 0.00000   Median :10.00   Median :   10.00   Mode  :character  
##  Mean   : 0.05399   Mean   :13.54   Mean   :   18.21                     
##  3rd Qu.: 0.00000   3rd Qu.:18.00   3rd Qu.:   19.00                     
##  Max.   :23.00000   Max.   :59.00   Max.   :29210.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :5    Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:5    1st Qu.: 9.00  
##  Median :2023   Median :5    Median :18.00  
##  Mean   :2023   Mean   :5    Mean   :17.17  
##  3rd Qu.:2023   3rd Qu.:5    3rd Qu.:25.00  
##  Max.   :2023   Max.   :5    Max.   :31.00
##    ride_id          rideable_type      member_casual       time_dy_trip      
##  Length:708494      Length:708494      Length:708494      Min.   : 0.000000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.000000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000000  
##                                                           Mean   : 0.001369  
##                                                           3rd Qu.: 0.000000  
##                                                           Max.   :20.000000  
##   time_hr_trip       time_mn_trip     time_trip        weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :    1.00   Length:708494     
##  1st Qu.: 0.00000   1st Qu.: 6.00   1st Qu.:    6.00   Class :character  
##  Median : 0.00000   Median :11.00   Median :   11.00   Mode  :character  
##  Mean   : 0.05455   Mean   :13.81   Mean   :   19.06                     
##  3rd Qu.: 0.00000   3rd Qu.:18.00   3rd Qu.:   19.00                     
##  Max.   :23.00000   Max.   :59.00   Max.   :29466.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :6    Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:6    1st Qu.: 7.00  
##  Median :2023   Median :6    Median :16.00  
##  Mean   :2023   Mean   :6    Mean   :15.25  
##  3rd Qu.:2023   3rd Qu.:6    3rd Qu.:23.00  
##  Max.   :2023   Max.   :6    Max.   :30.00
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:755955      Length:755955      Length:755955      Min.   : 0.00000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.00000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.00000  
##                                                           Mean   : 0.00179  
##                                                           3rd Qu.: 0.00000  
##                                                           Max.   :35.00000  
##   time_hr_trip       time_mn_trip     time_trip        weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :    1.00   Length:755955     
##  1st Qu.: 0.00000   1st Qu.: 6.00   1st Qu.:    6.00   Class :character  
##  Median : 0.00000   Median :11.00   Median :   11.00   Mode  :character  
##  Mean   : 0.06242   Mean   :14.21   Mean   :   20.54                     
##  3rd Qu.: 0.00000   3rd Qu.:19.00   3rd Qu.:   20.00                     
##  Max.   :23.00000   Max.   :59.00   Max.   :51462.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :7    Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:7    1st Qu.: 9.00  
##  Median :2023   Median :7    Median :17.00  
##  Mean   :2023   Mean   :7    Mean   :16.63  
##  3rd Qu.:2023   3rd Qu.:7    3rd Qu.:24.00  
##  Max.   :2023   Max.   :7    Max.   :31.00
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:760971      Length:760971      Length:760971      Min.   : 0.00000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.00000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.00000  
##                                                           Mean   : 0.00262  
##                                                           3rd Qu.: 0.00000  
##                                                           Max.   :68.00000  
##   time_hr_trip       time_mn_trip     time_trip        weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :    1.00   Length:760971     
##  1st Qu.: 0.00000   1st Qu.: 6.00   1st Qu.:    6.00   Class :character  
##  Median : 0.00000   Median :11.00   Median :   11.00   Mode  :character  
##  Mean   : 0.05702   Mean   :13.82   Mean   :   21.02                     
##  3rd Qu.: 0.00000   3rd Qu.:18.00   3rd Qu.:   19.00                     
##  Max.   :23.00000   Max.   :59.00   Max.   :98489.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :8    Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:8    1st Qu.: 8.00  
##  Median :2023   Median :8    Median :16.00  
##  Mean   :2023   Mean   :8    Mean   :15.82  
##  3rd Qu.:2023   3rd Qu.:8    3rd Qu.:24.00  
##  Max.   :2023   Max.   :8    Max.   :31.00
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:657924      Length:657924      Length:657924      Min.   :0.00e+00  
##  Class :character   Class :character   Class :character   1st Qu.:0.00e+00  
##  Mode  :character   Mode  :character   Mode  :character   Median :0.00e+00  
##                                                           Mean   :6.23e-05  
##                                                           3rd Qu.:0.00e+00  
##                                                           Max.   :1.00e+00  
##   time_hr_trip      time_mn_trip     time_trip       weekday_trip      
##  Min.   : 0.0000   Min.   : 0.00   Min.   :   1.00   Length:657924     
##  1st Qu.: 0.0000   1st Qu.: 6.00   1st Qu.:   6.00   Class :character  
##  Median : 0.0000   Median :10.00   Median :  10.00   Mode  :character  
##  Mean   : 0.0472   Mean   :13.39   Mean   :  16.31                     
##  3rd Qu.: 0.0000   3rd Qu.:17.00   3rd Qu.:  18.00                     
##  Max.   :23.0000   Max.   :59.00   Max.   :1548.00                     
##    year_trip      month_trip    day_trip   
##  Min.   :2023   Min.   :9    Min.   : 1.0  
##  1st Qu.:2023   1st Qu.:9    1st Qu.: 8.0  
##  Median :2023   Median :9    Median :15.0  
##  Mean   :2023   Mean   :9    Mean   :15.4  
##  3rd Qu.:2023   3rd Qu.:9    3rd Qu.:23.0  
##  Max.   :2023   Max.   :9    Max.   :30.0
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:530391      Length:530391      Length:530391      Min.   :0.00e+00  
##  Class :character   Class :character   Class :character   1st Qu.:0.00e+00  
##  Mode  :character   Mode  :character   Mode  :character   Median :0.00e+00  
##                                                           Mean   :3.96e-05  
##                                                           3rd Qu.:0.00e+00  
##                                                           Max.   :1.00e+00  
##   time_hr_trip       time_mn_trip     time_trip       weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :   1.00   Length:530391     
##  1st Qu.: 0.00000   1st Qu.: 5.00   1st Qu.:   5.00   Class :character  
##  Median : 0.00000   Median : 9.00   Median :   9.00   Mode  :character  
##  Mean   : 0.03783   Mean   :11.95   Mean   :  14.28                     
##  3rd Qu.: 0.00000   3rd Qu.:15.00   3rd Qu.:  16.00                     
##  Max.   :23.00000   Max.   :59.00   Max.   :1500.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :10   Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:10   1st Qu.: 6.00  
##  Median :2023   Median :10   Median :14.00  
##  Mean   :2023   Mean   :10   Mean   :14.47  
##  3rd Qu.:2023   3rd Qu.:10   3rd Qu.:22.00  
##  Max.   :2023   Max.   :10   Max.   :31.00
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:358207      Length:358207      Length:358207      Min.   :0.00e+00  
##  Class :character   Class :character   Class :character   1st Qu.:0.00e+00  
##  Mode  :character   Mode  :character   Mode  :character   Median :0.00e+00  
##                                                           Mean   :1.68e-05  
##                                                           3rd Qu.:0.00e+00  
##                                                           Max.   :1.00e+00  
##   time_hr_trip       time_mn_trip     time_trip      weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :   1.0   Length:358207     
##  1st Qu.: 0.00000   1st Qu.: 5.00   1st Qu.:   5.0   Class :character  
##  Median : 0.00000   Median : 8.00   Median :   8.0   Mode  :character  
##  Mean   : 0.02593   Mean   :10.92   Mean   :  12.5                     
##  3rd Qu.: 0.00000   3rd Qu.:14.00   3rd Qu.:  14.0                     
##  Max.   :23.00000   Max.   :59.00   Max.   :1500.0                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :11   Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:11   1st Qu.: 7.00  
##  Median :2023   Median :11   Median :13.00  
##  Mean   :2023   Mean   :11   Mean   :13.47  
##  3rd Qu.:2023   3rd Qu.:11   3rd Qu.:19.00  
##  Max.   :2023   Max.   :11   Max.   :30.00
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:221438      Length:221438      Length:221438      Min.   :0.00e+00  
##  Class :character   Class :character   Class :character   1st Qu.:0.00e+00  
##  Mode  :character   Mode  :character   Mode  :character   Median :0.00e+00  
##                                                           Mean   :3.16e-05  
##                                                           3rd Qu.:0.00e+00  
##                                                           Max.   :1.00e+00  
##   time_hr_trip       time_mn_trip     time_trip      weekday_trip      
##  Min.   : 0.00000   Min.   : 0.00   Min.   :   1.0   Length:221438     
##  1st Qu.: 0.00000   1st Qu.: 5.00   1st Qu.:   5.0   Class :character  
##  Median : 0.00000   Median : 8.00   Median :   8.0   Mode  :character  
##  Mean   : 0.02461   Mean   :10.38   Mean   :  11.9                     
##  3rd Qu.: 0.00000   3rd Qu.:13.00   3rd Qu.:  13.0                     
##  Max.   :23.00000   Max.   :59.00   Max.   :1500.0                     
##    year_trip      month_trip    day_trip    
##  Min.   :2023   Min.   :12   Min.   : 1.00  
##  1st Qu.:2023   1st Qu.:12   1st Qu.: 7.00  
##  Median :2023   Median :12   Median :13.00  
##  Mean   :2023   Mean   :12   Mean   :13.77  
##  3rd Qu.:2023   3rd Qu.:12   3rd Qu.:20.00  
##  Max.   :2023   Max.   :12   Max.   :31.00
##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:142367      Length:142367      Length:142367      Min.   :0.000000  
##  Class :character   Class :character   Class :character   1st Qu.:0.000000  
##  Mode  :character   Mode  :character   Mode  :character   Median :0.000000  
##                                                           Mean   :0.005247  
##                                                           3rd Qu.:0.000000  
##                                                           Max.   :2.000000  
##   time_hr_trip       time_mn_trip      time_trip       weekday_trip      
##  Min.   : 0.00000   Min.   : 0.000   Min.   :   1.00   Length:142367     
##  1st Qu.: 0.00000   1st Qu.: 5.000   1st Qu.:   5.00   Class :character  
##  Median : 0.00000   Median : 7.000   Median :   7.00   Mode  :character  
##  Mean   : 0.03759   Mean   : 9.742   Mean   :  19.55                     
##  3rd Qu.: 0.00000   3rd Qu.:12.000   3rd Qu.:  12.00                     
##  Max.   :23.00000   Max.   :59.000   Max.   :2940.00                     
##    year_trip      month_trip    day_trip    
##  Min.   :2024   Min.   :1    Min.   : 1.00  
##  1st Qu.:2024   1st Qu.:1    1st Qu.: 6.00  
##  Median :2024   Median :1    Median :13.00  
##  Mean   :2024   Mean   :1    Mean   :15.73  
##  3rd Qu.:2024   3rd Qu.:1    3rd Qu.:25.00  
##  Max.   :2024   Max.   :1    Max.   :31.00

Verificación de la uniformidad de los nombres de las columnas de datos

Comprobamos que todos los marcos de datos tengan los mismos nombres de columnas con la función names:

##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"
##  [1] "ride_id"       "rideable_type" "member_casual" "time_dy_trip" 
##  [5] "time_hr_trip"  "time_mn_trip"  "time_trip"     "weekday_trip" 
##  [9] "year_trip"     "month_trip"    "day_trip"

Creación de un marco de datos único

Ahora uniremos todos los datos para poder sacar gráficos que incluyan doce meses hacia atrás de la actividad de renta de biciletas de la empresa, para ello usremos la función bind_rows.

Revisión de los valores de las columnas como cotejo de que la unión fue exitosa

Procedemos a revisar del marco de datos unificado con la función summary:

##    ride_id          rideable_type      member_casual       time_dy_trip     
##  Length:5586781     Length:5586781     Length:5586781     Min.   : 0.00000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.00000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.00000  
##                                                           Mean   : 0.00119  
##                                                           3rd Qu.: 0.00000  
##                                                           Max.   :68.00000  
##   time_hr_trip       time_mn_trip    time_trip        weekday_trip      
##  Min.   : 0.00000   Min.   : 0.0   Min.   :    1.00   Length:5586781    
##  1st Qu.: 0.00000   1st Qu.: 6.0   1st Qu.:    6.00   Class :character  
##  Median : 0.00000   Median :10.0   Median :   10.00   Mode  :character  
##  Mean   : 0.04732   Mean   :12.8   Mean   :   17.36                     
##  3rd Qu.: 0.00000   3rd Qu.:17.0   3rd Qu.:   17.00                     
##  Max.   :23.00000   Max.   :59.0   Max.   :98489.00                     
##    year_trip      month_trip        day_trip    
##  Min.   :2023   Min.   : 1.000   Min.   : 1.00  
##  1st Qu.:2023   1st Qu.: 5.000   1st Qu.: 8.00  
##  Median :2023   Median : 7.000   Median :15.00  
##  Mean   :2023   Mean   : 7.047   Mean   :15.57  
##  3rd Qu.:2023   3rd Qu.: 9.000   3rd Qu.:23.00  
##  Max.   :2024   Max.   :12.000   Max.   :31.00

Podemos observar en el resumen del marco de datos unificado que no hay valores anómalos para los datos númericos y que el número de valores faltantes en las columnas end_lat y end_lng no son determinantes para los cálculos que se pudiese realizar sobre ellas.

A partir de este punto comenzaremos el análisis de los datos para detectar correlaciones entre los mismos y tener una base para elaborar consejos a la empresa para lograr sus objetivos.

No se detecta sesgo en los datos depurados y se esta en posibilidad de realizar el análisis de los datos.

Analizar

Análisis por tipo de cliente

Generar un comparativo de tipo de miembro y duración del viaje durante el año

##   df_anual$member_casual df_anual$time_trip
## 1                 casual           25.88879
## 2                 member           12.55781

Comparar el viaje más largo de de cada tipo de cliente en el año

##   df_anual$member_casual df_anual$time_trip
## 1                 casual              98489
## 2                 member               2940

Comparar el viaje más corto para cada tipo de cliente en el año

##   df_anual$member_casual df_anual$time_trip
## 1                 casual                  1
## 2                 member                  1

Comparar el tiempo promedio de viaje por día para cada tipo de cliente en el año

##    df_anual$member_casual df_anual$weekday_trip df_anual$time_trip
## 1                  casual                1Lunes           26.96537
## 2                  member                1Lunes           12.40837
## 3                  casual               2Martes           26.58116
## 4                  member               2Martes           12.45907
## 5                  casual            3Miercoles           26.15309
## 6                  member            3Miercoles           12.48197
## 7                  casual               4Jueves           25.73369
## 8                  member               4Jueves           12.36050
## 9                  casual              5Viernes           24.95524
## 10                 member              5Viernes           12.52615
## 11                 casual               6Sabado           25.57185
## 12                 member               6Sabado           12.91852
## 13                 casual              7Domingo           25.69838
## 14                 member              7Domingo           12.83438

Comparativo de tiempo de uso por día de semana y cliente

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.
## # A tibble: 14 × 4
## # Groups:   member_casual [2]
##    member_casual weekday_trip number_of_rides average_duration
##    <chr>         <chr>                  <int>            <dbl>
##  1 casual        1Lunes                235349             27.0
##  2 member        1Lunes                478500             12.4
##  3 casual        2Martes               257755             26.6
##  4 member        2Martes               539360             12.5
##  5 casual        3Miercoles            265532             26.2
##  6 member        3Miercoles            558128             12.5
##  7 casual        4Jueves               283219             25.7
##  8 member        4Jueves               563615             12.4
##  9 casual        5Viernes              304360             25.0
## 10 member        5Viernes              517819             12.5
## 11 casual        6Sabado               371378             25.6
## 12 member        6Sabado               490420             12.9
## 13 casual        7Domingo              295432             25.7
## 14 member        7Domingo              425914             12.8

Comparativo de tiempo de uso por mes del año de los clientes

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.
## # A tibble: 24 × 4
## # Groups:   member_casual [2]
##    member_casual month_trip number_of_rides average_duration
##    <chr>              <dbl>           <int>            <dbl>
##  1 casual                 1           24065             28.1
##  2 member                 1          118302             17.8
##  3 casual                 2           42271             23.6
##  4 member                 2          144392             10.9
##  5 casual                 3           61013             21.8
##  6 member                 3          191902             10.7
##  7 casual                 4          144407             26.2
##  8 member                 4          272946             11.7
##  9 casual                 5          230266             26.7
## 10 member                 5          363837             12.8
## # ℹ 14 more rows

Comparativo de tiempo de uso por mes día de la semana y tipo de cliente en el año

## `summarise()` has grouped output by 'member_casual', 'month_trip'. You can
## override using the `.groups` argument.
## # A tibble: 168 × 5
## # Groups:   member_casual, month_trip [24]
##    member_casual month_trip weekday_trip number_of_rides average_duration
##    <chr>              <dbl> <chr>                  <int>            <dbl>
##  1 casual                 1 1Lunes                  4164             32.6
##  2 member                 1 1Lunes                 19262             17.7
##  3 casual                 1 2Martes                 3506             22.6
##  4 member                 1 2Martes                18505             18.3
##  5 casual                 1 3Miercoles              4813             30.0
##  6 member                 1 3Miercoles             25762             18.0
##  7 casual                 1 4Jueves                 4287             27.6
##  8 member                 1 4Jueves                22346             16.8
##  9 casual                 1 5Viernes                2934             24.1
## 10 member                 1 5Viernes               13639             16.8
## # ℹ 158 more rows

Análisis por tipo de vehículo

Generar un comparativo de tipo de vehículo y duración del viaje durante el año

##   df_anual$rideable_type df_anual$time_trip
## 1           classic_bike           17.92928
## 2            docked_bike          173.01327
## 3          electric_bike           12.67839

Comparar el viaje más largo de de cada tipo de vehículo en el año

##   df_anual$rideable_type df_anual$time_trip
## 1           classic_bike               2940
## 2            docked_bike              98489
## 3          electric_bike               1920

Comparar el viaje más corto para cada tipo de vehículo en el año

##   df_anual$rideable_type df_anual$time_trip
## 1           classic_bike                  1
## 2            docked_bike                  1
## 3          electric_bike                  1

Comparar el tiempo promedio de viaje por día para cada tipo de vehículo en el año

##    df_anual$rideable_type df_anual$weekday_trip df_anual$time_trip
## 1            classic_bike                1Lunes           17.54982
## 2             docked_bike                1Lunes          175.84853
## 3           electric_bike                1Lunes           12.47651
## 4            classic_bike               2Martes           17.21769
## 5             docked_bike               2Martes          182.38042
## 6           electric_bike               2Martes           12.22514
## 7            classic_bike            3Miercoles           17.23197
## 8             docked_bike            3Miercoles          191.45111
## 9           electric_bike            3Miercoles           12.19480
## 10           classic_bike               4Jueves           17.05517
## 11            docked_bike               4Jueves          183.25616
## 12          electric_bike               4Jueves           12.30706
## 13           classic_bike              5Viernes           17.95265
## 14            docked_bike              5Viernes          163.10204
## 15          electric_bike              5Viernes           12.71282
## 16           classic_bike               6Sabado           19.41700
## 17            docked_bike               6Sabado          165.09603
## 18          electric_bike               6Sabado           13.48295
## 19           classic_bike              7Domingo           19.12756
## 20            docked_bike              7Domingo          149.87201
## 21          electric_bike              7Domingo           13.35790

Comparativo de tiempo de uso por mes del año de los vehículos

## `summarise()` has grouped output by 'rideable_type'. You can override using the
## `.groups` argument.
## # A tibble: 31 × 4
## # Groups:   rideable_type [3]
##    rideable_type month_trip number_of_rides average_duration
##    <chr>              <dbl>           <int>            <dbl>
##  1 classic_bike           1           75722             25.4
##  2 electric_bike          1           66645             12.9
##  3 classic_bike           2           89119             14.1
##  4 docked_bike            2            2183            152. 
##  5 electric_bike          2           95361             10.4
##  6 classic_bike           3          106182             14.4
##  7 docked_bike            3            3008            133. 
##  8 electric_bike          3          143725             10.1
##  9 classic_bike           4          168167             16.9
## 10 docked_bike            4            8834            138. 
## # ℹ 21 more rows

Comparativo de tiempo de uso por mes día de la semana y tipo de vehículo en el año

## `summarise()` has grouped output by 'rideable_type', 'month_trip'. You can
## override using the `.groups` argument.
## # A tibble: 217 × 5
## # Groups:   rideable_type, month_trip [31]
##    rideable_type month_trip weekday_trip number_of_rides average_duration
##    <chr>              <dbl> <chr>                  <int>            <dbl>
##  1 classic_bike           1 1Lunes                 12460             26.6
##  2 electric_bike          1 1Lunes                 10966             13.3
##  3 classic_bike           1 2Martes                11890             25.7
##  4 electric_bike          1 2Martes                10121             11.2
##  5 classic_bike           1 3Miercoles             16458             26.0
##  6 electric_bike          1 3Miercoles             14117             12.8
##  7 classic_bike           1 4Jueves                14008             23.5
##  8 electric_bike          1 4Jueves                12625             13.1
##  9 classic_bike           1 5Viernes                8737             22.9
## 10 electric_bike          1 5Viernes                7836             12.7
## # ℹ 207 more rows

Compartir

Una vez que hemos podido resumir los datos en tablas para su análisis, vamos a proceder a gráficar los datos para descubrir posibles patrones en los mismos.

Grafico 1. Tiempo de viaje por día de la semana y tipo de cliente

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.

Este gráfico nos muestra que los clientes con membresía sueles realizar viajes cortos en tiempo, mientras que los clientes ocasionales suelen realizar viajes de mayor duración, lo cual podría ser indicativo que no siguen una rutina, sino fines lúdicos o de salud.

Grafico 2. Horas de viaje acumuladas por día de la semana y tipo de cliente

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.

En este gráfico se refuerza la idea de que los clientes casuales utilizan los equipos más tiempo los fines de semana, probalemente con fines recreativos, mientras que los clientes con membresía suelen disminuir el uso de los mismos en fines de semana.

Gráfico 3 Número de viaje por día de la semana y tipo de cliente

## `summarise()` has grouped output by 'member_casual'. You can override using the
## `.groups` argument.

La tercer gráfica nos confirma el dato de que los clientes con membresía suelen usar los equipos para viajes rutinarios principalmente en la semana y disminuyen su uso en los fines de semana, mientras que los usuarios csuales suelen aumentar el uso de los equipos al inicio del fin de semana.

Grafico 4 Número de viajes por mes y tipo de cliente

## `summarise()` has grouped output by 'month_trip'. You can override using the
## `.groups` argument.

Esta gráfica muestra la tendencia de los clientes a utilizar más los equipos pero por periodos más cortos de tiempo, mientras que los clientes causales suelen usar menos los equipos pero hacer viajes de mayro duración. ya que observamos que los promedios de uso de todos los días de la semana son similares, pero al acumularlos por meses observamos que el patrón de uso de los vehículos suele ser menor en los primeros y últimos días del año alcanzar sus máximos en los meses intermedios del año, esto debe ser producto de las variaciones clímaticas durante los meses del año.

Grafico 5 Tiempo de viajes por mes y tipo de cliente

## `summarise()` has grouped output by 'month_trip'. You can override using the
## `.groups` argument.

El gráfico nos muestra en concordancia con el anterior, la tendencia de los clientes casuales de realizar recorridos mucho más largos en los meses intermedios del año, probablemente por las condiciones favorables del entorno. Lo clientes con membresia exhiben un patrón más acorde a una rutina laboral, con menores variaciones en el uso durante todos los meses del año.

Grafico 6. Tiempo de viaje por día de la semana y tipo de vehículo

## `summarise()` has grouped output by 'rideable_type'. You can override using the
## `.groups` argument.

Esta gráfica nos muestra que el vehículo preferido por los usuarios es la bicicleta acoplada, probablemente por el hecho de que dificulta más que pueda ser robada, y ello hace que el usuario puede emplearla con menores preocupaciones.

Grafico 7. Horas de viaje acumuladas por día de la semana y tipo de cliente

## `summarise()` has grouped output by 'rideable_type'. You can override using the
## `.groups` argument.

Este gráfico nos permite relacionar el uso de los vehículos con el tiempo de los viajes, determinando que los viajes más largos que son realizados principalmente por usuarios casuales se corresponden a los vehículos clásicos y electricos no fijados a estaciones acpladas, posiblemente porque permiten recorridos libres sin itinerario fijo.

Gráfico 8 Número de viaje por día de la semana y tipo de vehículo

## `summarise()` has grouped output by 'rideable_type'. You can override using the
## `.groups` argument.

El patrón de uso de las bicicletas acopladas es muy regular y la duración de los viajes rutinaria, sin embargo en los clientes casuales notamos que la variación en el patrón de uso es bastante pronunciada entre viajes muy largos y viajes muy cortos, no se tiene información de los ingresos generados por tipo de vehículo que nos pueda orientar sobre rentabilidad de cada uno de estos, como para tomar decisión en ese aspecto. Sin embargo, el gráfico sugiere que hay mayor desgaste en los vehículos no acoplados, principalmente los vehículos eléctricos.

Grafico 9 Número de viajes por mes y tipo de vehículo

## `summarise()` has grouped output by 'month_trip'. You can override using the
## `.groups` argument.

Grafico 10 Tiempo de viajes por mes y tipo de vehículo

## `summarise()` has grouped output by 'month_trip'. You can override using the
## `.groups` argument.

El gráfico nos muestra que si bien las bicicletas acopladas son muy utilizadas y tienen tiempos de uso muy estable todos los días de la semana, no se utilizan durante todos los meses del año, sino solo durante el periodo de febrero - agosto, probablemente por las condiciones climáticas, no se tiene suficiente información para determinar la causa precisa de estas variaciones. Los otros tipos de vehículos se utilizan durante todo el año casí con la misma intensidad

Observaciones relativas a las tablas y gráficos generados.

En los gráficos de tipo de vehículo y tipo de miembro pudimos descubrir que si bien los miembros muestran patrones de uso sin mucha variación durante los días de semana, no ocurre lo mismo si analizamos los meses del año, y el uso por tipo de vehículo, si bien no se posee la suficiente información para analizar en detalle la conducta de cada miembro o usuario casual a través del tiempo, si podemos analizar tendencia e inferir conclusiones.

Respuesta a la pregunta inicial

¿En qué se diferencian los socios anuales y los ciclistas ocasionales con respecto al uso de las bicicletas de Cyclistic?

De acuerdo con los datos disponibles los ciclistas con membresia suelen hacer uso de las bicicletas acopladas para su rutina diaria de trabajo durante la mayor parte del tiempo, y cambiar a otro tipo de vehículo con el cambio de las estaciones. Es posible que dejen de usarla en los meses finales del año porque las rutas permitidas por las bicicletas acopladas no sean adecuadas para los destinos normales en los que las utilizan y por ello recurran a cambiar de tipo de vehículo durante esos periodos. Los ciclistas casuales por otra parte parecen preferir el realizar pequeños recorridos en su mayoría de corta duración.

Observaciones para el problema planteado a otros equipos con las siguientes preguntas:

¿Por qué los ciclistas ocasionales comprarían membresías anuales de Cyclistic?

Los viajes de los clientes casuales suelen ser cortos, podrían ofercerse membresias que cobren por distancia tiempo recorrido fraccional o por distancia (un factor que al parecer no es una métrica actual de la empresa) eso permitiría a los mismos hacer uso libre de las bicicletas hasta agotar una cuota preferente establecida solo para los vehículos no acoplados.

¿Cómo puede usar Cyclistic los medios digitales para influenciar a los ciclistas ocasionales a convertirse en miembros?

Con la finalidad de que los usuarios ocasionales se conviertan en miembros anuales, podría promoverse un programa de recompensas (tiempo o distancia adicional a su membresía anual por uso acumulado ya sea en tiempo o en distancia), ligado a una campaña de promoción del bienestar físico y el cuidado ambiental.

Actuar

Recomendaciones

Elaborar un programa de promoción de hábitos saludables a través del uso de bicicletas tradicionales para trasladarse en la ciudad.

Elaborar un prograna de cuidado del medio ambiente y combate a la contaminación mediante la promoción del uso de biciletas eléctricas.

Diseñar un programa de recompensas para el uso de vehículos no acoplados que podría renominarse puntos verdes y puntos de salud con la finalidad de promover el aumento de la duración de los viajes incentivando a los usuarios casuales a adquirir su membresía para aprovechar estos beneficios.

Se propone encargar el análisis de los datos de geolocalización de los vehículos electricos y tradicionales fuera de las rutas de los vehículos acoplados en los meses en que estos no muestran uso, para determinar posibles nuevas rutas para los vehículos acoplados.

Bibliografia de apoyo