Voltar para a lista de artigos Artigos
14 minutos de leitura

Gráficos com SQL: Um guia para iniciantes

O SQL, geralmente conhecido como Structured Query Language (Linguagem de consulta estruturada), é uma ferramenta valiosa para os analistas de dados. Ela permite que você consulte, atualize e organize seus dados. Essa é uma condição prévia essencial para a criação de gráficos. Neste artigo, exploraremos como preparar dados com SQL para uso em visualizações de dados.

Os dados brutos só são valiosos se você souber como limpá-los e organizá-los. Portanto, a preparação adequada dos dados para gráficos é uma etapa importante para a criação de gráficos cativantes e informativos. Neste artigo, discutiremos como usar o SQL para limpar os dados que serão usados em um gráfico.

Os gráficos são representações visuais de dados que incluem gráficos de barras, gráficos de linhas, gráficos de pizza, gráficos de caixa e muitos outros. Seu objetivo é converter dados complexos em insights claros e acionáveis. Isso é especialmente importante porque os analistas de dados devem ser capazes de comunicar suas percepções ao restante da equipe e a outras partes interessadas.

Embora o SQL seja excelente na limpeza e preparação de dados, ele não possui uma funcionalidade de gráficos integrada. No entanto, há muitos recursos externos para fazer isso, incluindo Tableau, Looker Studio, Power BI ou bibliotecas Python. Dito isso, a qualidade de seus gráficos é tão boa quanto os dados usados para criá-los. Se os dados não forem preparados adequadamente, seus gráficos não conseguirão expressar nenhuma mensagem significativa.

Por isso, o SQL continua sendo extremamente importante. E que melhor momento para começar a estudar do que agora, com nosso curso SQL para Análise de Dados? Esse curso ensinará a você todas as habilidades essenciais para preparar dados para gráficos.

Neste artigo, mostraremos como usar o SQL para preparar seus dados para gráficos usando ferramentas externas. Também serão fornecidos exemplos e consultas SQL para que você possa praticar. Então, com isso dito, vamos começar!

Preparando-se para fazer gráficos com SQL

A preparação dos dados é a primeira etapa essencial para criar visualizações de dados envolventes. Usando o SQL, podemos organizar, agregar e filtrar dados de forma eficiente com apenas algumas linhas de código. Vamos dar uma olhada em alguns exemplos de gráficos que podem ser criados. (PS: Aqui está a nossa Folha de consulta de SQL para análise de dados para que você possa revisar algumas das funções, se necessário).

1. Gráfico de barras

Um gráfico de barras é um tipo de gráfico que contém barras retangulares que representam diferentes categorias de dados. A altura (em um gráfico vertical) ou o comprimento (em um gráfico horizontal) da barra representa o valor da categoria relacionada.

Os gráficos de barras são úteis para comparar dados de diferentes categorias, como vendas por produto, pedidos por região e assim por diante. Você pode identificar as diferenças ou tendências dentro dessas categorias em um piscar de olhos.

Exemplo de gráfico de barras

Aqui está um exemplo de gráfico de barras. Criaremos a consulta SQL para esse gráfico mais adiante neste artigo.

Gráficos com SQL

De quais informações precisamos para criar um gráfico de barras?

  • Rótulos: Precisamos dos rótulos de cada barra no eixo X (horizontal). A consulta deve retornar os rótulos como uma das colunas na cláusula SELECT.
  • Altura das barras: A altura das barras está de acordo com nosso eixo Y (vertical). Essa é outra coluna que deve ser computada em um SELECT. A altura da barra geralmente será computada usando uma função agregada como SUM() ou COUNT() e GROUP BY usando os rótulos do eixo X.
  • Classificação: Opcionalmente, podemos querer organizar as barras no gráfico em uma determinada ordem.

Exemplo de vendas de categoria de produto

Imagine que você queira analisar o total de vendas de 2023 para cada categoria de produto. Com a ajuda do SQL, você pode preparar os dados para o gráfico de barras usando a seguinte consulta:

SELECT 
    product_category, 
    SUM(sales_amount) AS total_sales
FROM 
    sales_data
WHERE 
    sale_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY 
    product_category
ORDER BY 
    total_sales DESC;

Explicação:

  • SELECT product_category, SUM(sales_amount) AS total_sales: Primeiro, selecionamos as colunas desejadas e usamos a função de agregação SUM em sales_amount para agregar as vendas por categoria de produto. Esse será o rótulo do eixo X e a altura da barra.
  • WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31: Queremos avaliar somente as vendas de 2023, portanto, essa cláusula filtra os dados para conter somente as vendas de 2023.
  • GROUP BY product_category: Aqui agrupamos nossos dados por product_category para resumir o total de vendas.
  • ORDER BY total_sales DESC: Por fim, classificamos os dados em ordem decrescente para que as vendas mais altas sejam as primeiras e as mais baixas sejam as últimas.

2. Gráfico de linhas

Um gráfico de linhas é um tipo de gráfico que mostra pontos de dados conectados por uma linha. Esse gráfico é uma ótima visualização de dados para mostrar tendências de dados ao longo do tempo, como o acompanhamento da atividade do site em um mês, a análise de tendências de vendas em um ano e muito mais.

Exemplo de gráfico de linhas

Aqui está um exemplo de gráfico de linhas:

Gráficos com SQL

Quais informações são necessárias para criar um gráfico de linhas?

  • Rótulos: Precisamos de rótulos (geralmente datas) para o eixo X.
  • Alturada linha: Para cada ponto da linha, precisamos de uma altura de linha. Esse pode ser o valor nessa data, selecionado no banco de dados ou calculado com uma função de agregação. Também pode ser outro valor, como uma média móvel, calculada com a ajuda de funções de janela.
  • Classificação: Para garantir que nossos dados sejam ordenados corretamente por data, usamos ORDER

Exemplo de vendas de celulares

Vamos imaginar que queremos encontrar os dias de pico de vendas de telefones celulares monitorando as vendas mensais do nosso site. Para fazer isso, podemos calcular a média móvel dos dados de vendas para suavizar as flutuações.

Primeiramente, dividiremos a consulta em duas partes: uma subconsulta que coleta os dados necessários e uma consulta principal que calcula a média móvel usando esses dados. Usando SQL, poderíamos preparar a subconsulta da seguinte forma:

SELECT 
    DATE(sale_date) AS sale_day, 
    COUNT(*) AS mobile_sales_count
FROM 
    sales_data
WHERE 
    device_type = 'mobile'
GROUP BY 
    sale_day
ORDER BY 
    sale_day ASC;

Explicação:

  • SELECT DATE(sale_date) AS sale_day, COUNT(*) AS mobile_sales_count: Extrai a data de sale_date e conta as vendas de celulares para cada dia.
  • WHERE device_type = 'mobile': Filtra a coluna device_type para incluir somente as vendas de dispositivos móveis.
  • GROUP BY sale_day: Agrupa os dados por dia.
  • ORDER BY sale_day ASC: Classifica os resultados por data em ordem crescente.

Em seguida, levamos essa consulta um passo adiante, utilizando uma média móvel, conforme mencionado. Uma média móvel suaviza as variações de curto prazo nos dados, ajudando a minimizar as flutuações. Uma flutuação é uma variação de curto prazo nos dados, como picos ou quedas diárias, que pode ocultar tendências maiores.

Ao usar uma média móvel de 7 dias, podemos determinar a média do dia atual e dos seis dias anteriores. Como resultado, suavizamos as variações diárias e revelamos as tendências semanais. A alteração de nossa consulta anterior nos permitirá fazer exatamente isso:

SELECT 
    sale_day, 
    AVG(mobile_sales_count) OVER (ORDER BY sale_day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg
FROM (
    SELECT 
        DATE(sale_date) AS sale_day, 
        COUNT(*) AS mobile_sales_count
    FROM 
        sales_data
    WHERE 
         device_type = 'mobile'
    GROUP BY 
        DATE(sale_date)
) daily_sales;

Explicação:

  • SELECT sale_day, AVG(mobile_sales_count) OVER (ORDER BY sale_day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg: Essa é uma função de janela que calcula uma média móvel de 7 dias (dia atual + 6 dias anteriores) de vendas de celulares, ordenadas por sale_day.
  • FROM (...) daily_sales: Aqui estamos adaptando a consulta anterior como uma subconsulta e nomeando-a como daily_sales.

Saiba mais sobre as funções de janela em nosso artigo Exemplo de função da Janela SQL com explicações.

3. Gráfico de pizza

Um gráfico de pizza é um gráfico que divide um círculo em seções ou fatias, sendo que cada uma delas representa uma parte do todo. Esse tipo de gráfico é particularmente útil para representar proporções ou porcentagens, como em distribuições demográficas, detalhamentos de fontes de receita e muito mais.

Exemplo de gráfico de pizza

Um exemplo de gráfico de pizza pode ter a seguinte aparência:

Gráficos com SQL

Que informações são necessárias para criar um gráfico de pizza?

  • Rótulos: Precisamos de rótulos para cada fatia do gráfico de pizza.
  • Tamanhoda fatia: Precisamos calcular o tamanho de cada fatia.
  • Cálculo deporcentagem: Precisamos calcular a contribuição proporcional de cada grupo para o total, como uma porcentagem.
  • Agrupamento: Geralmente, precisamos agrupar por rótulos de gráfico.

Exemplo de divisão demográfica de vendas

Vamos imaginar que queremos ver a porcentagem de vendas contribuída por cada segmento demográfico de idade em nossa empresa. Poderíamos usar a seguinte consulta para preparar nossos dados:

SELECT 
    CASE 
        WHEN age < 18 THEN 'Below 18'
        WHEN age BETWEEN 18 AND 24 THEN '18-24'
        WHEN age BETWEEN 25 AND 34 THEN '25-34'
        WHEN age BETWEEN 35 AND 44 THEN '35-44'
        WHEN age BETWEEN 45 AND 54 THEN '45-54'
        WHEN age >= 55 THEN '55+'
    END AS age_group,
    SUM(sales_amount) AS total_sales, 
    SUM(sales_amount) * 100.0 / SUM(SUM(sales_amount)) OVER () AS pc_of_sales  
FROM 
    sales_data
WHERE 
    age IS NOT NULL  
GROUP BY 
    age_group; 

Explicação:

  • CASE ... END AS age_group: Usando a instrução CASE, dividimos as idades de nossos clientes em grupos etários especificados. Cada grupo formará uma fatia do nosso gráfico de pizza.
  • SUM(sales_amount) AS total_sales: Usando a função de agregação SUM(), calculamos o valor total de vendas para cada faixa etária.
  • SUM(sales_amount) * 100.0 / SUM(SUM(sales_amount)) OVER () AS pc_of_sales: Usando uma função de janela, calculamos a porcentagem do total de vendas contribuída por cada faixa etária.
  • WHERE age IS NOT NULL: Para limpar os dados, filtramos as linhas com valores NULL na coluna age.
  • GROUP BY age_group: Por fim, agrupamos os dados por nossas faixas etárias definidas para resumir as vendas de cada categoria.

4. Histograma

Um histograma é um gráfico que mostra a distribuição ou propagação de dados agrupando-os em intervalos. Isso é especialmente útil quando se procura padrões e tendências na dispersão dos dados. Esse é frequentemente o caso das distribuições de tempo de entrega, volume de vendas em faixas de preço e muito mais.

Exemplo de histograma

Gráficos com SQL

De que informações precisamos para criar um histograma?

  • Rótulos: Precisamos do valor inicial e final de cada compartimento. Aqui usamos intervalos de 10 minutos no eixo X.
  • Alturas dasbarras: Para cada compartimento, precisamos calcular sua altura. Isso geralmente é feito usando uma função de agregação com GROUP BY.
  • Classificação: Normalmente, usamos ORDER BY para que os compartimentos sejam classificados do menor para o maior.

Exemplo de distribuição de tempo de entrega

Digamos que você trabalhe em uma empresa de entrega de alimentos e queira encontrar a variação nos tempos de entrega em Barcelona. Podemos preparar nossos dados para isso executando a seguinte consulta SQL:

SELECT 
    FLOOR(delivery_duration / 10) * 10 AS bin_start, 
    (FLOOR(delivery_duration / 10) + 1) * 10 AS bin_end, 
    COUNT(*) AS no_of_orders
FROM 
    deliveries
WHERE
   region = ‘Barcelona’
GROUP BY 
    bin_start
ORDER BY 
    bin_start;

Explicação:

  • FLOOR(delivery_duration / 10) * 10 AS bin_start: Primeiro, queremos criar nossos intervalos. Para fazer isso, agrupamos delivery_duration em intervalos de 10 minutos. Isso calcula o limite inferior de cada compartimento (bin_start).
  • (FLOOR(delivery_duration / 10) + 1) * 10 AS bin_end: Em seguida, precisamos calcular o limite superior de cada compartimento (bin_end) adicionando 10 minutos a bin_start.
  • COUNT(*) AS no_of_orders: Agora contamos o número de entregas que caem em cada compartimento de 10 minutos.
  • WHERE region = 'Barcelona': Para limitar os dados a Barcelona, filtramos nossa coluna region.
  • GROUP BY bin_start: Agrupamos as entregas por cada intervalo de 10 minutos.
  • ORDER BY bin_start: Por fim, classificamos os grupos em ordem crescente por seus horários de início.

5. Gráfico de dispersão

Por último, mas não menos importante, vamos dar uma olhada no gráfico de dispersão. Esse gráfico pode visualizar a possível relação entre até três variáveis por meio da plotagem de pontos de dados. Ele identifica efetivamente correlações e vínculos nos dados, como custo de publicidade versus vendas ou satisfação dos funcionários versus retenção.

Exemplo de gráfico de dispersão

Gráficos com SQL

Quais informações são necessárias para criar um gráfico de dispersão?

  • Coordenadas X e Y para cada ponto.
  • Rótulo: Opcionalmente, precisamos de um rótulo para cada ponto para dar a cada ponto uma cor (como em nosso gráfico de exemplo) ou um rótulo.

Esses dados podem ser simplesmente selecionados de um banco de dados ou podem ser computados, como no exemplo abaixo.

Exemplo de eficácia da publicidade

Digamos que queremos analisar a eficácia de diferentes formas de publicidade nos últimos dois anos, observando seu impacto nas vendas. Usando SQL, podemos preparar os dados da seguinte forma:

SELECT 
    DATE_FORMAT(sd.sale_date, '%Y-%m') AS year_month, 
    mc.advertising_type, 
    SUM(mc.advertising_spend) AS total_advertising_spend, 
    SUM(sd.sales) AS total_sales
FROM 
    marketing_campaigns mc
JOIN 
    sales_data sd ON mc.campaign_id = sd.campaign_id
WHERE 
    sd.sale_date BETWEEN '2022-01-01' AND '2023-12-31'
GROUP BY 
    month, mc.advertising_type
ORDER BY 
    year_month;

Explicação:

  • Cada ponto no gráfico corresponde a um mês e a um tipo de publicidade:
    • DATE_FORMAT(sd.sale_date, '%Y-%m') AS year_month: Primeiro, extraímos o ano e o mês de sale_date.
    • mc.advertising_type: Aqui, estamos selecionando o tipo de publicidade, que será usado como um matiz em nosso gráfico de dispersão. O matiz é essencialmente uma terceira camada que podemos adicionar com cores para diferenciar categorias em um gráfico.
  • SUM(mc.advertising_spend) AS total_advertising_spend: Agregamos o total de gastos com publicidade para cada mês e tipo de publicidade usando SUM().
  • SUM(sd.sales) AS total_sales: Novamente, usamos SUM() para agregar o total de vendas.
  • JOIN sales_data sd ON mc.campaign_id = sd.campaign_id: Como nossos dados desejados estão em duas tabelas separadas, juntamos a tabela marketing_campaigns com a tabela sales_data tabela com base na coluna comum campaign_id.
  • WHERE sd.sale_date BETWEEN '2022-01-01' AND '2023-12-31': Para nos concentrarmos nos dados de 2022 e 2023, filtramos a data de vendas.
  • GROUP BY year_month, mc.advertising_type: Agrupamos os dados por nossas categorias de gráfico, o que nos dá um total por mês e ano por tipo de publicidade.
  • ORDER BY year_month: Por fim, ordenamos os dados em ordem crescente por mês.

Se você quiser aprender ainda mais dicas e truques para aproveitar o SQL na criação de gráficos, não deixe de conferir nosso artigo Visualização de dados usando SQL: Um guia completo para analistas de dados.

Criação de gráficos com dados exportados do SQL

Depois que nossos dados são preparados, precisamos utilizar ferramentas especializadas para criar gráficos fora do SQL. Vamos dar uma olhada em algumas das alternativas e como você pode importar seus dados SQL para elas.

1. Python

O Python oferece bibliotecas como Matplotlib e seaborn para a criação de vários gráficos. Usando a biblioteca Python pandas, você pode importar e visualizar os dados do SQL. Vamos ver como fazer isso.

import pandas as pd

# Load the CSV file
df = pd.read_csv('/path/to/sql_export.csv')

# Preview the DataFrame
print(df.head())
  • Etapa 3: criar um gráfico usando uma biblioteca Python: Depois que os dados forem importados, poderemos criar nosso gráfico. Neste exemplo, criaremos um gráfico de barras usando Matplotlib e seaborn:
import matplotlib.pyplot as plt
import seaborn as sns

# Create a bar chart
plt.figure(figsize=(10, 6))
sns.barplot(x='product_category', y='total_sales', data=df, palette='viridis')

# Customize the chart
plt.title('Total Sales by Product Category (2023)', fontsize=16)
plt.xlabel('Product Category', fontsize=12)
plt.ylabel('Total Sales', fontsize=12)
plt.xticks(rotation=45)
plt.tight_layout()

# Show the chart
plt.show()

2. Tableau

O Tableau é uma solução de Business Intelligence fácil de usar que se conecta diretamente a bancos de dados SQL e gera painéis dinâmicos e interativos. Ele pode até mesmo suportar suas consultas SQL diretamente usando seu editor SQL personalizado. Há também conectores para os principais bancos de dados, como MySQL, PostgreSQL e Snowflake.

3. Power BI

O Power BI é um aplicativo popular da Microsoft que pode ser usado para criar relatórios e painéis interativos. Ele também inclui suporte nativo para o SQL Server e outros bancos de dados, permitindo que você realize consultas SQL diretas.

4. Looker Studio

O Looker Studio (antigo Google Data Studio) é um aplicativo baseado em nuvem para o desenvolvimento de painéis compartilháveis e interativos. Ele é perfeito para usuários que já estão familiarizados com o ambiente do Google. Ele é compatível com bancos de dados como BigQuery, MySQL e PostgreSQL e oferece suporte a consultas personalizadas.

Aprenda SQL para gráficos e análise de dados

O SQL é a base da análise de dados e, portanto, desempenha um papel importante na criação de gráficos de dados. Embora o SQL não tenha ferramentas de gráficos incorporadas, seu ponto forte é a preparação e a organização de dados para visualizações de dados. O uso do SQL em conjunto com ferramentas como Python, Tableau, Power BI ou Looker Studio melhora sua capacidade de extrair insights acionáveis e apresentá-los de forma eficaz.

Se você é novo no SQL e deseja aprimorar suas habilidades, agora é a hora de começar. O domínio do SQL não só acelerará seu processo de preparação de dados, como também melhorará sua capacidade de produzir gráficos e painéis visualmente atraentes.

Comece a aprender SQL hoje mesmo com nosso curso SQL para análise de dados! Você também pode examinar outras habilidades que podem ser valiosas para sua carreira em nosso artigo Habilidades que todo analista de dados deve ter. Bom aprendizado!