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 dados que você tem. Neste tutorial, você usará a biblioteca de cliente em Python no BigQuery e o 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 GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  3. O BigQuery é ativado automaticamente em novos projetos. Para ativar o BigQuery em um projeto preexistente, clique no botão abaixo. Ative a(s) BigQuery API necessária(s).

    Ativar a(s) 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. Execute o comando a seguir no seu terminal para instalar a versão mais recente da biblioteca de cliente em Python do BigQuery (incluindo a biblioteca 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 oferece um ambiente para criar e executar códigos. Um notebook é basicamente um artefato de origem salvo como um arquivo .ipynb, que pode ter conteúdo de texto descritivo, blocos de códigos 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 abaixo mostra uma célula Markdown seguida de uma célula de código do 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 IPython, essa sessão também é chamada 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 na 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 novo notebook em Python.

    Novo notebook do Jupyter em Python 3

  3. Na parte superior da página, clique em Sem título.

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

  5. A biblioteca de cliente Python do BigQuery fornece um comando mágico para executar consultas com o mínimo de codificação. Para carregar esses comandos 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 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 comando a seguir na próxima célula para ter o retorno do 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.

    Tabela de nascimentos por ano

  10. No próximo bloco de células, insira o comando a seguir para executar a mesma consulta, mas, desta vez, salve os resultados em uma nova variável total_births, que é fornecida como argumento para %%bigquery. Os resultados poderão ser usados para análise 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. Para se preparar para plotar os resultados da consulta, cole o comando mágico integrado a seguir na próxima célula para ativar matplotlib, que é 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 dos 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 é 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 de nascimentos por dia da semana

  22. Clique em Arquivo > Salvar e criar checkpoint ou clique no ícone de salvamento na barra de ferramentas. Com a criação de um checkpoint, o notebook retorna a um estado anterior.

DataFrames do Pandas

Os comandos mágicos possibilitam usar uma sintaxe mínima para interagir com o BigQuery. Nos bastidores, %%bigquery usa a biblioteca de cliente do BigQuery Python para executar a consulta em questão, converter os resultados em um Dataframe do Pandas, salvá-los como uma variável (se quiser) e, por fim, exibi-los. Usar direto a biblioteca de cliente em Python do BigQuery, em vez de usar comandos mágicos, oferece mais controle sobre as consultas e permite 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. Use a biblioteca de cliente em Python do BigQuery para consultar dados do BigQuery. Você também usará a biblioteca em Python do Pandas para analisar dados com o DataFrames.

  1. Digite o seguinte código do Python na próxima célula para importar a biblioteca de cliente em Python do BigQuery 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 reduzir 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 de pluralidade de nascimentos por ano

  8. Na próxima célula, digite a consulta a seguir para recuperar o número de nascimentos 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.

    Gráfico de peso médio por semana de gestação

A seguir

  • Saiba mais sobre como escrever 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).