Google analytics API in parallelo in R

by Carlo Bonini

facebooktwittergoogle_pluspinterestlinkedintumblr

google_apiCome parte del nostro lavoro di Digital Analysts è richiesta l’integrazione e l’analisi di grandi quantità di dati da più fonti, per trovare insights e supportare le decisioni con i dati.

Tutto ciò significa, in soldoni, essere in grado, in poco tempo, di avere dati puliti e sicuri,cosi da poterli analizzare come meglio crediamo.

Oggi vi mostreremo come ci siamo costruiti un modo veloce ed error-tolerant di prendere i dati dall’API di Google Analytics per costruire in pochi minuti un report su tutti i profili che abbiamo nel nostro account.

Quello che sembra un operazione molto semplice diventa decisamente impegnativa se i profili in gioco sono molti e se gran parte di questi hanno una serie di problematiche come mancanza di dati, permissions mancanti, e nomi poco ordinati.

Per far fronte a questo ed altri problemi ci siamo inventati un nested loop utilizzando l’utilissimo pacchetto RGoogleanalytics  unito con la libreria Parallel, che ci permette di fare quanto descritto sopra.

Entriamo nel vivo di questo processo caricando le librerie necessarie:

Rgoogleanalytics e DoParallel sono le due lib più utili per questo lavoro:

Una volta costruito il dataframe dei profili Analytics(profiles), costruiamo una serie di liste che faranno da contenitore per i nostri dati.

Una cosa interessante che possiamo creare è anche un’array di date cosi da poter “loop-are” anche su quelle qualora volessimo date specifiche e non periodi di date.

Infine siamo pronti a far girare gli 7 processori che abbiamo a disposizione per ottenere il massimo dall’API di google:

Fatto il set-up dei cluster il “loop”  farà il suo corso.

Di seguito gli highlights dello script:

1. Abbiamo usato le liste cosicchè all’interno di ogni elemento della lista ci sia un dataframe comprendente i dati relativi ad ogni profilo.

2. Utilizzando la funzione try(), quando effetuiamo le chiamate all’API, anche se non ci sono dati o permissions per quel determinato profilo il processo va avanti.

3. Timer alla mano le chiamate al server superano di un fattore x4 il numero di chiamate consigliate da Google Analytics (1 requests/sec).

4. Abbiamo aggiunto una colonna ad ogni dataframe con l’indicazione del profilename cosicchè, nel comparare diversi profili siamo in grado di identificarli.

Ed infine la cosa più importante:

La parallelizzazione dello script l’ha reso scandalosamente veloce, permettendoci in pochi minuti di “tirar giù” >3 milioni di righe di dati.

Qualora voleste “loopare” anche sulle date abbiam costruito un secondo script con un nested loop sulle date:

Enjoy!