8 lezioni che ho imparato sull'uso di Google Analytics su scala

Come molti siti Web, utilizziamo Google Analytics per tenere traccia dei dati sui nostri visitatori e su cosa fanno sui nostri siti. Tuttavia, Tuts + è un po 'più grande di molti di questi siti e, a causa delle nostre dimensioni, ci imbattiamo in alcuni problemi. Ecco cosa ho imparato a lavorare su Google Analytics su larga scala.

1. Tagliare i dati in intervalli di tempo più piccoli per gestire i problemi di campionamento

Google Analytics restituirà solo 500.000 righe di dati per qualsiasi query inviata (con alcune eccezioni). Se fai una richiesta in cui il risultato copre più di questa quantità di dati, Google Analytics prenderà un campione di 500.000 righe e moltiplicare se necessario.

Ad esempio, se hai cinque milioni di visitatori a settembre e chiedi a Google Analytics un rapporto su dove questi visitatori provengono da tutto il mese, Google Analytics selezionerà il 10% dei dati che ha sui tuoi visitatori di settembre, capisci dove questi Il 10% dei visitatori proviene da, e moltiplica quei numeri per 10 per generare il rapporto che ti dà.

Questo tipo di estrapolazione è una tecnica statistica comune e un modo ragionevole per Google di ridurre i tempi di elaborazione. Sfortunatamente, secondo la mia esperienza, i rapporti risultanti possono essere fuorvianti o semplicemente errati.

La soluzione, per ottenere dati accurati, consiste nel chiedere più sezioni di dati su intervalli di date più brevi e quindi ricollegarli. Proseguendo con l'esempio precedente: se hai cinque milioni di visitatori a settembre, hai circa 500.000 visitatori ogni tre giorni. Ciò significa che se fai dieci query, ognuna delle quali richiede un valore di tre giorni di dati, ogni rapporto di tre giorni di Google Analytics ti verrà completamente non campionato. Uniscili insieme e hai dati non campionati per tutto il mese.

2. Impara a utilizzare l'API

L'interfaccia web di Google Analytics è potente e ideale per esplorare i tuoi dati, ottenere un'idea approssimativa dei numeri o condividere rapidamente un rapporto con i colleghi. Tuttavia, suddividere i dati in periodi di tempo più brevi, scaricarli e rimetterli insieme tramite l'interfaccia web è un dolore che richiede tempo e soggetto a errori nel collo.

È molto più semplice farlo tramite l'API Core Reporting. Query Explorer è un modo abbastanza amichevole per iniziare a costruire query, ed è facile andare da lì ad afferrare dati usando Python, o un altro linguaggio di programmazione.

3. Conservare i dati di Google Analytics scaricati in un database effettivo

Dal momento che devi ricucire queste sezioni di dati in locale, potresti anche memorizzarle in un punto centrale in cui puoi eseguire query e utilizzarle in un secondo momento. Uso un clone del database back-end di Tuts +, modificato per aggiungere tabelle aggiuntive per i dati di Google Analytics; ciò significa che posso associare i dati sul traffico all'articolo pertinente, piuttosto che all'URL (che è importante, dato che i nostri URL canonici sono cambiati nel corso degli anni).

Significa anche che posso eseguire query complesse come "mostrami i 100 post con il maggior numero di visualizzazioni di pagina nell'ultimo mese all'interno di un gruppo specifico di categorie" o "ottieni il post più popolare di ogni istruttore che ha pubblicato almeno cinque post" . È difficile farlo solo con Google Analytics, poiché non comprende i nostri concetti di "categoria" o "istruttore". Un altro vantaggio di avere tutto in un unico database è che è molto più facile portarlo in strumenti di analisi e visualizzazione esterni come Tableau.

4. Usa le viste

In Google Analytics, ogni visualizzazione dei rapporti ha un limite di 10.000 richieste API al giorno: questo è il numero massimo di volte in cui posso eseguire il ping per ottenere alcuni dati tramite l'API. Abbiamo 18.000 post su Tuts +, quindi ottenere le informazioni per ognuna separatamente da una singola vista richiederebbe due giorni.

Ah, ma le visualizzazioni vivono all'interno di una proprietà e ogni proprietà ha un limite totale di 50.000 richieste API. Quindi, abbiamo la nostra proprietà Tuts + impostata con una serie di viste ciascuna contenente tutte le informazioni sul traffico per un singolo argomento (come Codice, Web Design e Business) e una vista aggiuntiva contenente tutte le informazioni sul traffico per Tuts + nel suo complesso. In questo modo, possiamo interrogare la vista Codice quando vogliamo dati sui post di Codice, sulla vista Web Design quando vogliamo dati sui post di Web Design e così via, e fare il miglior uso del limite di 50.000 query invece di essere limitato a 10.000.

5. Ottenere dati estesi, quindi restringerlo

Per questa mappa interattiva che mostra da dove provenivano i lettori delle nostre esercitazioni tradotte, ho dovuto scaricare le statistiche delle pagine visualizzate per paese per circa 250 post, che vanno dal nuovo di zecca a sei mesi (una media di circa 100 giorni), in un giorno slice: vale la pena di un totale di 25.000 giorni di dati.

Potrei fare 25.000 query su Google Analytics, ma so che: 

  • Alcuni post non hanno visualizzazioni di pagina in alcuni di quei giorni. 
  • A differenza delle pagine visualizzate per paese, le "pagine visualizzate complessive" non vengono mai campionati.

Pertanto, ho effettuato una singola query su Google Analytics per ciascuno dei 250 post, richiedendo la visualizzazione complessiva delle pagine per ogni giorno in cui il post era online. Quindi ho fatto un'altra query a Google Analytics per ogni post e per ciascuno giorno che il post aveva più di zero visualizzazioni di pagina, richiedendo pagine visualizzate per Paese. Questo ha ridotto in modo massiccio il numero di query che dovevo fare nel complesso, il che ha accelerato le cose e significava che non stavo bruciando gran parte della nostra quota API di Google Analytics.

6. Usa il multithreading

Ho scoperto che in genere Google Analytics richiede cinque o più secondi per restituire il risultato di una singola query. Ciò significa che effettuare una richiesta per ciascuno dei nostri 18.000 post, uno dopo l'altro, richiede più di 24 ore di elaborazione! Questo è il motivo per cui li faccio in parallelo, invece.

Google Analytics ti consente di inviare fino a dieci richieste API al secondo, quindi puoi inviare 50 richieste entro i cinque secondi necessari per elaborare la tua prima. Ciò significa che grandi code di richieste possono essere elaborate 50 volte più velocemente rispetto a quelle richieste in serie, il che trasforma un'attesa di 24 ore in un'attesa di pausa pranzo.

7. Assicurati di poter riprendere da dove hai lasciato

Se (o, piuttosto, quando) il tuo codice si blocca, la tua connessione internet si interrompe, usi tutta la tua permessi API di Google Analytics, o qualcos'altro va storto al 90% del tempo attraverso il download di un enorme set di dati, non vuoi riavviare il processo di download.

Assicurati di salvare i dati sul disco mentre lo scarichi (piuttosto che archiviarli solo in memoria) e assicurati di poter saltare di nuovo ovunque ti sia stato interrotto quando avvii di nuovo il download.

8. Disaccoppia il codice che ottiene i dati dalle tue richieste specifiche

Ho appena scritto un intero set di codice appositamente creato ogni volta che volevo richiedere alcuni dati che non avevo richiesto prima, copiati e incollati da script precedenti, ma questo era limitante e inflessibile.

Alla fine, ho codificato una soluzione più generale che teneva conto di tutte le lezioni che avevo appreso in precedenza e che potevano leggere i file di definizione esterni che specificavano i dati che volevo scaricare, come questo esempio per scaricare i dati della visualizzazione di pagina per tutti i nostri post:

"SQL": "SELECT id, slug, section, earliest_date_requiring_data FROM posts ORDER BY earliest_date_requiring_data ASC", "Dimensions": "ga: date", "Metriche": "ga: pageview", "Filters": "ga: pagePath = ~ ^ / (articoli | esercitazioni) / slug "," Slicing ":" Whole "," View ":" section "," OutputTemplate ":" id, ga: date, ga : pageviews "," OutputFile ":" all_post_pageviews.csv "," StartDate ":" earliest_date_requiring_data "," EndDate ":" LastSunday ",

Ok, questi file non sono esattamente leggibili e facili da usare, ma sono abbastanza semplici da comprendere e creare se si ha una buona presa dell'API di Google Analytics e il modo in cui è strutturato il nostro database. Significa che posso creare nuove serie di istruzioni senza toccare il codice sottostante che le esegue, e posso migliorare il codice sottostante senza dovermi preoccupare di rovinare i normali download di dati.

Conclusione

Molti di questi suggerimenti si sentono come se descrivessero l'approccio al buon senso quando li guardo ora, e non riesco a credere che non stia gestendo i nostri download di dati in questo modo per tutto il tempo. Ma ci sono voluti molti tentativi ed errori e frustrazione per raggiungere questo processo che funziona per noi; Spero che condividendolo posso aiutare qualcun altro a ignorarlo.