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

< R:Google Analytics
м (Анализ посещаемости по дням недели)
м (Анализ суточной активности посетителей по дням недели)
 
(не показано 59 промежуточных версий этого же участника)
Строка 26: Строка 26:
 
Определяем id сайта в профиле GA для получения данных:
 
Определяем id сайта в профиле GA для получения данных:
  
{{r-code|code=<nowiki>> siteURL <- "http://psylab.info"
+
{{r-code|code=<nowiki>> profiles <- ga$getProfiles() # таблица профилей
> profiles <- ga$getProfiles()
+
> siteURL <- "http://psylab.info" # URL сайта
> id <- profiles[profiles$websiteUrl == siteURL, "id"]</nowiki>}}
+
> view <- "All data" # название представления
 +
> id <- profiles[profiles$websiteUrl == siteURL & profiles$name == view, "id"]</nowiki>}}
 +
 
 +
=== Диапазон дат ===
  
 
Определяем часовой пояс согласно настройкам ресурса в GA для корректного преобразования времени в R:
 
Определяем часовой пояс согласно настройкам ресурса в GA для корректного преобразования времени в R:
  
{{r-code|code=<nowiki>timezone <- as.character(profiles[profiles$id == id, "timezone"])</nowiki>}}
+
{{r-code|code=<nowiki>> timezone <- as.character(profiles[profiles$id == id, "timezone"])</nowiki>}}
 +
 
 +
Автоматическое определение первого и последнего числа предыдущего месяца:
 +
 
 +
{{r-code|code=<nowiki>> 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</nowiki>}}
 +
 
 +
Преобразование даты в класс <code>POSIXlt</code> (именованный список) даёт возможность считывать и изменять отдельные части даты и времени<ref>Подробнее <code>help(DateTimeClasses)</code>.</ref>. В примере выше мы изменяем текущее число месяца на первое, затем к конечной дате прибавляем один месяц и отнимаем один день. Таким образом, мы получаем последний день текущего месяца.
 +
 
 +
Чтобы получить диапазон дат за последние 30, 90 или 180 дней, достаточно отнять нужное количество дней от текущей даты. Например:
 +
 
 +
{{r-code|code=<nowiki>> end.date <- Sys.Date() - 1
 +
> start.date <- end.date - 30</nowiki>}}
  
 
== Анализ посещаемости сайта ==
 
== Анализ посещаемости сайта ==
Строка 40: Строка 57:
 
Получение данных:
 
Получение данных:
  
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = Sys.Date(), end.date = Sys.Date() - 30,
+
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = Sys.Date() - 31, end.date = Sys.Date() - 1,
 
+                      metrics = "ga:pageviews,ga:sessions,ga:users",
 
+                      metrics = "ga:pageviews,ga:sessions,ga:users",
 
+                      dimensions = "ga:date")</nowiki>}}
 
+                      dimensions = "ga:date")</nowiki>}}
Строка 78: Строка 95:
 
1    385863  161206 89626</nowiki>}}
 
1    385863  161206 89626</nowiki>}}
  
Как видим, значения метрики <code>ga:users</code> существенно отличается, от рассчитанного на основании ранее полученных данных данных по датам.
+
Как видим, значения метрики <code>ga:users</code> существенно отличается от рассчитанного на основании ранее полученных данных данных по датам.
  
 
Визуализировать таблицу данных можно следующим образом:
 
Визуализировать таблицу данных можно следующим образом:
Строка 94: Строка 111:
 
== Анализ посещаемости по дням недели ==
 
== Анализ посещаемости по дням недели ==
  
Проанализируем динамику посещаемости сайта в течении недели. Для этого возьмём сведения о количестве посещений с момента начала сбора статистики до текущего дня. Код для запроса этих данных выглядит следующим образом:
+
Проанализируем динамику посещаемости сайта в течении недели. Для этого возьмём сведения о количестве посещений с момента начала сбора статистики до последнего воскресенья<ref>Сбор статистики необходимо закончить последним днём недели, чтобы избежать искажений показателей.</ref>. Получить дату ппредыдущего воскресенья можно следующим образом:
  
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date(),
+
{{r-code|code=<nowiki>> cur.wday <- as.POSIXlt(Sys.Date())$wday
 +
> sunday.date <- if (cur.wday != 7) Sys.Date() - cur.wday</nowiki>}}
 +
 
 +
