Como visualizar dados do BigQuery em um notebook do Jupyter

O BigQuery é um serviço de armazenamento de dados para análise em escala de petabyte. Ele é usado para executar consultas SQL em grandes volumes de dados, praticamente em tempo real.

Com as ferramentas de visualização de dados, você compreende e analisa os dados do BigQuery de maneira interativa. Use essas ferramentas para identificar tendências, responder a elas e fazer previsões usando seus dados. Neste tutorial, você usa a biblioteca de cliente do BigQuery para Python e Pandas em um notebook do Jupyter para visualizar dados na tabela de amostra de natalidade do BigQuery.

Objetivos

Neste tutorial, você aprenderá como:

  • configurar um ambiente para executar os notebooks do Jupyter;
  • consultar e visualizar dados do BigQuery usando o Pandas e a biblioteca de cliente em Python do BigQuery.

Custos

É necessário pagar para usar o BigQuery. Você tem 1 TB por mês grátis para fazer consultas no BigQuery. Para mais informações, consulte a página Preços do BigQuery.

Antes de começar

Antes de começar este tutorial, use o Console do Google Cloud para criar ou selecionar um projeto.

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Cloud, na página do seletor de projetos, selecione ou crie um projeto do Cloud.

    Acessar a página do seletor de projetos

  3. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, acesse Ative a API BigQuery.

    Ative a API

  4. Se não quiser informar um cartão de crédito ou ativar o faturamento do seu projeto, use o sandbox fornecido pelo BigQuery. É possível seguir as etapas deste tópico mesmo que seu projeto não tenha o faturamento ativado. Se quiser ativá-lo, consulte Saiba como ativar o faturamento.

Como configurar um ambiente Jupyter local

Neste tutorial, você usará um notebook do Jupyter hospedado localmente. Conclua as etapas a seguir para instalar o Jupyter, configurar a autenticação e instalar as bibliotecas necessárias do Python.

  1. No seu terminal, execute o seguinte comando para instalar a versão mais recente da biblioteca de cliente do BigQuery para Python, incluindo a biblioteca do Pandas, obrigatória para funções que usam o Pandas:

    pip install --upgrade google-cloud-bigquery[pandas]
    
  2. Siga as instruções de instalação na Documentação do Jupyter para instalar o Jupyter.

  3. Siga as instruções na página Primeiros passos na autenticação para configurar o Application Default Credentials. Para configurar a autenticação, é necessário criar uma conta de serviço e definir uma variável de ambiente.

Visão geral dos notebooks do Jupyter

Um notebook fornece um ambiente onde é possível criar e executar códigos. Um notebook é basicamente um artefato de origem, salvo como um arquivo .ipynb. Ele pode ter conteúdo de texto descritivo, blocos de código executáveis e resultados associados (renderizados como HTML interativo). Estruturalmente, um notebook é uma sequência de células.

Uma célula é um bloco de texto de entrada que é avaliado para produzir resultados. Há dois tipos:

  • Células de código: contêm códigos a serem avaliados. Todas as saídas ou resultados da execução do código são renderizados imediatamente abaixo do código de entrada.

  • Células Markdown: contêm texto Markdown convertido em HTML para produzir cabeçalhos, listas e texto formatado.

A captura de tela a seguir mostra uma célula markdown seguida por uma célula de código Python. A saída da célula em Python é mostrada imediatamente abaixo do código.

Células de código e markdown do Jupyter.

Cada notebook aberto é associado a uma sessão em execução. No Python, isso também é chamado de kernel. Nela, todo o código inserido no notebook é executado e o estado é gerenciado, o que inclui as variáveis e os valores delas, as funções e classes e todos os módulos do Python que você carrega.

Como consultar e visualizar dados do BigQuery

Nesta seção do tutorial, você criará um notebook do Datalab, usado para consultar e visualizar dados no BigQuery. Você criará visualizações usando os dados na tabela de amostras de natalidade. Todas as consultas neste tutorial estão em sintaxe SQL padrão.

Para consultar e visualizar dados do BigQuery usando um notebook do Jupyter:

  1. Se você ainda não iniciou o Jupyter, execute o seguinte comando no seu terminal:

    jupyter notebook
    
  2. O Jupyter deverá estar em execução e aberto em uma janela do navegador. Na janela do Jupyter, clique no botão Novo e selecione Python 3 para criar um notebook Python.

    Novo notebook Python 3 no Jupyter

  3. Na parte superior da página, clique em Untitled.

  4. Na caixa de diálogo Renomear notebook, digite um novo nome, como BigQuery tutorial, e clique em Renomear.

  5. A biblioteca de cliente do BigQuery para Python fornece um comando mágico que permite executar consultas com o mínimo de código. Para carregar esses comandos mágicos a partir da biblioteca de cliente, cole o código a seguir na primeira célula do notebook.

    %load_ext google.cloud.bigquery
  6. Execute o comando clicando no botão Executar ou com SHIFT + ENTER.

  7. A biblioteca de cliente do BigQuery para Python fornece um comando mágico de célula, %%bigquery, que executa uma consulta SQL e retorna os resultados como um DataFrame do Pandas. Digite o seguinte código na próxima célula para retornar o total de nascimentos por ano:

    %%bigquery
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  8. Clique em Executar.

  9. Os resultados da consulta são exibidos abaixo da célula de código.

    Nascimentos por ano.

  10. No próximo bloco de células, digite o seguinte comando para executar a mesma consulta, mas desta vez salve os resultados em uma nova variável total_births, fornecida como um argumento para %%bigquery. Os resultados poderão ser usados para outras análises e visualização.

    %%bigquery total_births
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  11. Clique em Executar.

  12. Agora você tem um DataFrame do Pandas salvo na variável total_births, que está pronto para ser plotado. Como preparação para plotar os resultados da consulta, cole o seguinte comando mágico integrado na próxima célula para ativar o matplotlib. O Matplotlib é a biblioteca usada pelo Pandas para plotagem.

    %matplotlib inline
  13. Clique em Executar.

  14. Na próxima célula, use o código a seguir para usar o método DataFrame.plot() do Pandas para visualizar os resultados da consulta como um gráfico de barras. Veja a documentação do Pandas para saber mais sobre visualização de dados com o Pandas.

    total_births.plot(kind='bar', x='year', y='birth_count');
  15. Clique em Executar.

  16. O gráfico aparece abaixo do bloco de código.

    Gráfico de barras com nascimentos por ano

  17. Depois, cole a consulta a seguir na próxima célula para recuperar o número de nascimentos por dia da semana.

    %%bigquery births_by_weekday
    SELECT
        wday,
        SUM(CASE WHEN is_male THEN 1 ELSE 0 END) AS male_births,
        SUM(CASE WHEN is_male THEN 0 ELSE 1 END) AS female_births
    FROM `bigquery-public-data.samples.natality`
    WHERE wday IS NOT NULL
    GROUP BY wday
    ORDER BY wday ASC

    Como o campo wday (dia da semana) permite valores nulos, a consulta exclui registros em que wday é nulo.

  18. Clique em Executar.

  19. Na próxima célula, informe o código a seguir para visualizar os resultados da consulta usando um gráfico de linhas.

    births_by_weekday.plot(x='wday');
  20. Clique em Executar.

  21. O gráfico aparece abaixo do bloco de código. Observe que o número de nascimentos diminui drasticamente no domingo (1) e no sábado (7).

    Gráfico de linhas com nascimentos por dia da semana

  22. Clique em Arquivo > Salvar e criar checkpoint ou clique no ícone de salvamento na barra de ferramentas. A criação de um checkpoint permite reverter o notebook para um estado anterior.

Pandas DataFrames

Os comandos mágicos permitem que você use sintaxe mínima para interagir com o BigQuery. Nos bastidores, %%bigquery usa a biblioteca de cliente do BigQuery para Python e execute a consulta, converta os resultados em um DataFrame do Pandas, salve (por opção) os resultados em uma variável e, finalmente, exiba os resultados. O uso da biblioteca de cliente do BigQuery para Python, em vez de comandos mágicos, oferece mais controle sobre suas consultas e permite usar configurações mais complexas. As integrações da biblioteca com o Pandas permitem combinar o poder do SQL declarativo com o código imperativo (Python) para realizar tarefas interessantes de análise, visualização e transformação de dados.

Como consultar e visualizar dados do BigQuery usando DataFrames do Pandas

Nesta seção do tutorial, você consultará e visualizará dados no BigQuery usando DataFrames do Pandas. Usar a biblioteca de cliente do BigQuery para Python permite consultar dados do BigQuery. Use também a biblioteca do pandas para analisar dados com o DataFrames.

  1. Digite o seguinte código Python na próxima célula para importar a biblioteca de cliente do BigQuery para Python e inicializar um cliente. O cliente do BigQuery é usado para enviar e receber mensagens da API BigQuery.

    from google.cloud import bigquery
    client = bigquery.Client()
  2. Clique em Executar.

  3. Use o método Client.query() para executar uma consulta. Na próxima célula, insira o seguinte código para executar uma consulta que recupera a contagem anual de nascimentos plurais por quantidade (2 para gêmeos, 3 para trigêmeos etc.).

    sql = """
    SELECT
        plurality,
        COUNT(1) AS count,
        year
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(plurality) AND plurality > 1
    GROUP BY
        plurality, year
    ORDER BY
        count DESC
    """
    df = client.query(sql).to_dataframe()
    df.head()
  4. Clique em Executar.

  5. Para gerar um gráfico dos resultados da consulta em seu DataFrame, insira o seguinte código na próxima célula para dinamizar os dados e criar um gráfico de barras empilhadas da contagem de nascimentos plurais ao longo do tempo.

    pivot_table = df.pivot(index='year', columns='plurality', values='count')
    pivot_table.plot(kind='bar', stacked=True, figsize=(15, 7));
  6. Clique em Executar.

  7. O gráfico aparece abaixo do bloco de código.

    Gráfico de barras empilhadas com nascimentos plurais por ano

  8. Na próxima célula, digite a consulta a seguir para recuperar o número de partos pelo número de semanas de gestação.

    sql = """
    SELECT
        gestation_weeks,
        COUNT(1) AS count
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(gestation_weeks) AND gestation_weeks <> 99
    GROUP BY
        gestation_weeks
    ORDER BY
        gestation_weeks
    """
    df = client.query(sql).to_dataframe()
  9. Clique em Executar.

  10. Para gerar um gráfico dos resultados da consulta no DataFrame, cole o código a seguir na próxima célula.

    ax = df.plot(kind='bar', x='gestation_weeks', y='count', figsize=(15,7))
    ax.set_title('Count of Births by Gestation Weeks')
    ax.set_xlabel('Gestation Weeks')
    ax.set_ylabel('Count');
  11. Clique em Executar.

  12. O gráfico de barras aparece abaixo do bloco de código.

    Peso médio por semana de gestação.

A seguir

  • Saiba mais sobre como gravar consultas no BigQuery. O tópico Como consultar dados na documentação do BigQuery explica como executar consultas, criar funções definidas pelo usuário (UDFs, na sigla em inglês) e muito mais.

  • Explore a sintaxe do BigQuery. O dialeto preferido para consultas SQL no BigQuery é o SQL padrão, descrito na Referência do SQL. A sintaxe semelhante ao SQL legado do BigQuery é descrita na Referência de consulta (SQL legado).