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!