🇺🇸 ENGLISH-LANGUAGE VERSION | 🇺🇸 АНГЛОЯЗЫЧНАЯ ВЕРСИЯ

Содержание
- Предисловие
- О Компании
- Дорожная Карта Исследовательского Проекта
- Вопрос
- 4.1. Цель
- Подготовка
- 5.1. Организация Данных
- Процесс
- Анализ
- Распространение
- 8.1. Среднее Расстояние И Длина Поездки
- 8.2. Количество Поездок По Типу Пользователей В Течение Недели
- 8.3. Использование Велосипедов По Типу Пользователей
- 8.4. Использование Велосипедов Обоими Типами Пользователей В Течение Недели
- 8.5. Самые Популярные Маршруты У Пользователей Без Подписки (использованные > 1000 раз (1) и использованные > 500 раз (2))
- 8.6. Самые Популярные Маршруты У Пользователей С Годовой Подпиской (использованные > 1000 раз (1) и использованные > 500 раз (2))
- 8.7. Предложения По Вопросам, Определяющим Будущую Маркетинговую Программу Для «Citi Bike»
- 8.7.1. Как отличается использование велосипедов «Citi Bike» обычными пользователями и пользователями с годовой подпиской?
- 8.7.2. Для чего обычные пользователи могли бы купить годовую подписку от «Citi Bike»?
- 8.7.3. Как «Citi Bike» может побудить обычных пользователей стать подписчиками?
- 8.7.4. Как «Citi Bike» может побудить пользователей с годовой подпиской пользоваться её услугами ещё больше?
- Действие
- Примечания
1. Предисловие
Этот профессиональный исследовательский проект является частью моего портфолио как аналитика данных — надеюсь, он будет вам полезен и интересен!
2. О Компании
«Citi Bike» — это частная общественная система проката велосипедов, обслуживающая Нью-Йорк (штат Нью-Йорк), а также Джерси-Сити (штат Нью-Джерси) и Хобокен (штат Нью-Джерси).
В октябре 2017 года общее количество поездок достигло 50 миллионов, а в июле 2020 года — 100 миллионов. По состоянию на июль 2019 года число пользователей с годовой подпиской составляло 169 тысяч человек в год. Среднемесячное количество пассажиров впервые превысило 100 тысяч в июне 2021 года.
3. Дорожная Карта Исследовательского Проекта
Проект следует шестиэтапному процессу анализа данных:
- Вопрос
- Подготовка
- Процесс
- Анализ
- Распространение
- Действие
4. Вопрос
Этот шаг будет состоять из следующих задач:
- Постановка эффективных вопросов по системе SMART.
- Обобщение данных.
- Управление ожиданиями команды и заинтересованных сторон.
4.1. Цель
Цель — помочь разработать новую маркетинговую стратегию, которая позволит превратить любителей в пользователей с годовой подпиской.
Три вопроса могут помочь определить будущую возможную маркетинговую программу:
- Как отличается использование велосипедов «Citi Bike» пользователями без подписки и пользователями с годовой подпиской?
- Для чего обычные пользователи могли бы купить годовую подписку от «Citi Bike»?
- Как «Citi Bike» может побудить обычных пользователей стать подписчиками?
- Как «Citi Bike» может побудить пользователей с годовой подпиской пользоваться её услугами ещё больше?
5. Подготовка
Этот шаг будет состоять из следующих ключевых задач:
- Обозначить проблемы предвзятости и достоверности данных, обеспечить соблюдение этических норм для обработки данных.
- Получить доступ к базам данных и импортировать данные.
- Организовать и защитить данные.
5.1. Организация Данных
Для анализа и выявления различных тенденций были использованы исторические данные о поездках «Citi Bike» с марта 2021 года по март 2022 года. Данные хранились в отдельном каталоге, и для каждого набора данных были сделаны копии.
5.2. Проверка Данных И Доступность
- Предоставленные данные были взяты с веб-сайта компании. Набор данных является общедоступным и доступен для использования всеми желающими.
- Данные были обработаны с целью исключения поездок, совершенных сотрудниками, а также любых поездок, продолжительность которых составляла менее 60 секунд.
- Данные предоставлены в соответствии с Политикой использования данных «Citi Bike».
5.3. Конфиденциальность Данных
В целях конфиденциальности данных, я не буду использовать персональные идентификационные данные пассажиров, и это не позволит мне определить, совершил ли один и тот же пользователь/пассажир несколько поездок. Все идентификаторы поездок (ride_id) в этом наборе данных уникальны.
5.4. Код, Используемый Для Этапа «Подготовка»
Сначала я загрузил необходимые для проекта пакеты R в «RStudio» — интегрированную среду разработки (IDE) для «R» . Все эти пакеты, ранее отсутствовавшие в системе, были установлены с помощью команды: install.packages(“имя пакета”)
# Load the project-related packages
install.packages()
library(tidyverse)
library(janitor)
library(ggmap)
library(geosphere)
library(lubridate)
library(gridExtra)
Затем я скачал соответствующие наборы данных с 03.2021 по 03.2022 с сайта «Citi Bike» и импортировал их в «RStudio». Переменные, представляющие эти наборы данных, имеют понятные имена — например, tripdata202103 или tripdata202203 .
# Import the datasets to RStudio
tripdata202103 <- read_csv("202103-citibike-tripdata.csv")
tripdata202104 <- read_csv("202104-citibike-tripdata.csv")
tripdata202105 <- read_csv("202105-citibike-tripdata.csv")
tripdata202106 <- read_csv("202106-citibike-tripdata.csv")
tripdata202107 <- read_csv("202107-citibike-tripdata.csv")
tripdata202108 <- read_csv("202108-citibike-tripdata.csv")
tripdata202109 <- read_csv("202109-citibike-tripdata.csv")
tripdata202110 <- read_csv("202110-citibike-tripdata.csv")
tripdata202111 <- read_csv("202111-citibike-tripdata.csv")
tripdata202112 <- read_csv("202112-citibike-tripdata.csv")
tripdata202201 <- read_csv("202201-citibike-tripdata.csv")
tripdata202202 <- read_csv("202202-citibike-tripdata.csv")
tripdata202203 <- read_csv("202203-citibike-tripdata.csv")
Поскольку не было необходимости работать с импортированными наборами данных по одному, я решил объединить их все в единый набор данных под названием tripdata и работать с ним в дальнейшем.
# Merge individual monthly datasets into a single large dataset
tripdata <- bind_rows(tripdata202103, tripdata202104, tripdata202105, tripdata202106, tripdata202107, tripdata202108, tripdata202109, tripdata202110, tripdata202111, tripdata202112, tripdata202201, tripdata202202, tripdata202203)
К сожалению, мне не удалось создать переменную tripdata из-за разных типов данных в столбце end_station_id в импортированных наборах данных. Это сообщение об ошибке, которое я получил, содержит дополнительную информацию:
One or more parsing issues, see `problems()` for details
> tripdata <- bind_rows(tripdata202103, tripdata202104, tripdata202105, tripdata202106, tripdata202107, tripdata202108, tripdata202109, tripdata202110, tripdata202111, tripdata202112, tripdata202201, tripdata202202, tripdata202203)
Error in `bind_rows()`:
! Can't combine `end_station_id` <double> and `end_station_id` <character>.
Run `rlang::last_error()` to see where the error occurred.
Поэтому мне нужно было преобразовать все данные в числовой тип в столбце end_station_id во всех импортированных наборах данных. Я просмотрел столбцы каждого набора данных и обнаружил, что только в tripdata202110 end_station_id был отформатирован как символьный тип.
# A review of column types of the tripdata202110 dataset
str(tripdata202110)

Я изменил столбец end_station_id этого набора данных на числовой тип и попытался объединить отдельные ежемесячные наборы данных (tripdata202103, tripdata202104, tripdata202105 и т. д.) в один большой набор данных, снова называемый tripdata.
# Change end_station_id to the numeric type for the tripdata202110 dataset
tripdata202110 <- mutate(tripdata202110, end_station_id = as.numeric(end_station_id))
# Merge individual monthly datasets into a single large dataset, attempt no. 2
tripdata <- bind_rows(tripdata202103, tripdata202104, tripdata202105, tripdata202106, tripdata202107, tripdata202108, tripdata202109, tripdata202110, tripdata202111, tripdata202112, tripdata202201, tripdata202202, tripdata202203)
После того как вторая попытка увенчалась успехом и набор данных tripdata был создан, я смог увидеть список названий столбцов, первые строки, статистическую сводку и другие данные. Мне было это нужно, чтобы лучше понять данные, с которыми я работаю.
# View of the merged dataset in a table form
View(tripdata)
# Check the merged dataset
## See a list of column names
print("A list of column names:")
colnames(tripdata)
## See the first 6 rows
print("The first 6 rows:")
head(tripdata)
## See a list of columns and data types (numeric, character, etc.)
print("A list of columns and data types (numeric, character, etc.):")
str(tripdata)
## Glimpse of data
print("Glimpse:")
glimpse(tripdata)
## Statistical summary of data
print("Summary:")
summary(tripdata)
6. Процесс
Этот шаг будет состоять из следующих ключевых задач:
- Связка бизнес-целей с анализом данных.
- Очистка маленьких и больших наборов данных с помощью языка программирования «R».
- Документирование процесса очистки данных.
6.1. Код, Используемый Для Этапа «Процесс»
Чтобы получить непредвзятые выводы из набора данных tripdata , с которым я работаю, мне необходимо его предварительно очистить. Для этого я удалил из него все пустые значения (NA, null и т. д.) и поместил «очищенный» результат в переменную tripdata_clean.
# Clean the tripdata database to be able to properly work with it
## Drop all NA (null = empty values)
tripdata_clean <- drop_na(tripdata)
## View the merged clean database in a table form
View(tripdata_clean)
7. Анализ
Этот шаг будет состоять из следующих ключевых задач:
- Сортировка, фильтрация, преобразование и форматирование данных с помощью языка программирования «R».
- Обоснование процесса анализа данных.
- Поиск обратной связи и поддержки у других в ходе анализа данных.
7.1. Код, Используемый Для Этапа «Анализ»
Я изменил тип данных в строке даты на подходящий для расчётов и выделил значения месяца, дня, года и дня недели в отдельные строки. Это было необходимо для удобства анализа набора данных tripdata_clean и для дальнейшей обработки данных.
# Create new columns
## Change the type of data in the date row to an appropriate one for calculations
tripdata_clean$date <- as.Date(tripdata_clean$started_at)
## Separate the dates into month
tripdata_clean$month <- format(as.Date(tripdata_clean$date), "%m")
## Separate the dates into day
tripdata_clean$day <- format(as.Date(tripdata_clean$date),
"%d")
## Separate the dates into year
tripdata_clean$year <- format(as.Date(tripdata_clean$date), "%Y")
## Separate the dates into day of a week
tripdata_clean$day_of_week <- format(as.Date(tripdata_clean$date), "%A")
Дополнительно, я создал новые столбцы: продолжительность поездки (в секундах), пройденное расстояние поездки (в километрах) и скорость поездки (в км/ч).
# Create new columns
## Duration of the ride length in seconds
tripdata_clean$ride_length <- difftime(tripdata_clean$ended_at, tripdata_clean$started_at)
## Ride distance traveled in kilometers
tripdata_clean$ride_distance <- distGeo(matrix(c(tripdata_clean$start_lng, tripdata_clean$start_lat), ncol = 2), matrix(c(tripdata_clean$end_lng, tripdata_clean$end_lat), ncol = 2))
tripdata_clean$ride_distance <- tripdata_clean$ride_distance / 1000
## Ride speed in km/h
tripdata_clean$ride_speed = c(tripdata_clean$ride_distance) / as.numeric(c(tripdata_clean$ride_length), units="hours")
Поскольку набор данных tripdata_clean мог содержать ненужные значения, когда велосипеды вывозились из доков и проверялись на качество сотрудниками «Citi Bike» (т.е. не среднестатистическими пользователями) или когда ride_length был отрицательным, мне нужно было убедиться, что они не повлияют на моё исследование и не сделают результаты предвзятыми.
# Double-check there will be no values when bikes were taken out of docks and checked for quality by Citi Bike employees or when ride_length was negative
tripdata_clean <- tripdata_clean[!(tripdata_clean$start_station_name == "HQ QR" | tripdata_clean$ride_length < 0),]
После подготовки набора данных tripdata_clean я рассчитал среднее расстояние и длину поездки как для обычных пользователей, так и для пользователей-подписчиков, чтобы узнать, кто активнее пользуется велосипедами «Citi Bike».
# Calculate the average distance for both the casual and member type users
member_casual_mean <- tripdata_clean %>%
group_by(member_casual) %>%
summarise(mean_time = mean(ride_length), mean_distance = mean(ride_distance))
## Build a table with the results
View(member_casual_mean)
Вот таблица member_casual_mean, которую я получил:

- Как видно из таблицы, средняя продолжительность поездки для обычного пользователя составляет 1551,085 секунды (25,851 минуты), а средняя дальность поездки — 2,027 километра.
- Для пользователя-подписчика средняя продолжительность поездки составляет 810,361 секунды (13,506 минут), а средняя дальность поездки — 1,8207 километра.
Это означает, что дальность поездки обычного пользователя в среднем почти в два раза больше, чем у подписчика! Более того, дальность поездки обычного пользователя также больше.
Для лучшего понимания приведенных выше результатов я построил два разных графика (среднее время в пути, среднее расстояние поездки) и объединил их на третьем графике, который представлен ниже.
# Build a plot of mean travel time by user type
member_casual_mean_time <- ggplot(member_casual_mean) +
geom_col(mapping = aes(x = member_casual, y = mean_time, fill = member_casual), show.legend = TRUE) +
labs(title = "Mean travel time by user type: Member / Casual", x = "User type", y = "Mean time in sec", caption = "Data by Citi Bike. Plot by Vlad Dorokhin")
## Build a graph with the results
print(member_casual_mean_time)
Вот первый полученный мною график:

# Build a plot of mean travel distance by user type
member_casual_mean_distance <- ggplot(userType_means) +
geom_col(mapping = aes(x = member_casual, y = mean_distance, fill = member_casual), show.legend = TRUE) +
labs(title = "Mean travel distance by user type: Member / Casual", x = "User type", y = "Mean distance in km", caption = "Data by Citi Bike. Plot by Vlad Dorokhin")
## Build a graph with the results
print(member_casual_mean_distance)
Вот второй полученный мною график:

# Combine two recent plots (mean travel time and mean travel distance) together
grid.arrange(member_casual_mean_time, member_casual_mean_distance, ncol = 2)
Вот объединенные графики (2 графика выше), которые я получил:

Определив среднее время в пути и среднее расстояние поездок для обычных пользователей и подписчиков, я проверил количество поездок по типу пользователя в течение недели, чтобы лучше понять активность пользователей.
# Check the number of rides by user type during a week
## Build a tibble of the data
member_casual_rides_week <- tripdata_clean %>%
mutate(weekday = wday(started_at, label = TRUE)) %>%
group_by(member_casual, weekday) %>%
summarise(number_of_rides = n(), average_duration = mean(ride_length), .groups = 'drop') %>%
arrange(member_casual, weekday)
print(member_casual_rides_week)
Вот полученный мной тибл (англ. tibble) (фрейм данных) размером 14 x 4:

## Build a plot of the data
tripdata_clean %>%
mutate(weekday = wday(started_at, label = TRUE)) %>%
group_by(member_casual, weekday) %>%
summarise(number_of_rides = n(), average_duration = mean(ride_length), .groups = 'drop') %>%
arrange(member_casual, weekday) %>%
ggplot(aes(x = weekday, y = number_of_rides, fill = member_casual)) +
geom_col(position = "dodge") +
labs(title = "Number of rides by user type during the week", x = "Days of the week", y = "Number of rides", caption = "Data by Citi Bike. Plot by Vlad Dorokhin", fill = "User type") +
theme(legend.position = "top")
Вот какой график у меня получился:

Как видно из графика, подписчики совершают значительно больше велопрогулок в течение недели, чем обычные пользователи. Кроме того, можно сделать следующие выводы:
- Больше всего поездок подписчики совершают по средам (середине рабочей недели), а меньше всего — по воскресеньям. В целом, подписчики совершают больше поездок в будние дни, чем в выходные.
- У обычных пользователей результаты иные: больше всего поездок они совершают по субботам и воскресеньям (то есть в выходные). В будни обычные пользователи совершают поездки значительно реже, а понедельник для них — наименее активный день.
Проверив количество поездок по типу пользователей за неделю, я создал новый набор данных, содержащий только классические велосипеды и электровелосипеды в столбце rideable_type. Я назвал его tripdata_clean_classic_electric. Используя этот набор данных, я смог проверить использование типа велосипеда (классический/электрический) по типу пользователей (подписчик / обычный пользователь) и построить соответствующий график с результатами.
# Create a new data set with only classic bikes and electric bikes in the rideable_type column
tripdata_clean_classic_electric <- tripdata_clean %>%
filter(rideable_type == "classic_bike" | rideable_type == "electric_bike")
# Check the bike type usage by user type
## Build a tibble of the data
member_casual_classic_electric <- tripdata_clean_classic_electric %>%
group_by(member_casual, rideable_type) %>%
summarise(totals=n(), .groups="drop")
print(member_casual_classic_electric)
Вот полученный мной тибл (англ. tibble) (фрейм данных) размером 4 x 3:

## Build a plot of the data
tripdata_clean_classic_electric %>%
group_by(member_casual, rideable_type) %>%
summarise(totals=n(), .groups="drop") %>%
ggplot() +
geom_col(aes(x = member_casual, y = totals, fill = rideable_type), position = "dodge") +
labs(title = "Bike type usage by user type: Classic Bike / Electric Bike", x = "User type", y = NULL, fill = "Bike type", caption = "Data by Citi Bike. Plot by Vlad Dorokhin") +
scale_fill_manual(values = c("classic_bike" = "#ffa600", "electric_bike" = "#bc5090")) +
theme_minimal() +
theme(legend.position = "top")
Вот какой график у меня получился:

Как видно из графика:
- Как обычные пользователи, так и подписчики используют классические велосипеды гораздо чаще, чем электровелосипеды!
- Подписчики используют как электровелосипеды, так и классические велосипеды гораздо чаще, чем обычные пользователи.
После этого я проверил использование типа велосипеда (классический велосипед / электровелосипед) обоими типами пользователей (участник + случайный пользователь) в течение недели и построил соответствующий график с результатами.
# Check the bike types usage by both user types during a week
## Build a tibble of the data
member_casual_classic_electric_week <- tripdata_clean_classic_electric %>%
mutate(weekday = wday(started_at, label = TRUE)) %>%
group_by(member_casual, rideable_type, weekday) %>%
summarise(totals=n(), .groups="drop")
print(member_casual_classic_electric_week)
Вот полученный мной тибл (англ. tibble) (фрейм данных) размером 28 x 4:

## Build a plot of the data
tripdata_clean_classic_electric %>%
mutate(weekday = wday(started_at, label = TRUE)) %>%
group_by(member_casual, rideable_type, weekday) %>%
summarise(totals=n(), .groups="drop") %>%
ggplot(aes(x = weekday, y = totals, fill = rideable_type)) +
geom_col(position = "dodge") +
facet_wrap(~member_casual) +
labs(title = "Bike type usage by user type during a week", x = "User type", y = NULL, caption = "Data by Citi Bike. Plot by Vlad Dorokhin") +
scale_fill_manual(values = c("classic_bike" = "#ffa600", "electric_bike" = "#bc5090")) +
theme_minimal() +
theme(legend.position="top")
Вот какой график у меня получился:

Как видно из графика:
- Как обычные пользователи, так и подписчики используют классические велосипеды гораздо чаще, чем электровелосипеды, каждый день недели.
- Подписчики чаще используют как классические велосипеды, так и электровелосипеды по сравнению с обычными пользователями.
- Чаще всего обычные пользователи катаются на классических велосипедах по субботам, а затем по воскресеньям. Использование электровелосипедов среди обычных пользователей более-менее стабильно в течение всей недели.
- Чаще всего подписчики используют классические велосипеды по средам (середина рабочей недели), за ней следуют четверг и вторник. Эти же дни (в том же порядке) также являются наиболее популярными для использования электровелосипедов подписчиками.
После проверки использования типа велосипеда (классический велосипед / электровелосипед) обоими типами пользователей (подписчик + обычный пользователь) в течение недели, я проверил данные координат поездок по самым популярным маршрутам — тем, которые использовались > 1000 раз и > 500 раз.
# Check the coordinates data of the rides
## Create a table only for the top 1 most popular routes (used > 1000 times)
tripdata_coordinates_1000 <- tripdata_clean %>%
filter(start_lng != end_lng & start_lat != end_lat) %>%
group_by(start_lng, start_lat, end_lng, end_lat, member_casual, rideable_type) %>%
summarise(total = n(), .groups="drop") %>%
filter(total > 1000)
print(tripdata_coordinates_1000)
Вот тибл (англ. tibble) (фрейм данных) размером 226 x 7, который я получил для tripdata_coordinates_1000 :

## Create 2 sub-tables for each user type for the top 1 most popular routes (used > 1000 times)
casual_1000 <- tripdata_coordinates_1000 %>% filter(member_casual == "casual")
member_1000 <- tripdata_coordinates_1000 %>% filter(member_casual == "member")
print(casual_1000)
print(member_1000)
Вот тибл (англ. tibble) (фрейм данных) размером 20 x 7, который я получил для casual_1000 :

Вот тибл (англ. tibble) (фрейм данных) размером 206 x 7, который я получил для member_1000 :

## Create a table only for the top 2 most popular routes (used > 500 times)
tripdata_coordinates_500 <- tripdata_clean %>%
filter(start_lng != end_lng & start_lat != end_lat) %>%
group_by(start_lng, start_lat, end_lng, end_lat, member_casual, rideable_type) %>%
summarise(total = n(), .groups="drop") %>%
filter(total > 500)
print(tripdata_coordinates_500)
Вот тибл (англ. tibble) (фрейм данных) размером 1596 x 7, который я получил для tripdata_coordinates_500 :

## Create 2 sub-tables for each user type for the top 2 most popular routes (used > 500 times)
casual_500 <- tripdata_coordinates_500 %>% filter(member_casual == "casual")
member_500 <- tripdata_coordinates_500 %>% filter(member_casual == "member")
print(casual_500)
print(member_500)
Вот тибл (англ. tibble) (фрейм данных) размером 89 x 7, который я получил для casual_500 :

Вот тибл (англ. tibble) (фрейм данных) размером 1507 x 7, который я получил для member_500 :

В конце я построил 4 графика координатных данных поездок по самым популярным маршрутам: 2 графика для поездок, совершённых > 1000 раз, и 2 графика для поездок, совершённых > 500 раз.
# Store bounding box coordinates for ggmap
nyc_bounding_box <- c(
left = -74.15,
bottom = 40.5774,
right = -73.7004,
top = 40.9176
)
# Store the stamen map of NYC
nyc_stamen_map <- get_stamenmap(
bbox = nyc_bounding_box,
zoom = 12,
maptype = "toner"
)
# Plot of the data by casual users on the map (for routes used > 1000 times)
ggmap(nyc_stamen_map, darken = c(0.8, "white")) +
geom_curve(casual_1000, mapping = aes(x = start_lng, y = start_lat, xend = end_lng, yend = end_lat, alpha = total, color = rideable_type), size = 0.5, curvature = .2, arrow = arrow(length = unit(0.2, "cm"), ends = "first", type = "closed")) +
coord_cartesian() +
labs(title = "Most popular routes by casual users (for routes used > 1000 times)", x = NULL, y = NULL, color = "User type", caption = "Data by Citi Bike. Plot by Vlad Dorokhin") +
theme(legend.position="right")
Вот график, который я получил для самых популярных маршрутов среди обычных пользователей (для маршрутов, использованных > 1000 раз):

Как видно из графика:
- Самые популярные маршруты для парковки велосипедов находятся в Центральном парке , особенно со стороны W 59th St.
- Самые популярные маршруты для классических велосипедов расположены на острове Говернорс, особенно рядом с туннелем Бруклин — Бэттери.
- Известный и популярный маршрут для классических велосипедов расположен на Западной улице со стороны парка реки Гудзон.
- За пределами Манхэттена, самые популярные маршруты также расположены у Бруклинского моста и в парке Четырёх Свобод имени Франклина Д. Рузвельта для классических велосипедов, а также в Проспект-парке (Бруклин) на стороне Prospect Park West для припаркованных велосипедов.
# Plot of the data by casual users on the map (for routes used > 500 times)
ggmap(nyc_stamen_map, darken = c(0.8, "white")) +
geom_curve(casual_500, mapping = aes(x = start_lng, y = start_lat, xend = end_lng, yend = end_lat, alpha = total, color = rideable_type), size = 0.5, curvature = .2, arrow = arrow(length = unit(0.2, "cm"), ends = "first", type = "closed")) +
coord_cartesian() +
labs(title = "Most popular routes by casual users (for routes used > 500 times)", x = NULL, y = NULL, color = "User type", caption = "Data by Citi Bike. Plot by Vlad Dorokhin") +
theme(legend.position="right")
Вот график, который я получил для самых популярных маршрутов среди обычных пользователей (для маршрутов, использованных > 500 раз):

Интересный факт:
- Как видно из графика, популярных маршрутов (использованных > 1000 или даже > 500 раз) для электровелосипедов среди обычных пользователей не существует.
# Plot of the data by annual members on the map (for routes used > 1000 times)
ggmap(nyc_stamen_map, darken = c(0.8, "white")) +
geom_curve(member_1000, mapping = aes(x = start_lng, y = start_lat, xend = end_lng, yend = end_lat, alpha = total, color = rideable_type), size = 0.5, curvature = .2, arrow = arrow(length = unit(0.2,"cm"), ends="first", type = "closed")) +
coord_cartesian() +
labs(title = "Most popular routes by annual members (for routes used > 1000 times)", x = NULL,y = NULL, caption = "Data by Citi Bike. Plot by Vlad Dorokhin") +
theme(legend.position="right")
Вот график, который я получил для самых популярных маршрутов среди пользователей с годовой подпиской (для маршрутов, использованных > 1000 раз):

Как видно из графика:
- Самые популярные маршруты для классических велосипедов расположены в Нижнем Ист-Сайде около моста Уильямсбург, в районе Кипс-Бей, в районе Челси, у тоннеля Линкольна и в Восточном Гарлеме.
- Самые популярные маршруты для парковки велосипедов расположены в районах Челси и Йорквилл. Несколько довольно популярных маршрутов для парковки велосипедов также расположены в районе Центрального парка.
- За пределами Манхэттена самые популярные маршруты также расположены в Квинсбридже, районе Уильямсбург, на острове Говернорс (особенно со стороны туннеля Хью Л. Кэри) и в парке «Четыре свободы» имени Франклина Д. Рузвельта для классических велосипедов. Для велосипедов, припаркованных на причале, это Проспект-парк (Бруклин) со стороны Проспект-парка Вест.
# Plot of the data by annual members on the map (for routes used > 500 times)
ggmap(nyc_stamen_map, darken = c(0.8, "white")) +
geom_curve(member_500, mapping = aes(x = start_lng, y = start_lat, xend = end_lng, yend = end_lat, alpha = total, color = rideable_type), size = 0.5, curvature = .2, arrow = arrow(length = unit(0.2,"cm"), ends="first", type = "closed")) +
coord_cartesian() +
labs(title = "Most popular routes by annual members (for routes used > 500 times)", x = NULL,y = NULL, caption = "Data by Citi Bike. Plot by Vlad Dorokhin") +
theme(legend.position="right")
Вот график, который я получил для самых популярных маршрутов среди пользователей с годовой подпиской (для маршрутов, использованных > 500 раз):

Интересные факты:
- Как видно на графике данных по пользователям с годовой подпиской на карте (для самого популярного маршрута, использованного более 1000 раз), на нём нет маршрутов, используемых для электровелосипедов.
- Однако если посмотреть на карту данных по пользователям с годовой подпиской на карте (для 2 самых популярных маршрутов, использованных > 500 раз), то самые популярные маршруты для электровелосипедов расположены у моста Пуласки, в районе Гармент и в районе Файненшл-дистрикт неподалёку от One New York Plaza.
8. Распространение
Этот шаг будет состоять из следующих задач:
- Создание визуализаций и информационных панелей (все они показаны выше).
- Рассказ истории на основе данных.
- Представление данных для других и ответы на соответствующие вопросы.
8.1. Среднее Расстояние И Длина Поездки
В результате расчета среднего расстояния и длительности поездок (как для обычных пользователей, так и для пользователей с годовой подпиской) я выяснил, что:
- Средняя продолжительность поездки для обычного пользователя составляет 1551,085 секунды (25,851 минуты), а средняя дальность поездки — 2,027 километра.
- Средняя продолжительность поездки для подписчика составляет 810,361 секунды (13,506 минут), а средняя дальность поездки — 1,8207 километра.
Это означает, что дальность поездки обычного пользователя в среднем почти в два раза больше, чем у подписчика! Более того, дальность поездки обычного пользователя также больше.
Вот соответствующие таблица и график:


8.2. Количество Поездок По Типу Пользователей В Течение Недели
Проверив количество поездок по типу пользователя (обычные пользователи / пользователи с годовой подпиской) в течение недели, я обнаружил, что:
- Подписчики совершают гораздо больше поездок на велосипеде в течение недели по сравнению с обычными пользователями.
- Больше всего поездок подписчики совершают по средам (середине рабочей недели), а меньше всего — по воскресеньям. В целом, подписчики совершают больше поездок в будние дни, чем в выходные.
- У случайных пользователей результаты иные: больше всего поездок они совершают по субботам и воскресеньям (то есть в выходные). В будни случайные пользователи совершают поездки значительно реже, а понедельник для них — наименее активный день.
Вот соответствующий график:

8.3. Использование Велосипедов По Типу Пользователей
Проверив тип использования велосипеда (классический велосипед / электровелосипед) по типу пользователя (подписчик / обычный пользователь), я обнаружил, что:
- Как обычные пользователи, так и подписчики используют классические велосипеды гораздо чаще, чем электровелосипеды!
- Подписчики используют как электровелосипеды, так и классические велосипеды гораздо чаще, чем обычные пользователи.
Вот соответствующий график:

8.4. Использование Велосипедов Обоими Типами Пользователей В Течение Недели
Проверив использование типа велосипеда (классический велосипед / электровелосипед) обоими типами пользователей (подписчик + обычный пользователь) в течение недели, я обнаружил, что:
- Как обычные пользователи, так и подписчики используют классические велосипеды гораздо чаще, чем электровелосипеды, каждый день недели.
- Подписчики чаще используют как классические велосипеды, так и электровелосипеды по сравнению с обычными пользователями.
- Чаще всего обычные пользователи катаются на классических велосипедах по субботам, а затем по воскресеньям. Использование электровелосипедов среди обычных пользователей более-менее стабильно в течение всей недели.
- Чаще всего обычные пользователи используют классические велосипеды по средам (середина рабочей недели), затем следуют четверг и вторник. Эти же дни (в том же порядке) также являются наиболее популярными для использования электровелосипедов подписчиками.
Вот соответствующий график:

8.5. Самые Популярные Маршруты У Пользователей Без Подписки (использованные > 1000 раз (1) и использованные > 500 раз (2))
Построив график наиболее популярных маршрутов среди обычных пользователей (для маршрутов, использованных > 1000 раз), я обнаружил, что:
- Самые популярные маршруты для парковки велосипедов находятся в Центральном парке , особенно со стороны W 59th St.
- Самые популярные маршруты для классических велосипедов расположены на острове Говернорс, особенно рядом с туннелем Бруклин — Бэттери.
- Известный и популярный маршрут для классических велосипедов расположен на Западной улице со стороны парка реки Гудзон.
- За пределами Манхэттена, самые популярные маршруты также расположены у Бруклинского моста и в парке Четырёх Свобод имени Франклина Д. Рузвельта для классических велосипедов, а также в Проспект-парке (Бруклин) на стороне Prospect Park West для припаркованных велосипедов.
(1) Вот соответствующий график:

Добавив к графику выше маршруты, наиболее популярные у обычных пользователей (использованные > 500 раз), я обнаружил, что:
- Популярных маршрутов (использованных более 1000 или даже более 500 раз) для электровелосипедов среди обычных пользователей не существует.
(2) Вот соответствующий обновлённый график:

8.6. Самые Популярные Маршруты У Пользователей С Годовой Подпиской (использованные > 1000 раз (1) и использованные > 500 раз (2))
Построив график наиболее популярных маршрутов среди обычных пользователей (для маршрутов, использованных > 1000 раз), я обнаружил, что:
- Самые популярные маршруты для классических велосипедов расположены в Нижнем Ист-Сайде около моста Уильямсбург, в районе Кипс-Бей, в районе Челси, у тоннеля Линкольна и в Восточном Гарлеме.
- Самые популярные маршруты для парковки велосипедов расположены в районах Челси и Йорквилл. Несколько довольно популярных маршрутов для парковки велосипедов также расположены в районе Центрального парка.
- За пределами Манхэттена самые популярные маршруты также расположены в Квинсбридже, районе Уильямсбург, на острове Говернорс (особенно со стороны туннеля Хью Л. Кэри) и в парке «Четыре свободы» имени Франклина Д. Рузвельта для классических велосипедов. Для велосипедов, припаркованных на причале, это Проспект-парк (Бруклин) со стороны Проспект-парка Вест.
- Как видно на графике, маршрутов с электровелосипедами нет.
(1) Вот соответствующий график:

Добавив к графику выше маршруты, наиболее популярные у обычных пользователей (использованные > 500 раз), я обнаружил, что:
- Самые популярные маршруты для электровелосипедов расположены у моста Пуласки, в районе Гармент и в районе Файненшл-дистрикт неподалёку от One New York Plaza.
(2) Вот соответствующий обновлённый график:

8.7. Предложения По Вопросам, Определяющим Будущую Маркетинговую Программу Для «Citi Bike»
Используя представленные выше данные, я смог дать свои предложения по 4 вопросам, определяющим возможную будущую маркетинговую программу для «Citi Bike»:
- Как отличается использование велосипедов «Citi Bike» обычными пользователями и пользователями с годовой подпиской?
- Для чего обычные пользователи могли бы купить годовую подписку от «Citi Bike»?
- Как «Citi Bike» может побудить обычных пользователей стать подписчиками?
- Как «Citi Bike» может побудить пользователей с годовой подпиской пользоваться её услугами ещё больше?
8.7.1. Как отличается использование велосипедов «Citi Bike» обычными пользователями и пользователями с годовой подпиской?
1. Обычные пользователи:
- Совершают поездки на большие расстояния и в среднем в 2 раза длиннее.
- Совершают наибольшее количество поездок по субботам и воскресеньям (т.е. в выходные дни).
- Совершают гораздо меньше поездок в течение рабочей недели (понедельник — пятница), причём понедельник для них — наименее активный день.
- Пользуются классическими велосипедами гораздо чаще, чем электровелосипедами, каждый день недели.
- Чаще всего велосипеды используются в субботу, затем в воскресенье. Использование электровелосипедов среди любителей велосипедов более-менее стабильно в течение всей недели.
- Самые популярные маршруты для парковки велосипедов находятся в Центральном парке , особенно со стороны W 59th St.
- Самые популярные маршруты для классических велосипедов расположены на острове Говернорс, особенно рядом с туннелем Бруклин — Бэттери.
- Известный и популярный маршрут для классических велосипедов расположен на Западной улице со стороны парка реки Гудзон.
- За пределами Манхэттена, самые популярные маршруты также расположены у Бруклинского моста и в парке Четырёх Свобод имени Франклина Д. Рузвельта для классических велосипедов, а также в Проспект-парке (Бруклин) на стороне Prospect Park West для припаркованных велосипедов.
- Популярных маршрутов (использованных > 1000 или даже > 500 раз) для электровелосипедов нет.
2. Пользователи с годовой подпиской:
- Совершают поездки на меньшие расстояния и в среднем в 2 раза короче по продолжительности.
- Совершают намного больше поездок на велосипеде в течение недели.
- Совершают наибольшее количество поездок по средам (середина рабочей недели), наименьшее — по воскресеньям.
- Совершают больше поездок в течение рабочей недели, а не в выходные дни.
- Пользуются классическими велосипедами гораздо чаще, чем электровелосипедами, каждый день недели.
- Используют электровелосипеды и классические велосипеды гораздо чаще, чем это делают обычные пользователи.
- Чаще всего велосипеды используются по средам (середина рабочей недели), затем по четвергам и вторникам. В эти же дни (в том же порядке) подписчики чаще всего катаются и на электровелосипедах.
- Самые популярные маршруты для классических велосипедов расположены в Нижнем Ист-Сайде около моста Уильямсбург, в районе Кипс-Бей, в районе Челси, у тоннеля Линкольна и в Восточном Гарлеме.
- Самые популярные маршруты для парковки велосипедов расположены в районах Челси и Йорквилл. Несколько довольно популярных маршрутов для парковки велосипедов также расположены в районе Центрального парка.
- За пределами Манхэттена самые популярные маршруты также расположены в Квинсбридже, районе Уильямсбург, на острове Говернорс (особенно со стороны туннеля Хью Л. Кэри) и в парке «Четыре свободы» имени Франклина Д. Рузвельта для классических велосипедов. Для велосипедов, припаркованных на причале, это Проспект-парк (Бруклин) со стороны Проспект-парка Вест.
- Самые популярные маршруты для электровелосипедов (использованные > 500 раз) расположены у моста Пуласки, в районе Гармент и в районе Файненшл-дистрикт неподалёку от One New York Plaza.
8.7.2. Для чего обычные пользователи могли бы купить годовую подписку от «Citi Bike»?
Обычные пользователи могли бы приобрести годовую подписку, чтобы:
- Сэкономить деньги.
- Повысить удобство пользования велосипедами от «Citi Bike».
- Перестать думать о том, чтобы снова и снова платить за каждую отдельную поездку.
- Для возможного доступа к дополнительной статистике (сколько сожжённых калорий, какие маршруты чаще всего используются и т. д.) с элементами геймификации (ежедневные достижения, локальные задачи и т. д.)
8.7.3. Как «Citi Bike» может побудить обычных пользователей стать подписчиками?
«Citi Bike» может побуждать обычных пользователей становиться подписчиками через следующие способы:
- Предлагать еженедельные и ежемесячные планы подписки в дополнение к дневному абонементу и годовой подписке; «Citi Bike»
в настоящее время должен мотивировать случайных пользователей чаще пользоваться услугами «Citi Bike» в течение рабочей недели (т.е. с понедельника по пятницу). - Предлагать специальные тарифные планы, предусматривающие только электровелосипеды, которые будут дешевле «полных» планов
(классические велосипеды + электровелосипеды) — поскольку обычные пользователи катаются на классических велосипедах гораздо чаще, чем на электровелосипедах, каждый день недели. - Предлагать скидку за подписку на еженедельный/ежемесячный/годовой тарифный план, ставший стандартной практикой для сервисов с подпиской. Чем больше подписка, тем больше должна быть скидка!
- Предоставление подробной статистики еженедельным/ежемесячным/годовым подписчикам «Citi Bike»: сколько калорий они сожгли, маршруты, которые они проезжают чаще всего и т.д. Обычные пользователи ездят на большие расстояния и в среднем в 2 раза дольше — следовательно, им может быть предоставлено больше такой статистики, и «Citi Bike» может получить больше данных от этих пользователей!
- Предлагать еженедельным/ежемесячным/годовым членам «Citi Bike» возможности для общения и экономии: групповые велопрогулки с другими подписчиками «Citi Bike», скидки в партнерских магазинах и т.д. Например, поскольку самые популярные маршруты для припаркованных велосипедов находятся в Центральном парке, почему бы не подумать о взаимном партнёрстве с сервисами знакомств типа «Tinder», «Bumble» или «Hinge» на лето?
8.7.4. Как «Citi Bike» может побудить пользователей с годовой подпиской пользоваться её услугами ещё больше?
«Citi Bike» может повлиять на пользователей с годовой подпиской, чтобы они пользовались его услугами ещё больше, через следующие способы:
- Предлагать специальные игровые элементы в выходные дни (например, достижения / бонусы за использование несколько дней подряд), поскольку пользователи с годовой подпиской совершают наименьшее количество поездок по воскресеньям и субботам.
- Предлагать промо-приглашения на недорогие дневные/недельные абонементы для друзей и/или членов семьи владельца годовой подписки. Эти приглашения могут мотивировать владельцев годовой подписки кататься с друзьями/семьей по выходным (т.е. чаще пользоваться услугами «Citi Bike»). Кроме того, это также мотивирует этих друзей и/или членов семьи начать пользоваться услугами «Citi Bike» еженедельно и рассмотреть возможность оплаты подписки.
- Предлагать специальные игровые элементы, предназначенные только для электровелосипедов (например, достижения / бонусы за использование несколько дней подряд) и акции от партнёров, поскольку пользователи с годовой подпиской используют классические велосипеды гораздо чаще, чем электровелосипеды, в каждый день недели.
- Периодически рассылать пользователям с годовой подпиской письма с информацией о преимуществах использования электровелосипедов по сравнению с классическими велосипедами. Поскольку пользователи с годовой подпиской используют классические велосипеды гораздо чаще, чем электровелосипеды, в каждый день недели, это сокращает срок службы последних, и «Citi Bike» неэффективно расходует бюджет на их восстановление и замену аккумуляторов.
- Увеличивать количество велосипедов «Citi Bike» и присутствие рекламы в парке реки Гудзон, на Бруклинском мосту (за пределами
Манхэттена), в парке Четырех Свобод Франклина Д. Рузвельта и в Проспект-парке (Бруклин), поскольку эти зоны пользуются большой популярностью у обоих типов пользователей — как обычных, так и тех, у кого есть годовая подписка. - Тестировать присутствие рекламы в Бруклине в его крупнейших парках: Проспект-парк (Бруклин) (кроме части Prospect Park West), Сансет-парк, парк и поле для гольфа Дайкер-Бич, Луна-парк (Кони-Айленд), Марин Парк, Хайленд-парк и т.д.
9. Действие
Этот шаг состоит из задач, которые я уже выполнил выше (8. Распространение) :
- Подготовка окончательной версии отчёта по анализу данных для заинтересованных сторон.
- Проведение отчёта об анализе данных для заинтересованных сторон.
10. Примечания
- Обложка публикации, созданная Владом Дорохиным, доступна по лицензии CC BY-SA 4.0
- Чёрно-белое изображение людей на велосипедах доступно по лицензии общественного достояния.
🇺🇸 ENGLISH-LANGUAGE VERSION | 🇺🇸 АНГЛОЯЗЫЧНАЯ ВЕРСИЯ

