Comme de nombreux sites Web, nous utilisons Google Analytics pour suivre les données relatives à nos visiteurs et à ce qu'ils font sur nos sites. Cependant, Tuts + est un peu plus grand que beaucoup de ces sites, et à notre taille, nous rencontrons quelques problèmes pour l’utiliser. Voici ce que j'ai appris sur l'utilisation de Google Analytics à grande échelle.
Google Analytics ne renverra que 500 000 lignes de données pour toute requête que vous envoyez (à quelques exceptions près). Si vous faites une demande dont le résultat couvre plus que cette quantité de données, Google Analytics utilisera une échantillon de 500 000 lignes et multipliez-le si nécessaire.
Par exemple, si vous avez cinq millions de visiteurs en septembre et que vous demandez à Google Analytics un rapport sur l'origine de ces visiteurs au cours du mois, Google Analytics sélectionnera 10% des données dont il dispose sur vos visiteurs de septembre. 10% des visiteurs venaient de, et multipliez ces chiffres par 10 pour générer le rapport qu'il vous donne.
Ce type d'extrapolation est une technique statistique courante et un moyen raisonnable pour Google de réduire le temps de traitement. Malheureusement, selon mon expérience, les rapports qui en résultent peuvent être trompeurs ou tout simplement faux..
Pour obtenir des données précises, la solution consiste à demander plusieurs tranches de données sur des plages de dates plus courtes, puis à les assembler. Reprenons l'exemple ci-dessus: si vous avez cinq millions de visiteurs en septembre, vous avez environ 500 000 visiteurs tous les trois jours. Cela signifie que si vous effectuez dix requêtes, chacune demandant trois jours de données, chaque rapport de trois jours fourni par Google Analytics ne sera pas échantillonné. Cousez-les ensemble et vous avez des données non échantillonnées pour tout le mois..
L’interface Web de Google Analytics est puissante et permet d’explorer vos données, d’obtenir une idée approximative des chiffres ou de partager rapidement un rapport avec des collègues. Cependant, découper les données en périodes plus courtes, les télécharger et les réassembler via l'interface Web est une tâche fastidieuse et sujette aux erreurs..
Il est beaucoup plus facile de le faire via l’API Core Reporting. L'explorateur de requêtes est un moyen relativement convivial de commencer à construire des requêtes, et il est facile de partir de là pour récupérer des données à l'aide de Python ou d'un autre langage de programmation..
Étant donné que vous devez assembler localement ces tranches de données, vous pouvez également les stocker dans un emplacement central où vous pouvez les interroger et les utiliser ultérieurement. J'utilise un clone de la base de données back-end Tuts +, modifié pour ajouter des tables supplémentaires pour les données Google Analytics. cela signifie que je peux associer les données de trafic à l'article concerné plutôt qu'à l'URL (ce qui est important, car nos URL canoniques ont changé au fil des ans)..
Cela signifie également que je peux exécuter des requêtes complexes telles que "affichez-moi les 100 publications avec le plus de pages vues au cours du dernier mois dans un ensemble spécifique de catégories", ou "obtenez la publication la plus populaire de chaque instructeur ayant publié au moins cinq publications". . Il est difficile de faire cela avec Google Analytics seul, car il ne comprend pas nos concepts de "catégorie" ou d '"instructeur". Un autre avantage à avoir tout dans une seule base de données est qu’il est beaucoup plus facile de l’intégrer dans des outils externes d’analyse et de visualisation comme Tableau..
Dans Google Analytics, chaque affichage de rapport est limité à 10 000 requêtes d'API par jour: c'est le nombre maximal de fois où je peux effectuer un ping pour obtenir des données via l'API. Nous avons 18 000 messages sur Tuts +, il faudrait donc deux jours pour obtenir des informations sur chaque élément séparément..
Ah, mais les vues vivent à l'intérieur d'une propriété et chaque propriété a une limite totale de 50 000 demandes d'API. Ainsi, notre propriété Tuts + est configurée avec un ensemble de vues contenant chacune toutes les informations de trafic relatives à un sujet unique (comme le code, la conception Web et l'entreprise) et une vue supplémentaire contenant toutes les informations de trafic de Tuts + dans leur ensemble. De cette façon, nous pouvons interroger la vue Code lorsque nous voulons des données sur les publications de code, la vue Conception Web lorsque nous voulons des données sur les publications de Conception Web, etc., et tirer le meilleur parti de la limite de 50 000 requêtes au lieu d’être restreinte à 10 000..
Pour cette carte interactive indiquant l'origine des lecteurs de nos didacticiels traduits, j'ai dû télécharger les statistiques de pages vues par pays pour environ 250 articles, allant de neuf à six mois (une moyenne d'environ 100 jours), pendant la journée. des tranches, c'est un total de 25 000 jours de données.
Je pourrais poser 25 000 questions à Google Analytics, mais je sais que:
J'ai donc adressé une requête unique à Google Analytics pour chacun des 250 articles, demandant le nombre total de pages vues pour chaque jour où l'article avait été mis en ligne. J'ai ensuite interrogé Google Analytics pour chaque message et chaque message. journée que la publication contienne plus de zéro consultation de page, demandant par page. Cela a considérablement réduit le nombre de requêtes que je devais effectuer dans l'ensemble, ce qui a accéléré les choses et évité de perdre autant de temps dans notre quota d'API Google Analytics..
J'ai constaté qu'il fallait généralement au moins cinq secondes à Google Analytics pour renvoyer le résultat d'une requête unique. Cela signifie qu'il faut plus de 24 heures pour traiter une demande pour chacun de nos 18 000 messages et plus, une par une! C'est pourquoi je les fais en parallèle à la place.
Google Analytics vous permet de soumettre jusqu'à 10 requêtes d'API par seconde. Vous pouvez donc soumettre 50 requêtes dans les cinq secondes nécessaires au traitement de votre première. Cela signifie que les grandes files de demandes peuvent être traitées 50 fois plus rapidement que si vous les transmettiez en série, ce qui transformait une attente de 24 heures en une pause déjeuner..
Si (ou plutôt lorsque votre code se bloque, si votre connexion Internet est interrompue, vous utilisez toutes les ressources de votre API Google Analytics ou si quelque chose se passe mal en téléchargeant une quantité considérable de données, doivent redémarrer le processus de téléchargement.
Assurez-vous que vous enregistrez les données sur le disque au fur et à mesure que vous les téléchargez (plutôt que de les stocker en mémoire) et assurez-vous que vous pouvez passer à l'endroit où vous vous êtes arrêté lorsque vous recommencez le téléchargement..
J'avais l'habitude d'écrire un tout nouvel ensemble de code spécialement conçu à cet effet chaque fois que je voulais demander des données que je n'avais pas demandées auparavant, copiées et collées à partir de scripts précédents, mais c'était contraignant et inflexible..
Finalement, j'ai codé une solution plus générale prenant en compte toutes les leçons que j'ai apprises ci-dessus et pouvant lire des fichiers de définition externes spécifiant les données que je souhaitais télécharger, comme cet exemple de téléchargement des données de visualisation de page pour toutes nos publications:
"SQL": "SELECT id, slug, section, earliest_date_requiring_data FROM messages ORDER BY earliest_date_requiring_data ASC", "Dimensions": "ga: date", "Métriques": "ga: pages vues", "Filtres": "ga: pagePath = ~ ^ / (articles | tutorials) / slug "," Slicing ":" Whole "," View ":" section "," OutputTemplate ":" id, ga: date, ga : pageviews "," OutputFile ":" all_post_pageviews.csv "," StartDate ":" earliest_date_requiring_data "," EndDate ":" LastSunday ",
Ces fichiers ne sont pas lisibles ni faciles à utiliser, mais ils sont relativement simples à comprendre et à créer si vous maîtrisez bien l’API de Google Analytics et la structure de notre base de données. Cela signifie que je peux créer de nouveaux ensembles d'instructions sans toucher au code sous-jacent qui les exécute, et je peux améliorer le code sous-jacent sans craindre de gâcher les téléchargements de données habituels..
Beaucoup de ces astuces donnent l'impression de décrire l'approche du bon sens quand je les regarde maintenant, et j'ai du mal à croire que je n'ai pas géré nos téléchargements de données de cette façon. Mais il a fallu beaucoup d’essais et d’erreur et de frustration pour parvenir à ce processus qui fonctionne pour nous; J'espère qu'en le partageant, je pourrai aider quelqu'un d'autre à contourner ce problème..