Найти нового и активного пользователя каждую неделю по user_id и дате - PullRequest
0 голосов
/ 01 мая 2019

Справочная информация

Предположим, что теперь мы работаем на основе подписки (что мы и делаем).Когда клиент подписывается на наш продукт, у него есть много вариантов для настройки.Для целей этого упражнения мы будем предполагать следующее:

● Когда пользователь зарегистрируется, для него будет создана запись в таблице «Заказы».

○ Это будетсамая первая запись в Заказах для этого user_id

○ Первой датой в таблице «Заказы» будет дата регистрации пользователя.

● Первый заказ пользователя отправляет ту же дату, что и он.

● Пользователи могут изменить частоту доставки в любое время и даже запросить доставку дополнительных ящиков.

○ Для этого задания мы не будем беспокоиться о частоте доставки;Главным образом потому, что данные в этом примере генерируются случайным образом, а частота импульсов, наблюдаемая в этом наборе данных, не соответствует естественной логике;)

● Если или когда пользователь отменяет, они остаются «активными» в течение 14-дневного периода (включительно).) после их последнего заказа в таблице заказов.● Пользователь считается «активным» во все дни между его первым и последним заказом.

○ Для этого задания мы не будем заниматься изучением «реактивации»;то есть с пользователями, которые отменили, а затем зарегистрировались в будущем.Для простоты этого упражнения мы рассмотрим тех пользователей, которые никогда не отменяли.

Определения

● определим группу пользователей как группу пользователей, которые впервые сталиактивный в тот же период.

● определить коэффициент удержания для периода для данной когорты как отношение: N / D, где N = количество пользователей в когорте, которые были активны в этот период и также были активными в последний разпериод D = количество пользователей в группе, которые были активны в последний период

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

Вопросы

создать таблицу со столбцами:

date |count_new |count_active

count_new: сколько новых пользователей регистрировалось каждую неделю?

count_active: Сколько активных пользователей было там каждую неделю?

часть данных:

    id user_id total       date payment_status
1       1       1 12783 2017-01-01           paid
2     258       1 12783 2017-01-22           paid
3    1072       1 12783 2017-02-26           paid
4    2086       1 12783 2017-03-26           paid
5    2387       1 12783 2017-04-02           paid
6    3860       1 12783 2017-04-30           paid
7    5546       1 12783 2017-05-28           paid
8       2       2  9516 2017-01-01           paid
9      68       2  9516 2017-01-08           paid
10      3       3 14536 2017-01-01           paid
11    372       3 14536 2017-01-29           paid
12    879       3 14536 2017-02-19           paid
13   1796       3 14536 2017-03-19           paid
14   3451       3 14536 2017-04-23           paid
15   4651       3 14536 2017-05-14           paid
16   5547       3 14536 2017-05-28           paid
17   6920       3 14536 2017-06-18           paid
18   7385       3 14536 2017-06-25           paid
19  10024       3 14536 2017-07-30         unpaid
20  11581       3 14536 2017-07-30         unpaid
21  13138       3 14536 2017-07-30         unpaid
22  14695       3 14536 2017-07-30         unpaid
23      4       4  5755 2017-01-01           paid
24    497       4  5755 2017-02-05           paid
25   1285       4  5755 2017-03-05           paid
26   2699       4  5755 2017-04-09           paid
27   3057       4  5755 2017-04-16           paid
28      5       5 10102 2017-01-01           paid
29    498       5 10102 2017-02-05           paid
30   1529       5 10102 2017-03-12           paid
31   2087       5 10102 2017-03-26           paid
32   2388       5 10102 2017-04-02           paid
33      6       6 13552 2017-01-01           paid
34     69       6 13552 2017-01-08           paid




structure(list(id = 1:100, user_id = c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 
20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 
33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 
46L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 
59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 2L, 6L, 10L, 12L, 
17L, 21L, 27L, 29L, 36L, 37L, 40L, 49L, 55L, 59L, 61L, 67L, 68L, 
69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L, 
82L, 83L, 84L), total = c(12783L, 9516L, 14536L, 5755L, 10102L, 
13552L, 6940L, 12154L, 14639L, 8034L, 10912L, 12255L, 8016L, 
6483L, 9841L, 14813L, 10934L, 5194L, 7753L, 5544L, 13813L, 9739L, 
13630L, 5281L, 10607L, 14873L, 13441L, 12998L, 10162L, 8110L, 
8269L, 9118L, 12308L, 14144L, 5789L, 7364L, 11921L, 5276L, 11695L, 
6669L, 7872L, 12890L, 7636L, 11682L, 14620L, 10876L, 12273L, 
14560L, 6787L, 13150L, 5559L, 13086L, 6957L, 6862L, 12442L, 10948L, 
12293L, 8398L, 8796L, 14986L, 6235L, 12077L, 5013L, 11953L, 7891L, 
13551L, 14988L, 9516L, 13552L, 8034L, 12255L, 10934L, 13813L, 
13441L, 10162L, 7364L, 11921L, 6669L, 6787L, 12442L, 8796L, 6235L, 
14988L, 10769L, 10875L, 10603L, 12522L, 5475L, 9343L, 6860L, 
11969L, 7392L, 9487L, 13016L, 6284L, 9801L, 6581L, 9164L, 11898L, 
9210L), date = structure(c(17167, 17167, 17167, 17167, 17167, 
17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 
17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 
17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 
17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 
17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 
17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 
17167, 17167, 17167, 17167, 17167, 17167, 17167, 17167, 17174, 
17174, 17174, 17174, 17174, 17174, 17174, 17174, 17174, 17174, 
17174, 17174, 17174, 17174, 17174, 17174, 17174, 17174, 17174, 
17174, 17174, 17174, 17174, 17174, 17174, 17174, 17174, 17174, 
17174, 17174, 17174, 17174, 17174), class = "Date"), payment_status = c("paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid", "paid", "paid", "paid", "paid", "paid", 
"paid", "paid", "paid")), row.names = c(NA, 100L), class = "data.frame")

1 Ответ

0 голосов
/ 01 мая 2019

, поэтому мне удалось вычислить count_new, проверив первое появление user_id, а затем объединившись с начальными данными, добавив столбец, в котором указано, является ли пользователь новым по дате и идентификатору, а затем я посчитал новое по дате:

library(dplyr)
firstshow<-Orders %>%
group_by(user_id) %>%
  arrange(date) %>%
  slice(1L) %>%
  mutate(new = "new")

newdata<-merge.data.frame(Orders,firstshow,by=c("date","user_id"),all = T)
count<-newdata %>%
  filter(new=="new" ) %>%
  group_by(date) %>%
 tally()
names(count)[2]<-"count_new" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...