Visualizzare i dati di BigQuery nei blocchi note Jupyter


Questo tutorial descrive come esplorare e visualizzare i dati utilizzando la libreria client di BigQuery per Python e pandas in un'istanza di blocco note Jupyter gestito su Vertex AI Workbench. Gli strumenti di visualizzazione dei dati possono aiutarti ad analizzare i dati BigQuery in modo interattivo, a identificare le tendenze e a comunicare insight dai dati. Questo tutorial utilizza i dati presenti nel set di dati pubblico BigQuery di Google Trends.

Obiettivi

  • Creare un'istanza di blocco note Jupyter gestita utilizzando Vertex AI Workbench.
  • Esegui query sui dati di BigQuery utilizzando i comandi magici nei blocchi note.
  • Esegui query e visualizza i dati di BigQuery utilizzando la libreria client Python di BigQuery e Pandas.

Costi

BigQuery è un prodotto a pagamento, perciò accedi a BigQuery comporta costi di utilizzo. Il primo TB di dati di query elaborati ogni mese è gratuito. Per ulteriori informazioni, consulta la pagina dei pricing di BigQuery.

Vertex AI Workbench è un prodotto a pagamento e ti vengono addebitati costi di calcolo, archiviazione e gestione quando utilizzi le istanze di Vertex AI Workbench. Per ulteriori informazioni, consulta la pagina dei pricing di Vertex AI Workbench.

Prima di iniziare

  1. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  3. Attiva BigQuery API.

    Abilita l'API

    Per i nuovi progetti, BigQuery viene abilitato automaticamente.

  4. Abilita l'API Notebooks.

    Abilita l'API Notebooks

Panoramica: blocchi note Jupyter

Un blocco note fornisce un ambiente in cui creare ed eseguire il codice. Un blocco note è essenzialmente un artefatto di origine, salvato come file IPYNB. Può contenere testo descrittivo, blocchi di codice eseguibili e output visualizzato come HTML interattivo.

Strutturalmente, un blocco note è una sequenza di celle. Una cella è un blocco di testo di input che viene valutato per produrre risultati. Le celle possono essere di tre tipi:

  • Le celle di codice contengono codice da valutare. L'output o i risultati del codice eseguito vengono visualizzati in linea con il codice eseguito.
  • Le celle di Markdown contengono testo Markdown che viene convertito in HTML per generare intestazioni, elenchi e testo formattato.
  • Le Celle non elaborate possono essere utilizzate per visualizzare diversi formati di codice in HTML o LaTeX.

L'immagine seguente mostra una cella Markdown seguita da una cella di codice Python, quindi seguita dall'output:

Jupyter Markdown e celle di codice.

Ogni blocco note aperto è associato a una sessione in esecuzione (nota anche come kernel in Python). Questa sessione esegue tutto il codice nel blocco note e ne gestisce lo stato. Lo stato include le variabili con i rispettivi valori, funzioni e classi ed eventuali moduli Python esistenti che carichi.

In Google Cloud, puoi utilizzare un ambiente basato su blocchi note Vertex AI Workbench per eseguire query sui dati ed esplorarli, sviluppare e addestrare un modello ed eseguire il codice come parte di una pipeline. In questo tutorial creerai un'istanza di blocco note gestito su Vertex AI Workbench e quindi esplorerai i dati di BigQuery all'interno dell'interfaccia JupyterLab.

Crea un'istanza di blocchi note gestiti

In questa sezione configurerai un'istanza JupyterLab su Google Cloud in modo da poter creare blocchi note gestiti.

  1. Nella console Google Cloud, vai alla pagina Workbench.

    Vai a Workbench

  2. Fai clic su  Nuovo blocco note.

  3. Nel campo Nome blocco note, inserisci un nome per l'istanza.

  4. Nell'elenco Regione, seleziona una regione per l'istanza.

  5. Nella sezione Autorizzazione, seleziona un'opzione per definire quali utenti possono accedere all'istanza di blocchi note gestiti:

    • Account di servizio: questa opzione consente l'accesso a tutti gli utenti che hanno accesso all'account di servizio Compute Engine che colleghi al runtime. Per specificare il tuo account di servizio, deseleziona la casella di controllo Utilizza l'account di servizio predefinito di Compute Engine, quindi inserisci l'indirizzo email dell'account di servizio che vuoi utilizzare. Per saperne di più sugli account di servizio, consulta Tipi di account di servizio.
    • Solo per un singolo utente: questa opzione consente l'accesso solo a un utente specifico. Nel campo Email dell'utente, inserisci l'indirizzo email dell'account utente dell'utente che utilizzerà l'istanza di blocchi note gestiti.
  6. (Facoltativo) Per modificare le impostazioni avanzate dell'istanza, fai clic su Impostazioni avanzate. Per maggiori informazioni, consulta Creare un'istanza utilizzando le impostazioni avanzate.

  7. Fai clic su Crea.

    Attendi qualche minuto per la creazione dell'istanza. Vertex AI Workbench avvia automaticamente l'istanza. Quando l'istanza è pronta per essere utilizzata, Vertex AI Workbench attiva un link Apri JupyterLab.

Esplora le risorse BigQuery in JupyterLab

In questa sezione aprirai JupyterLab ed esplorerai le risorse BigQuery disponibili in un'istanza di blocchi note gestiti.

  1. Nella riga corrispondente all'istanza di blocchi note gestiti che hai creato, fai clic su Apri JupyterLab.

    Se ti viene richiesto, fai clic su Autentica per accettare i termini. L'istanza di blocchi note gestiti apre JupyterLab in una nuova scheda del browser.

  2. Nel menu di navigazione di JupyterLab, fai clic su BigQuery BigQuery in Notebooks.

    Il riquadro BigQuery elenca i progetti e i set di dati disponibili in cui puoi eseguire le seguenti attività:

    • Per visualizzare la descrizione di un set di dati, fai doppio clic sul suo nome.
    • Per mostrare le tabelle, le visualizzazioni e i modelli di un set di dati, espandi il set di dati.
    • Per aprire una descrizione di riepilogo come scheda in JupyterLab, fai doppio clic su una tabella, una visualizzazione o un modello.

    Nota: nella descrizione di riepilogo di una tabella, fai clic sulla scheda Anteprima per visualizzare l'anteprima dei dati della tabella. L'immagine seguente mostra un'anteprima della tabella international_top_terms presente nel set di dati google_trends nel progetto bigquery-public-data:

    Elenco dei termini più utilizzati a livello internazionale.

Esegui una query sui dati del blocco note usando il comando magico %%bigquery

In questa sezione scriverai il codice SQL direttamente nelle celle del blocco note e leggi i dati da BigQuery nel blocco note Python.

I comandi magici che utilizzano un carattere di percentuale singola o doppia (% o %%) consentono di utilizzare una sintassi minima per interagire con BigQuery all'interno del blocco note. La libreria client di BigQuery per Python viene installata automaticamente in un'istanza di blocchi note gestiti. Dietro le quinte, il comando magico %%bigquery utilizza la libreria client di BigQuery per Python per eseguire la query, convertire i risultati in un DataFrame pandas, salvare facoltativamente i risultati in una variabile e quindi visualizzare i risultati.

Nota: a partire dalla versione 1.26.0 del pacchetto Python google-cloud-bigquery, per impostazione predefinita viene utilizzata l'API BigQuery Storage per scaricare i risultati della magia %%bigquery.

  1. Per aprire un file di blocco note, seleziona File > Nuovo > Blocco note.

  2. Nella finestra di dialogo Seleziona kernel, seleziona Python (locale), quindi fai clic su Seleziona.

    Si apre il nuovo file IPYNB.

  3. Per ottenere il numero di regioni per paese nel set di dati international_top_terms, inserisci la seguente istruzione:

    %%bigquery
    SELECT
      country_code,
      country_name,
      COUNT(DISTINCT region_code) AS num_regions
    FROM
      `bigquery-public-data.google_trends.international_top_terms`
    WHERE
      refresh_date = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
    GROUP BY
      country_code,
      country_name
    ORDER BY
      num_regions DESC;
    
  4. Fai clic su  Esegui cella.

    L'output è simile al seguente:

    Query complete after 0.07s: 100%|██████████| 4/4 [00:00<00:00, 1440.60query/s]
    Downloading: 100%|██████████| 41/41 [00:02><00:00, 20.21rows/s]
    ... country_code country_name num_regions 0 TR Turkey 81 1 TH Thailand 77 2 VN Vietnam 63 3 JP Japan 47 4 RO Romania 42 5 NG Nigeria 37 6 IN India 36 7 ID Indonesia 34 8 CO Colombia 33 9 MX Mexico 32 10 BR Brazil 27 11 EG Egypt 27 12 UA Ukraine 27 13 CH Switzerland 26 14 AR Argentina 24 15 FR France 22 16 SE Sweden 21 17 HU Hungary 20 18 IT Italy 20 19 PT Portugal 20 20 NO Norway 19 21 FI Finland 18 22 NZ New Zealand 17 23 PH Philippines 17>
  5. Nella cella successiva (sotto l'output della cella precedente), inserisci il comando seguente per eseguire la stessa query, ma questa volta salva i risultati in un nuovo DataFrame pandas denominato regions_by_country. Puoi fornire questo nome utilizzando un argomento con il comando magico %%bigquery.

    %%bigquery regions_by_country
    SELECT
      country_code,
      country_name,
      COUNT(DISTINCT region_code) AS num_regions
    FROM
      `bigquery-public-data.google_trends.international_top_terms`
    WHERE
      refresh_date = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)
    GROUP BY
      country_code, country_name
    ORDER BY
      num_regions DESC;
    

    Nota: per ulteriori informazioni sugli argomenti disponibili per il comando %%bigquery, consulta la documentazione sulle magie delle librerie client.

  6. Fai clic su  Esegui cella.

  7. Nella cella successiva, inserisci il seguente comando per esaminare le prime righe dei risultati della query che hai appena letto:

    regions_by_country.head()
    
  8. Fai clic su  Esegui cella.

    Il DataFrame Pandas regions_by_country è pronto per il tracciamento.

Query sui dati in un blocco note utilizzando direttamente la libreria client di BigQuery

In questa sezione utilizzerai la libreria client di BigQuery per Python, per leggere i dati direttamente nel blocco note Python.

La libreria client offre un maggiore controllo sulle query e consente di utilizzare configurazioni più complesse per query e job. Le integrazioni della libreria con pandas consentono di combinare la potenza dell'SQL dichiarativo con il codice imperativo (Python) per analizzare, visualizzare e trasformare i dati.

Nota: puoi utilizzare diverse librerie di analisi dei dati, data wrangling e visualizzazione in Python, ad esempio numpy, pandas, matplotlib e molte altre. Molte di queste librerie sono basate su un oggetto DataFrame.

  1. Nella cella successiva, inserisci il codice Python seguente per importare la libreria client di BigQuery per Python e inizializzare un client:

    from google.cloud import bigquery
    
    client = bigquery.Client()
    

    Il client BigQuery viene utilizzato per inviare e ricevere messaggi dall'API BigQuery.

  2. Fai clic su  Esegui cella.

  3. Nella cella successiva, inserisci il seguente codice per recuperare la percentuale di termini principali giornalieri negli Stati Uniti top_terms che si sovrappongono nel tempo per numero di giorni l'uno dall'altro. L'idea è quella di esaminare i termini principali di ogni giorno e vedere quale percentuale si sovrappone ai termini principali del giorno precedente, 2 giorni prima, 3 giorni prima e così via (per tutte le coppie di date nell'arco di circa un mese).

    sql = """
    WITH
      TopTermsByDate AS (
        SELECT DISTINCT refresh_date AS date, term
        FROM `bigquery-public-data.google_trends.top_terms`
      ),
      DistinctDates AS (
        SELECT DISTINCT date
        FROM TopTermsByDate
      )
    SELECT
      DATE_DIFF(Dates2.date, Date1Terms.date, DAY)
        AS days_apart,
      COUNT(DISTINCT (Dates2.date || Date1Terms.date))
        AS num_date_pairs,
      COUNT(Date1Terms.term) AS num_date1_terms,
      SUM(IF(Date2Terms.term IS NOT NULL, 1, 0))
        AS overlap_terms,
      SAFE_DIVIDE(
        SUM(IF(Date2Terms.term IS NOT NULL, 1, 0)),
        COUNT(Date1Terms.term)
        ) AS pct_overlap_terms
    FROM
      TopTermsByDate AS Date1Terms
    CROSS JOIN
      DistinctDates AS Dates2
    LEFT JOIN
      TopTermsByDate AS Date2Terms
      ON
        Dates2.date = Date2Terms.date
        AND Date1Terms.term = Date2Terms.term
    WHERE
      Date1Terms.date <= Dates2.date
    GROUP BY
      days_apart
    
    ORDER BY
      days_apart;
    """
    pct_overlap_terms_by_days_apart = client.query(sql).to_dataframe()
    
    pct_overlap_terms_by_days_apart.head()
    

    Il codice SQL utilizzato viene incapsulato in una stringa Python e quindi passato al metodo query() per eseguire una query. Il metodo to_dataframe attende il completamento della query e scarica i risultati in un DataFrame Pandas utilizzando l'API BigQuery Storage.

  4. Fai clic su  Esegui cella.

    Le prime righe di risultati della query vengono visualizzate sotto la cella di codice.

       days_apart   num_date_pairs  num_date1_terms overlap_terms   pct_overlap_terms
     0          0             32               800            800            1.000000
     1          1             31               775            203            0.261935
     2          2             30               750             73            0.097333
     3          3             29               725             31            0.042759
     4          4             28               700             23            0.032857
    

Per ulteriori informazioni sull'uso delle librerie client di BigQuery, consulta la guida rapida Utilizzo delle librerie client.

Visualizzare i dati di BigQuery

In questa sezione utilizzerai le funzionalità di tracciamento per visualizzare i risultati delle query che hai eseguito in precedenza nel tuo blocco note Jupyter.

  1. Nella cella successiva, inserisci il seguente codice per utilizzare il metodo DataFrame.plot() pandas per creare un grafico a barre che mostri i risultati della query che restituisce il numero di regioni per paese:

    regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
    
  2. Fai clic su  Esegui cella.

    Il grafico è simile al seguente:

    Risultati per paese con termini principali internazionali

  3. Nella cella successiva, inserisci il seguente codice per utilizzare il metodo DataFrame.plot() panda per creare un grafico a dispersione che visualizzi i risultati della query relativi alla percentuale di sovrapposizione dei principali termini di ricerca per giorni di distanza:

    pct_overlap_terms_by_days_apart.plot(
      kind="scatter",
      x="days_apart",
      y="pct_overlap_terms",
      s=len(pct_overlap_terms_by_days_apart["num_date_pairs"]) * 20,
      figsize=(15, 10)
      )
    
  4. Fai clic su  Esegui cella.

    Il grafico è simile al seguente. La dimensione di ogni punto riflette il numero di coppie di date a intervalli di così tanti giorni. Ad esempio, ci sono più coppie distanti 1 giorno e 30 giorni l'una dall'altra, perché i principali termini di ricerca vengono visualizzati ogni giorno nell'arco di un mese.

    Grafico dei giorni di distanza tra i termini principali internazionali.

Per ulteriori informazioni sulla visualizzazione dei dati, consulta la documentazione di Panda.

Utilizza la magia %bigquery_stats per ottenere statistiche e visualizzazioni per tutte le colonne della tabella

In questa sezione utilizzerai una scorciatoia per il blocco note per ottenere statistiche e visualizzazioni di riepilogo per tutti i campi di una tabella BigQuery.

La libreria client di BigQuery fornisce un comando magico, %bigquery_stats, che puoi chiamare con un nome di tabella specifico per fornire una panoramica della tabella e statistiche dettagliate su ciascuna colonna della tabella.

  1. Nella cella successiva, inserisci il seguente codice per eseguire l'analisi nella tabella top_terms degli Stati Uniti:

    %bigquery_stats bigquery-public-data.google_trends.top_terms
    
  2. Fai clic su  Esegui cella.

    Dopo un po' di tempo, viene visualizzata un'immagine con varie statistiche su ognuna delle sette variabili nella tabella top_terms. L'immagine seguente mostra parte di alcuni output di esempio:

    Panoramica dei termini principali internazionali sulle statistiche.

Visualizzare la cronologia delle query e riutilizzare le query

Per visualizzare la cronologia delle query sotto forma di scheda in JupyterLab, procedi nel seguente modo:

  1. Nel menu di navigazione di JupyterLab, fai clic su BigQuery BigQuery in Notebooks per aprire il riquadro BigQuery.

  2. Nel riquadro BigQuery, scorri verso il basso e fai clic su Cronologia delle query.

    Cronologia delle query evidenziata nella parte inferiore del riquadro di navigazione a sinistra

    Si apre un elenco delle query in una nuova scheda in cui puoi eseguire attività quali:

    • Fai clic sulla query per visualizzare i dettagli di una query, come l'ID job, la data di esecuzione e il tempo impiegato,
    • Per rivedere la query, eseguirla di nuovo o copiarla nel blocco note per un uso futuro, fai clic su Apri query nell'editor.

Salvare e scaricare il blocco note

In questa sezione puoi salvare il blocco note e scaricarlo se vuoi utilizzarlo in futuro dopo aver ripulito le risorse utilizzate in questo tutorial.

  1. Seleziona File > Salva blocco note.
  2. Seleziona File > Scarica per scaricare una copia locale del tuo blocco note come file IPYNB sul tuo computer.

Esegui la pulizia

Il modo più semplice per eliminare la fatturazione è eliminare il progetto Google Cloud che hai creato per questo tutorial.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi