Узнайте, как вы используете приложение Uber, используя копию своих данных.

Возможно, дорогой читатель, вы слишком молоды, чтобы помнить, что раньше единственный способ запросить конкретную транспортную услугу, например, такси, - это поднять руку, чтобы подать сигнал доступному водителю, который, увидев вас, остановится, если он не занят, чтобы отвезти вас к месту назначения, не предварительно спросив, как далеко вы идете, чтобы оценить, принимать ли задание или нет. И без звезд, чтобы водитель знал, что вы удовлетворены поездкой как пассажир.

Всего семь лет назад, по крайней мере, в Мексике до появления Uber, вот как все было. Появление самого известного в мире приложения «Мобильность как услуга» изменило многие наши привычки, открыло рынок и открыло для многих большие возможности.

Мы редко останавливаемся на мгновение, чтобы проанализировать свои потребительские привычки и ответить на такие вопросы, как «Сколько я потратил?» Какие места я бываю с Uber чаще всего? Мог ли я добраться до Китая, учитывая пройденное расстояние до сегодняшнего дня? Uber, как и многие другие приложения, предлагает вам возможность запросить копию ваших данных, которая включает полную историю ваших поездок. Мы воспользуемся этим для анализа и визуализации некоторых интересных личных данных.

Где взять копию моих данных?

Вы можете запросить копию по этому URL-адресу, который является разделом официального справочного центра Uber и в котором говорится об этом: https://help.uber.com/riders/article/request-a-copy-of-your-uber -data? nodeId = 2c86900d-8408–4bac-b92a-956d793acd11 . Внизу страницы нажмите ссылку Загрузить данные.

Нажатие перенаправит вас в новое окно для входа в свою учетную запись. Кроме того, Uber, чтобы убедиться, что вы запрашиваете данные, отправит вам SMS на номер телефона, связанный с вашей учетной записью, с 4-значным кодом, который вы должны ввести для аутентификации. После успешной аутентификации вы увидите новую кнопку с заголовком «Запросить данные», которую вы должны нажать.

Нажав, Uber отправит вам электронное письмо с уведомлением о том, что копия ваших данных готовится и будет отправлена ​​вам по запросу. Примерно через 12–24 часа должно прийти новое электронное письмо, предлагающее вам снова войти в систему и загрузить свою копию в формате .zip.

Чтение данных

Распаковав файл .zip, вы найдете структуру файлов и папок. Нас интересует файл CSV с именем «trips_data.csv», содержащийся в папке «Rider». Этот файл CSV содержит данные о ваших поездках, совершенных с момента вашей первой поездки до вашей последней поездки сегодня. Он предоставит вам такую ​​информацию, как тип продукта (UberX VIP, UberX, Uber Eats и т. Д.), Статус заказа (завершен, отменен и т. Д.), Уплаченная комиссия, даты, широта и долгота, пройденное расстояние и т. Д. другие данные.

Теперь вы можете создать новый скрипт в R для импорта и чтения файла CSV и работы с ним для анализа и визуализации некоторых интересных данных.

# REQUIRED LIBRARIES
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(mgsub)
library(xts)
# DATA READING
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"))

График поездок по городам

Вы можете сначала взглянуть на города, в которых вы использовали Uber, и узнать, сколько вы проехали с Uber с течением времени в каждом городе, учитывая наличие переменной «Город» в Файл данных CSV.

# TRIPS TIMELINE BY CITY
timeline <- ggplot(myTrips, aes(Year, City))+
  geom_line(color = "#006790", size = 6) + 
  labs(x= "Year", y= "City") + 
  ggtitle("Cities where I have requested Uber services", "Full history timeline")
timeline

В моем случае я вижу, что с 2015 года, когда я начал использовать приложение Uber, поездки, совершенные в Мехико (где я живу) и Толуке (место, где я регулярно навещаю семью), выделяются по сравнению с другими городами. где я не проехал больше пары поездок.

Окончательный статус запросов Uber по городам

Еще одна переменная, которую мы можем собрать, - это окончательный статус запрошенного заказа в Uber, который определяется как «Trip.or.Order.Status». То есть, если он был отменен вами, или отменен водителем, или тариф был разделен, или поездка была завершена. С его помощью вы можете увидеть, связано ли количество отмен, которое водитель отменяет, например, с городом происхождения.

# FINAL STATUS OF THE ORDER
orderStatus<-ggplot(myTrips, aes(City,fill = Trip.or.Order.Status)) + 
  labs(x = "City", y = "Number of requests") + 
  ggtitle("Final status of Uber service requests", "Order status by city") +
  geom_bar() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(name = "Final status", palette="Set1")
orderStatus

Вы получите сюжет, подобный следующему. С самого начала в моем случае я не мог быть очень объективным, отвечая на предыдущий вопрос, потому что, как вы можете видеть, у меня нет хотя бы сопоставимого количества поездок на город.

Окончательный статус запросов Uber, связанных с типом продукта

Uber, как известно, отличается наличием разных категорий товаров (UberX, VIP, Eats и т. Д.). Вы также можете увидеть взаимосвязь между окончательным статусом услуги и запрошенным типом продукта. Если ваша история старше 4 лет, вы наверняка найдете некоторые несоответствия в столбце «Product.Type» как пустое, пустое или обозначенное как «Все». Или что категория «Бассейн» или другие были названы в какой-то момент с другими вариациями. Вы должны сначала упорядочить и усреднить этот тип несоответствия, прежде чем визуализировать данные.

# FINAL STATUS OF THE ORDER CONCERNING THE PRODUCT TYPE
productType = 
  myTrips %>%
# HOMOGENIZING INCONSISTENCIES IN PRODUCT TYPE NAMES
  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 = "Product type", palette="Set1")+
  labs(x = "Final order status", y = "Number of requests") + 
  ggtitle("Final status of Uber service requests", "Order status concerning the Product type") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 
orderProductType

В моем случае видно, что я в основном путешествую на UberX, поэтому у меня было больше отказов от поездок. И что водители отменяли билеты в Uber Pool больше раз, чем в UberX. Uber Green все еще существует в ваших городах? В Мехико эта категория работала недолго. Наличие категории экологически чистых товаров было неплохой идеей.

Карта мест, где запрашивали Uber

Как я упоминал в начале, другие переменные, которые дает нам наша история, - это долгота и широта каждой поездки, из которой запрашивалась услуга. (обозначается как «Begin.Trip.Lng» и «Begin.Trip.Lat»). Мы можем построить карту с помощью «ggmap» для просмотра местоположений по городам. Я буду совершать поездки в Мехико, где у меня больше всего поездок.

# MAP OF UBER REQUESTS IN MEXICO CITY
register_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 = "Longitude", y = "Latitude") + 
  ggtitle("Locations where Uber was requested", "Mexico City")

Важно зарегистрировать ключ API Карт в виде строки и заменить текст «YOUR_API_KEY» во фрагменте кода, иначе вы получите сообщение об ошибке, подобное приведенному ниже, которое не позволит вам просмотреть карта:

Это очень просто, вы можете получить ключ API Карт, следуя инструкциям, которые вы найдете в официальной документации: https://developers.google.com/maps/documentation/javascript/get-api-key

После добавления ключа API Карт и выполнения кода вы получите карту, подобную приведенной ниже. В моем случае примечательно то, что я мало переезжаю на север Мехико.

Карта плотности локаций, откуда был запрошен Uber

Дополняя ранее созданную карту, мы также можем создать карту плотности с помощью «qmplot».

# DENSITY MAP OF UBER REQUESTS IN MEXICO CITY
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("Level", low = "white", mid = "yellow", high = "red", midpoint = 100) +
  labs(x = "Longitude", y = "Latitude") + 
  ggtitle("Locations where Uber was requested", "Mexico City Density Map")

У вас получится следующий сюжет. Например, в моем случае это отражает тенденцию относительно местоположения места, где я живу, и офиса, в котором я работаю.

Сколько денег вы потратили на Uber?

Возможно, это еще один из вопросов, которые вы задаете себе в данный момент. Вы обнаружите, что у вас есть переменная «Fare.Amount» со ставкой, оплачиваемой за каждую услугу, в вашей местной валюте (в моем случае в мексиканских песо). Вы также найдете переменную «Dropoff.Time», которая указывает точную отметку времени, когда закончилась услуга. С помощью точечного графика мы можем визуализировать, сколько ваших ценных денег вы заплатили Uber, чтобы они доставили вас в места назначения и обратно.

# HOW MUCH I PAID TO UBER FROM 2015 TO 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="Amount", size="size")+
  labs(x = "Timestamp", y = "Fare amount") + 
  ggtitle("¿How much have I paid for Uber services?", "From 2015 to 2020")+
  guides(size=FALSE)
totalPaid

Тогда вы получите график, подобный следующему, в котором в моем случае я вижу, что максимальная сумма, которую я заплатил за услугу, составляет около 250 песо, а минимальная - это большая сумма в 0 песо, ха! (конечно, первое время бесплатно).

Сколько денег вы потратили на Uber в этом 2020 году?

Этот 2020 год стал для нас хорошим ударом с появлением COVID-19, изменив наши потребительские привычки во многих отношениях, и Uber не стал исключением. С возможностью сделать домашний офис, вы можете увидеть это отражением, если, как в моем случае, и без машины, вы избегаете выходить на улицу во время изоляции насколько это возможно. Вы можете использовать гистограмму, чтобы подробно узнать, сколько вы потратили за день в этом году.

# HOW MUCH I SPENT ON UBER IN 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))+ 
  geom_bar(stat = 'identity', fill = 'darkorange2', width=1) +
  labs(x = "Date", y = "Total spent per day") + 
  ggtitle("How much have I spent on Uber in 2020?", "From January to July")
paid2020

В этом году видно, что в основном в апреле, когда в стране, где я живу, была объявлена ​​чрезвычайная ситуация со здоровьем, я в основном перестал пользоваться Uber. У вас получится следующий сюжет.

Визуализация пройденных расстояний

Наконец, вы также можете просмотреть пройденное расстояние за поездку. Для этого вы найдете переменную «Distance..miles», которая отвечает за регистрацию расстояния поездки на основе локальной системы измерения, то есть, например, в моем случае, когда мы работают в десятичной системе счисления, расстояния записываются в километрах (км). Вы можете создать «диграф», чтобы рассмотреть детали.

# TRAVELED DISTANCE
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 = "Distances traveled from 2015 to 2020") %>%
  dyOptions(drawPoints = TRUE, pointSize = 5, colors="#1a954d") %>%
  dyRangeSelector() %>%
  dyAxis("y", label= "Distance (km.)") %>%
  dyHighlight(highlightCircleSize = 0.5,
              highlightSeriesBackgroundAlpha = 1)

Вы получите интерактивный сюжет, подобный приведенному ниже. В моем случае я вижу, что максимальное расстояние за одну поездку составляло 21 км.

Спасибо за любезное чтение. Таким же образом, как и во всех моих статьях, я делюсь графиками, созданными с помощью plotly в flexdashboard, которые я собрал вместе: https: // rpubs .com / cosmoduende / uber-trips-analyisis

И здесь вы также можете найти полный код: https://github.com/cosmoduende/r-uber-trips-analyisis

Я благодарю вас за то, что вы зашли так далеко, желаю вам удачного анализа, чтобы вы могли применить его на практике и быть так же удивлены и удивлены результатами, как и я!