Данные без сэмплирования из Google Analytics c автообновлением
Рассмотрим способ настройки автообновления данных из GA при помощи пакета googleAnalyticsR.
В предыдущей статье «Как выгружать данные без сэмплирования за весь период» я описывала способ выгрузки данных при помощи пакета skardhamar/rga. Данный способ имеет более простой синтаксис, но при этом менее универсальный. В случае использования googleAnalyticsR от Марка Эдмондсона мы имеем 2 основных преимущества:
- Аутентификация через сервисный аккаунт Google для настройки автоматического обновления выгрузки.
- Скорость работы скрипта существенно выше, чем при работе с skardhamar/rga. Так при работе с функцией google_analytics_4() параллельно идет анализ сэмплирования по выборке. При сэмплировании данных запускается «интеллектуальный» батчинг с использованием анализа количества частей выборок, а не разбивка выборки по дням.
Решение с помощью googleAnalyticsR:
- Запуск R и R Studio. Установка библиотек.
- Настройка автоматической аутентификации в аккаунт Google без браузера.
- Парсинг данных из Google Analytics при помощи R скрипта.
- Перезапись нового файла.
- Настройка расписания запуска R скрипта.
На выходе получаем таблицу с данными в csv файле. С чем можно работать в R или, например, строить на основании данных системы BI аналитики.
1. Установка R и R Studio. Настройка библиотек.
- Скачиваем и устанавливаем R и R Studio.
- После запуска R Studio создаем R Script
- Устанавливаем пакеты:
Пакет googleAuthR используем для аутентификации в Google аккаунт. Пакет googleAnalyticsR используется для импорта данных и управления проектом в Search Console.
# Установка пакетов install.packages("googleAuthR") install.packages("googleAnalyticsR") # Подключение библиотек library(googleAuthR) library(googleAnalyticsR)
2. Настройка автоматической аутентификации в аккаунт Google.
Для того, чтобы впоследствии настроить автоматическое обновление данных необходимо настроить Сервисный аккаунт в Google Developers Console и скачать client_secret.json, который будет использоваться для аутентификации каждый раз при запуске R скрипта.
- Создаем проект в Google Developers Console
- Переходим в список доступных API и находим Google Analytics:
- Активируем доступ по API в Google Analytics:
- Далее нам необходимо настроить «Учетные данные»:
- Создаем ключ сервисного аккаунта Google:
- Вписываем любое имя, остальные настройки как в примере:
Подтверждаем создание аккаунта без роли. Далее сохраняем предлагаемый файл себе в надежное место (важно запомнить месторасположение файла и не потерять его).
- Теперь сервисному аккаунту необходимо открыть доступ к Google Analytics.
- Для этого переходим в “Управление сервисным аккаунтом”.
- Открываем в настройках (1) полный доступ и копируем «почтовый адрес», который является идентификатором сервисного аккаунта
- Для этого переходим в “Управление сервисным аккаунтом”.
- На данную почту необходимо открыть доступ из Google Analytics таким же образом, как любому другому пользователю.
- Далее в R Studio проходим аутентификацию, используя файл json, который мы сохранили на предыдущих этапах:
# Авторизация в аккаунт Google. Указываем путь к файлу. service_token <- gar_auth_service("C:/Users/Anastasiya/Documents/R/Docs/service_ga.json")
3. Парсинг данных при помощи R Script
Запускаем оставшуюся часть скрипт (ниже весь скрипт):
# Подключение библиотек library(googleAuthR) library(googleAnalyticsR) # Авторизация в аккаунт Google service_token <-gar_auth_service("C:/Users/Anastasiya/Documents/R/Docs/service_ga.json") # Указываем идентификатор представления ga_id <- "00000000" # Указываем путь файла, куда записывать данные. При первом запуске его, как правило, не существует path <- "C:/Users/Anastasiya/OneDrive/OneDrive - Preply, Inc/csv_data/ga-data1.csv" # Указываем диапазон дат. start_date <- "2016-12-06" end_date <- as.character.Date(Sys.Date() - 4) ## Создаем необходимые фильтры. Как пример, df1 <- dim_filter("medium","EXACT","organic", caseSensitive = FALSE) df2 <- dim_filter("landingPagePath","REGEXP","(skype|online|/pt/$|/$|/pl/$|/es/$|/ru/$|/ua/$|/fr/$|/ko/$|/ja/$|/ar/$|/sp/$|/zh/$|/tr/$|/it/$|/id/$|/de/$)") ## Объединяем фильтры. По параметрам и показателям нельзя объединять в одной и той же функции. fc <- filter_clause_ga4(list(df1, df2), operator = "AND") ## Основная функция парсинга данных. ga_data <- google_analytics_4(ga_id, date_range = c(start_date,end_date), dimensions=c('landingPagePath','date','country'), metrics = c('newusers'), dim_filters = fc, anti_sample = TRUE) ## Проверяем не произошло ли ошибки при парсинге, чтобы не перезаписать случайно файл пустыми значениями. if(is.data.frame(ga_data) && nrow(ga_data)==0 ) { message("File hasn't update","\r",appendLF=FALSE) } else { write.csv(ga_data, file = path, row.names=FALSE) }
О фильтрах в функции google_analytics_4():
Перевод источника Mark Edmondson:
## Создание фильтров на показателях mf <- met_filter("bounces", "GREATER_THAN", 0) mf2 <- met_filter("sessions", "GREATER", 2) ## Создание фильтров на параметрах df <- dim_filter("source","BEGINS_WITH","1",not = TRUE) df2 <- dim_filter("source","BEGINS_WITH","a",not = TRUE) ## Создание объектов фильтров. ## Если фильтр 1 нужно создать объект из одного фильтра. Пример, filter_clause_ga4(list(df)) fc2 <- filter_clause_ga4(list(df, df2), operator = "AND") fc <- filter_clause_ga4(list(mf, mf2), operator = "AND") ## Пример фильтров в запросе ga_data1 <- google_analytics_4( ga_id, date_range = c("2015-07-30","2015-10-01"), dimensions=c('source','medium'), metrics = c('sessions','bounces'), met_filters = fc, dim_filters = fc2, filtersExpression = "ga:source!=(direct)")
dim_filter и met_filter используются для создания фильтров на параметрам и показателях соответственно.
Синтаксис: dim_filter(название_параметра*, тип соответствия*, значение*, caseSensitive = FALSE, not = FALSE )
Типы соответствия: «REGEXP», «BEGINS_WITH», «ENDS_WITH», «PARTIAL», «EXACT», «NUMERIC_EQUAL», «NUMERIC_GREATER_THAN», «NUMERIC_LESS_THAN», «IN_LIST»
4. Обновление данных по расписанию
Устанавливаем пакет “taskscheduleR”
library(devtools) install.packages("devtools") install_github("jwijffels/taskscheduleR") library(taskscheduleR)
Данный пакет предназначен для настройки запуска R Script по расписанию: каждый час, день, месяц, каждые 5 минут или в определенный момент.
В моей предыдущей статье представлено 2 способа настройки запуска R Script по расписанию.
Выводы
Решение отлично подходят для большинства проектов и помогает при помощи библиотеки GoogleAnalyticsR и taskscheduleR настроить автоматическое обновление данных из Google Analytics.
Привет! Спасибо большое за пост.
Почему-то не создается csv при работе скрипта. Не сталкивались с таким, не могу понять в чем проблема?
Ответ из консоли:
2017-04-25 16:30:02> anti_sample set to TRUE. Mitigating sampling via multiple API calls.
2017-04-25 16:30:02> Finding how much sampling in data request…
2017-04-25 16:30:03> Downloaded [10] rows from a total of [102].
2017-04-25 16:30:03> No sampling found, returning call
2017-04-25 16:30:03> Downloaded [102] rows from a total of [102].
> if(is.data.frame(ga_data1) && nrow(ga_data1)==0 ) {
+ message(«File hasn’t update»,»\r»,appendLF=FALSE)
+ } else {
+ write.csv(ga_data1, file = path, row.names=FALSE)
+ }
Error in is.data.frame(ga_data1) : object ‘ga_data1’ not found
Посмотрите, куда загружаются данные из функции google_analytics_4. Возможно вы где-то не заменили ga_data на ga_data1 в вашем примере. Так как пока не вижу в чем проблема. Или дайте полный код.
Да, действительно заменил. Теперь заработало, спасибо, Анастасия!
Огромное спасибо за эту статью!!!!
Но при выполнении планировщиком поучаю такую ошибку:
C:\>C:/R/R-33~1.3/bin/Rscript.exe «C:/R/R-3.3.3/library/taskscheduleR/extdata/GA_EVERYDAY_EXPORT_CRON.R»
Ошибка: oauth_listener() needs an interactive environment.
Выполнение остановлено
Нагуглить решение пока не удается..
Разобрался!
Я накосячил — все отлично работает!!!
Спасибо!
Не за что! 🙂
Подскажите, пожалуйста, в чем был косяк?
А то точно такая же ошибка.
Скорее всего проблема была в корректной аутентификации. Подобная ошибка возникает, если R скрипт просит взаимодействие с браузером. При аутентификации через сервисный аккаунт, подобного не должно возникать. Нужно проверить вызов и настройку аутентификации.
Не совсем удобный вариант — работать с csv-файлами. Куда удобнее, когда вы получаете сырые данные из Google Analytics в облачную базу данных, например в BigQuery. У OWOX есть готовое решение по импорту данных из GA в BigQuery.