Visualizzare i dati di BigQuery nei blocchi note Jupyter


Questo tutorial descrive come esplorare e visualizzare i dati utilizzando Libreria client BigQuery per Python panda in un blocco note Jupyter gestito su Vertex AI Workbench. Gli strumenti di visualizzazione dei dati possono aiutarti ad analizzare i dati di BigQuery in modo interattivo e di identificare le tendenze e comunicare approfondimenti dai dati. Questo tutorial utilizza i dati del set di dati pubblico BigQuery di Google Trends.

Obiettivi

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

Costi

BigQuery è un prodotto a pagamento, pertanto l'accesso a BigQuery comporta costi di utilizzo. Il primo TB di dati delle query elaborati ogni mese sono gratuiti. Per ulteriori informazioni, consulta BigQuery prezzo .

Vertex AI Workbench è un prodotto a pagamento e richiede computing, i costi di archiviazione e gestione quando si utilizza Vertex AI Workbench di Compute Engine. Per ulteriori informazioni, consulta la pagina relativa ai prezzi di Vertex AI Workbench.

Prima di iniziare

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the API

    Per i nuovi progetti, BigQuery viene abilitato automaticamente.

  4. Abilita l'API Notebooks.

    Abilita l'API Notebook

Panoramica: blocchi note Jupyter

Un blocco note fornisce un ambiente in cui creare ed eseguire codice. Un notebook è essenzialmente un elemento di origine salvato come file IPYNB. Può includere contenuti di testo descrittivi, blocchi di codice eseguibili e output visualizzati come HTML interattivo.

Dal punto di vista strutturale, un notebook è una sequenza di celle. Una cella è un blocco di input di testo valutato per produrre risultati. Le celle possono essere di tre tipi:

  • Le celle di codice contengono il codice da valutare. L'output o i risultati di il codice eseguito viene visualizzato in linea con il codice eseguito.
  • Le celle di markdown contengono testo Markdown che viene convertito in HTML in produrre intestazioni, elenchi e testo formattato.
  • Le celle non elaborate possono essere utilizzate per eseguire il rendering di diversi formati di codice in HTML o LaTeX.

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

Jupyter Markdown e celle di codice.

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

In Google Cloud puoi utilizzare Vertex AI Workbench basato su blocchi note per eseguire query ed esplorare i dati, sviluppare e addestrare un modello, ed eseguire il codice come parte di una pipeline. In questo tutorial, creerai una blocco note gestito su Vertex AI Workbench e poi esplorerai Dati di BigQuery nell'interfaccia JupyterLab.

Crea un'istanza di blocchi note gestiti

In questa sezione configurerai un'istanza JupyterLab su Google Cloud in modo che puoi 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 notebook, 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 gli utenti che possono accedere all'istanza dei blocchi note gestiti:

    • Account di servizio: questa opzione consente l'accesso a tutti gli utenti che hanno accesso all'account di servizio Compute Engine collegato al runtime. Per specificare il tuo account di servizio, deseleziona la casella di controllo Utilizza l'account di servizio predefinito di Compute Engine e inserisci l'indirizzo email dell'account di servizio che vuoi utilizzare. Per ulteriori informazioni sugli account di servizio, consulta Tipi di account di servizio.
    • Solo utente singolo: questa opzione consente di accedere solo a un utente specifico. Nel campo Email dell'utente, inserisci l'account utente. Indirizzo email 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 ulteriori informazioni, vedi Crea 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 è pronta per l'uso, Vertex AI Workbench attiva Apri il link JupyterLab.

Sfogliare le risorse BigQuery in JupyterLab

In questa sezione apri JupyterLab ed esplori le risorse BigQuery disponibili in un'istanza di blocchi note gestita.

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

    Se ti viene richiesto, fai clic su Autentica se accetti i termini. L'istanza di notebook gestita apre JupyterLab in una nuova scheda del browser.

  2. Nel menu di navigazione JupyterLab, fai clic su BigQuery BigQuery nei blocchi note.

    Il riquadro BigQuery elenca i progetti e i set di dati disponibili, in cui può eseguire attività come segue:

    • Per visualizzare la descrizione di un set di dati, fai doppio clic sul nome del set di dati.
    • Per mostrare tabelle, viste e 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 vista o un modello.

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

    Elenco dei termini più cercati a livello internazionale.

Esegui query sui dati del notebook utilizzando il comando magico %%bigquery

In questa sezione scrivi SQL direttamente nelle celle del notebook e leggi i dati da BigQuery nel notebook Python.

I comandi magici che utilizzano un carattere percentuale singolo o doppio (% o %%) ti consentono di utilizzare una sintassi minima per interagire con BigQuery all'interno del notebook. La libreria client di BigQuery per Python viene installata automaticamente in un'istanza di notebook gestita. Dietro le quinte, la magia di %%bigquery utilizza la libreria client di BigQuery per Python al fine di eseguire una data query, converti i risultati in un DataFrame pandas e, facoltativamente, salva i risultati in una variabile, quindi mostra i risultati.

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

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

  2. Nella finestra di dialogo Seleziona kernel, seleziona Python (locale) e poi 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 un nuovo DataFrame pandas denominato regions_by_country. Fornisci 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 sui comandi magici della libreria client.

  6. Fai clic su  Esegui cella.

  7. Nella cella successiva, inserisci il comando seguente 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 grafico.

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

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

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

Nota: puoi utilizzare una serie di librerie Python per l'analisi dei dati, la gestione dei dati e la visualizzazione, ad esempio numpy, pandas, matplotlib e molte altre. Molte di queste librerie sono basate su un oggetto DataFrame.

  1. Nella cella successiva, inserisci il seguente codice Python 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 codice seguente per recuperare la percentuale di termini più frequenti del giorno negli Stati Uniti top_terms che si sovrappongono nel tempo per numero di giorni di distanza. L'idea è esaminare i termini principali di ogni giorno e vedere quale percentuale si sovrappone ai termini principali del giorno precedente, di 2 giorni prima, di 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 poi passato al metodo query() per eseguire una query. Il metodo to_dataframe attende il completamento della query e scarica i risultati in un pandas tramite l'API BigQuery Storage.

  4. Fai clic su  Esegui. cella.

    Le prime righe dei 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'utilizzo 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 le query che hai eseguito in precedenza nel blocco note Jupyter.

  1. Nella cella successiva, inserisci il seguente codice per utilizzare Pandas DataFrame.plot() metodo 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 più cercati internazionali

  3. Nella cella successiva, inserisci il seguente codice per utilizzare Pandas DataFrame.plot() per creare un grafico a dispersione che mostri il risultati della query per la percentuale di sovrapposizione nei termini di ricerca più cercati di giorni di differenza:

    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. Le dimensioni di ogni punto riflettono il numero di coppie di date che si trovano a molti giorni l'una dall'altra nei dati. Ad esempio, esistono più coppie con un giorno di distanza rispetto a 30 giorni perché i termini di ricerca più cercati vengono visualizzati ogni giorno nell'arco di circa un mese.

    Grafico dei giorni di distanza tra i termini più cercati internazionali.

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

Utilizza l'espressione magica %bigquery_stats per ottenere statistiche e visualizzazioni per tutte le colonne della tabella

In questa sezione utilizzerai una scorciatoia del notebook per ottenere statistiche di riepilogo e visualizzazioni per tutti i campi di una tabella BigQuery.

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

  1. Nella cella successiva, inserisci il seguente codice per eseguire l'analisi sulla 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 di esecuzione, viene visualizzata un'immagine con varie statistiche ognuna delle sette variabili nella tabella top_terms. L'immagine seguente mostra parte di un output di esempio:

    Panoramica delle statistiche sui termini più cercati a livello internazionale.

Visualizzare la cronologia delle query e riutilizzare le query

Per visualizzare la cronologia delle query come scheda in JupyterLab:

  1. Nel menu di navigazione JupyterLab, fai clic su BigQuery BigQuery in Notebooks per aprire lo 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

    Un elenco delle query si apre in una nuova scheda in cui puoi eseguire attività come come segue:

    • Per visualizzare i dettagli di una query, come l'ID job, quando è stata dell'esecuzione e il tempo impiegato, fai clic sulla query.
    • Per rivedere la query, eseguila di nuovo o copiala nel tuo blocco note per per usi futuri, fai clic su Apri query nell'editor.

Salvare e scaricare il blocco note

In questa sezione, salverai il tuo blocco note e lo scaricherai, se lo desideri, per usi futuri dopo la pulizia delle risorse usate in questo tutorial.

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

Esegui la pulizia

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi