Google Analytics API v4 + R programski jezik

Google analitika je jedna od najpopularnijih alatki za setup, reporting i analizu podataka koji se tiču sajta.

Google Analytics takođe nudi besplatan pristup API (application programming interface) sa  cilj automatizacije i eksportovanja podataka iz GA servera.

Tutorijal iz nastavka je pre svega za sve one koji imaju napredno znanje i aktivno koriste Google Analytics alat i naravno za sve one koji bi želeli da nauče kako da povežu ovaj alat kao dodatni izvor podataka kroz R programski jezik.

Važno je takođe posedovati i osnovno znanje R-a.

U nastavku su samo neke od osnovnih primera vizualizacija koje je moguće uraditi sa podacima. Trudiću se da se vremenom broj primera poveća.

Kako bi uspešno iskoristili ovaj tutorijal pretpostavka je da imate pristup Google Analytics nalogu i da je vaš Gmail nalog uspešno povezan tj. da mu je dozvoljeno da pristupi GA alatu.

R programski jezik

R je programski jezik koji je jedan od najbrže rastućih jezika za statističku analizu podataka. Sa bazom korisnika koja raste (trenutno između 1-2 miliona) ima široku upotrebu kod statističara, analitičara i data minera.

U ovom tutorijalu je samo mali deo onoga šta možete da uradite koristeći R programski jezik.

  • najbrže rastući jezik za statističku analizu podataka
  • besplatan je
  • kvalitetne biblioteke
  • puno materijala za edukaciju i učenje (blogovi, kursevi, knjige)
  • velika zajednica širom interneta
  • spreman za razne platforme (Windows, Mac, Unix)

Takođe neki od razloga zašto da koristite R umesto Excela:

  • Uvid u svaki deo analize
  • Lakše pregled i ispravljanje grešaka
  • Lakša reprodukcija i ponovno koriščenje analize
  • Objedinjavanje podataka iz različitih izvora
  • Moćan način za analizu i vizualizaciju podataka
  • Automatsko povlačenje podataka kroz Core Reporting API
  • Ušteda vremena

Posit (aka R Studio)

R Studio predstavlja jedan od najkorišćenijih IDEs i najlakši način da počnete sa R-om. Sa njim možete pisati, editovati i pokrenuti svoj R kod, a takođe i videti outpute koda i vizualizacije. Besplatnu verziju možete skinuti na ovom linku download.

Setup Google Analytics API v4 + R

googleAnalyticsR - Google Analytics API to R

Kako bi se uspešno povukli podaci sa Google Analytics servera i uvukli u R Studio kroz API biće potrebno da se upotrebi eksterna biblioteka.

Ona će vam pomoći da pre svega autorizujete konekciju, povučete podatake i kasnije kroz dataframe analizirate iste.

googleAnalyticsR – Google Analytics API to R

Trenutno jedna od najboljih eksternih biblioteka za povlačenje podataka iz Google Analytics u R je definitivno googleAnalyticsR biblioteka koju je kreirao Mark Edmonson.

On je dobro poznat analitičkoj zajednici pre svega po svom fenomenalnom doprinosu i razvoju kvalitetnih biblioteka koje se prevashodno tiču Google stack-a (googleAuthR, bigQueryR,  searchConsoleR to name a few).

googleAnalyticsR karakteristike:

  • Prva Google Analytics Reporting v4 API biblioteka za R programski jezik
  • v4 uključuje dinamičke calculated metrike, pivote, histograme, batching itd
  • v4 API Explorer
  • Multi user log-in za Shiny App
  • Integracija sa BigQuery Google Analytics Premium/360
  • Jednostavna autentifikacija kroz googleAuthR
  • Automatski batching i izbegavanje sampling-a

UPDATE: Podrška ovog blog posta je došla i od strane Mark Edmonsona lično, kreatora googleAnalyticsR biblioteke.

googleAnalyticsR - Google Analytics API to R tutorials

Pisanje skripte i koda u R-u

Nakon što ste instalirali R i RStudio, potrebno je da instalirate potrebne biblioteke i da ih nakon toga učitate.

Kada ste ovaj početni setup uspešno uradili, na redu je autorizacija vašeg Gmail naloga sa Google Analytics alatom.

