Использование rga для запуска нескольких вызовов API Google Analytics. Использование таблицы данных для назначения фильтров и показателей.

У меня есть несколько вызовов API GA, которые я хотел бы выполнить в одном скрипте. Вызовы будут различаться в зависимости от «источника» (технически это просто имя-заполнитель) и конкретных фильтров и показателей для каждого источника.

Я использовал пакет RGA со сценарием, который позволял мне указать все идентификаторы профилей, которые я хотел использовать. Функция lapply перебирает идентификаторы профилей, но я хотел бы также перебирать значения метрик и фильтров для каждого «источника», указанного в таблице данных. Это было бы намного эффективнее, чем перечисление 40 различных вызовов в сценарии с 40 различными фильтрами.

Вот сценарий, который я использовал:

ids <- c(123456,12345679)

start <- "2015-12-01"
end <- "2015-12-31"

res <- lapply(ids, function(id) {
  ans <- get_ga(id, start.date = start, end.date = end,
        dimensions = "ga:yearMonth",
        metrics = "ga:sessions",
        filters = "ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=")
        ans$id <- id
        return(ans)
  })

res <- do.call(rbind, res)  
organic <- cbind("organic", res)

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

Я бы предпочел использовать этот фрейм данных для присвоения значений:

a <- c(123456,12345679,123456,12345679,123456,12345679)
b <- c("organic","organic","cpc","cpc","banner","banner")
c <- c("ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:medium==banner","ga:medium==banner")
check <- cbind(a,b,c)
colnames(check)[1:3] <- c("profile","source","filters")

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


person ericbrownaustin    schedule 04.02.2016    source источник


Ответы (2)


Вы должны сформировать входные переменные data.frame. Затем передайте его get_ga() построчно. Что-то вроде этого:

library(RGA)
authorize()

id <- c(123456, 12345679)
source <- c("organic", "cpc", "banner")
filter <- c("ga:landingPagePath!~gppc|sm003|refer=")

check <- expand.grid(id, source, filter)

res <- lapply(1:nrow(check), function(i) {
    filter <- sprintf("ga:medium==%s;%s", check$Var2[i], check$Var3[i])
    ga_data <- get_ga(check$Var1[i], start.date = start, end.date = end,
                      dimensions = "ga:yearMonth",
                      metrics = "ga:sessions",
                      filters = filter)
    cbind(id = check$Var1[i], source = check$Var2[i], ga_data)
})
res <- data.table::rbindlist(res)

Примечание: вы можете заменить lapply на mclapply из пакета parallel.

person Artem Klevtsov    schedule 04.02.2016

Я не уверен, что правильно объяснил, что я пытаюсь сделать. Ваш ответ включал в себя файл expand.grid, который, я полагаю, создает строку для каждой комбинации включенных переменных. Это не совсем то, что я ищу. Я хочу запустить скрипт только для фрейма данных, который я указал в своем исходном вопросе. Я внес некоторые изменения в сценарий, и он заработал, преобразовав объект проверки в data.frame и переименовав некоторые вызовы других объектов.

id <- c(123456, 12345678)
source <- c("organic", "cpc", "banner")
filter <- c("ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:medium==organic;ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:landingPagePath!~gppc|sm003|refer=","ga:medium==banner","ga:medium==banner")

check <- cbind(id,source,filter)
colnames(check)[1:3] <- c("profile","source","filters")
check <- data.frame(check, stringsAsFactors = FALSE)

res <- lapply(1:nrow(check), function(i) {
  filter <- sprintf("ga:medium==%s;%s", check$source[i], check$filters[i])
  ga_data <- get_ga(check$profile[i], start.date = start, end.date = end,
                    dimensions = "ga:yearMonth",
                    metrics = "ga:sessions",
                    filters = filter)
  cbind(id = check$profile[i], source = check$source[i], ga_data)
})
res <- data.table::rbindlist(res)
person ericbrownaustin    schedule 10.02.2016