169 похожих чатов

Уважаемые, у меня очень тупой вопрос. как бы вы считали MAU

в data.table?
(скользящее количество пользователей с датой логина в последние 30 дней)

я ничего кроме map_df по датам и подобных вариантов не придумал
вот типа такого убожества:

> library(data.table)
> library(magrittr)

> dates <- seq(as.Date('2023-09-01'), by = 1, length.out = 5)
>
> my_dt <- data.table(login_dt = dates) %>%
+ .[, list(user_id = sample(letters[1:5], sample(3, 1))), by = login_dt]
> my_dt
login_dt user_id
1: 2023-09-01 c
2: 2023-09-01 a
3: 2023-09-02 d
4: 2023-09-02 b
5: 2023-09-03 a
6: 2023-09-04 e
7: 2023-09-05 d
>
> purrr::map_df(dates, function(x) {
+ my_dt[
+ login_dt %between% c(x - 2, x),
+ list(
+ login_dt = x,
+ lb = x - 2,
+ n_users = uniqueN(user_id))
+ ]
+ })
login_dt lb n_users
1: 2023-09-01 2023-08-30 2
2: 2023-09-02 2023-08-31 4
3: 2023-09-03 2023-09-01 4
4: 2023-09-04 2023-09-02 4
5: 2023-09-05 2023-09-03 3

23 ответов

59 просмотров

library(zoo) my_dt[,.(n=uniqueN(user_id)),.(login_dt)][,mau:=rollapplyr(n,width=30,FUN=sum,fill=NA)][]

Philipp-Upravitelev Автор вопроса
Ivan Struzhkov
library(zoo) my_dt[,.(n=uniqueN(user_id)),.(login_...

так MAU же нельзя считать через сумму DAU

Philipp Upravitelev
так MAU же нельзя считать через сумму DAU

Я пару раз перечитал вот эту строчку и решил что можно (скользящее количество пользователей с датой логина в последние 30 дней)

Ілія Малекі
А почему?

Ну формально по математике. у меня 3 пользователя каждый день в течении месяца. Мое MAU =3 а не 90)

Philipp-Upravitelev Автор вопроса
Ілія Малекі
А ой-ой..

вообще, одна из древних продуктовых метрик залипания пользователя в продукте — это как раз dau / mau, так называемая stickiness %)

что-то похожее здесь писал: https://habr.com/ru/articles/558250/ https://habr.com/ru/articles/555476/

Philipp-Upravitelev Автор вопроса
Ilya Shutov
что-то похожее здесь писал: https://habr.com/ru/ar...

если я правильно понял, тот же map в основе

Philipp Upravitelev
если я правильно понял, тот же map в основе

Сложно придумать что-то другое. Кумулятивный UniqeN с вычитанием? Не уверен вот так сходу, что это правильно будет))

Я не уверен что алгоритмически тут можно упростить и нигде не обмануться. Но так, чуть попроще это позволяет сделать {slider} slider::slide_period_dfr( my_dt, my_dt$login_dt, .period = "day", .before = 2L, \(x) x[ , .( dt_from = min(login_dt), dt_to = max(login_dt), users = uniqueN(user_id) ) ] )

Такой вариант my_dt[, my_dt[, .(n_users = uniqueN(user_id)), .(login_dt %between% c(lg_1 - 2, lg_1))], .(lg_1 = login_dt)][login_dt == TRUE]

Philipp-Upravitelev Автор вопроса
Vadim Zotin
Такой вариант my_dt[, my_dt[, .(n_users = uniqueN(...

о как. интересно. спасибо! никогда не думал, что %between% можно в группировку запихнуть

Philipp Upravitelev
о как. интересно. спасибо! никогда не думал, что %...

Если диапазон дат в таблице my_dt большой, то, вероятно, быстрее будет считать MAU через slider или вариантом ниже window <- data.table(start = dates - 2L, end = dates) my_dt[window, on = .(login_dt <= end, login_dt >= start)] %>% .[, .(n_users = uniqueN(user_id)), by = .(login_dt)]

https://t.me/r_in_action/352

Philipp-Upravitelev Автор вопроса
Ilya Shutov
https://t.me/r_in_action/352

код посмотрю, спасибо а картинка некорректная все же, несмотря на расшифровку в самом посте

Philipp Upravitelev
код посмотрю, спасибо а картинка некорректная все...

Уж какая картинка нашлась, дело вообще не в ней. Далеко не каждый увидит ее кривизну.

Ilya Shutov
https://t.me/r_in_action/352

Ну это как бы фиксированный таймфрейм, ему такое решение нужно было ?

Ilya Shutov
В смысле?

Как я понял moving average, ему нужен динамический, плавающий? Типа среднее 30 дней на любом отрезке времени? Это больше временной ряд даже.

Ilya Shutov
А что у меня не так?

Я по картинке понял что там только 3 таймфрейма вроде

@quadrivium
Я по картинке понял что там только 3 таймфрейма вр...

Делаю вид, что не читал этого сообщения. И

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта