Използване на rga за изпълнение на множество извиквания на API на Google Анализ Използване на таблица с данни за присвояване на филтри и показатели

Имам няколко извиквания на 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)

Низът „organic“ ще бъде име на място за реда, който ще съдържа върнатите показатели.

Това, което бих предпочел да направя, е да използвам тази рамка от данни, за да присвоя стойности:

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