R:Google Analytics/Примеры — различия между версиями

Материал Psylab.info - энциклопедии психодиагностики
Перейти к: навигация, поиск
м (Предварительная настройка)
м (Диапазон дат)
Строка 44: Строка 44:
 
> end.date$mday <- end.date$mday - 1</nowiki>}}
 
> end.date$mday <- end.date$mday - 1</nowiki>}}
  
Преобразование даты в класс <code>POSIXlt</code> (именованный список) даёт возможность считывать и изменять отдельные части даты и времени<ref>Подробнее <code>help(DateTimeClasses)</code>.</ref>.
+
Преобразование даты в класс <code>POSIXlt</code> (именованный список) даёт возможность считывать и изменять отдельные части даты и времени<ref>Подробнее <code>help(DateTimeClasses)</code>.</ref>. В примере выше мы изменяем текущее число месяца на первое, затем к конечной дате прибавляем один месяц и отнимаем один день. Таким образом, мы получаем последний день текущего месяца.
  
 
== Анализ посещаемости сайта ==
 
== Анализ посещаемости сайта ==

Версия 04:55, 26 апреля 2014


В этой статье приведены конкретные примеры запросов к API Google Analytics, а также способы анализа и визуализации полученных данных. Все данные взяты из профиля сайта http://psylab.info.

Предварительная настройка

Прежде чем приступить к анализу и визуализации данных, нам необходимо, загрузить все необходимые пакеты R, определить ряд переменных, подключиться к API Google Analytics и т.д.

Установка английской локали для даты и времени:

КодR

<syntaxhighlight lang="r">> Sys.setlocale("LC_TIME", "en_US")</syntaxhighlight>

Загрузка необходимых пакетов для работы:

КодR

<syntaxhighlight lang="r">> library(reshape2) > library(scales) > library(ggplot2) > library(rga)</syntaxhighlight>

Подключение к API GA:

КодR

<syntaxhighlight lang="r">> rga.open(instance = "ga", where = "ga.rga")</syntaxhighlight>

Определяем id сайта в профиле GA для получения данных:

КодR

<syntaxhighlight lang="r">> profiles <- ga$getProfiles() # таблица профилей > siteURL <- "http://psylab.info" # URL сайта > view <- "All data" # название представления > id <- profiles[profiles$websiteUrl == siteURL & profiles$name == view, "id"]</syntaxhighlight>

Диапазон дат

Определяем часовой пояс согласно настройкам ресурса в GA для корректного преобразования времени в R:

КодR

<syntaxhighlight lang="r">timezone <- as.character(profiles[profiles$id == id, "timezone"])</syntaxhighlight>

Автоматическое определение первого и последнего числа текущего месяца:

КодR

<syntaxhighlight lang="r">> start.date <- end.date <- as.POSIXlt(Sys.Date(), tz = timezone) > start.date$mday <- end.date$mday <- 1 > end.date$mon <- end.date$mon + 1 > end.date$mday <- end.date$mday - 1</syntaxhighlight>

Преобразование даты в класс POSIXlt (именованный список) даёт возможность считывать и изменять отдельные части даты и времени[1]. В примере выше мы изменяем текущее число месяца на первое, затем к конечной дате прибавляем один месяц и отнимаем один день. Таким образом, мы получаем последний день текущего месяца.

Анализ посещаемости сайта

Для анализа посещаемости сайта возьмём следующие показатели: количество пользователей, количество посещений (сеансов) и количество просмотров страниц. Диапазон дат, как можно видеть из приведённого ниже кода, составляет 30 дней.

Получение данных:

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = Sys.Date(), end.date = Sys.Date() - 30, + metrics = "ga:pageviews,ga:sessions,ga:users", + dimensions = "ga:date")</syntaxhighlight>

Переменные id, start.date, end.date мы уже определили ранее.

Приведём часть полученной таблицы данных для лучшего понимания дальнейших действий:

КодR

<syntaxhighlight lang="r">> head(ga.data) date pageviews sessions users 1 2014-03-24 11919 5043 3989 2 2014-03-25 12744 5364 4254 3 2014-03-26 12986 5366 4211 4 2014-03-27 12833 5288 4164 5 2014-03-28 10201 4483 3586 6 2014-03-29 7602 3381 2647</syntaxhighlight>

Выведем описательных статистик по всем показателям:

КодR

<syntaxhighlight lang="r">> t(sapply(ga.data[, -1], summary)) Min. 1st Qu. Median Mean 3rd Qu. Max. pageviews 6590 10700 12700 12400 14500 16000 sessions 3090 4490 5320 5170 6040 6520 users 2270 3460 4160 4040 4740 5020</syntaxhighlight>

Суммарные показатели за 30 дней :

КодR

<syntaxhighlight lang="r">> t(sapply(ga.data[, -1], sum)) pageviews sessions users [1,] 385863 161206 125926</syntaxhighlight>

Подсчёт количества (уникальных) посетителей в GA ведётся разными способами, вследствие чего данные показатели могут отличаться при разных запросах. Более корректные цифры можно получить, сделав непосредственный запрос к GA[2]:

КодR

<syntaxhighlight lang="r">> ga$getData(id, start.date = Sys.Date() - 30, end.date = Sys.Date(), + metrics = "ga:pageviews,ga:sessions,ga:users", dimensions = "") pageviews sessions users 1 385863 161206 89626</syntaxhighlight>

Как видим, значения метрики ga:users существенно отличается от рассчитанного на основании ранее полученных данных данных по датам.

Визуализировать таблицу данных можно следующим образом:

КодR

<syntaxhighlight lang="r">> ga.long <- melt(ga.data, id.vars = "date", value.name = "value", variable.name = "metric") > qplot(data = ga.long, x = date, y = value, color = metric, shape = metric, geom = c("line", "point")) + + theme_bw() + scale_x_date(labels = date_format("%d %b"), breaks = date_breaks("week"))</syntaxhighlight>

Преобразование исходной таблицы в «длинный» формат с помощью функции melt() необходимо для более удобной работы с несколькими переменными при построении графика.

Полученный график приведён ниже:

Ga-date-users.svg

Анализ посещаемости по дням недели

Проанализируем динамику посещаемости сайта в течении недели. Для этого возьмём сведения о количестве посещений с момента начала сбора статистики до текущего дня. Код для запроса этих данных выглядит следующим образом:

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date(), + metrics = "ga:sessions", dimensions = "ga:dayOfWeekName")</syntaxhighlight>

Для корректной сортировки дней недели в графике, т.е. чтобы соблюдался порядок дней недели,

КодR

<syntaxhighlight lang="r">> ga.data$dayOfWeekName <- factor(ga.data$dayOfWeekName, ordered = TRUE, + levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))</syntaxhighlight>

Полученная таблица данных с сортировкой по дням недели[3]:

КодR

<syntaxhighlight lang="r">> ga.data[order(ga.data$dayOfWeekName), ] dayOfWeekName sessions 2 Monday 28409 6 Tuesday 30165 7 Wednesday 29784 5 Thursday 22936 1 Friday 19199 3 Saturday 13791 4 Sunday 16922</syntaxhighlight>

Визуализировать данную таблицу можно следующим образом:

КодR

<syntaxhighlight lang="r">> qplot(data = ga.data, x = dayOfWeekName, y = sessions, geom = "bar", stat = "summary", fun.y = "mean", + xlab = "days of week") + theme_bw()</syntaxhighlight>

Полученный результат:

Ga-wdays-sessions.svg

На графике отчётливо видно, что пик посещаемости сайта приходится на начало недели, а своего минимума достигает в субботу. Проверить предположение о неслучайном характере распределение активности посетителей в зависимости от дня недели можно с помощью статистического критерия [math]\chi^2[/math] Пирсона.

Анализ суточной активности посетителей по дням недели

Для анализа активности посетителей сайта в качестве показателя активности мы выбрали количество просмотров страниц (показатель ga:pageviews) по часам (ga:hour) и дням недели (ga:dayOfWeekName)[4]. Получаем необходимые данные:

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date(), + metrics = "ga:pageviews", dimensions = "ga:dayOfWeekName,ga:hour")</syntaxhighlight>

Конвертируем названия дней недели в ранжированный фактор для соблюдения порядка дней недели при построении графиков.

КодR

<syntaxhighlight lang="r">ga.data$dayOfWeekName <- factor(ga.data$dayOfWeekName, ordered = TRUE, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))</syntaxhighlight>

