Skip to content

Instantly share code, notes, and snippets.

@mbaersch
Last active May 2, 2022 12:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mbaersch/e19d9c947e55b2b5b49a920ce6a4c268 to your computer and use it in GitHub Desktop.
Save mbaersch/e19d9c947e55b2b5b49a920ce6a4c268 to your computer and use it in GitHub Desktop.
Beispielscript zum Export von Daten aus Google Universal Analytics mittels R
#---------------------------------------------------------------------------------
# Beispielscript: Export von Daten aus Google Universal Analytics mittels R
#---------------------------------------------------------------------------------
# Dieses Beispiel gehört zum Blogpost unter
# https://www.markus-baersch.de/blog/universal-analytics-daten-sichern-was-und-wie/
# Damit es nutzbar ist:
# - R installieren: https://cran.rstudio.com/
# - RStudio installieren: https://www.rstudio.com/
# - Dieses Script in RStudio öffnen
# - Anweisungen im Script folgen und Zeilen einzeln durch STRG + ENTER
# ausführen, um die Schritte nachvollziehen zu können
#---------------------------------------------------------------------------------
# SETUP
#---------------------------------------------------------------------------------
# Hier die eigene ID eintragen - kann aus dem Query Exporer in der ID Zeile
# abgelesen werden (siehe Blogpost).
checkId = "1234567890"
# HINWEIS: Dieses Script verwendet die "öffentliche" Anbindung von googleAnalyticsR
# (https://code.markedmondson.me/googleAnalyticsR/index.html).
# Es gibt eine Alternative, die ggf. den eigenen Datenschutzanforderungen gerechter
# wird dafür aber etwas mehr Aufwand bedeutet. Siehe dazu:
# https://code.markedmondson.me/googleAnalyticsR/articles/setup.html#professional-mode-your-own-google-project
# Datumsbereich wählen. Hier ein Beispiel, das vom akt. Datum abhängt und
# 90 Tage seit gestern abruft:
# c(Sys.Date()-91, Sys.Date()-1)
# Es können aber feste Zeiträume im Format "yyyy-mm-dd" angegeben
# werden, was hier deutlich sinnvoller erscheint. Hier als Beispiel das Jahr 2021
checkDateRange = c("2021-01-01", "2021-12-31");
#---------------------------------------------------------------------------------
# VORBEREITUNG
#---------------------------------------------------------------------------------
# die folgende Zeile einmalig ausführen, um das Paket zum Zugriff auf die GA API
# zu installieren. Dazu das "#" vor der Zeile entfernen und STRG+ENTER zum
# Ausführen der Zeile verwenden
#install.packages("googleAnalyticsR", dependencies=TRUE)
# Weitere Infos und Doku siehe
# https://cran.r-project.org/web/packages/googleAnalyticsR/googleAnalyticsR.pdf
#---------------------------------------------------------------------------------
# Bibliothek laden und Zugriff erlauben
#---------------------------------------------------------------------------------
library(googleAnalyticsR)
ga_auth()
#---------------------------------------------------------------------------------
# DATEN ABRUFEN - Beispiel 1: User und Sessions nach Monat und Kanal
#---------------------------------------------------------------------------------
# Dokumentation aller Optionen der hier verwendeten Funktion:
# https://code.markedmondson.me/googleAnalyticsR/articles/v4.html
# Wesentlich ist in diesem Beispiel die Verwendung von anti_sample = TRUE, um ggf.
# in mehreren Aufrufen nacheinander alle Daten abzurufen, wenn dies möglich ist (auch
# das hat seine Grenzen). Hinweis: Es mag sein, dass Hinzufügen von slow_fetch = TRUE
# zu den Optionen bessere Ergebnissen bei großen Datenmengen liefert
ga_channel_data = google_analytics(viewId = checkId,
date_range = checkDateRange,
metrics = c("sessions","users"),
dimensions = c("channelGrouping","yearMonth"),
anti_sample = TRUE)
#---------------------------------------------------------------------------------
# DATEN ABRUFEN - Beispiel 2: Seiten aus dem Blog für den o. a. Zeitraum gesamt
#---------------------------------------------------------------------------------
# Je nach Umfang / Vorhaben müssen ggf. Filter gesetzt werden. Dies passiert
# in folgendem Format, hier z. B. als Dimensionsfilter nur für Seitenpfade,
# die (mit /blog/) beginnen:
pg_filter <- dim_filter(dimension="pagePath",operator="BEGINS_WITH",expressions="/blog/")
f_clause <- filter_clause_ga4(list(pg_filter))
# Hilfe zu Filtern finden sich ebenso im Query Explorer
# (siehe Blogbeitrag) - weitere Optionen der Funktion siehe unten
ga_blogpage_data = google_analytics(viewId = checkId,
date_range = checkDateRange,
metrics = c("pageviews","entrances", "bounces"),
dimensions = c("pagePath", "yearMonth"),
dim_filters = f_clause,
anti_sample = TRUE)
#---------------------------------------------------------------------------------
# AUSGABE in Console
#---------------------------------------------------------------------------------
# Einfache Ausgabe einer Übersicht und der ersten Zeilen beider Tabellen.
# Die Ergebnisse beider Abfragen finden sich rechts oben im "Environment" Fenster
# und kann dort per Klick auf ga_channel_data bzw. ga_blogpage_data geöffnet
# und betrachtet werden etc.
summary(ga_channel_data)
head(ga_channel_data)
summary(ga_blogpage_data)
head(ga_blogpage_data)
#---------------------------------------------------------------------------------
# ERGEBNISSE ALS CSV SPEICHERN
#---------------------------------------------------------------------------------
# Soll eine Speicherung auf dem eigenen Rechner erfolgen, die folgenden Zeilen
# ausführen. Dort entweder den Speicherort und Dateinamen anpassen - sonst landet
# das Ergebnis im Home- bzw. Arbeits-Ordner, der sehr wahrscheinlich gerade unter
# "Files" rechts unten geöffnet ist
write.csv2(ga_channel_data, file="universal_export_channels.csv")
write.csv2(ga_blogpage_data, file="universal_export_blogpages.csv")
# Dieser Vorgang kann nun durch mehrfachen Aufruf der google_analytics Funktion
# mit anderen Parametern wiederholt werden und jedes Ergebnis wie oben
# mit passendem Dateinamen gespeichert werden
@mbaersch
Copy link
Author

mbaersch commented May 2, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment