Imagen: Clarin
Imagen: Clarin


Introducción

Escenario

Las “Ecobicis” se han convertido en una opción de transporte cada vez más popular en las ciudades modernas, ofreciendo una alternativa ecológica y asequible para desplazarse por áreas urbanas. La Ciudad Autónoma de Buenos Aires ha implementado este sistema con el fin de promover la movilidad sostenible y reducir la congestión vehicular, pero para lograr una mayor eficiencia y adaptación a las necesidades de los usuarios, es fundamental comprender cómo se está utilizando este servicio y qué factores pueden influir en su utilización.

En el presente caso de estudio, se explorarán los nuevos usuarios registrados en el servicio en el primer semestre de 2023. Se investigarán patrones de utilización de este sistema de transporte sostenible y, específicamente, se indagará en cómo estos patrones pueden variar en función de diferentes grupos demográficos, como la edad y el género de los usuarios. En orden de encontrar respuestas para las preguntas presentadas, se seguirán los seis pasos del proceso de análisis de datos: preguntar, preparar, procesar, analizar, compartir y actuar.

Objetivo

Analizar a los nuevos usuarios registrados en el servicio de “Ecobicis” durante el primer semestre de 2023, buscando comprender los patrones de utilización de este sistema de transporte y evaluar cómo estos pueden variar según diferentes grupos demográficos, como la edad y el género de los usuarios.


Preguntas

Como primer paso, se plantearon las siguientes preguntas para poder realizar el análisis en pos de identificar problemáticas y presentar soluciones:


Preparación

Se utilizarán dos datasets del sistema Ecobici para este estudio. Uno de ellos, Recorridos Realizados 2023, contiene información sobre todos los viajes del primer semestre del año, incluyendo detalles sobre las estaciones de origen y destino, así como las horas de partida y llegada. El segundo dataset, Usuarios Ecobici 2023, contiene información de los usuarios registrados en el servicio de Ecobici en el primer semestre del mismo año, proporcionando datos sobre la edad, género y fecha de alta de los usuarios. Todos los datos utilizados en el presente caso de estudio fueron descargados del portal de datos públicos BA Data, siendo los mismos generados, guardados y publicados por el Gobierno de la Ciudad de Buenos Aires


Procesamiento de datos

El trabajo será realizado con R, dado que brinda herramientas accesibles que facilitan la consulta y manejo de grandes volúmenes de datos, permitiendo además, crear visualizaciones en el mismo entorno de trabajo.

Instalación de paquetes y apertura de librerías.

Se instalarán los siguientes paquetes para facilitar el trabajo de análisis y armado de visualizaciones:

Ahora hay que abrir las librerías:

library(tidyr)
library(readr)
library(dplyr)
library(stringr)
library(lubridate)
library(ggplot2)
library(patchwork)
library(sf)

Importación de datasets

Importo los datasets, almacenándolos en variables para crear un data frame de cada uno, y los previsualizo para ver con los datos que se trabajarán.

raw_trips_2023 <- read.csv('datasets/trips_2023.csv')
raw_users_2023 <- read.csv('datasets/usuarios_ecobici_2023.csv')

glimpse(raw_trips_2023)
## Rows: 1,314,312
## Columns: 18
## $ X                          <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, …
## $ Id_recorrido               <chr> "16997896BAEcobici", "17001042BAEcobici", "…
## $ duracion_recorrido         <chr> "2,471", "2,979", "598", "2,472", "973", "5…
## $ fecha_origen_recorrido     <chr> "2023-01-22 10:23:53", "2023-01-22 19:35:27…
## $ id_estacion_origen         <chr> "191BAEcobici", "191BAEcobici", "229BAEcobi…
## $ nombre_estacion_origen     <chr> "191 - Rivadavia y 9 de Julio", "191 - Riva…
## $ direccion_estacion_origen  <chr> "Pellegrini Y Rivadavia Av.", "Pellegrini Y…
## $ long_estacion_origen       <dbl> -58.38084, -58.38084, -58.45153, -58.42095,…
## $ lat_estacion_origen        <dbl> -34.60793, -34.60793, -34.58158, -34.58055,…
## $ fecha_destino_recorrido    <chr> "2023-01-22 11:05:04", "2023-01-22 20:25:06…
## $ id_estacion_destino        <chr> "30BAEcobici", "51BAEcobici", "101BAEcobici…
## $ nombre_estacion_destino    <chr> "030 - Peña", "051 - TUCUMAN", "101 - Fitz …
## $ direccion_estacion_destino <chr> "Peña & Azcuenaga", "Tucuman & 9 De Julio A…
## $ long_estacion_destino      <dbl> -58.39737, -58.38213, -58.44244, -58.39902,…
## $ lat_estacion_destino       <dbl> -34.59082, -34.60148, -34.58919, -34.59840,…
## $ id_usuario                 <chr> "948377BAEcobici", "948377BAEcobici", "6702…
## $ modelo_bicicleta           <chr> "ICONIC", "ICONIC", "ICONIC", "ICONIC", "IC…
## $ género                     <chr> "MALE", "MALE", "MALE", "MALE", "FEMALE", "…
glimpse(raw_users_2023)
## Rows: 53,929
## Columns: 6
## $ ID_usuario                  <int> 1001183, 1001224, 1001039, 1001326, 100124…
## $ genero_usuario              <chr> "MALE", "FEMALE", "OTHER", "MALE", "MALE",…
## $ edad_usuario                <int> 32, 24, 19, 24, 19, 20, 30, 54, 25, 21, 28…
## $ fecha_alta                  <chr> "2023-07-06", "2023-07-06", "2023-07-06", …
## $ hora_alta                   <chr> "15:50:48", "16:48:05", "06:03:32", "19:26…
## $ Customer.Has.Dni..Yes...No. <chr> "Yes", "Yes", "No", "Yes", "Yes", "Yes", "…


Limpieza de data frames

En primer lugar, se limpiará el data frame raw_trips_2023, que contiene datos sobre todos los viajes realizados en el primer semestre del 2023, almacenando los cambios en un nuevo data frame sobre el que se trabajará de ahora en adelante: trips_2023.

En el siguiente bloque de código se realizan los siguientes cambios:

  • Eliminación de columnas no necesarias y de aquellas que presentan inconsistencias o falta de información.
  • Eliminación de filas que cuenten con campos en blanco.
  • Formateo de fechas para contar con consistencia en los tipos de datos y formatos.
  • Adición de columnas: una con la duración de cada viaje y otra con el día en que se realizó cada uno de ellos.
trips_2023 <- raw_trips_2023 %>% 
  select(-X, -duracion_recorrido, -género) %>% 
  drop_na() %>% 
  mutate_at(vars(nombre_estacion_origen, nombre_estacion_destino), toupper) %>% 
  mutate(fecha_origen_recorrido = as.POSIXct(fecha_origen_recorrido, format = "%Y-%m-%d %H:%M:%S")) %>% 
  mutate(fecha_destino_recorrido = as.POSIXct(fecha_destino_recorrido, format = "%Y-%m-%d %H:%M:%S")) %>% 
  mutate(minutos_viaje = floor(as.numeric(difftime(fecha_destino_recorrido, fecha_origen_recorrido, units = "mins")))) %>% 
  mutate(dia_semana_viaje = weekdays(fecha_origen_recorrido))


Ahora es momento de limpiar el segundo data frame, raw_users_2023, que almacena información de sobre los nuevos usuarios dados de alta en el primer semestre del 2023. Para ello, se llevarán adelante las siguientes modificaciones, almacenando el resultado en un nuevo data frame: users_2023.

  • Convierto la columna ID_usuarios a minúscula para que coincidan los nombre de las columnas en ambos data frames.
  • Elimino los n/a
  • Cambio el formato de la columna fecha_alta a date
  • Filtro las edades para que solo aparezcan del rango 0 a 100 y para obtener solo valores finitos, eliminando de este modo datos irreales.
  • Elimino las columnas hora_alta y customer.has.dni ya que no son necesarias para este análisis.
users_2023 <- raw_users_2023 %>% 
  rename_all(tolower) %>% 
  drop_na() %>% 
  mutate(fecha_alta = as.Date(fecha_alta)) %>% 
  filter(edad_usuario >= 0 & edad_usuario <= 100) %>%
  filter(is.finite(edad_usuario)) %>% 
  select (-hora_alta, -customer.has.dni..yes...no.) %>% 
  mutate(dia_semana_registro = weekdays(fecha_alta))


Unión de data frames

Para poder agilizar el análisis, se creará un data frame ancho con datos de los nuevos usuarios y los viajes que realizaron, mediante un inner join de las columnas id_usuario.

Primero, y antes de realizar el join, voy a el tipo de dato de la columna “id_usuarios” alojada en el trips_2023 de chr a numeric, eliminando además las letras, para que coincidan con los valores encontrados en la otra tabla.

trips_2023$id_usuario <-  as.integer(gsub("[^0-9]", "", trips_2023$id_usuario))


Una vez listos ambos data frames, realizo el join asignándole a la nueva estructura el nombre user_trips_2023. Sobre este, voy a agregar una nueva columna indicando el rango de edad en el que se encuentra cada usuario.

user_trips_2023 <- trips_2023 %>% 
  inner_join(users_2023, by = "id_usuario") %>% 
  rename_with(~str_replace(., "\\.x$", "")) %>% 
  select(-ends_with(".x"), -ends_with(".y"))

