Explore e visualize dados no BigQuery a partir do JupyterLab

Esta página mostra alguns exemplos de como explorar e visualizar dados armazenados no BigQuery a partir da interface do JupyterLab da sua instância do Vertex AI Workbench.

Antes de começar

Se ainda não o fez, crie uma instância do Vertex AI Workbench.

Funções necessárias

Para garantir que a conta de serviço da sua instância tem as autorizações necessárias para consultar dados no BigQuery, peça ao seu administrador para conceder à conta de serviço da sua instância a função de consumidor de utilização de serviços (roles/serviceusage.serviceUsageConsumer) do IAM no projeto.

Para mais informações sobre a concessão de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

O administrador também pode conceder à conta de serviço da sua instância as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Abra o JupyterLab

  1. Na Google Cloud consola, aceda à página Instâncias.

    Aceda a Instâncias

  2. Junto ao nome da instância do Vertex AI Workbench, clique em Abrir JupyterLab.

    A sua instância do Vertex AI Workbench abre o JupyterLab.

Leia dados do BigQuery

Nas duas secções seguintes, vai ler dados do BigQuery que vai usar para visualização mais tarde. Estes passos são idênticos aos descritos no artigo Consultar dados no BigQuery a partir do JupyterLab. Por isso, se já os tiver concluído, pode avançar para a secção Obter um resumo dos dados numa tabela do BigQuery.

Consulte dados através do comando mágico %%bigquery

Nesta secção, escreve SQL diretamente nas células do bloco de notas e lê dados do BigQuery para o bloco de notas do Python.

Os comandos mágicos que usam um caráter de percentagem único ou duplo (% ou %%) permitem-lhe usar uma sintaxe mínima para interagir com o BigQuery no bloco de notas. A biblioteca cliente do BigQuery para Python é instalada automaticamente numa instância do Vertex AI Workbench. Nos bastidores, o comando mágico %%bigquery usa a biblioteca cliente do BigQuery para Python para executar a consulta fornecida, converter os resultados num pandas DataFrame, opcionalmente guardar os resultados numa variável e, em seguida, apresentar os resultados.

Nota: a partir da versão 1.26.0 do pacote Python google-cloud-bigquery, a API BigQuery Storage é usada por predefinição para transferir resultados dos comandos mágicos %%bigquery.

  1. Para abrir um ficheiro de bloco de notas, selecione Ficheiro > Novo > Bloco de notas.

  2. Na caixa de diálogo Selecionar kernel, selecione Python 3 e, de seguida, clique em Selecionar.

    O novo ficheiro IPYNB é aberto.

  3. Para obter o número de regiões por país no conjunto de dados international_top_terms, introduza a seguinte declaração:

    %%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. Clique em  Executar célula.

    O resultado é semelhante ao seguinte:

    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. Na célula seguinte (abaixo da saída da célula anterior), introduza o comando seguinte para executar a mesma consulta, mas desta vez guarde os resultados num novo DataFrame pandas denominado regions_by_country. Fornece esse nome através de um argumento com o comando mágico %%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: para mais informações sobre os argumentos disponíveis para o comando %%bigquery, consulte a documentação de comandos mágicos da biblioteca de cliente.

  6. Clique em  Executar célula.

  7. Na célula seguinte, introduza o seguinte comando para ver as primeiras linhas dos resultados da consulta que acabou de ler:

    regions_by_country.head()
    
  8. Clique em  Executar célula.

    O pandas DataFrame regions_by_country está pronto para ser representado graficamente.

Consultar dados através da biblioteca cliente do BigQuery diretamente

Nesta secção, usa a biblioteca cliente do BigQuery para Python diretamente para ler dados no bloco de notas Python.

A biblioteca de cliente dá-lhe mais controlo sobre as suas consultas e permite-lhe usar configurações mais complexas para consultas e tarefas. As integrações da biblioteca com o pandas permitem-lhe combinar o poder do SQL declarativo com o código imperativo (Python) para ajudar a analisar, visualizar e transformar os seus dados.

Nota: pode usar várias bibliotecas de análise de dados, organização de dados e visualização do Python, como numpy, pandas, matplotlib e muitas outras. Várias destas bibliotecas são criadas com base num objeto DataFrame.

  1. Na célula seguinte, introduza o seguinte código Python para importar a biblioteca cliente do BigQuery para Python e inicializar um cliente:

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

    O cliente do BigQuery é usado para enviar e receber mensagens da API BigQuery.

  2. Clique em  Executar célula.

  3. Na célula seguinte, introduza o seguinte código para obter a percentagem dos principais termos diários nos EUA top_terms que se sobrepõem ao longo do tempo por número de dias de diferença. A ideia aqui é analisar os principais termos de cada dia e ver a percentagem dos mesmos que se sobrepõem aos principais termos do dia anterior, 2 dias antes, 3 dias antes e assim sucessivamente (para todos os pares de datas num período de cerca de um mês).

    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()

    O SQL usado está encapsulado numa string Python e, em seguida, é transmitido ao método query() para executar uma consulta. O método to_dataframe aguarda a conclusão da consulta e transfere os resultados para um pandas DataFrame através da API BigQuery Storage.

  4. Clique em  Executar célula.

    As primeiras linhas dos resultados da consulta aparecem abaixo da célula de código.

       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
    

Para mais informações sobre a utilização de bibliotecas cliente do BigQuery, consulte o início rápido Usar bibliotecas cliente.

Obtenha um resumo dos dados numa tabela do BigQuery

Nesta secção, vai usar um atalho do bloco de notas para obter estatísticas de resumo e visualizações para todos os campos de uma tabela do BigQuery. Esta pode ser uma forma rápida de criar um perfil dos seus dados antes de explorar mais a fundo.

A biblioteca de cliente do BigQuery fornece um comando mágico, %bigquery_stats, que pode chamar com um nome de tabela específico para fornecer uma vista geral da tabela e estatísticas detalhadas sobre cada uma das colunas da tabela.

  1. Na célula seguinte, introduza o seguinte código para executar essa análise na tabela US top_terms:

    %bigquery_stats bigquery-public-data.google_trends.top_terms
    
  2. Clique em  Executar célula.

    Após a execução durante algum tempo, é apresentada uma imagem com várias estatísticas sobre cada uma das 7 variáveis na tabela top_terms. A imagem seguinte mostra parte de alguns exemplos de resultados:

    Vista geral das principais estatísticas de termos internacionais.

google_trends

Visualize dados do BigQuery

Nesta secção, usa capacidades de representação gráfica para visualizar os resultados das consultas que executou anteriormente no seu bloco de notas do Jupyter.

  1. Na célula seguinte, introduza o seguinte código para usar o método pandas DataFrame.plot() para criar um gráfico de barras que visualize os resultados da consulta que devolve o número de regiões por país:

    regions_by_country.plot(kind="bar", x="country_name", y="num_regions", figsize=(15, 10))
    
  2. Clique em  Executar célula.

    O gráfico é semelhante ao seguinte:

    Resultados dos principais termos internacionais por país

  3. Na célula seguinte, introduza o seguinte código para usar o método pandas DataFrame.plot() para criar um gráfico de dispersão que visualize os resultados da consulta para a percentagem de sobreposição nos principais termos de pesquisa por dias de diferença:

    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. Clique em  Executar célula.

    O gráfico é semelhante ao seguinte. A dimensão de cada ponto reflete o número de pares de datas que estão separados por esse número de dias nos dados. Por exemplo, existem mais pares com uma diferença de 1 dia do que com uma diferença de 30 dias, porque os principais termos de pesquisa são apresentados diariamente durante cerca de um mês.

    Top internacional de termos com dias de diferença.

Para mais informações sobre a visualização de dados, consulte a documentação do pandas.

O que se segue?