Partager la publication "Nettoyage du Spam dans Google Analytics avec R – Partie I"
Dans un article précédent nous avions vu comment nettoyer le spam dans les données de Google Analytics « à la main » avec les segments.
Il serait judicieux de pouvoir importer les données via l’API de Google Analytics et de les nettoyer au moyen d’un programme, ici en R, puis ensuite de pouvoir traiter ces données avec des analyses plus poussées que celle fournies par Google Analytics.
Cet article pouvant être long nous l’avons divisé en deux parties.
De quoi aurons nous besoin ?
Logiciel R
Comme précédemment, afin de pouvoir tester le code source de cette démonstration nous vous invitons à télécharger Le Logiciel R sur ce site https://cran.r-project.org/, ainsi que l’environnement de développement RStudio ici : https://www.rstudio.com/products/rstudio/download/.
Bibliothèque googleanalyticsR
Cette bibliothèque, dont nous avons déjà parlé dans cet article vous permettra d’accéder facilement à vos données dans Google Analytics
Création d’un projet sur la console Google Developpers
Dans le même article précédent nous avions décrit comment créer un Projet sur la Console Google et comment récupérer ses identifiants. Merci de vous y référer.
Jeu de données
Comme pour l’article « Comment nettoyer le spam dans Google Analytics avec les segments » et l’article « Importer les données de Google Analytics API avec Python Anaconda » nous reprendrons le jeu de données de Networking Morbihan.
Code Source
Vous pouvez copier/coller les codes sources suivants pour les tester dans votre propre fichier de script R.
Vous pouvez aussi télécharger gratuitement les sources et les fichiers nécessaires dans notre boutique : https://www.anakeyn.com/boutique/produit/script-r-nettoyage-spam-dans-google-analytics/
Connexion à l’API Google Analytics via googleanalyticsR
Dans cette première partie nous reprenons ce que nous avions fait précédemment afin de récupérer l’ID de view de Google Analytics qui nous intéresse.
########################################################################## # Installer la version stable ou en cours de dev de googleAnalyticsR # décommenter la ligne désirée : # version stable : # install.packages("googleAnalyticsR", dependencies = TRUE) # Version en cours de dev : # devtools::install_github("MarkEdmondson1234/googleAnalyticsR") # googleAnalyticsR fournit par défaut un ID Client et un Code secret # sinon vous pouvez utiliser les votres pas les notres : # ceux-ci sont faux myclient_id <- "XXXXXXXXXXXtvh1eh0msnekhkeaeb01vtuvpq8j.apps.googleusercontent.com" myclient_secret <- "XXXXXXXXXXX9NS-R3pKXDa" ########################################################################## #Initialiser les codes OAuth avant de charger la bibliothèque #googleAnalyticsR options(googleAuthR.client_id = myclient_id ) options(googleAuthR.client_secret = myclient_secret ) #Optionnel : indiquez l'étendue de l'utilisation des API Google #options(googleAuthR.scopes.selected = "https://www.googleapis.com/auth/analytics") library(googleAnalyticsR) #! mettre mes info OAuth avant de recharger. ########################################################################## #connexion via son compte google (un navigateur va s'ouvrir lors # de la première connexion) ga_auth() #liste des comptes dans Google Analytics pour récupérer le code viewID account_list <- ga_account_list() account_list #Afficher la liste # Attention c'est l'ID de vue qu'il nous faut viewID ga_id <- account_list[1, 'viewId'] #Pour moi c'est la 1ere ligne de mes #vues dans Google Analytics
Quelques packages et données utiles
########################################################################## #Packages utiles #install.packages("tidyverse") #si vous ne l'avez pas #pour gggplot2, dplyr, tidyr, readr, purr, tibble, stringr, forcats #install.packages("forecast") #pour ma #Chargement des bibliothèques utiles library(tidyverse) #pour gggplot2, dplyr, tidyr, readr, purr, tibble, stringr, forcats library(forecast) #pour arima, ma, tsclean #QQ dates utiles FirstJuly2011 <- as.Date("2011-07-01") #début du site étudié the31thDec2018 <- as.Date("2018-12-31") #fin de l'étude.
Récupération des données pour filtrages
Afin de pouvoir filtrer le spam il sera nécessaire de récupérer des dimensions : hostname, browser, fullReferrer, sourceMedium, language, landingPagePath, pagePath dans Google Analytics.
########################################################################## # RECUPERATION DES DONNEES BRUTES POUR FILTRAGE ########################################################################## #Pour mémoire Dimensions & Metrics Explorer #https://developers.google.com/analytics/devguides/reporting/core/dimsmets #Attention le nombre de dimensions est limité à 9 et de Metrics à 10. ############### gaPVAllYears <- google_analytics(ga_id, date_range = c(FirstJuly2011 , the31thDec2018), metrics = c( "Pageviews"), dimensions = c("date", "hostname", #pour filtrer le spam sur des nom d'hôtes non autorisés "browser", #pour filtrer les robots et browser curieux. "fullReferrer", #pour filtrer les fausses pages référentes "sourceMedium", #pour filtrer les crawlers spammers ou faux sites référents "language", #pour filtrer les langues suspectes "landingPagePath", #pour voir si la page est en entrée "pagePath", #page recherchée "keyword" #Peut être récupéré si Bing (et peut être autres moteurs) ), max = 100000 ) #on, récupère 51790 lignes. #split sourceMedium en source et medium gaPVAllYears <- separate(gaPVAllYears, sourceMedium, c("source", "medium"), " / ") # une ligne par observation : décomptage des Pageviews. gaPVAllYears <- gaPVAllYears %>% uncount(Pageviews) #Verifs head(gaPVAllYears, n=20) #visualison l'entête tail(gaPVAllYears, n=20) #visualison fin nrow(gaPVAllYears) #nombre de lignes 82559 on a le même décompte qu'avec Google Analytics en mode console.
Comme vous pouvez le voir le système a trouvé 82559 observations (comme dans notre article sur le nettoyage de Google Analytics via les segments).
Préparation des données pour les graphiques
Dans cette partie nous allons préparer les données pour pouvoir construire les graphiques illustratifs. Cliquez sur les graphiques pour les agrandir.
########################################################################## # Affichage des données brutes ########################################################################## #creation de la dataframe daily_data par jour dfDatePV <- as.data.frame(gaPVAllYears$date) colnames(dfDatePV)[1] <- "date" #change le nom de la colonne. daily_data <- dfDatePV %>% #daily_data à partir de dfDatePV group_by(date) %>% #groupement par date mutate(Pageviews = n()) %>% #total des pageviews = nombre d'observations / date as.data.frame() %>% #sur d'avoir une data.frame unique() %>% #ligne unique par jour. mutate(cnt_ma30 = ma(Pageviews, order=30)) %>% #variable moyenne mobile (moving average 30 jours) mutate(year = format(date,"%Y")) #creation de la variable year
Pages vues par jour
On va utiliser la bibliothèque ggplot.
#Graphique pages vues par jour ggplot(daily_data , aes(x=date, y=Pageviews, color=year)) + geom_line() + xlab("Année") + ylab("Nbre pages vues / jour") + labs(title = "Il semble y avoir une anomalie en fin 2016", subtitle = "Le trafic est bien au dessus du reste des observations.", caption = "Nombre de pages vues par jour depuis 2011 - Données Brutes", color = "Année") #sauvegarde du dernier ggplot ggsave(filename = "PV-s2011.jpeg", dpi="print") #sauvegarde du dernier ggplot.
Pages vues en moyennes mobiles sur 30 jours
#lissage avec des années de différentes couleurs. méthode loess ggplot(daily_data, aes(x=date, y=Pageviews, color=year)) + geom_smooth(method = "loess") + xlab("Année") + ylab("Nbre pages vues / jour lissage loess") + labs(title = "l'anomalie fin 2016 est bien visible", subtitle = "On constate en général une baisse de trafic l'été", caption = "Nombre de pages vues par jour depuis 2011 \n lissage méthode Loess par an - Données brutes", color = "Année") #sauvegarde du dernier ggplot. ggsave(filename = "PV-s2011-lissage-loess-an.jpeg", dpi="print")
Lissage Loess par an
La méthode Loess ou Régression Locale est expliquée ici par exemple.
#lissage avec des années de différentes couleurs. méthode loess ggplot(daily_data, aes(x=date, y=Pageviews, color=year)) + geom_smooth(method = "loess") + xlab("Année") + ylab("Nbre pages vues / jour lissage loess") + labs(title = "l'anomalie fin 2016 est bien visible", subtitle = "On constate en général une baisse de trafic l'été", caption = "Nombre de pages vues par jour depuis 2011 \n lissage méthode Loess par an - Données brutes", color = "Année") #sauvegarde du dernier ggplot. ggsave(filename = "PV-s2011-lissage-loess-an.jpeg", dpi="print")
Lissage Linéaire par an
#lissage linéaire par an ggplot(daily_data, aes(x=date, y=Pageviews, color=year)) + geom_smooth(method = "lm") + xlab("Année") + ylab("Nbre pages vues / jour lissage linéaire") + labs(title = "l'anomalie fin 2016 est bien visible", subtitle = "", caption = "Nombre de pages vues par jour depuis 2011 \n lissage linéaire par an - Données brutes", color = "Année") #sauvegarde du dernier ggplot. ggsave(filename = "PV-s2011-lissage-lm-an.jpeg", dpi="print")
Lissage linéaire sur toute la période
#lissage loess sur toutes les données depuis 2011 ggplot(daily_data, aes(x=date, y=Pageviews)) + geom_smooth(method = "loess") + xlab("Année") + ylab("Nbre pages vues / jour lissé") + labs(title = "Le trafic monte jusqu'en 2014 puis reste stable jusqu'en 2016.", subtitle = "Après 2016 la décroissance est forte.", caption = "Nombre de pages vues par jour depuis 2011 lissage méthode Loess - Données brutes") #sauvegarde du dernier ggplot. ggsave(filename = "PV-s2011-lissage-loess.jpeg", dpi="print")
Nous démarrons le nettoyage des données à proprement parlé dans la partie II de cet article.