Explora tu actividad en Uber con R: Análisis y visualización de datos de tu historial

Descubre cómo y cuánto has consumido de Uber, usando una copia de tus datos personales

Dashboard preview — Link al final del artículo

Quizás, estimado lector, eres demasiado joven para recordar que antes la única manera de solicitar un servicio particular de transporte como taxi, era levantando una mano haciendo una señal a algún conductor disponible, quien al verte se detenía en caso de estar libre, para llevarte a tu destino, no sin antes preguntarte qué tan lejos vas, para evaluar si llevarte o no. Tampoco existían estrellitas con las cuales hacerle saber al conductor tu satisfacción como pasajero.

Hace apenas 7 años por lo menos en México antes de la llegada de Uber así eran las cosas. La llegada de la App del servicio de movilidad más famoso del mundo cambió muchos de nuestros hábitos, abriendo mercado y grandes oportunidades para muchos.

Pocas veces nos detenemos unos instantes a analizar nuestros hábitos de consumo y responder preguntas como ¿Cuánto he gastado? ¿Qué lugares a los que voy son los más recurrentes? ¿Con la distancia recorrida hasta ahora, habría alcanzado a llegar a China?. Uber como muchas otras aplicaciones pone a tu disposición la posibilidad de solicitar una copia de tus datos, que incluye el historial completo de tus viajes. Tomaremos ventaja de esto para analizar algunos datos personales interesantes.

¿En dónde puedo obtener una copia de mis datos?

Puedes solicitar tu copia desde esta url que es la sección del centro de ayuda oficial de Uber y que habla de ello: https://help.uber.com/riders/article/request-a-copy-of-your-uber-data?nodeId=2c86900d-8408-4bac-b92a-956d793acd11. En la parte inferior de esa página tienes que dar clic al enlace que dice “Descarga tus datos”

Screenshot: Portal de centro de ayuda de Uber

Al dar clic te redirigirá a una nueva ventana para hacer login con tu cuenta. Además Uber para asegurarse de que eres tú quien está solicitando los datos, te enviará un SMS al número de teléfono asociado con tu cuenta, con un código de 4 dígitos que deberás ingresar para autenticarte. Una vez autenticado correctamente ahora te encontrarás con un nuevo botón con el título “Solicitar los datos” al cual debes dar clic.

Screenshots: SMS con código de verificación recibido y acceso a solicitud de copia de datos personales en Uber

Al dar clic Uber te estará enviando un correo notificándote que se está preparando una copia de tus datos que te será enviada como solicitaste. Aproximadamente de 12 a 24 horas después debería estarte llegando un nuevo correo invitándote loguearte nuevamente para descargar tu copia, en formato .zip.

Screenshot: Correo recibido con URL para descarga de copia de datos personales en Uber

Lectura de Datos

Al descomprimir el archivo .zip te encontrarás con una estructura de archivos y carpetas. Quien nos interesa es el archivo en formato CSV de nombre “trips_data.csv”, contenido dentro la carpeta “Rider”. Este archivo CSV contiene los datos de tus viajes realizados desde tu primer viaje recién creaste tu cuenta y usaste la App, hasta tu último viaje al día de hoy. Te brindará información como el tipo de producto (UberX VIP, UberX, Uber Eats, etc.), estado de la orden (Completada, Cancelada, etc.), tarifa pagada, fechas, latitudes y longitudes, distancia recorrida, entre otros datos más.

Screenshot: Archivo .zip descomprimido de copia de datos en Uber

Ahora sí, puedes crear un nuevo script en R para importar y leer el archivo CSV y trabajarlo para analizar y visualizar algunos interesantes datos.

# LIBRERÍAS REQUERIDAS
library(dygraphs)
library(tidyquant)
library(tidyverse)
library(dygraphs)
library(plyr)
library(quantmod)
library(ggthemes)
library(ggplot2)
library(RColorBrewer)
library(sp)
library(ggmap)
library(lubridate)
library(leaflet)
library(plotly)
library(dplyr)
library(xts)
# LECTURA DE DATOS
myTrips <- read.csv("my_trips_uber_history.csv", stringsAsFactors = FALSE)
myTrips$Request.Time <- as.Date(myTrips$Request.Time, "%Y-%m-%d")
myTrips$Year <- as.Date(cut(myTrips$Request.Time, breaks="month"))

Línea de tiempo de viajes realizados por Ciudad

Puedes dar un primer vistazo a las ciudades en las que has hecho uso de Uber, y explorar qué tanto has viajado con Uber a lo largo del tiempo en cada ciudad, dada la disponibilidad de la variable “City” en la data del CSV.

# LÍNEA DE TIEMPO DE VIAJES HECHOS
timeline <- ggplot(myTrips, aes(Year, City))+
geom_line(color = "#006790", size = 6) +
labs(x= "Año", y= "Ciudades") +
ggtitle("Ciudades en las que he solicitado un Uber", "Línea de tiempo del historial completo")
timeline

En mi caso, puedo ver que desde 2015 que comencé a usar la app de Uber, destacan los viajes realizados en Ciudad de México (lugar donde vivo) y Toluca (lugar donde visito familia con regularidad), frente al resto de ciudades en los que no he realizado más que un par de viajes.

Análisis y visualización de datos Uber — Plot de Ciudades y frecuencia donde Uber fue solicitado

Estado final de solicitudes de Uber por Ciudad

Otra de las variables que podemos recoger es el estado final de la orden de la solicitud que realizaste a Uber, identificada como “Trip.or.Order.Status”. Es decir, si fue cancelado por ti, o cancelado por el conductor, o la tarifa fue dividida, o fue satisfactoriamente completado el viaje. Con lo cual puedes observar si guarda relación el número de veces que el conductor cancela respecto a la ciudad de origen, por ejemplo.

# ESTADO FINAL DE LA ORDEN
orderStatus<-ggplot(myTrips, aes(City,fill = Trip.or.Order.Status)) +
labs(x = "Ciudad", y = "Número de solicitudes") +
ggtitle("Estado final de solicitudes de servicio de Uber", "Estado de la orden por ciudad") +
geom_bar() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_fill_brewer(name = "Estado final de viaje", palette="Set1")
orderStatus

Obtendrás un plot similar al siguiente. De entrada en mi caso no podría ser muy objetivo contestando la pregunta anterior, porque como podrás ver no tengo por lo menos una cantidad equiparable de viajes por ciudad.

Análisis y visualización de datos Uber — Plot de Ciudades y Estado final de solicitud

Estado final de solicitudes de Uber en relación con el tipo de servicio

Uber, como sabrán se caracteriza por tener a su vez diferentes categorías de producto (UberX, VIP, Eats, etc.). Puedes también observar la relación entre el estado final del servicio con el tipo de producto que solicitaste. Si tu historial es mayor a 4 años, seguro encontrarás algunas inconsistencias en la columna “Product.Type” como valores nulos, vacíos, o descritos como “All”. O que a la categoría “Pool” u otras, las nombraron en algún momento con otras variaciones. Tienes que regularizar y homogenizar este tipo de inconsistencias primeramente, antes de visualizar los datos.

# ESTADO FINAL DE LA ORDEN EN RELACIÓN CON EL TIPO DE PRODUCTO
productType =
myTrips %>%
# HOMOGENIZANDO INCONSISTENCIAS EN NOMBRES DE PRODUCTO
filter(Product.Type != "All" & Product.Type != "" )
productType <- mgsub::mgsub(productType, c("uberX", "UberEATS Marketplace", "Pool"), c("UberX", "UberEATS - Marketplace", "uberPOOL"))
productType <- mgsub::mgsub(productType, c("uberPOOL: MATCHED"), c("uberPOOL"))
orderProductType <- qplot(Trip.or.Order.Status, data=productType, geom="bar", fill= Product.Type) +
scale_fill_brewer(name = "Estado final de viaje", palette="Set1")+
labs(x = "Estado final del viaje", y = "Número de solicitudes") +
ggtitle("Estado final de solicitudes de servicio de Uber", "Estado de la orden en relación con el tipo de producto") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
orderProductType

En mi caso, es visible que en su mayoría de veces viajo en UberX, por lo que he tenido más cancelaciones propias. Y que los conductores han cancelado mayor cantidad de veces en Uber Pool que en UberX. ¿Aún existe Uber Green en sus ciudades? En Ciudad de México estuvo un breve rato operando solamente. No era mala idea contar con una categoría eco-friendly.

Análisis y visualización de datos Uber — Plot de Productos solicitados y Estado final de solicitud

Mapa de ubicaciones donde fue solicitado Uber

Como mencionaba en un principio, otras de las variables que nos brinda nuestro historial son las longitudes y latitudes de cada viaje desde donde fue solicitado el servicio. (identificadas como “Begin.Trip.Lng” y “Begin.Trip.Lat”). Podemos trazar un mapa con “ggmap” para visualizar por ciudad las ubicaciones. Para ejemplificar, tomaré mis viajes realizados en Ciudad de México, que es donde tengo un mayor registro de viajes.

# MAPA DE VIAJES EN UBER SOLICITADOS EN CIUDAD DE MÉXICOregister_google(key = "YOUR_API_KEY")
MexicoCity <- subset(myTrips, City=="Mexico City")
ggmap(get_map(location = "Mexico City", zoom=11, maptype = "roadmap")) +
geom_point(aes(Begin.Trip.Lng, Begin.Trip.Lat), data=MexicoCity, color = I('Red'), size = I(2), zoom=11) +
labs(x = "Longitud", y = "Latitud") +
ggtitle("Ubicaciones donde fue solicitado Uber", "Ciudad de México")

Es importante registrar un API Key de Maps como string y reemplzarlo por el texto “YOUR_API_KEY”, de lo contrarió vas a encontrarte con un mensaje de error como el siguiente, que no te permitirá visualizar el mapa:

Screenshot: Error en consola por falta de API Key de Maps

Es muy sencillo, puedes obtener un API Key de Maps siguiendo las instrucciones que encontrarás en la documentación oficial: https://developers.google.com/maps/documentation/javascript/get-api-key

Una vez añadido tu API Key de Maps, y ejecutado el código, obtendrás entonces un mapa como el siguiente. En mi caso es notable que no me muevo mucho por el norte de la Ciudad de México.

Análisis y visualización de datos Uber — Plot de mapa de ubicaciones de solicitudes

Mapa de densidad de ubicaciones desde donde fue solicitado Uber

Complementando el mapa anteriormente creado, podemos también crear un mapa de densidad con “qmplot”.

# MAPA DE DENSIDAD DE VIAJES EN UBER SOLICITADOS EN CIUDAD DE MÉXICO
qmplot(Begin.Trip.Lng, Begin.Trip.Lat, data = MexicoCity, geom = "blank",
zoom = 11, extent = "panel", maptype = "toner-background", darken = .7, legend = "right") +
stat_density_2d(aes(fill = ..level..), geom = "polygon", alpha = .3, color = NA) +
scale_fill_gradient2("Nivel", low = "white", mid = "yellow", high = "red", midpoint = 100) +
labs(x = "Longitud", y = "Latitud") +
ggtitle("Mapa de densidad de servicios solicitados a Uber", "Ciudad de México")

Obtendrás el siguiente plot. Por ejemplo en mi caso refleja una tendencia respecto a la ubicación del lugar donde vivo y la oficina donde trabajo.

Análisis y visualización de datos Uber — Plot de mapa de densidad de solicitudes

¿Cuánto dinero has gastado haciendo uso de Uber?

Quizás esta sea otra de las preguntas que te estás haciendo en este momento. Encontrarás que tienes la variable “Fare.Amount” con la tarifa pagada por cada servicio, en tu moneda local (en mi caso, en Pesos Mexicanos). También encontrarás la variable “Dropoff.Time” que indica el timestamp exacto en que terminó el servicio. Podemos visualizar con un gráfico de dispersión, cuánto de tu valioso dinero has pagado a Uber por llevarte y traerte desde y hacia tus destinos.

# CUÁNTO HE PAGADO POR VIAJAR EN UBER DE 2015 A 2020
totalPaid <- ggplot(myTrips, aes(x=Dropoff.Time, y=Fare.Amount, Fare.Currency = Fare.Currency)) +
geom_point(aes(col=Fare.Amount, size=Fare.Amount)) +
labs(col="Monto", size="Tamaño")+
labs(x = "Fecha de viaje", y = "Tarifa pagada") +
ggtitle("¿Cuánto he pagado por los servicios de Uber?", "De 2015 a 2020")+
guides(size=FALSE)
totalPaid

Entonces obtendrás un plot como el siguiente, donde en mi caso puedo ver que lo máximo que he pagado por un servicio son alrededor de $250 pesos, y lo mínimo la gran catidad de $0 pesos, ¡ja! (claro, la primera vez es gratis).

Análisis y visualización de datos Uber — Plot de tarifas pagadas por servicio

¿Cuánto dinero has gastado en Uber este 2020?

Este 2020 nos dio un buen zarpazo con la llegada del COVID-19, modificando nuestros hábitos de consumo de muchas cosas, y Uber no es la excepción. Con la posibilidad de hacer home office, posiblemente lo veas reflejado si como en mi caso, y sin un auto propio, evitaste salir durante la cuarentena (u ochentena) lo más posible. Puedes hacer un acercamiento con un gráfico de barras, para ver a detalle cuánto has gastado por día, en lo que va del año.

# CUÁNTO HE GASTADO EN UBER EN 2020
myTrips2020 <- myTrips %>%
filter(Request.Time >= as.Date("2020-01-01") & Request.Time <= as.Date("2020-07-13"))
min(myTrips2020$Request.Time)
max(myTrips2020$Request.Time)
paid2020 <- ggplot(myTrips2020, aes(Request.Time, Fare.Amount, Fare.Currency = Fare.Currency, City = City))+
geom_bar(stat = 'identity', fill = 'darkorange2', width=1) +
labs(x = "Fecha de viaje", y = "Tarifa pagada") +
ggtitle("¿Cuánto he gastado en Uber en 2020?", "De Enero a Julio")
paid2020

Este año es visible que principalmente en Abril cuando se determinó la emergencia sanitaria en el país donde vivo, dejé mayormente de solicitar Uber. Obtendrás un plot como el siguiente.

Análisis y visualización de datos Uber — Plot de total gastado por día en 2020

Visualización de tus distancias recorridas

Por último, puedes visualizar también tus distancias recorridas por viaje. Encontrarás para esto la variable “Distance..miles”, que se encarga de registrar la longitud del viaje basado en el sistema de medida local, es decir, en mi caso por ejemplo, donde nos manejamos con el sitema métrico decimal, las distancias se registran en kilómetros (km.). Puedes crear un “dygraph” para mirar los detalles.

# DISTANCIA RECORRIDA
distanceRides <- read.csv("my_trips_uber_history.csv")
distanceRides$Request.Time <- ymd_hms(distanceRides$Request.Time)
distanceRides$Dropoff.Time <- ymd_hms(distanceRides$Dropoff.Time)
rides = xts(x=distanceRides$Distance..miles., order.by = distanceRides$Request.Time)
dygraph(rides, main = "Distancias recorridas de 2015 a 2020") %>%
dyOptions(drawPoints = TRUE, pointSize = 5, colors="#1a954d") %>%
dyRangeSelector() %>%
dyAxis("y", label= "km.") %>%
dyHighlight(highlightCircleSize = 0.5,
highlightSeriesBackgroundAlpha = 1)

Obtendrás un plot interactivo como el siguiente, donde en mi caso, puedo observar que el máximo recorrido en un solo viaje ha sido una distancia de 21 km.

Análisis y visualización de datos Uber — Plot de distancias recorridas

Gracias por tu amable lectura. Del mismo modo que con todos mis artículos, por aquí comparto un poco más atractivos los plots generados con plotly en un flexdashboard que armé: https://rpubs.com/cosmoduende/uber-trips-analyisis

Y por aquí puedes encontrar también el código completo: https://github.com/cosmoduende/r-uber-trips-analyisis

¡Te agradezco haber llegado hasta acá, te deseo que tengas felices análisis, que lo puedas poner en práctica y te sorprendas y diviertas tanto como yo con los resultados!

Otros artículos que he escrito

Si te ha gustado este post, agradeceré mucho tus claps. Además te invito a visitar también otros artículos que he escrito:

¡Gracias!

Aprendiz constante, amante de la tecnología. #G3ekArmy, Web Developer & Data Enthusiast. Coordinador académico & Instructor en KMMX. Organizador de #KotlinCDMX.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store