limites_edades <- c(15, 25, 35, 45, 55, 65, 75, 85, Inf)
etiquetas_edades <- c("15-24", "25-34", "35-44", "45-54", "55-64", "65-74", "75-84", ">=85")

user_trips_2023 <- user_trips_2023 %>%
  mutate(rango_edad = cut(edad_usuario, breaks = limites_edades, labels = etiquetas_edades, include.lowest = TRUE))


Por último, se creará un último data frame con una fila por cada usuario nuevo registrado en el 2023.

nuevos_usuarios_total <- user_trips_2023 %>% 
  filter(!duplicated(id_usuario))


Análisis y visualizaciones

Cantidad de nuevos usuarios

En el 2023 se dieron de alta un total de 44333 usuarios. Para comenzar, se analizará cuántos nuevos usuarios hubo por cada día de la semana y cuántos por cada mes del primer semestre.



Los sábados, domingos y lunes destacan claramente como los días con mayores registros, mientras que los demás días presentan cifras considerablemente más bajas. Respecto a los meses, se observa un descenso progresivo en la cantidad de nuevos usuarios durante el primer semestre, con un promedio de 744,2 usuarios menos cada mes.


Edad de los nuevos usuarios

A continuación, se analizará las edades de los nuevos usuarios, agrupándolas en rangos de diez años.


Se revela una interesante diversidad de edades entre los nuevos usuarios, encontrando individuos de 15 a más de 85 años. Esto se observa en promedio de edad de 31 años. Por otro lado, rango de edad de 15-24 se destaca como el más representativo en términos de cantidad de registros. Esta amplia variedad de perfiles denota la habilidad del servicio para atraer a una amplia gama de generaciones y perfiles, lo que fortalece la inclusión y la adopción de bicicletas públicas en la ciudad de Buenos Aires.


Género de los nuevos usuarios

Es importante identificar qué porcentaje de cada género representan los nuevos usuarios. Para ello, se separarán los mismos en los tres grupos registrados en el sistema: MALE (Masculino), FEMALE (Femenino) y OTHER (otros).

Estos gráficos del género de los nuevos usuarios muestran una predominancia de registros masculinos, ligeramente superiores a los femeninos. Juntos, representan más del 90% del total de nuevos usuarios, mientras que el 10% restante corresponde a usuarios de otros géneros. Estos hallazgos reflejan la necesidad de implementar estrategias inclusivas que promuevan la participación de un público más diverso en el servicio Ecobici, con el objetivo de asegurar una mayor equidad de género en la adopción de la bicicleta pública como opción de movilidad sostenible en la ciudad de Buenos Aires.


Duración viajes nuevos usuarios

Ahora, profundicemos en los viajes en sí con explorando la duración de aquellos realizados por los nuevos usuarios. Se buscará obtener el promedio de duración de los viajes diarios, intentando identificar variaciones a lo largo del primer semestre.

Para empezar, se visualizarán todos los viajes con sus respectivas duraciones, omitiendo aquellos que registraron más de 16 horas de duración.



En el gráfico anterior, es posible apreciar que la mayoría de los viajes se encuentran dentro de la franja de las 2 horas de duración.


Por último, para tener una visión mas detallada de la franja de 2 horas, se agrandará la escala, convirtiéndola además a minutos, pudiendo identificar que la duración promedio de los viajes de los nuevos usuarios es de 31 minutos.


Estaciones

En este último capítulo, se analizará la ubicación geográfica de las estaciones de Ecobici en la Ciudad de Buenos Aires. Para facilitar la visualización, se utilizará un archivo georeferenciado con las comunas de la Ciudad Autónoma de Buenos Aires, disponible online en formato geojson para representar las estaciones como puntos en un mapa de la ciudad.

Ubicación estaciones Ecobici

barrios <- st_read('https://bitsandbricks.github.io/data/CABA_barrios.geojson')
## Reading layer `CABA_barrios' from data source 
##   `https://bitsandbricks.github.io/data/CABA_barrios.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.53152 ymin: -34.70529 xmax: -58.33514 ymax: -34.52754
## Geodetic CRS:  WGS 84

10 estaciones de inicio y destino más elegidas

Al analizar las preferencias sobre estaciones de inicio y destino, es posible observar que en ambos casos las más elegidas por los nuevos usuarios se concentran en las zonas este y noreste de la ciudad.


Conclusiones

En el marco del análisis de nuevos usuarios del servicio de bicicletas públicas “Ecobici” en la Ciudad de Buenos Aires durante el primer semestre año 2023, se han obtenido importantes hallazgos sobre el comportamiento y características de los usuarios que se han sumado al servicio en dicho período:

En base a estos resultados, se proponen las siguientes recomendaciones para mejorar la experiencia de los nuevos usuarios, incrementar los registros y fomentar el uso continuo del servicio de Ecobici: