Volver a la lista de artículos Artículos
Lectura de 14 minutos

Gráficos con SQL: Guía para principiantes

SQL, también conocido como lenguaje de consulta estructurado, es una valiosa herramienta para los analistas de datos. Permite consultar, actualizar y organizar los datos. Se trata de una condición previa fundamental para crear gráficos. En este artículo, exploraremos cómo preparar datos con SQL para su uso en visualizaciones de datos.

Los datos en bruto sólo son valiosos si se sabe cómo limpiarlos y organizarlos. Por lo tanto, preparar adecuadamente los datos para los gráficos es un paso importante para crear gráficos cautivadores e informativos. En este artículo, analizaremos cómo utilizar SQL para limpiar los datos que se utilizarán en un gráfico.

Los gráficos son representaciones visuales de datos que incluyen gráficos de barras, gráficos de líneas, gráficos circulares, gráficos de cajas y muchos otros. Su objetivo es convertir datos complejos en información clara y práctica. Esto es especialmente importante porque los analistas de datos deben ser capaces de comunicar sus ideas al resto de su equipo y a otras partes interesadas.

Aunque SQL destaca en la limpieza y preparación de datos, carece de una función integrada de creación de gráficos. Sin embargo, hay muchos recursos externos para hacerlo, como Tableau, Looker Studio, Power BI o las bibliotecas de Python. Dicho esto, la calidad de los gráficos depende de los datos utilizados para crearlos. Si los datos no se preparan correctamente, los gráficos no podrán expresar ningún mensaje significativo.

Por ello, el SQL sigue siendo extremadamente importante. ¿Y qué mejor momento para empezar a estudiar que ahora, con nuestro curso de SQL para análisis de datos? Este curso le enseñará todas las habilidades clave para preparar datos para gráficos.

En este artículo le mostraremos cómo utilizar SQL para preparar sus datos para gráficos utilizando herramientas externas. También se proporcionarán ejemplos y consultas SQL para que practiques. Así que, dicho esto, ¡empecemos!

Preparación de gráficos con SQL

La preparación de los datos es un primer paso fundamental para crear visualizaciones de datos atractivas. Usando SQL, podemos organizar, agregar y filtrar datos eficientemente con sólo unas pocas líneas de código. Veamos algunos ejemplos de gráficos que puedes crear. (P.D. Aquí está nuestra Hoja de trucos de SQL para análisis de datos para que puedas repasar algunas de las funciones si lo necesitas).

1. Gráfico de barras

Un gráfico de barras es un tipo de gráfico que contiene barras rectangulares que representan diferentes categorías de datos. La altura (para un gráfico vertical) o la longitud (para un gráfico horizontal) de la barra representa el valor de la categoría relacionada.

Los gráficos de barras son útiles para comparar datos de diferentes categorías, como las ventas por producto, los pedidos por región, etc. Puede identificar las diferencias o tendencias dentro de estas categorías de un vistazo.

Ejemplo de gráfico de barras

Aquí tiene un ejemplo de gráfico de barras. Crearemos la consulta SQL para este gráfico más adelante en el artículo.

Gráficos con SQL

¿Qué información necesitamos para crear un gráfico de barras?

  • Etiquetas: Necesitamos las etiquetas para cada barra en el eje X (horizontal). La consulta debe devolver las etiquetas como una de las columnas de la cláusula SELECT.
  • Altura delas barras: La altura de las barras está en función de nuestro eje Y (vertical). Esta es otra columna que debe calcularse en SELECT. La altura de las barras se calculará normalmente utilizando una función agregada como SUM() o COUNT() y GROUP BY utilizando las etiquetas del eje X.
  • Ordenar: Opcionalmente, podemos querer organizar las barras del gráfico en un orden determinado.

Ejemplo de Ventas por Categoría de Producto

Imagine que desea analizar las ventas totales de 2023 para cada categoría de producto. Con la ayuda de SQL, puede preparar los datos para el gráfico de barras utilizando la siguiente 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;

Explicación:

  • SELECT product_category, SUM(sales_amount) AS total_sales: Primero seleccionamos las columnas deseadas y utilizamos la función de agregado SUM en sales_amount para agregar las ventas por categoría de producto. Esta será nuestra etiqueta del eje X y la altura de la barra.
  • WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31: Queremos evaluar sólo las ventas de 2023, así que esta cláusula filtra los datos para que contengan sólo las ventas de 2023.
  • GROUP BY product_category: Aquí agrupamos nuestros datos por product_category para resumir las ventas totales.
  • ORDER BY total_sales DESC: Finalmente, ordenamos los datos en orden descendente para que las ventas más altas sean las primeras y las ventas más bajas sean las últimas.

2. Gráfico de líneas

Un gráfico de líneas es un tipo de gráfico que muestra puntos de datos conectados por una línea. Este gráfico es una gran visualización de datos para mostrar las tendencias de datos en el tiempo, como el seguimiento de la actividad del sitio web durante un mes, el análisis de las tendencias de ventas durante un año, y más.

Ejemplo de gráfico de líneas

He aquí un ejemplo de gráfico de líneas:

Gráficos con SQL

¿Qué información necesitamos para crear un gráfico de líneas?

  • Etiquetas: Necesitamos etiquetas (normalmente fechas) para el eje X.
  • Altura dela línea: Para cada punto de la línea, necesitamos una altura de línea. Puede ser el valor de esa fecha, seleccionado de la base de datos o calculado con una función de agregación. También puede ser otro valor, como una media móvil, calculado con la ayuda de funciones de ventana.
  • Ordenación: Para que nuestros datos estén correctamente ordenados por fecha, utilizamos ORDER

Ejemplo de ventas de teléfonos móviles

Imaginemos que queremos encontrar los días punta de ventas de teléfonos móviles controlando las ventas mensuales de nuestro sitio web. Para ello, podemos calcular la media móvil de los datos de ventas para suavizar las fluctuaciones.

En primer lugar, dividiremos la consulta en dos partes: una subconsulta que recoja los datos necesarios y una consulta principal que calcule la media móvil utilizando estos datos. Utilizando SQL, podríamos preparar la subconsulta de la siguiente manera:

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;

Explicación:

  • SELECT DATE(sale_date) AS sale_day, COUNT(*) AS mobile_sales_count: Extrae la fecha de sale_date y cuenta las ventas de móviles de cada día.
  • WHERE device_type = 'mobile': Filtra la columna device_type para incluir sólo las ventas de dispositivos móviles.
  • GROUP BY sale_day: Agrupa los datos por día.
  • ORDER BY sale_day ASC: Ordena los resultados por fecha en orden ascendente.

A continuación, llevamos esta consulta un paso más allá utilizando una media móvil como se ha mencionado. Una media móvil suaviza las variaciones a corto plazo en los datos ayudando a minimizar las fluctuaciones. Una fluctuación es una variación a corto plazo en los datos, como picos o descensos diarios, que pueden ocultar tendencias más amplias.

Al utilizar una media móvil de 7 días, podemos determinar la media del día actual y de los seis días anteriores. De este modo, suavizamos las variaciones diarias y revelamos las tendencias semanales. Si modificamos nuestra consulta anterior, podremos hacer exactamente eso:

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;

Explicación:

  • SELECT sale_day, AVG(mobile_sales_count) OVER (ORDER BY sale_day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg: Se trata de una función ventana que calcula una media móvil de 7 días (actual + 6 días anteriores) de las ventas de móviles, ordenadas por día_venta.
  • FROM (...) daily_sales: Aquí estamos adaptando la consulta anterior como una subconsulta, y nombrándola daily_sales.

Obtenga más información sobre las funciones ventana con nuestro artículo Ejemplo de función ventana SQL con explicaciones.

3. Gráfico Circular

Un gráfico circular es un gráfico que divide un círculo en secciones o rebanadas, cada una de las cuales representa una porción del todo. Este tipo de gráfico es particularmente útil para representar proporciones o porcentajes, como en la distribución demográfica, desgloses de fuentes de ingresos, etc.

Ejemplo de gráfico circular

Un ejemplo de gráfico circular puede tener este aspecto:

Gráficos con SQL

¿Qué información necesitamos para crear un gráfico circular?

  • Etiquetas: Necesitamos etiquetas para cada porción del gráfico circular.
  • Tamaño dela porción: Necesitamos calcular el tamaño de cada rebanada.
  • Cálculoporcentual: Necesitamos calcular la contribución proporcional de cada grupo al total, en forma de porcentaje.
  • Agrupación: Normalmente necesitamos agrupar por etiquetas del gráfico.

Ejemplo de desglose demográfico de ventas

Imaginemos que queremos ver el porcentaje de ventas aportado por cada segmento demográfico de edad para nuestro negocio. Podríamos utilizar la siguiente consulta para preparar nuestros datos:

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; 

Explicación:

  • CASE ... END AS age_group: Utilizando la sentencia CASE, dividimos las edades de nuestros clientes en los grupos de edad especificados. Cada grupo formará una porción de nuestro gráfico circular.
  • SUM(sales_amount) AS total_sales: Usando la función SUM() aggregate, calculamos la cantidad total de ventas para cada grupo de edad.
  • SUM(sales_amount) * 100.0 / SUM(SUM(sales_amount)) OVER () AS pc_of_sales: Utilizando una función de ventana, calculamos el porcentaje de ventas totales aportado por cada grupo de edad.
  • WHERE age IS NOT NULL: Para limpiar los datos, filtramos las filas con valores NULL en la columna age.
  • GROUP BY age_group: Por último, agrupamos los datos por los grupos de edad definidos para resumir las ventas de cada categoría.

4. Histograma

Un histograma es un gráfico que muestra la distribución o dispersión de los datos agrupándolos en intervalos. Resulta especialmente útil cuando se buscan patrones y tendencias en la dispersión de los datos. Este es a menudo el caso de las distribuciones de tiempo de entrega, volumen de ventas a través de rangos de precios, y más.

Ejemplo de histograma

Gráficos con SQL

¿Qué información necesitamos para crear un histograma?

  • Etiquetas: Necesitamos el valor inicial y final de cada intervalo. Aquí utilizamos intervalos de 10 minutos en el eje X.
  • Alturas delas barras: Para cada contenedor, necesitamos calcular su altura. Esto se hace normalmente utilizando una función agregada con GROUP BY.
  • Ordenación: Normalmente, utilizamos ORDER BY para que los contenedores se ordenen de menor a mayor.

Ejemplo de Distribución del Tiempo de Entrega

Supongamos que trabaja para una empresa de reparto de comida a domicilio y desea conocer la variación de los tiempos de entrega en Barcelona. Podemos preparar nuestros datos para ello ejecutando la siguiente 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;

Explicación:

  • FLOOR(delivery_duration / 10) * 10 AS bin_start: En primer lugar, queremos crear nuestros intervalos. Para ello, agrupamos delivery_duration en intervalos de 10 minutos. Esto calcula el límite inferior de cada bin (bin_start).
  • (FLOOR(delivery_duration / 10) + 1) * 10 AS bin_end: A continuación, tenemos que calcular el límite superior de cada bin (bin_end) añadiendo 10 minutos a bin_start.
  • COUNT(*) AS no_of_orders: Ahora contamos el número de entregas que caen dentro de cada intervalo de 10 minutos.
  • WHERE region = 'Barcelona': Para limitar los datos a Barcelona, filtramos nuestra columna region.
  • GROUP BY bin_start: Agrupamos las entregas por cada intervalo de 10 minutos.
  • ORDER BY bin_start: Por último, ordenamos los grupos en orden ascendente por sus horas de inicio.

5. Gráfico de dispersión

Por último, echemos un vistazo al gráfico de dispersión. Este gráfico puede visualizar la relación potencial entre hasta tres variables trazando puntos de datos. Identifica eficazmente correlaciones y vínculos en los datos, como el coste de la publicidad frente a las ventas o la satisfacción de los empleados frente a la retención.

Ejemplo de diagrama de dispersión

Gráficos con SQL

¿Qué información necesitamos para crear un gráfico de dispersión?

  • Coordenadas X e Y de cada punto.
  • Etiqueta: Opcionalmente, necesitamos una etiqueta para cada punto para dar a cada punto un color (como en nuestro ejemplo de gráfico) o una etiqueta.

Estos datos pueden seleccionarse simplemente de una base de datos o pueden calcularse, como en nuestro ejemplo.

Ejemplo de eficacia publicitaria

Supongamos que queremos analizar la eficacia de diferentes formas de publicidad durante los dos últimos años observando su impacto en las ventas. Utilizando SQL, podemos preparar los datos de la siguiente manera:

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;

Explicación:

  • Cada punto del gráfico corresponde a un mes y a un tipo de publicidad:
    • DATE_FORMAT(sd.sale_date, '%Y-%m') AS year_month: En primer lugar, extraemos el año y el mes de sale_date.
    • mc.advertising_type: Aquí seleccionamos el tipo de publicidad, que se utilizará como matiz en nuestro gráfico de dispersión. El matiz es esencialmente una tercera capa que podemos añadir con el color para diferenciar categorías en un gráfico.
  • SUM(mc.advertising_spend) AS total_advertising_spend: Agregamos el gasto total en publicidad para cada mes y tipo de publicidad utilizando SUM().
  • SUM(sd.sales) AS total_sales: De nuevo utilizamos SUM() para agregar las ventas totales.
  • JOIN sales_data sd ON mc.campaign_id = sd.campaign_id: Como nuestros datos deseados están en dos tablas separadas, unimos la tabla marketing_campaigns con la tabla sales_data tabla basada en la columna común campaign_id.
  • WHERE sd.sale_date BETWEEN '2022-01-01' AND '2023-12-31': Para centrarnos en los datos de 2022 y 2023, filtramos la fecha de venta.
  • GROUP BY year_month, mc.advertising_type: Agrupamos los datos por las categorías de nuestra tabla, lo que nos da un total por mes año por tipo de publicidad.
  • ORDER BY year_month: Por último, ordenamos los datos en orden ascendente por mes.

Si quiere aprender aún más trucos y consejos para aprovechar SQL para crear gráficos, asegúrese de consultar nuestro artículo Visualización de datos con SQL: Guía para analistas de datos.

Creación de Gráficos con Datos Exportados desde SQL

Una vez preparados nuestros datos, debemos utilizar herramientas especializadas para crear gráficos fuera de SQL. Veamos algunas de las alternativas y cómo puedes importar tus datos SQL a ellas.

1. Python

Python proporciona bibliotecas como Matplotlib y seaborn para crear diversos gráficos. Usando la librería de Python pandas, puedes importar y visualizar los datos desde SQL. Veamos cómo hacerlo.

import pandas as pd

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

# Preview the DataFrame
print(df.head())
  • Paso 3: Crear un gráfico utilizando una librería de Python: Una vez importados los datos, podemos crear nuestro gráfico. En este ejemplo, crearemos un gráfico de barras utilizando Matplotlib y 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

Tableau es una solución de Business Intelligence fácil de usar que se conecta directamente a bases de datos SQL y genera cuadros de mando dinámicos e interactivos. Incluso puede soportar sus consultas SQL directamente utilizando su editor SQL personalizado. También dispone de conectores para las principales bases de datos, como MySQL, PostgreSQL y Snowflake.

3. Power BI

Power BI es una popular aplicación de Microsoft que puede utilizarse para crear informes y cuadros de mando interactivos. También incluye soporte nativo para SQL Server y otras bases de datos, lo que permite realizar consultas SQL directas.

4. Looker Studio

Looker Studio (antes Google Data Studio) es una aplicación basada en la nube para desarrollar cuadros de mando interactivos y compartibles. Es perfecta para usuarios que ya están familiarizados con el entorno de Google. Es compatible con bases de datos como BigQuery, MySQL y PostgreSQL, y admite consultas personalizadas.

Aprende SQL para gráficos y análisis de datos

SQL es la base del análisis de datos; como tal, desempeña un papel importante en el trazado de gráficos de datos. Aunque SQL carece de herramientas de gráficos integradas, su fuerza reside en la preparación y organización de datos para visualizaciones de datos. El uso de SQL junto con herramientas como Python, Tableau, Power BI o Looker Studio mejora la capacidad de extraer información útil y presentarla de forma eficaz.

Si eres nuevo en SQL y quieres mejorar tus habilidades, ahora es el momento de empezar. Dominar SQL no sólo acelerará su proceso de preparación de datos, sino que también mejorará su capacidad para producir gráficos y cuadros de mando visualmente atractivos.

Empieza a aprender SQL hoy mismo con nuestro curso SQL para análisis de datos. También puedes echar un vistazo a otras habilidades que pueden ser valiosas para tu carrera en nuestro artículo Skills Every Data Analyst Should Have. ¡Feliz aprendizaje!