-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Строка итоговых значений #7
Comments
Спасибо за информацию, в ближайшее время возьму в работу. |
Подскажите, а зачем вам цикл? Дело в том, что мне кажется что на каждой итерации цикла у вас получается (при каждом запросе) в ответе всего 1 строка, с этим и связано, что у вас просто кроме итоговой строки ничего не прилетает. |
Привет!
И вам спасибо, без ваших библиотек как без рук!
В счетчике очень много данных, из-за чего все запросы с интервалом больше месяца чаще всего отдают ошибку 400. Поскольку приходится делать периодические backfill выгрузки и материализовывать разные срезы из Метрики, то пришлось прибегнуть к циклу который итерировал бы запросы с самой ранней даты и до вчерашнего дня, разбивая его автоматически по месяцам и подставляя нужные даты в date.from и date.to (как пример) Про 1 строку в ответе не до конца понял -- у меня сохранился результат последней итерации за декабрь, в ней 234 375 строк |
А какая у вас версия пакета? Посмотрите в NEWS изменения, которые были внесены в версии 1.0.4 Ранее пакет всегда убирал последнюю строку считая её строкой итогов, даже если в отчёте прилетала всего 1 строка. Начиная с версии 1.0.4 пакет не удаляет строку, если в ответе прилетел отчёт состоящий всего из одной строки, грубо говоря если вы никакие dimension не задали, или комбинация dimension вернула всего одну строку отчёта. |
Да, я обратил внимание на changelog, но насколько понимаю строка появилась наоборот, как раз после последнего обновления. r$> library(rym)
---------------------
Welcome to rym version 1.0.5 - R Interface to Yandex.Metrica API.
|
Сама по себе идея добавлять в ответ API строку итогов мне не понятна, но её мы решить не сможем. Смотрите как работает пакет:
Вот у вас такое впечатление, что апи метрики отдаёт всего одну строку, и это получается строка итогов, на некоторых итерациях цикла, можете это проверить? |
Про добавление строки итогов в API согласен абсолютно, равно как странно и то что нельзя смешивать сессионные и хитовые метрики в одном запросе, имея при этом эндпоинт который отдает древовидную структуру. Энивей -- я пока заделал эту дыру добавлением внутри цикла
Я с радостью, только подскажите как, во что нужно обернуть код выше чтобы можно было дебагнуть результаты всех запросов включая те что в пакете? |
Прогнал ваш код по своему счётчику, и у меня нет итоговой строки: Смотрите как можно модифицировать код, что бы найти проблему, просто добавим проверку на наличие в ответе итоговой строки, и остановим цикл если она есть, т.е. в тело я добавил if ( 'Итого и средние' %in% unique(rym_basic$`Дата просмотра`)) {
message("Catch total rows, date ", start_date[i])
total_rows_data <- rym_basic
break
} Весь код выглядит так: library(dplyr)
library(rym)
library(lubridate)
today <- Sys.Date()
start_date <- seq(as.Date("2021-09-01"), today, by = "months")
end_date <- seq(as.Date("2021-10-01"), today, by = "months")
end_date <- c(end_date, today)
start_date
end_date
rym_auth(login = 'selesnow')
rym_get_counters()
metrika_all_visits <- list()
for (i in seq_along(start_date)) {
rym_basic <-
rym_get_data(
counters = "22584910",
date.from = start_date[i],
date.to = end_date[i],
dimensions = "ym:pv:date, ym:pv:URLPath",
metrics = "ym:pv:pageviews",
sort = "-ym:pv:date",
login = 'selesnow',
token.path = "~/metrica_token",
accuracy = "full",
include.undefined = TRUE,
lang = "ru"
)
if ( 'Итого и средние' %in% unique(rym_basic$`Дата просмотра`)) {
message("Catch total rows, date ", start_date[i])
total_rows_data <- rym_basic
break
}
# добавляем результат итерации в общий список
metrika_all_visits <-
dplyr::bind_rows(metrika_all_visits, rym_basic)
Sys.sleep(0.5)
gc()
}
metrika_all_visits %>%
readr::type_convert() %>%
arrange(desc(Просмотры)) %>%
glimpse() Выполнение цикла остановится на итерации, на которой ответ от апи вернёт итоговую строку, далее запишет результат этой итерации в Жду результата проверки от вас, самому интересно) |
Так, я прогнал следующий код library(dplyr)
library(rym)
library(lubridate)
library(Hmisc)
library(anonymizer)
library(vroom)
start_date <- seq(as.Date("2021-09-01"), as.Date("2021-12-31"), by = "months")
end_date <- seq(as.Date("2021-10-01"), as.Date("2021-12-31"), by = "months")
end_date <- c(end_date, as.Date("2021-12-31"))
start_date
end_date
metrika_all_visits <- list()
for (i in seq_along(start_date)) {
rym_basic <-
rym_get_data(
counters = counter,
date.from = start_date[i],
date.to = end_date[i],
dimensions = "ym:pv:date, ym:pv:URLPath",
metrics = "ym:pv:pageviews",
sort = "-ym:pv:date",
login = login,
token.path = "~/metrica_token",
accuracy = "full",
include.undefined = TRUE,
lang = "ru"
)
if ('Итого и средние' %in% unique(rym_basic$'Дата просмотра')) {
message("Catch total rows, date ", start_date[i])
total_rows_data <- rym_basic
break
}
# добавляем результат итерации в общий список
metrika_all_visits <-
dplyr::bind_rows(metrika_all_visits, rym_basic)
Sys.sleep(0.5)
gc()
}
total_rows_data$`Путь страницы` <- anonymize(total_rows_data$`Путь страницы`) В итоге получилось: Load token from ~/metrica_token/*RData
Token expire in 290 days
Catch total rows, date 2021-09-01
> total_rows_data %>% arrange(desc(Просмотры))
# A tibble: 332,062 × 3
`Дата просмотра` `Путь страницы` Просмотры
<chr> <chr> <dbl>
1 Итого и средние 5bc0a094eec224eef9194735021cb1eb1d7fd1eb577392b6bad624703de06c56 4220184
2 Итого и средние 5bc0a094eec224eef9194735021cb1eb1d7fd1eb577392b6bad624703de06c56 4220184
3 Итого и средние 5bc0a094eec224eef9194735021cb1eb1d7fd1eb577392b6bad624703de06c56 4220184
4 2021-09-20 a9c352c4c774c28a7e7d70ee040c9bdbb34ed0e261886b78d3e3637f1525e786 22090
5 2021-09-27 a9c352c4c774c28a7e7d70ee040c9bdbb34ed0e261886b78d3e3637f1525e786 20474
6 2021-09-21 a9c352c4c774c28a7e7d70ee040c9bdbb34ed0e261886b78d3e3637f1525e786 19989
7 2021-09-16 a9c352c4c774c28a7e7d70ee040c9bdbb34ed0e261886b78d3e3637f1525e786 19440
8 2021-09-23 a9c352c4c774c28a7e7d70ee040c9bdbb34ed0e261886b78d3e3637f1525e786 19388
9 2021-09-13 a9c352c4c774c28a7e7d70ee040c9bdbb34ed0e261886b78d3e3637f1525e786 19348
10 2021-09-08 a9c352c4c774c28a7e7d70ee040c9bdbb34ed0e261886b78d3e3637f1525e786 19167
# … with 332,052 more rows |
Очень странное поведение, почему один запрос возвращает сразу 3 строки итого, у меня не получается такое поведение на своей стороне воспроизвести. Может у вас будет возможность временно расшарить на меня доступ к этому счётучику метрики? |
Привет, в датафреймах появилась строка с итоговыми значениями.
Код:
Результат:
The text was updated successfully, but these errors were encountered: