R:Google Analytics/Примеры — различия между версиями
м (→Анализ соотношения источников трафика) |
м (→Анализ соотношения источников трафика) |
||
Строка 254: | Строка 254: | ||
Отобразим только поисковый трафик: | Отобразим только поисковый трафик: | ||
− | {{r-code|code=<nowiki>> head(subset(ga.data, medium == "organic" | + | {{r-code|code=<nowiki>> head(subset(ga.data, medium == "organic"), n = 10) |
medium source sessions | medium source sessions | ||
1 organic yandex 86000 | 1 organic yandex 86000 | ||
Строка 271: | Строка 271: | ||
Отобразим только трафик переходов: | Отобразим только трафик переходов: | ||
− | {{r-code|code=<nowiki>> head(subset(ga.data | + | {{r-code|code=<nowiki>> head(subset(ga.data, medium == "referral"), n = 10) |
medium source sessions | medium source sessions | ||
5 referral vk.com 3194 | 5 referral vk.com 3194 | ||
Строка 286: | Строка 286: | ||
Визуализируем эту таблицу с помощью столбиковой диаграммы: | Визуализируем эту таблицу с помощью столбиковой диаграммы: | ||
− | {{r-code|code=<nowiki>> qplot(data = head(ga.data | + | {{r-code|code=<nowiki>> qplot(data = head(subset(ga.data, medium == "organic")), x = reorder(source, sessions), y = sessions, |
+ geom = "bar", stat = "identity", xlab = "") + coord_flip() + theme_bw()</nowiki>}} | + geom = "bar", stat = "identity", xlab = "") + coord_flip() + theme_bw()</nowiki>}} | ||
[[Файл:Ga-searches.svg|600px|центр]] | [[Файл:Ga-searches.svg|600px|центр]] | ||
− | {{r-code|code=<nowiki>> qplot(data = head(ga.data | + | {{r-code|code=<nowiki>> qplot(data = head(subset(ga.data, medium == "referral")), x = reorder(source, sessions), y = sessions, |
+ geom = "bar", stat = "identity", xlab = "") + coord_flip() + theme_bw()</nowiki>}} | + geom = "bar", stat = "identity", xlab = "") + coord_flip() + theme_bw()</nowiki>}} | ||
Версия 15:16, 27 апреля 2014
|
Материал «R:Google Analytics/Примеры», созданный авторами Филипп Управителев и Артём Клевцов, публикуется на условиях лицензии Creative Commons «Attribution» («Атрибуция») 4.0 Всемирная. | |
|
Перед использованием функций из пакетов их необходимо предварительно установить и загрузить: КодR <syntaxhighlight lang="r">> install.packages(pkgs = "pkgname") > library(package = "pkgname")</syntaxhighlight> |
В этой статье приведены конкретные примеры запросов к API Google Analytics, а также способы анализа и визуализации полученных данных. Все данные взяты из профиля сайта http://psylab.info.
Содержание
Предварительная настройка
Прежде чем приступить к анализу и визуализации данных, нам необходимо, загрузить все необходимые пакеты R, определить ряд переменных, подключиться к API Google Analytics и т.д.
Установка английской локали для даты и времени:
<syntaxhighlight lang="r">> Sys.setlocale("LC_TIME", "en_US")</syntaxhighlight>
Загрузка необходимых пакетов для работы:
<syntaxhighlight lang="r">> library(reshape2) > library(scales) > library(ggplot2) > library(rga)</syntaxhighlight>
Подключение к API GA:
<syntaxhighlight lang="r">> rga.open(instance = "ga", where = "ga.rga")</syntaxhighlight>
Определяем id сайта в профиле GA для получения данных:
<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:
<syntaxhighlight lang="r">> timezone <- as.character(profiles[profiles$id == id, "timezone"])</syntaxhighlight>
Автоматическое определение первого и последнего числа предыдущего месяца:
<syntaxhighlight lang="r">> start.date <- end.date <- as.POSIXlt(Sys.Date(), tz = timezone) > start.date$mday <- end.date$mday <- 1 > start.date$mon <- start.date$mon - 1 > end.date$mday <- end.date$mday - 1</syntaxhighlight>
Преобразование даты в класс POSIXlt
(именованный список) даёт возможность считывать и изменять отдельные части даты и времени[1]. В примере выше мы изменяем текущее число месяца на первое, затем к конечной дате прибавляем один месяц и отнимаем один день. Таким образом, мы получаем последний день текущего месяца.
Чтобы получить диапазон дат за последние 30, 90 или 180 дней, достаточно отнять нужное количество дней от текущей даты. Например:
<syntaxhighlight lang="r">> end.date <- Sys.Date() - 1 > start.date <- end.date - 30</syntaxhighlight>
Анализ посещаемости сайта
Для анализа посещаемости сайта возьмём следующие показатели: количество пользователей, количество посещений (сеансов) и количество просмотров страниц. Диапазон дат, как можно видеть из приведённого ниже кода, составляет 30 дней.
Получение данных:
<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = Sys.Date() - 31, end.date = Sys.Date() - 1, + metrics = "ga:pageviews,ga:sessions,ga:users", + dimensions = "ga:date")</syntaxhighlight>
Переменные id
, start.date
, end.date
мы уже определили ранее.
Приведём часть полученной таблицы данных для лучшего понимания дальнейших действий:
<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>
Выведем описательных статистик по всем показателям:
<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 дней :
<syntaxhighlight lang="r">> t(sapply(ga.data[, -1], sum)) pageviews sessions users [1,] 385863 161206 125926</syntaxhighlight>
Подсчёт количества (уникальных) посетителей в GA ведётся разными способами, вследствие чего данные показатели могут отличаться при разных запросах. Более корректные цифры можно получить, сделав непосредственный запрос к GA[2]:
<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
существенно отличается от рассчитанного на основании ранее полученных данных данных по датам.
Визуализировать таблицу данных можно следующим образом:
<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()
необходимо для более удобной работы с несколькими переменными при построении графика.
Полученный график приведён ниже:
Анализ посещаемости по дням недели
Проанализируем динамику посещаемости сайта в течении недели. Для этого возьмём сведения о количестве посещений с момента начала сбора статистики до последнего воскресенья[3]. Получить дату ппредыдущего воскресенья можно следующим образом:
<syntaxhighlight lang="r">> cur.wday <- as.POSIXlt(Sys.Date())$wday > sunday.date <- if (cur.wday != 7) Sys.Date() - cur.wday</syntaxhighlight>
Проверяем полученную дату:
<syntaxhighlight lang="r">> sunday.date [1] "2014-04-20" > weekdays(sunday.date) [1] "Sunday"</syntaxhighlight>
Код для запроса этих данных выглядит следующим образом:
<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = sunday.date, + metrics = "ga:sessions", dimensions = "ga:dayOfWeekName")</syntaxhighlight>
Для корректной сортировки дней недели в графике, т.е. чтобы соблюдался порядок дней недели,
<syntaxhighlight lang="r">> ga.data$dayOfWeekName <- factor(ga.data$dayOfWeekName, ordered = TRUE, + levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))</syntaxhighlight>
Полученная таблица данных с сортировкой по дням недели[4]:
<syntaxhighlight lang="r">> ga.data[order(ga.data$dayOfWeekName), ] dayOfWeekName sessions 2 Monday 23090 6 Tuesday 24157 7 Wednesday 27609 5 Thursday 27964 1 Friday 23587 3 Saturday 16924 4 Sunday 20598</syntaxhighlight>
Визуализировать данную таблицу можно следующим образом:
<syntaxhighlight lang="r">> qplot(data = ga.data, x = dayOfWeekName, y = sessions, geom = "bar", + stat = "identity", xlab = "days of week") + + theme_bw() + theme(axis.ticks.x = element_blank())</syntaxhighlight>
Полученный результат:
На графике отчётливо видно, что пик посещаемости сайта приходится на первую половину недели, а своего минимума достигает в субботу. Проверить предположение о неслучайном характере распределение активности посетителей в зависимости от дня недели можно с помощью статистического критерия [math]\chi^2[/math] Пирсона.
Анализ суточной активности посетителей по дням недели
Для анализа активности посетителей сайта в качестве показателя активности мы выбрали количество просмотров страниц (показатель ga:pageviews
) по часам (ga:hour
) и дням недели (ga:dayOfWeekName
)[5]. Получаем необходимые данные:
<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date() - 1, + metrics = "ga:pageviews", dimensions = "ga:dayOfWeekName,ga:hour")</syntaxhighlight>
Конвертируем названия дней недели в ранжированный фактор для соблюдения порядка дней недели при построении графиков.
<syntaxhighlight lang="r">ga.data$dayOfWeekName <- factor(ga.data$dayOfWeekName, ordered = TRUE, levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))</syntaxhighlight>
Приведём первые несколько строк таблицы для наглядной демонстрации структуры полученных данных:
<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
. Пример кода для построения графика:
<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. Получить текущий часовой пояс можно узнать, получив информацию о профилях GA, с помощью команды ga$getProfiles()
. Ранее мы уже извлекли информацию о профилях в переменную profiles
, поэтому узнать текущий часовой пояс для нашего сайта мы можем следующим образом:
<syntaxhighlight lang="r">> as.character(profiles[profiles$id == id, "timezone"]) [1] "Europe/Moscow"</syntaxhighlight>
Стоит также отметить, что в качестве показателей активности посетителей можно такж использовать количество сеансов пользователей, среднее количество просмотром на одного посетителя и т. д.
Анализ соотношения источников трафика
Проанализируем соотношение основных источников трафика сайта: прямой (direct), переходы с других сайтов (referral) и поисковый (organic). Для получения нужных данных нам понадобится показатель количество посещений (ga:sessions
) и и измерение источники трафика ga:medium
[6].
Получаем отсротированные по убыванию данные по показателю ga:sessions
:
<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date() - 1, + metrics = "ga:sessions", dimensions = "ga:medium", sort = "-ga:sessions")</syntaxhighlight>
В данный таблице прямой трафик отображается как «(none)». Исправляем:
<syntaxhighlight lang="r">> ga.data[ga.data$medium == "(none)", "medium"] <- "direct"</syntaxhighlight>
Добавим столбец с процентами для более наглядного восприятия соотношения:
<syntaxhighlight lang="r">> ga.data$percent <- round(prop.table(ga.data$sessions) * 100, 1)</syntaxhighlight>
Полученная в результате таблица выглядит следующим образом:
<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):
<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:sourceMedium
, который сочетает в себе измерения ga:medium
и ga:source
. В качестве основного показателя оставим количество посещений (ga:sessions
). Наиболее интересными для нас являются источники, имеющие наибольшее количество посещений, поэтому воспользуемся сортировкой по убываю. Код для получения данных приведён ниже.
<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date() - 1, + metrics = "ga:sessions", dimensions = "ga:medium,ga:source", sort = "-ga:sessions")</syntaxhighlight>
Полученная в результате запроса таблица данных:
<syntaxhighlight lang="r">> head(ga.data, n = 10) medium source sessions 1 organic yandex 86000 2 organic google 71841 3 (none) (direct) 13189 4 organic go.mail.ru 6952 5 referral vk.com 3194 6 referral ru.wikipedia.org 3052 7 organic rambler 835 8 referral psychologos.ru 696 9 organic bing 436 10 referral e.mail.ru 387</syntaxhighlight>
Отобразим только поисковый трафик:
<syntaxhighlight lang="r">> head(subset(ga.data, medium == "organic"), n = 10) medium source sessions 1 organic yandex 86000 2 organic google 71841 4 organic go.mail.ru 6952 7 organic rambler 835 9 organic bing 436 14 organic ask 135 21 organic yahoo 78 41 organic conduit 20 49 organic avg 17 110 organic search-results 4 126 organic babylon 3 197 organic live 1</syntaxhighlight>
Отобразим только трафик переходов:
<syntaxhighlight lang="r">> head(subset(ga.data, medium == "referral"), n = 10) medium source sessions 5 referral vk.com 3194 6 referral ru.wikipedia.org 3052 8 referral psychologos.ru 696 10 referral e.mail.ru 387 11 referral nigma.ru 337 12 referral rutracker.org 172 13 referral ru.m.wikipedia.org 170 15 referral brainmod.ru 121 16 referral yandex.ru 104 17 referral lookatme.ru 101</syntaxhighlight>
Визуализируем эту таблицу с помощью столбиковой диаграммы:
<syntaxhighlight lang="r">> qplot(data = head(subset(ga.data, medium == "organic")), x = reorder(source, sessions), y = sessions, + geom = "bar", stat = "identity", xlab = "") + coord_flip() + theme_bw()</syntaxhighlight>
<syntaxhighlight lang="r">> qplot(data = head(subset(ga.data, medium == "referral")), x = reorder(source, sessions), y = sessions, + geom = "bar", stat = "identity", xlab = "") + coord_flip() + theme_bw()</syntaxhighlight>
reorder(source, sessions)
используется для сортировки столбцов в диаграмме в зависимости от значения столбца «sessions».
Примечания
- ↑ Подробнее
help(DateTimeClasses)
. - ↑ Как рассчитывается количество уникальных посетителей/активных пользователей.
- ↑ Сбор статистики необходимо закончить последним днём недели, чтобы избежать искажений показателей.
- ↑ Полученная непосредственно из GA таблица отсортирована по алфавиту.
- ↑ Взяты названия дней недели, т. к. в GA началом недели считается воскресенье и, соответственно, нумерация осуществляется с воскресенья.
- ↑ Измерение
ga:source
даёт более подробную информацию об источниках трафика, в том числе и об источниках переходов, т.е. веб-сайтах, с которых приходят посетители. В данном случае нашей целью является проанализировать только соотношение источников трафика.