Приведём первые несколько строк таблицы для наглядной демонстрации структуры полученных данных:

КодR

<syntaxhighlight lang="r">> head(ga.data[order(ga.data$dayOfWeekName), ]) dayOfWeekName hour pageviews 25 Monday 00 4148 26 Monday 01 3576 27 Monday 02 3072 28 Monday 03 2320 29 Monday 04 1409 30 Monday 05 908</syntaxhighlight>

В качестве визуализации воспользуемся плиточным графиком, который окрашивает зоны на пересечении часов и дней недели в зависимости от значения переменной pageviews. Пример кода для построения графика:

КодR

<syntaxhighlight lang="r"> qplot(data = ga.data, x = dayOfWeekName, y = hour, fill = pageviews, xlab = "days of week") + + geom_tile(colour = "white") + scale_fill_gradient(low = "steelblue", high = "red", space = "Lab") + + theme_bw() + theme(axis.ticks = element_blank())</syntaxhighlight>

Ga-wday-hour-pageviews.svg

На графике отчётливо видны зоны наибольшей и наименьшей активности посетителей сайта в зависимости от дней недели. В целом по графику можнос делать вывод, что структура суточной активности не меняется в течении недели.

Обратим внимание, что при анализе активности посетителей по времени важно учитывать часовой пояс, заданный в настройках представления GA. Получить текущий часовой пояс можно узнать, получив информацию о профилях GA, с помощью команды ga$getProfiles(). Ранее мы уже извлекли информацию о профилях в переменную profiles, поэтому узнать текущий часовой пояс для нашего сайта мы можем следующим образом:

КодR

<syntaxhighlight lang="r">> as.character(profiles[profiles$id == id, "timezone"]) [1] "Europe/Moscow"</syntaxhighlight>

Стоит также отметить, что в качестве показателей активности посетителей можно такж использовать количество сеансов пользователей, среднее количество просмотром на одного посетителя и т. д.

Анализ источников трафика

Проанализируем соотношение основных источников трафика сайта: прямой (direct), переходы с других сайтов (referral) и поисковый (organic). Для получения нужных данных нам понадобится показатель количество посещений (ga:sessions) и и измерение источники трафика ga:medium[5].

Получаем отсротированные по убыванию данные по показателю ga:sessions:

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date(), + metrics = "ga:sessions", dimensions = "ga:medium", sort = "-ga:sessions")</syntaxhighlight>

В данный таблице прямой трафик отображается как «(none)». Исправляем:

КодR

<syntaxhighlight lang="r">> ga.data[ga.data$medium == "(none)", "medium"] <- "direct"</syntaxhighlight>

Добавим столбец с процентами для более наглядного восприятия соотношения:

КодR

<syntaxhighlight lang="r">> ga.data$percent <- round(prop.table(ga.data$sessions) * 100, 1)</syntaxhighlight>

Полученная в результате таблица выглядит следующим образом:

КодR

<syntaxhighlight lang="r">> ga.data medium sessions percent 1 organic 164914 87.6 2 direct 13075 6.9 3 referral 10305 5.5</syntaxhighlight>

Для визуализации данных воспользуемся круговой диаграммой (pie chart):

КодR

<syntaxhighlight lang="r">> qplot(data = ga.data, x = factor(0), y = sessions, fill = medium, xlab = "", ylab = "") + + geom_bar(width = 1, stat = "identity") + coord_polar(theta = "y") + + geom_text(aes(y = cumsum(sessions) - 0.5 * sessions, label = paste0(percent, "%"))) + + scale_y_continuous(breaks = NULL) + scale_x_discrete(breaks = NULL) + + scale_fill_discrete(name = "source") + theme_bw()</syntaxhighlight>

Ga-trafic-sources.svg

Примечания

  1. Подробнее help(DateTimeClasses).
  2. Как рассчитывается количество уникальных посетителей/активных пользователей.
  3. Полученная непосредственно из GA таблица отсортирована по алфавиту.
  4. Взяты названия дней недели, т.к. в GA началом недели считается воскресенье и, соответственно, нумерация осуществляется с воскресенья.
  5. Измерение ga:source даёт более подробную информацию об источниках трафика, в том числе и об источниках переходов, т.е. веб-сайтах, с которых приходят посетители. В данном случае нашей целью является проанализировать только соотношение источников трафика.