Búsqueda de sitios web

Una guía para el análisis de datos en Python con DuckDB


Aprenda a realizar análisis de datos en Python usando DuckDB.

¿Es usted un desarrollador familiarizado con SQL y Python? Si es así, es posible que desee comenzar a utilizar DuckDB (una base de datos OLAP en proceso) para el análisis de datos.

SQL es el lenguaje para consultar bases de datos y es el más importante en su caja de herramientas de datos. Entonces, cuando cambias a Python, probablemente estés viendo pandas: leyendo datos de varias fuentes en un marco de datos y analizándolos.

Pero, ¿no sería bueno consultar marcos de datos de pandas, así como fuentes de datos como archivos CSV y Parquet usando SQL? DuckDB te permite hacer precisamente eso y mucho más. En este tutorial, aprenderemos cómo usar DuckDB en Python para analizar datos. ¡Empecemos!

Configurar el entorno

Para comenzar, cree y active un entorno virtual:

$ python3 -m venv v1
$ source v1/bin/activate

Siguiente instalación de duckdb:

$ pip3 install duckdb

Como también generamos datos de muestra con los que trabajar, también necesitaremos NumPy y Pandas:

$ pip3 install numpy pandas

Consultar datos con DuckDB

Una vez terminada la instalación rápida, podemos pasar a realizar algunos análisis de datos.

Nota: Es común utilizar conexiones al interactuar con bases de datos. Puede utilizar duckdb.connect() para trabajar tanto con bases de datos en memoria como con almacenamiento persistente.

  • Usar duckdb.connect() para conectarse a una base de datos en memoria que existe solo durante la sesión. Esto es adecuado para análisis rápidos, especialmente cuando no es necesario almacenar los resultados a largo plazo.
  • Para conservar datos entre sesiones y consultas, pase una ruta de archivo a la función connect() así: duckdb.connect('my_database.db').

Pero consultaremos archivos CSV y no necesitamos un objeto de conexión. Esta fue solo una nota para darle una idea cuando consulte bases de datos.

Generando archivos CSV de muestra

▶️ Puedes encontrar el código de este tutorial en GitHub.

Crearemos un conjunto de datos de ventas simulados, un par de archivos csv, que incluirán detalles del producto, precios, cantidades vendidas y las regiones en las que se produjeron las ventas. Ejecute generate_csv.py en la carpeta de su proyecto para generar dos archivos CSV: sales_data.csv y product_details.csv.

Cuando trabaja con archivos CSV en DuckDB, puede leer el archivo en una relación: duckdb.read_csv('your_file.csv') y luego consultarlo. O puedes trabajar directamente con archivos y consultarlos así:

import duckdb

duckdb.sql("SELECT * FROM 'sales_data.csv' LIMIT 5").df()

Puede guardar los resultados de la consulta usando df() como se muestra en el ejemplo.

Ahora ejecutemos algunas consultas SQL (realmente útiles) para analizar los datos en los archivos CSV.

Consulta de ejemplo 1: Calcular las ventas totales por región

Para comprender qué región generó más ingresos, podemos calcular las ventas totales por región. Puede calcular las ventas totales multiplicando el precio de cada producto por la cantidad vendida y resumiéndolo para cada región.

# Calculate total sales (Price * Quantity_Sold) per region
query = """
SELECT Region, SUM(Price * Quantity_Sold) as Total_Sales
FROM 'sales_data.csv'
GROUP BY Region
ORDER BY Total_Sales DESC
"""
total_sales = duckdb.sql(query).df()

print("Total sales per region:")
print(total_sales)

Esta consulta genera:

Total sales per region:
  Region      Total_Sales
0   East	454590.49
1  South	426352.72
2   West	236804.52
3  North	161048.07

Consulta de ejemplo 2: encuentre los 5 productos más vendidos

A continuación, queremos identificar los 5 productos más vendidos por cantidad vendida. Esto puede darnos una idea de qué productos tienen el mejor rendimiento en todas las regiones.

# Find the top 5 best-selling products by quantity
query = """
SELECT Product_Name, SUM(Quantity_Sold) as Total_Quantity
FROM 'sales_data.csv'
GROUP BY Product_Name
ORDER BY Total_Quantity DESC
LIMIT 5
"""
top_products = duckdb.sql(query).df()

print("Top 5 best-selling products:")
print(top_products)

Esto da el top 5 de productos con mayores ventas:

Top 5 best-selling products:
  Product_Name  Total_Quantity
0   Product_42        	99.0
1   Product_97        	98.0
2   Product_90        	96.0
3   Product_27        	94.0
4   Product_54        	94.0

Consulta de ejemplo 3: Calcular el precio promedio por región

También podemos calcular el precio promedio de los productos vendidos en cada región para identificar cualquier diferencia de precio entre regiones.

# Calculate the average price of products by region
query = """
SELECT Region, AVG(Price) as Average_Price
FROM 'sales_data.csv'
GROUP BY Region
"""
avg_price_region = duckdb.sql(query).df()

print("Average price per region:")
print(avg_price_region)

Esta consulta calcula el precio promedio de los productos vendidos en cada región y devuelve los resultados agrupados por región:

Average price per region:
  Region      Average_Price
0  North 	263.119167
1   East 	288.035625
2   West 	200.139000
3  South 	254.894722

Consulta de ejemplo 4: Cantidad total vendida por región

Para analizar más a fondo los datos, podemos calcular la cantidad total de productos vendidos en cada región. Esto nos ayuda a ver qué regiones tienen mayor actividad de ventas en términos de volumen.

# Calculate total quantity sold by region
query = """
SELECT Region, SUM(Quantity_Sold) as Total_Quantity
FROM 'sales_data.csv'
GROUP BY Region
ORDER BY Total_Quantity DESC
"""
total_quantity_region = duckdb.sql(query).df()

print("Total quantity sold per region:")
print(total_quantity_region)

Esta consulta calcula la cantidad total vendida por región y ordena el resultado en orden descendente, mostrando qué región vendió más productos:

Total quantity sold per region:
  Region  Total_Quantity
0  South      	1714.0
1   East      	1577.0
2   West      	1023.0
3  North       	588.0

Consulta de ejemplo 4: unirse a archivos CSV

DuckDB ofrece varias funciones avanzadas que lo hacen versátil para el análisis de datos. Por ejemplo, puede unir fácilmente varios archivos CSV para consultas más complejas o consultar conjuntos de datos más grandes almacenados en el disco sin cargarlos por completo en la memoria.

Esta consulta SQL JOIN combina dos archivos CSV, sales_data.csv y product_details.csv, haciendo coincidir filas en función de una columna común: Product_ID.

query = """
SELECT s.Product_Name, s.Region, s.Price, p.Manufacturer
FROM 'sales_data.csv' s
JOIN 'product_details.csv' p
ON s.Product_ID = p.Product_ID
"""
joined_data = duckdb.sql(query).df()

print(joined_data.head())

Esto debería generar:

     Product_Name  Region   Price   Manufacturer
0	Product_1  North  283.08  Manufacturer_4
1	Product_2   East  325.94  Manufacturer_3
2	Product_3   West   39.54  Manufacturer_2
3	Product_4  South  248.82  Manufacturer_4
4	Product_5   East  453.62  Manufacturer_5

Concluyendo

En este tutorial, vimos cómo usar DuckDB para el análisis de datos con Python.

Trabajamos con archivos CSV. Pero puedes trabajar con archivos parquet y JSON y bases de datos relacionales de la misma manera. Así que sí, DuckDB es una herramienta útil para analizar grandes conjuntos de datos en Python y es una adición bastante útil a su kit de herramientas de análisis de datos de Python.

Sugiero utilizar DuckDB en su próximo proyecto de análisis de datos. ¡Feliz codificación!