Site iconSite icon Anakeyn

Analyse en Composantes Principales sur les canaux de trafic Web avec R

Cet article est le dernier d’une série sur l’analyse des données Google Analytics de l’association Networking Morbihan avec R.

Dans cet article, nous allons réaliser une Analyse en Composantes Principales sur la variable canal de trafic.

A quoi sert une Analyse en Composantes Principales ?

Une Analyse en Composantes Principale – ACP – ou en Anglais PCA (Principal Component Analysis) est une méthode d’analyse de données qui permet d’explorer les liaisons entre les variables (pour nous ici les canaux : direct, referral, search, social, webmail) et les ressemblances entre individus (pour nous les pages Web : nous en avons 1262 différentes) .

L’ACP nous donne les informations suivantes que l’on va pouvoir visualiser :

Exemple de visualisation de variables

Mathématiquement cela consiste à transformer des variables liées entre elles (dites « corrélées ») en nouvelles variables décorrélées les unes des autres.

Ces nouvelles variables sont nommées « composantes principales », ou axes principaux.

Cela permet notamment de réduire le nombre de variables et de rendre l’information plus lisible si l’on a un jeu de données important avec de nombreuses variables.

l’ACP peut servir aussi à la vérification d’un jeu de données en identifiant les valeurs aberrantes (voir graphique ci-dessous) ou d’étape préalable à d’autres traitements statistiques que nous n’aborderons pas ici.

ACP détection de valeurs aberrantes

Procédure à suivre :

Logiciel R :

Téléchargez le Logiciel R sur le site du CRAN https://cran.r-project.org/, ainsi que l’environnement de développement RStudio ici : https://www.rstudio.com/products/rstudio/download/.

Jeu de données

Comme dans les précédents articles, nous utiliserons le jeu de données de Networking Morbihan pour illustrer notre propos. Vous aurez besoin de 3 fichiers à dézipper dans le même répertoire que le code R :

Vous pouvez aussi construire votre jeu de données à partir de vos propres données Google Analytics. Auquel cas, suivez les procédures que nous avions décrites dans des articles précédents :

Code Source :

Vous pouvez récupérer les différents morceaux de code ci-dessous ou récupérer tout le code gratuitement dans notre boutique : https://www.anakeyn.com/boutique/produit/scipt-r-acp-canaux-web/

Chargement des bibliothèques utiles

##########################################################################
# Auteur : Pierre Rouarch 2019 - Licence GPL 3
# PCATrafficChannelsR
# Analyse en Composantes principales canaux trafic Web.
# Pour illustrer notre propos nous utiliserons le jeu de données de 
# l'association Networking-Morbihan 
##########################################################################
#Packages et bibliothèques utiles (décommenter au besoin)
##########################################################################
#install.packages("lubridate")  #si vous ne l'avez pas
#install.packages("tseries")
#install.packages("devtools")
#devtools::install_github("twitter/AnomalyDetection")  #pour anomalyDetection de Twitter
#devtools::install_github('sinhrks/ggfortify') #pour ggfortify
#install.packages("XML")
#install.packages("stringi")
#install.packages("BSDA")
#install.packages("BBmisc")
#install.packages("stringi")
#install.packages("FactoMineR")
#install.packages("factoextra")
#install.packages("rcorr")

#install.packages("lubridate")  #si vous ne l'avez pas
library (lubridate) #pour yday
#library(tseries) #pour ts
library(AnomalyDetection) #pour anomalydetectionVec
#library(XML) # pour xmlParse
#library(stringi) #pour stri_replace_all_fixed(x, " ", "")
library(BSDA)  #pour SIGN.test 
library(BBmisc) #pour which.first
#install.packages("stringi")
library(stringi) #pour stri_detect
library(ggfortify)  #pour ploter autoplot type ggplot
#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
library(FactoMineR) #pour ACP
library(factoextra)  #compléments ACP FactoMineR

Récupération des fichiers dfPageViews.csv, myArticles.csv et mySourcesChannel.csv

##########################################################################
# Récupération des fichiers
##########################################################################
dfPageViews 

Données Globales :

Préparation des données et calcul de l’ACP.

##########################################################################
# Pour le traffic Global on ajoute les canaux
##########################################################################
#recuperation de la variable channel dans le dataframe 
#principal par un left join.
dfPVChannel %   #on ne garde que PagePath et channel
  group_by(pagePath, channel) %>%   #groupement par cleanLandingPagePath et channel
  mutate(pageviews = n()) %>%                   #on décompte les pages vues
  unique() %>%                                  #découblonnement
  spread(key=channel, value=pageviews, fill = 0, convert = FALSE, drop = TRUE,
         sep = NULL)  #eclatement du facteur channel en variables 


#Calcul de l'ACP avec FactoMineR
res.pca = PCA(PVDataForACP[, -1], scale.unit=TRUE, ncp=5, graph=F) 
summary(res.pca) #resumé des données


#############################Plots Simples individus et variables.
#plot(res.pca, choix = "ind")  #individus
#plot(res.pca, choix = "var")  #variables


Screeplot pour toutes les pages.

Il s’agit du graphique permettant de visualiser le pourcentage de variance expliquée en fonction des dimensions.

#########################   ScreePlot ################################################
ScreePlot 

Pourcentage de variance expliquée selon les dimensions : toutes les pages

Diagramme des variables pour toutes les pages :

#########################  Diagramme des variables  ################################################
# Colorer en fonction du cos2: qualité de représentation
VarPlot 

Pourcentage de variable expliquée selon les dimensions : pages de base

Mis à part Webmail qui diffère légèrement, tous les autres canaux sont pratiquement tous sur l’axe de la composante 1. Cela montre qu’ils sont fortement et positivement corrélés.

Le fait que Webmail diffère pourrait indiquer que certaines pages bénéficient de plus de trafic via email que d’autres. Ce qui est la réalité.

Le cos² indique la qualité de représentation des variables sur le graphique de l’ACP. Il est calculé comme étant les coordonnées au carré: var.cos2 = var.coord * var.coord. Ici toutes les variables sont très bien représentées : > 0,99.

Trafic de base

Création du jeu de données pour le Trafic de BAse et calcul de l’ACP

##########################################################################
# Pour le traffic de base
##########################################################################
#Recréation du trafic de base
#récupere les chemins des pages pour les comparer dans dfPageViews
myArticles$pagePath %   #on ne garde que PagePath et channel
  group_by(pagePath, channel) %>%   #groupement par cleanLandingPagePath et channel
  mutate(pageviews = n()) %>%                   #on décompte les pages vues
  unique() %>%                                  #découblonnement
  spread(key=channel, value=pageviews, fill = 0, convert = FALSE, drop = TRUE,
         sep = NULL)  #eclatement du facteur channel en variables 


#Calcul de la
res.pca = PCA(BasePVDataForACP[, -1], scale.unit=TRUE, ncp=5, graph=F) 
summary(res.pca) #resumé des données

Graphique de pourcentage de variance expliquee pour le trafic de base

#########################   ScreePlot ################################################
ScreePlot 

Pourcentage de variable expliquée selon les dimensions : pages de base

Diagramme des variables pour les pages de base

#########################   Diagramme des variables ################################################
# Colorer en fonction du cos2: qualité de représentation
VarPlot 

Diagramme des variables, pages de base.

Toutes les sources de trafic sont fortement liées pour les pages de base.

Pages Direct Marketing

Preparation des donnees pour les pages direct marketing et calcul de l’aCP

##########################################################################
#regardons pour le trafic Direct  Marketing uniquement i.e le traffic dont
# la source a dirigé vers une page Articles Marketing 
##########################################################################
#Construction du trafic Direct Marketing
#on garde uniquement les landingPagePath de nos articles  : 
#DM = Direct Marketing
patternArticlesToKeep %   #on ne garde que PagePath et channel
  group_by(pagePath, channel) %>%   #groupement par cleanLandingPagePath et channel
  mutate(pageviews = n()) %>%                   #on décompte les pages vues
  unique() %>%                                  #découblonnement
  spread(key=channel, value=pageviews, fill = 0, convert = FALSE, drop = TRUE,
         sep = NULL)  #eclatement du facteur channel en variables 



res.pca = PCA(DMPVPVDataForACP[, -1], scale.unit=TRUE, ncp=5, graph=F) 
summary(res.pca) #resumé des données

Graphique de pourcentage de variance expliquee pour le trafic DIRECT MARKETING

#########################   ScreePlot ################################################
ScreePlot 

Pourcentage de variance expliquée : pages direct marketing

Diagramme des variables pour les pages DIRECT MARKETING

########################   Diagramme des variables ################################################
# Colorer en fonction du cos2: qualité de représentation
VarPlot 

Diagramme des variables : pages direct marketing

Le fait que search se détache pourrait indiquer que certaines pages on un trafic search différencié par rapport aux autres.

Et vous, qu’obtenez-vous avec les données de votre site ?

A bientôt,

Pierre

Quitter la version mobile