Проверяем полученную дату:
 +
 
 +
{{r-code|code=<nowiki>> sunday.date
 +
[1] "2014-04-20"
 +
> weekdays(sunday.date)
 +
[1] "Sunday"</nowiki>}}
 +
 
 +
Код для запроса этих данных выглядит следующим образом:
 +
 
 +
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = sunday.date,
 
+                      metrics = "ga:sessions", dimensions = "ga:dayOfWeekName")</nowiki>}}
 
+                      metrics = "ga:sessions", dimensions = "ga:dayOfWeekName")</nowiki>}}
  
Строка 104: Строка 133:
 
+                            levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))</nowiki>}}
 
+                            levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))</nowiki>}}
  
{{r-code|code=<nowiki>> ga.data
+
Полученная таблица данных с сортировкой по дням недели<ref>Полученная непосредственно из GA таблица отсортирована по алфавиту.</ref>:
 +
 
 +
{{r-code|code=<nowiki>> ga.data[order(ga.data$dayOfWeekName), ]
 
   dayOfWeekName sessions
 
   dayOfWeekName sessions
1        Friday    19199
+
2        Monday    23090
2        Monday    28409
+
6      Tuesday   24157
3      Saturday   13791
+
7    Wednesday   27609
4        Sunday   16922
+
5      Thursday    27964
5      Thursday    22936
+
1        Friday   23587
6      Tuesday   30165
+
3      Saturday    16924
7    Wednesday   29784</nowiki>}}
+
4        Sunday   20598</nowiki>}}
  
 
Визуализировать данную таблицу можно следующим образом:
 
Визуализировать данную таблицу можно следующим образом:
  
{{r-code|code=<nowiki>> qplot(data = ga.data, x = dayOfWeekName, y = sessions, geom = "bar", stat = "summary", fun.y = "mean") + theme_bw()</nowiki>}}
+
{{r-code|code=<nowiki>> qplot(data = ga.data, x = dayOfWeekName, y = sessions, geom = "bar",
 +
+                              stat = "identity", xlab = "days of week") +
 +
+    theme_bw() + theme(axis.ticks.x = element_blank())</nowiki>}}
  
 
Полученный результат:
 
Полученный результат:
  
 
[[Файл:Ga-wdays-sessions.svg|600px|центр]]
 
[[Файл:Ga-wdays-sessions.svg|600px|центр]]
 +
 +
На графике отчётливо видно, что пик посещаемости сайта приходится на первую половину недели, а своего минимума достигает в субботу. Проверить предположение о неслучайном характере распределение активности посетителей в зависимости от дня недели можно с помощью статистического критерия <math>\chi^2</math> Пирсона.
 +
 +
== Анализ суточной активности посетителей по дням недели ==
 +
 +
Для анализа активности посетителей сайта в качестве показателя активности мы выбрали количество просмотров страниц (показатель <code>ga:pageviews</code>) по часам (<code>ga:hour</code>) и дням недели (<code>ga:dayOfWeekName</code>)<ref>Взяты названия дней недели, т. к. в GA началом недели считается воскресенье и, соответственно, нумерация осуществляется с воскресенья.</ref>. Получаем необходимые данные:
 +
 +
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date() - 1,
 +
+                      metrics = "ga:pageviews", dimensions = "ga:dayOfWeekName,ga:hour")</nowiki>}}
 +
 +
Конвертируем названия дней недели в ранжированный фактор для соблюдения порядка дней недели при построении графиков.
 +
 +
{{r-code|code=<nowiki>> ga.data$dayOfWeekName <- factor(ga.data$dayOfWeekName, ordered = TRUE,
 +
+                                levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))</nowiki>}}
 +
 +
Приведём первые несколько строк таблицы для наглядной демонстрации структуры полученных данных:
 +
 +
{{r-code|code=<nowiki>> 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</nowiki>}}
 +
 +
В качестве визуализации воспользуемся плиточным графиком, который окрашивает зоны на пересечении часов и дней недели в зависимости от значения переменной <code>pageviews</code>. Пример кода для построения графика:
 +
 +
{{r-code|code=<nowiki>> 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())</nowiki>}}
 +
 +
[[Файл:Ga-wday-hour-pageviews.svg|600px|центр]]
 +
 +
На графике отчётливо видны зоны наибольшей и наименьшей активности посетителей сайта в зависимости от дней недели. В целом по графику можнос делать вывод, что структура суточной активности не меняется в течении недели.
 +
 +
Обратим внимание, что при анализе активности посетителей по времени важно учитывать часовой пояс, заданный в настройках представления GA. Получить текущий часовой пояс можно узнать, получив информацию о профилях GA, с помощью команды <code>ga$getProfiles()</code>. Ранее мы уже извлекли информацию о профилях в переменную <code>profiles</code>, поэтому узнать текущий часовой пояс для нашего сайта мы можем следующим образом:
 +
 +
{{r-code|code=<nowiki>> as.character(profiles[profiles$id == id, "timezone"])
 +
[1] "Europe/Moscow"</nowiki>}}
 +
 +
Стоит также отметить, что в качестве показателей активности посетителей можно такж использовать количество сеансов пользователей, среднее количество просмотром на одного посетителя и т. д.
 +
 +
== Анализ источников трафика ==
 +
 +
Проанализируем соотношение основных источников трафика сайта: прямой (direct), переходы с других сайтов (referral) и поисковый (organic). Для получения нужных данных нам понадобится показатель количество посещений (<code>ga:sessions</code>) и и измерение источники трафика <code>ga:medium</code><ref>Измерение <code>ga:source</code> даёт более подробную информацию об источниках трафика, в том числе и об источниках переходов, т.е. веб-сайтах, с которых приходят посетители. В данном случае нашей целью является проанализировать только соотношение источников трафика.</ref>.
 +
 +
Получаем отсротированные по убыванию данные по показателю <code>ga:sessions</code>:
 +
 +
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = Sys.Date() - 1,
 +
+                      metrics = "ga:sessions", dimensions = "ga:medium", sort = "-ga:sessions")</nowiki>}}
 +
 +
В данный таблице прямой трафик отображается как «(none)». Исправляем:
 +
 +
{{r-code|code=<nowiki>> ga.data[ga.data$medium == "(none)", "medium"] <- "direct"</nowiki>}}
 +
 +
Добавим столбец с процентами для более наглядного восприятия соотношения:
 +
 +
{{r-code|code=<nowiki>> ga.data$percent <- round(prop.table(ga.data$sessions) * 100, 1)</nowiki>}}
 +
 +
Полученная в результате таблица выглядит следующим образом:
 +
 +
{{r-code|code=<nowiki>> ga.data
 +
    medium sessions percent
 +
1  organic  164914    87.6
 +
2  direct    13075    6.9
 +
3 referral    10305    5.5</nowiki>}}
 +
 +
Для визуализации данных воспользуемся круговой диаграммой (pie chart):
 +
 +
{{r-code|code=<nowiki>> 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()</nowiki>}}
 +
 +
[[Файл:Ga-trafic-sources.svg|600px|центр]]
 +
 +
Теперь рассмотрим источники трафика более детально. Для этого сделаем выборку по измерениям <code>ga:medium</code> и <code>ga:source</code>. В качестве показателей активности посетителей возьмём следующие показатели:
 +
 +
* количество посещений (<code>ga:sessions</code>);
 +
* процент новых посещений (<code>ga:percentNewSessions</code>);
 +
* средняя продолжительность посещения (<code>ga:avgSessionDuration</code>);
 +
* количество просмотров страниц (<code>ga:pageviews</code>);
 +
* среднее количество просмотров страниц на одно посещение (<code>ga:pageviewsPerSession</code>);
 +
* [http://ru.wikipedia.org/wiki/Показатель_отказов процент отказов] (<code>ga:bounceRate</code>).
 +
 +
Наиболее интересными для нас являются источники, имеющие наибольшее количество посещений, поэтому воспользуемся сортировкой по убыванию по показателю <code>ga:sessions</code>, а также ограничим количество источников теми, с которых было более 100 посещений. Код для получения данных приведён ниже.
 +
 +
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = "2014-03-24", end.date = "2014-04-23",
 +
+                      metrics = "ga:sessions,ga:percentNewSessions,ga:avgSessionDuration,ga:pageviews,ga:pageviewsPerSession,ga:bounceRate",
 +
+                      dimensions = "ga:medium,ga:source", sort = "ga:medium,-ga:sessions", filters = "ga:sessions>100")</nowiki>}}
 +
 +
Полученная в результате запроса таблица данных:
 +
 +
{{r-code|code=<nowiki>> ga.data
 +
    medium            source sessions percentNewSessions avgSessionDuration pageviews pageviewsPerSession bounceRate
 +
1    (none)          (direct)    11182              48.92            205.34    28823              2.578      63.42
 +
2  organic            yandex    72949              43.72            146.23    170021              2.331      69.30
 +
3  organic            google    61130              45.60            183.29    143721              2.351      65.15
 +
4  organic        go.mail.ru    5884              49.68            160.77    16012              2.721      66.42
 +
5  organic            rambler      683              53.29            134.36      1635              2.394      68.96
 +
6  organic              bing      379              47.23            185.23      1158              3.055      62.53
 +
7  organic                ask      115              46.09            181.53      313              2.722      60.00
 +
8  referral            vk.com    2732              26.79            212.63      7722              2.827      57.91
 +
9  referral  ru.wikipedia.org    2598              54.16            148.96      6640              2.556      62.36
 +
10 referral    psychologos.ru      578              70.24              62.54      863              1.493      84.43
 +
11 referral          e.mail.ru      338              31.07            242.53      1102              3.260      54.73
 +
12 referral          nigma.ru      265              30.94            198.44      881              3.325      71.70
 +
13 referral ru.m.wikipedia.org      143              60.84            101.99      282              1.972      68.53
 +
14 referral      rutracker.org      143              60.14              79.49      200              1.399      85.31
 +
15 referral        brainmod.ru      105              41.90            127.41      199              1.895      71.43</nowiki>}}
 +
 +
Сравнивая данные показатели у разных истоников трафика мжно выявить наиболее ценные из них.
 +
 +
Отобразим только поисковый трафик:
 +
 +
{{r-code|code=<nowiki>> head(subset(ga.data, medium == "organic"), n = 10)
 +
  medium    source sessions percentNewSessions avgSessionDuration pageviews pageviewsPerSession bounceRate
 +
2 organic    yandex    72949              43.72              146.2    170021              2.331      69.30
 +
3 organic    google    61130              45.60              183.3    143721              2.351      65.15
 +
4 organic go.mail.ru    5884              49.68              160.8    16012              2.721      66.42
 +
5 organic    rambler      683              53.29              134.4      1635              2.394      68.96
 +
6 organic      bing      379              47.23              185.2      1158              3.055      62.53
 +
7 organic        ask      115              46.09              181.5      313              2.722      60.00</nowiki>}}
 +
 +
Отобразим только трафик переходов:
 +
 +
{{r-code|code=<nowiki>> head(subset(ga.data, medium == "referral"), n = 10)
 +
    medium            source sessions percentNewSessions avgSessionDuration pageviews pageviewsPerSession bounceRate
 +
8  referral            vk.com    2732              26.79            212.63      7722              2.827      57.91
 +
9  referral  ru.wikipedia.org    2598              54.16            148.96      6640              2.556      62.36
 +
10 referral    psychologos.ru      578              70.24              62.54      863              1.493      84.43
 +
11 referral          e.mail.ru      338              31.07            242.53      1102              3.260      54.73
 +
12 referral          nigma.ru      265              30.94            198.44      881              3.325      71.70
 +
13 referral ru.m.wikipedia.org      143              60.84            101.99      282              1.972      68.53
 +
14 referral      rutracker.org      143              60.14              79.49      200              1.399      85.31
 +
15 referral        brainmod.ru      105              41.90            127.41      199              1.895      71.43</nowiki>}}
 +
 +
Визуализируем эту таблицу с помощью столбиковой диаграммы:
 +
 +
{{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>}}
 +
 +
[[Файл:Ga-searches.svg|600px|центр]]
 +
 +
{{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>}}
 +
 +
[[Файл:Ga-referrals.svg|600px|центр]]
 +
 +
<code>reorder(source, sessions)</code> используется для сортировки столбцов в диаграмме в зависимости от значения столбца «sessions».
 +
 +
Для более детального анализа сайтов, с которых приходят посетители, а также целевые страницы, можно сделать следующую выборку данных:
 +
 +
{{r-code|code=<nowiki>> ga.data <- ga$getData(id, start.date = "2014-03-24", end.date = "2014-04-23",
 +
+                      metrics = "ga:sessions", dimensions = "ga:medium,ga:source,ga:referralPath,ga:pageTitle",
 +
+                      sort = "-ga:sessions", filters = "ga:medium==referral", batch = TRUE, walk = TRUE)</nowiki>}}
 +
 +
В каждом заголовке страницы присутствует также название сайта<ref>Это поведение зависит от настроек «движка» сайта.</ref>, для удобства представления данных убираем его:
 +
 +
{{r-code|code=ga.data$pageTitle <- gsub(" — Psylab.info", "", ga.data$pageTitle)}}
 +
 +
Выведем список наиболее посещаемых страниц нашего сайта посетителям, которые приходят с сайта Википедии:
 +
 +
{{r-code|code=<nowiki>> head(ga.data[grep("wikipedia", ga.data$source), -1:-3], n = 10)
 +
                                                pageTitle sessions
 +
2                        Методика чернильных пятен Роршаха      430
 +
3                            Прогрессивные матрицы Равена      286
 +
4  Методика многофакторного исследования личности Кэттелла      270
 +
5                Опросник «Уровень субъективного контроля»      245
 +
6                              Категория:Тесты интеллекта      184
 +
12                                    Шкала депрессии Бека      78
 +
13                    Тест структуры интеллекта Амтхауэра      76
 +
15 Методика многофакторного исследования личности Кэттелла      54
 +
17                Тест фрустрационных реакций Розенцвейга      52
 +
19        Миннесотский многоаспектный личностный опросник      51</nowiki>}}
 +
 +
== География посещений ==
 +
 +
Информация о географии посещений можно получить с помощью измерений из группы «Geo Network». Для начала получим данных о количестве посещений по странам.
 +
 +
{{r-code|code=<nowiki>> ga.data <- ga$getData(ids = id, start.date = Sys.Date() - 31, end.date = Sys.Date() - 1,
 +
+                      metrics = "ga:sessions", dimensions = "ga:country",
 +
+                      sort = "-ga:sessions", filters = "ga:country!=(not set)")</nowiki>}}
 +
 +
Полученные данные представляют собой следующую таблицу:
 +
 +
{{r-code|code=<nowiki>> head(ga.data, n = 10)
 +
        country sessions
 +
1        Russia  115167
 +
2        Ukraine    25166
 +
3        Belarus    8361
 +
4    Kazakhstan    4252
 +
5    Netherlands    1565
 +
6        Moldova      980
 +
7  United States      681
 +
8        Armenia      515
 +
9        Latvia      463
 +
10    Kyrgyzstan      392</nowiki>}}
 +
 +
Рассмотрим более подробно география посещений по городам РФ:
 +
 +
{{r-code|code=<nowiki>> ga.data <- ga$getData(ids = id, start.date = "2014-03-24", end.date = "2014-04-23",
 +
+                      metrics = "ga:sessions", dimensions = "ga:country,ga:city",
 +
+                      sort = "-ga:sessions", filters = "ga:country==Russia;ga:city!=(not set)")</nowiki>}}
 +
 +
Полученные результаты:
 +
 +
{{r-code|code=<nowiki>> head(ga.data, n = 10)
 +
  country            city sessions
 +
1  Russia          Moscow    18760
 +
2  Russia Saint Petersburg    14660
 +
3  Russia      Novosibirsk    4359
 +
4  Russia    Yekaterinburg    3972
 +
5  Russia          Samara    3916
 +
6  Russia            Kazan    2071
 +
7  Russia    Rostov-on-Don    1875
 +
8  Russia        Krasnodar    1816
 +
9  Russia            Perm    1753
 +
10  Russia      Krasnoyarsk    1715</nowiki>}}
  
 
== Примечания ==
 
== Примечания ==
  
 
<references />
 
<references />
 +
 +
[[Категория:R]]
 +
[[Категория:Веб-аналитика]]

Текущая версия на 20:10, 17 мая 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 > start.date$mon <- start.date$mon - 1 > end.date$mday <- end.date$mday - 1</syntaxhighlight>

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

Чтобы получить диапазон дат за последние 30, 90 или 180 дней, достаточно отнять нужное количество дней от текущей даты. Например:

КодR

<syntaxhighlight lang="r">> end.date <- Sys.Date() - 1 > start.date <- end.date - 30</syntaxhighlight>

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

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

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

КодR