Ako ste sve dobro uradili, potrebno je da definišete Google Analytics View ID a najlakše da dođete do ovog ID-a je da pogledate Account listu svih GA naloga za koje imate pristup za vašu email adresu.

## Installing the libraries
install.packages("googleAuthR")
install.packages("googleAnalyticsR")
install.packages("tidyverse")

## Loading libraries
library("googleAuthR")
library("googleAnalyticsR")
library("tidyverse")
library("dplyr")

## Gmail authorization with GA servers
ga_auth()

## Google Analytics Account List
account_list <- google_analytics_account_list()

## Google Analytics View ID 
GA_id <- XXXXXXXX

Analiza podataka

Nakon što ste uspešno instalirali potrebne pakete i autentifikovali se, sledeći korak je povlačenje podataka direktno iz Google Analytics API-a.

U nastavku je napisan upit (query) pod nazivom df_google_merch_store koji se odnosi na povlačenje podataka sa GA servera za željeni period od početka 2015. godine pa do jula meseca 2018. godine.

U primeru su podaci iz Google Analytics demo naloga Google Merchandise Store koji je dostupan svim korisnicima za vežbu.

Za metriku je definisana poseta (session) dok je za dimenziju definisan datum (date).

Pretpostavka je da znate sve moguće kombinacije dimenzija i metrika koje se nalaze u Google Analytics-u a ako hoćete da ih istražujete to možete da uradite na zvaničnoj stranici Dimensions & Metrics Explorer.

Svakako sve dostupne podatke iz GA i njihovo objašnjenje sam pominjao i u ovom tekstu.

## Sessions by Date Query  
df_google_merch_store <- google_analytics(GA_id, 
                                date_range = c("2015-07-01","2018-07-27"),  
                                metrics = c("sessions"), 
                                dimensions = c("date"),
                                anti_sample = TRUE)

## Head of df_google_merch_store
head(df_google_merch_store)

## Descriptive statistics of df_google_merch_store
summary(df_google_merch_store)

Vizualizacija podataka sa ggplot2 bibliotekom

R programski jezik ima jako puno interesantnih i kvalitetnih biblioteka za vizualizaciju podataka.

Jedna od najpopularnijih je ggplot2 koja je izrađena na osnovu Grammar of Graphics i ona je trenutno deo Tidyverse paketa.

Line chart

U nastavku je kod za line chart koji prikazuje broj poseta po mesecima i zasnovan je na osnovu ggplot2 biblioteke.

## Line chart plot using ggplot2 and pipe operator from dplyr library
line_plot <- df_google_merch_store %>% 
                    ggplot(aes(x = date, y = sessions)) +
                    geom_line() +
                    geom_smooth(method="lm", se = TRUE, color = "blue") +
                    labs(title = "Sessions Overview, 2015-2018",
                         subtitle = "The data in the Google Analytics demo account is from the Google Merchandise Store.",
                         caption = "Source: Google Analytics", 
                         x = "Date", y = "Sessions") +
                    theme_minimal()
line_plot

line chart google analytics r programming

Histogram

Distribucija poseta za prethodno definisani period je u nastavku.

## Histogram plot
histogram_plot <- df_google_merch_store  %>%
                  ggplot(aes(x = sessions)) +
                  geom_histogram(bins = 80, fill = "steelblue") + 
                  geom_vline(aes(xintercept=mean(sessions, na.rm=T)),   # Ignore NA values for mean
                              color="red", linetype="dashed", size=1) +
                  labs(title = "Sessions Distribution, 2015-2018",
                       subtitle = "The data in the Google Analytics demo account is from the Google Merchandise Store.",
                       caption = "Source: Google Analytics") +
                  theme_minimal()

histogram_plot

histogram google analytics v4 api r programming

Scatter plot

Grafički prikaz datuma i poseta u poslednje 3 godine.

## Sessions by Date Query 
df_google_merch_store2 <- google_analytics(GA_id, 
                                           date_range = c("2018-01-01","2018-07-27"), 
                                           metrics = c("sessions", "transactions", "pageviews", "bounceRate"), 
                                           dimensions = c("date", "yearMonth"), 
                                           anti_sample = TRUE)

## Scatter plot
scatter_plot <- google_merch_store_2  %>%
  ggplot(aes(x = sessions, y = transactions)) +
  geom_jitter() +
  geom_smooth(method=lm) +  # Add linear regression line (by default includes 95% confidence region)
  labs(title = "Relationship between two variables (Sessions and Transactions), 2015-2018",
       subtitle = "The data in the Google Analytics demo account is from the Google Merchandise Store.",
       caption = "Source: Google Analytics") +
  theme_minimal()

scatter_plot

google analytics r api scatter plot

Bar chart

## Bar plot
bar_plot  <- df_google_merch_store2 %>% 
                   ggplot(aes(x = yearMonth, y = sessions)) +
                   geom_bar(stat = "identity", fill = "steelblue") +
                   labs(title = "Sessions Overview, 2015-2018",
                     subtitle = "A session is a group of user interactions with your website that take place within a given time frame.",
                     caption = "Source: Google Analytics", 
                     x = "yearMonth", y = "Sessions") +
                   geom_text(aes(label = paste(round(sessions,1), "", sep = ""), 
                   family = "Arial", fontface = "bold", size = 14, position = "center"), 
                   vjust = 1.6, color = "white", size = 4) +
                   theme_minimal()
bar_plot

sessions google analytics api4 r programming language

Box plot

U primeru je vizualizacija distribucije saobraćaja tokom dana u nedelji. Da bi se dobio ovaj grafikon, biće potrebno da se napiše poseban upit koji će povući druge podatke koji se odnose pre svega na dane u nedelji. Treba napomenuti da Google Analytics API za dimenziju dayOfWeek ima sledeće značenje:

  • 0-Sunday
  • 1-Monday
  • 2-Tuesday
  • 3-Wednesday
  • 4-Thursday
  • 5-Friday
  • 6-Saturday
## Query Sessions by Day of Week
df_google_merch_store_4 <- google_analytics(GA_id, 
                                         date_range = c("2016-01-01","2016-09-30"), 
                                         metrics = c("transactions"), 
                                         dimensions = c("dayOfWeekName","hour", "deviceCategory"),
                                         anti_sample = TRUE)
## Box plot (desktop)
box_plot_desktop <- df_google_merch_store_4 %>%
                    filter(deviceCategory == "desktop") %>%
                    ggplot(aes(x = dayOfWeekName, y = transactions)) + 
                    geom_boxplot(fill = "steelblue") + 
                    scale_x_discrete(limits = c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')) + 
                    labs(title = "Desktop transactions distribution Overview, 2015-2018",
                         subtitle = "Distribution of data based on the five number summary: minimum, first quartile, median, third quartile, and maximum.",
                         caption = "Source: Google Analytics", 
                         x = "yearMonth", y = "Transactions") +
                    theme_minimal()
box_plot_desktop

box plot google analytics api 4 r programming language

Saobraćaj po satima i danima u nedelji

Sledeći pregledom ćemo dobiti odgovor na pitanje kako se saobraćaj preko desktopa menja tokom dana po satima i po danima u nedelji.

## Query Sessions by day of week and hour 
weekly_data <- google_analytics(GA_id, 
                                date_range, 
                                metrics = c("sessions"), 
                                dimensions = c("deviceCategory", "dayOfWeekName", "hour"), 
                                anti_sample = TRUE)

## Manipulation using dplyr
weekly_data_avg_sessions <- weekly_data %>%
              filter(deviceCategory == "desktop") %>%
              group_by(deviceCategory, dayOfWeekName, hour) %>%
              summarise(avg_sessions_per_day = mean(sessions)) 

## Plotting using ggplot2
daily_weekly_plot <- weekly_data_avg_sessions %>%
        ggplot(aes(hour, avg_sessions_per_day, fill = deviceCategory, group = deviceCategory)) + 
        geom_area(position = "stack", fill = "steelblue") + 
        labs(title = "Desktop changes over the week, 2018",
        subtitle = "Average number of visits per hour and day filtered by only desktop sessions",
        caption = "Source: Google Analytics", 
        x = "hour", y = "avg_sessions_per_day") +
        theme_minimal() + 
        facet_wrap(~dayOfWeekName, ncol = 3) 

daily_weekly_plot

google analytics api v4 week hour line plot

Procenat učešća poseta i transakcija

Super primer scatter plota gde je prikazan odnos poseta i transakcija u procentima.

Inspiraciju za ovaj primer sam pronašao ovde http://bit.ly/2DpWUAV uz malu modifikaciju sa moje strane.

Inače u upitu je povučena i metrika revenue koje se takođe može kombinovati i na primer uraditi poređenje procenta transakcija i procenta prihoda (revenue) po kanalima.

## GA Query
merch_store <- google_analytics(GA_id, 
                                     date_range, 
                                     metrics = c("sessions", "transactions", "transactionsRevenue"), 
                                     dimensions = c("channelGrouping"),
                                     anti_sample = TRUE)

## Cleaning & creating calculated metrics
merch_store_clean <- merch_store %>%
  mutate(session_share = sessions / sum(sessions),
         sales_share = transactions / sum(transactions),
         revenue_share = transactionRevenue / sum(transactionRevenue)) %>%
  arrange(-session_share) %>%
  transmute(
    channel = channelGrouping,
    sessions,
    users,
    sales = transactions,
    revenue = transactionRevenue,
    session_share,
    session_addup = cumsum(session_share),
    sales_share,
    sales_addup = cumsum(sales_share),
    revenue_share,
    revenue_addup = cumsum(revenue_share),
    cr_sessions = transactions / sessions,
    cr_users = transactions / users,
    rps = revenue / sessions,
    rpu = revenue / users)

head(merch_store_clean)

## Plotting
p <- merch_store_clean %>%         
  ggplot(aes(x = session_share, y = sales_share, color = channel)) +
  geom_abline(slope = 1, alpha = 1/10) +
  geom_point(alpha = 5/7, size = 8) + # specifying the type of the plot we want +
  scale_x_continuous(name = "Share of sessions", limits = c(0, NA), labels = percent) +
  scale_y_continuous(name = "Share of sales", limits = c(0, NA), labels = percent) +
  scale_color_brewer(palette="Spectral") +
  labs(title = "Relationship between sessions and sales by channels, 2018",
                caption = "Source: Google Analytics") +
  theme_minimal()
p

google analytics api scatter plot r programming language

Heatmaps

Svi vole heatmaps zar ne?

U prilogu je jedan konkretan primer prikaza broja pregledanih stranica (pageviews) po danima u nedelji i satima.

## Query Pageviews by day of week and hour
df_pv_dow_hour <- google_analytics(GA_id, 
                          date_range,
                          metrics = c("pageviews"),
                          dimensions = c("dayOfWeekName","hour"),
                          anti_sample = TRUE)

## Heatmap with ggplot and viridis colour palette
heatmap_day_of_week <- df_pv_dow_hour %>% 
           ggplot(aes(x = hour, y = dayOfWeekName, fill = pageviews)) + 
           geom_tile(color='White', size=0.1) +
           scale_fill_viridis(option = "B") +
           scale_y_discrete(limits = c('Sunday', 'Saturday','Friday', 'Thursday', 
                                       'Wednesday', 'Tuesday', 'Monday')) +
           labs(x = "Hour", 
                y = "Day of Week",
                title = "Heat Map by Hour and Day of Week ") +
           coord_equal()
           
heatmap_day_of_week

heatmap google analytics day of week

Zaključak

Verujem da ako ste došli do kraja tutorijala da ste uspeli uspešno da ispratite sve korake i da kreirate vizualizacije koje se tiču vaših podataka iz Google analitike.

Za dodatna pitanja i predloge budite slobodni da me kontaktirate. Svakako ću se truditi da u narednom periodu ovaj post obogatim i dodatnim primerima.

Srećno analiziranje (programiranje)!

O autoru

Dušan Milošević

Curious digital analyst passionate about analytics, funk/disco music and new travel destinations. Always chasing the spark and searching for signal in the noise, combining technical know-how with digital marketing looking for actionable insights.
Proactive thinker, with the ability to adapt and learn quickly. Collaborative, with cross-functional team experience working with product, development and client-side teams.

Dodaj komentar

This site uses Akismet to reduce spam. Learn how your comment data is processed.