<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 мы уже определили ранее.

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

Код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

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

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

КодR

<syntaxhighlight lang="r">> cur.wday <- as.POSIXlt(Sys.Date())$wday > sunday.date <- if (cur.wday != 7) Sys.Date() - cur.wday</syntaxhighlight>

Проверяем полученную дату:

КодR

<syntaxhighlight lang="r">> sunday.date [1] "2014-04-20" > weekdays(sunday.date) [1] "Sunday"</syntaxhighlight>

Код для запроса этих данных выглядит следующим образом:

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = ga$getFirstDate(id), end.date = sunday.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>

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

КодR

<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>

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

КодR

<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>

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

Ga-wdays-sessions.svg

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

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

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

КодR

<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>

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

Код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[6].

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

КодR

<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)». Исправляем:

Код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

Теперь рассмотрим источники трафика более детально. Для этого сделаем выборку по измерениям ga:medium и ga:source. В качестве показателей активности посетителей возьмём следующие показатели:

  • количество посещений (ga:sessions);
  • процент новых посещений (ga:percentNewSessions);
  • средняя продолжительность посещения (ga:avgSessionDuration);
  • количество просмотров страниц (ga:pageviews);
  • среднее количество просмотров страниц на одно посещение (ga:pageviewsPerSession);
  • процент отказов (ga:bounceRate).

Наиболее интересными для нас являются источники, имеющие наибольшее количество посещений, поэтому воспользуемся сортировкой по убыванию по показателю ga:sessions, а также ограничим количество источников теми, с которых было более 100 посещений. Код для получения данных приведён ниже.

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = "2014-03-24", end.date = "2014-04-23", + metrics = "ga:sessions,ga:percentNewSessions,ga:avgSessionDuration,ga:pageviews,ga:pageviewsPerSession,ga:bounceRate", + dimensions = "ga:medium,ga:source", sort = "ga:medium,-ga:sessions", filters = "ga:sessions>100")</syntaxhighlight>

Полученная в результате запроса таблица данных:

КодR

<syntaxhighlight lang="r">> ga.data medium source sessions percentNewSessions avgSessionDuration pageviews pageviewsPerSession bounceRate 1 (none) (direct) 11182 48.92 205.34 28823 2.578 63.42 2 organic yandex 72949 43.72 146.23 170021 2.331 69.30 3 organic google 61130 45.60 183.29 143721 2.351 65.15 4 organic go.mail.ru 5884 49.68 160.77 16012 2.721 66.42 5 organic rambler 683 53.29 134.36 1635 2.394 68.96 6 organic bing 379 47.23 185.23 1158 3.055 62.53 7 organic ask 115 46.09 181.53 313 2.722 60.00 8 referral vk.com 2732 26.79 212.63 7722 2.827 57.91 9 referral ru.wikipedia.org 2598 54.16 148.96 6640 2.556 62.36 10 referral psychologos.ru 578 70.24 62.54 863 1.493 84.43 11 referral e.mail.ru 338 31.07 242.53 1102 3.260 54.73 12 referral nigma.ru 265 30.94 198.44 881 3.325 71.70 13 referral ru.m.wikipedia.org 143 60.84 101.99 282 1.972 68.53 14 referral rutracker.org 143 60.14 79.49 200 1.399 85.31 15 referral brainmod.ru 105 41.90 127.41 199 1.895 71.43</syntaxhighlight>

Сравнивая данные показатели у разных истоников трафика мжно выявить наиболее ценные из них.

Отобразим только поисковый трафик:

КодR

<syntaxhighlight lang="r">> head(subset(ga.data, medium == "organic"), n = 10) medium source sessions percentNewSessions avgSessionDuration pageviews pageviewsPerSession bounceRate 2 organic yandex 72949 43.72 146.2 170021 2.331 69.30 3 organic google 61130 45.60 183.3 143721 2.351 65.15 4 organic go.mail.ru 5884 49.68 160.8 16012 2.721 66.42 5 organic rambler 683 53.29 134.4 1635 2.394 68.96 6 organic bing 379 47.23 185.2 1158 3.055 62.53 7 organic ask 115 46.09 181.5 313 2.722 60.00</syntaxhighlight>

Отобразим только трафик переходов:

КодR

<syntaxhighlight lang="r">> head(subset(ga.data, medium == "referral"), n = 10) medium source sessions percentNewSessions avgSessionDuration pageviews pageviewsPerSession bounceRate 8 referral vk.com 2732 26.79 212.63 7722 2.827 57.91 9 referral ru.wikipedia.org 2598 54.16 148.96 6640 2.556 62.36 10 referral psychologos.ru 578 70.24 62.54 863 1.493 84.43 11 referral e.mail.ru 338 31.07 242.53 1102 3.260 54.73 12 referral nigma.ru 265 30.94 198.44 881 3.325 71.70 13 referral ru.m.wikipedia.org 143 60.84 101.99 282 1.972 68.53 14 referral rutracker.org 143 60.14 79.49 200 1.399 85.31 15 referral brainmod.ru 105 41.90 127.41 199 1.895 71.43</syntaxhighlight>

Визуализируем эту таблицу с помощью столбиковой диаграммы:

КодR

<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>

Ga-searches.svg
КодR

<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>

Ga-referrals.svg

reorder(source, sessions) используется для сортировки столбцов в диаграмме в зависимости от значения столбца «sessions».

Для более детального анализа сайтов, с которых приходят посетители, а также целевые страницы, можно сделать следующую выборку данных:

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(id, start.date = "2014-03-24", end.date = "2014-04-23", + metrics = "ga:sessions", dimensions = "ga:medium,ga:source,ga:referralPath,ga:pageTitle", + sort = "-ga:sessions", filters = "ga:medium==referral", batch = TRUE, walk = TRUE)</syntaxhighlight>

В каждом заголовке страницы присутствует также название сайта[7], для удобства представления данных убираем его:

КодR

<syntaxhighlight lang="r">ga.data$pageTitle <- gsub(" — Psylab.info", "", ga.data$pageTitle)</syntaxhighlight>

Выведем список наиболее посещаемых страниц нашего сайта посетителям, которые приходят с сайта Википедии:

КодR

<syntaxhighlight lang="r">> head(ga.data[grep("wikipedia", ga.data$source), -1:-3], n = 10) pageTitle sessions 2 Методика чернильных пятен Роршаха 430 3 Прогрессивные матрицы Равена 286 4 Методика многофакторного исследования личности Кэттелла 270 5 Опросник «Уровень субъективного контроля» 245 6 Категория:Тесты интеллекта 184 12 Шкала депрессии Бека 78 13 Тест структуры интеллекта Амтхауэра 76 15 Методика многофакторного исследования личности Кэттелла 54 17 Тест фрустрационных реакций Розенцвейга 52 19 Миннесотский многоаспектный личностный опросник 51</syntaxhighlight>

География посещений

Информация о географии посещений можно получить с помощью измерений из группы «Geo Network». Для начала получим данных о количестве посещений по странам.

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(ids = id, start.date = Sys.Date() - 31, end.date = Sys.Date() - 1, + metrics = "ga:sessions", dimensions = "ga:country", + sort = "-ga:sessions", filters = "ga:country!=(not set)")</syntaxhighlight>

Полученные данные представляют собой следующую таблицу:

КодR

<syntaxhighlight lang="r">> head(ga.data, n = 10) country sessions 1 Russia 115167 2 Ukraine 25166 3 Belarus 8361 4 Kazakhstan 4252 5 Netherlands 1565 6 Moldova 980 7 United States 681 8 Armenia 515 9 Latvia 463 10 Kyrgyzstan 392</syntaxhighlight>

Рассмотрим более подробно география посещений по городам РФ:

КодR

<syntaxhighlight lang="r">> ga.data <- ga$getData(ids = id, start.date = "2014-03-24", end.date = "2014-04-23", + metrics = "ga:sessions", dimensions = "ga:country,ga:city", + sort = "-ga:sessions", filters = "ga:country==Russia;ga:city!=(not set)")</syntaxhighlight>

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

КодR

<syntaxhighlight lang="r">> head(ga.data, n = 10) country city sessions 1 Russia Moscow 18760 2 Russia Saint Petersburg 14660 3 Russia Novosibirsk 4359 4 Russia Yekaterinburg 3972 5 Russia Samara 3916 6 Russia Kazan 2071 7 Russia Rostov-on-Don 1875 8 Russia Krasnodar 1816 9 Russia Perm 1753 10 Russia Krasnoyarsk 1715</syntaxhighlight>

Примечания

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