Cómo crear canalizaciones de ingeniería de funciones portátiles en la base de datos con Ibis utilizando las API de Lazy Python y la ejecución de DuckDB

En este tutorial, demostramos cómo usamos Ibis para construir un proceso de ingeniería de características portátil en la base de datos que se ve y se siente como Pandas pero se ejecuta completamente dentro de la base de datos. Mostramos cómo nos conectamos a DuckDB, registramos datos de forma segura dentro del backend y definimos transformaciones complejas utilizando funciones de ventana y agregaciones sin tener que extraer datos sin procesar a la memoria local. Al mantener todas las transformaciones lentas e independientes del backend, demostramos cómo escribir código analítico una vez en Python y confiar en Ibis para traducirlo a SQL eficiente. Consulta los CÓDIGOS COMPLETOS aquí.

!pip -q instalar “ibis-framework[duckdb,examples]” duckdb pyarrow pandas importa ibis desde ibis import _ print(“Versión de Ibis:”, ibis.__versión__) con = ibis.duckdb.connect() ibis.options.interactive = True

Instalamos las librerías necesarias e inicializamos el entorno Ibis. Establecemos una conexión DuckDB y habilitamos la ejecución interactiva para que todas las operaciones posteriores sigan siendo diferidas y controladas por el backend. Consulta los CÓDIGOS COMPLETOS aquí.

intente: base_expr = ibis.examples.penguins.fetch(backend=con) excepto TypeError: base_expr = ibis.examples.penguins.fetch() si “pingüinos” no están en con.list_tables(): intente: con.create_table(“pingüinos”, base_expr, overwrite=True) excepto excepción: con.create_table(“pingüinos”, base_expr.execute(), sobrescribir=True) t = con.table(“pingüinos”) print(t.schema())

Cargamos el conjunto de datos de Penguins y lo registramos explícitamente dentro del catálogo de DuckDB para garantizar que esté disponible para la ejecución de SQL. Verificamos el esquema de la tabla y confirmamos que los datos ahora residen dentro de la base de datos en lugar de en la memoria local. Consulta los CÓDIGOS COMPLETOS aquí.

def penguin_feature_pipeline(pingüinos): base = penguins.mutate( bill_ratio=_.bill_length_mm / _.bill_profundidad_mm, is_male=(_.sex == “male”).ifelse(1, 0), ) clean = base.filter( _.bill_length_mm.notnull() & _.bill_profundidad_mm.notnull() & _.body_mass_g.notnull() & _.flipper_length_mm.notnull() & _.species.notnull() & _.island.notnull() & _.year.notnull() ) w_species = ibis.window(group_by=[cleaned.species]) w_isla_año = ibis.ventana( grupo_por=[cleaned.island]ordenar_por=[cleaned.year]anterior=2, siguiente=0, ) hazaña = clean.mutate( species_avg_mass=cleaned.body_mass_g.mean().over(w_species), especie_std_mass=cleaned.body_mass_g.std().over(w_species), mass_z=( clean.body_mass_g – clean.body_mass_g.mean().over(w_species) ) / clean.body_mass_g.std().over(w_species), island_mass_rank=cleaned.body_mass_g.rank().over( ibis.window(group_by=[cleaned.island]) ), Rolling_3yr_island_avg_mass=cleaned.body_mass_g.mean().over( w_island_year ), ) return feat.group_by([“species”, “island”, “year”]).agg( n=feat.count(), avg_mass=feat.body_mass_g.mean(), avg_flipper=feat.flipper_length_mm.mean(), avg_bill_ratio=feat.bill_ratio.mean(), avg_mass_z=feat.mass_z.mean(), avg_rolling_3yr_mass=feat.rolling_3yr_island_avg_mass.mean(), pct_male=feat.is_male.mean(), ).order_by([“species”, “island”, “year”])

Definimos una canalización de ingeniería de características reutilizable utilizando expresiones Ibis puras. Calculamos características derivadas, aplicamos limpieza de datos y utilizamos funciones de ventana y agregaciones agrupadas para crear características avanzadas nativas de la base de datos mientras mantenemos todo el proceso inactivo. Consulta los CÓDIGOS COMPLETOS aquí.

características = penguin_feature_pipeline

Invocamos la canalización de funciones y la compilamos en DuckDB SQL para validar que todas las transformaciones se envíen a la base de datos. Luego ejecutamos el proceso y devolvemos solo los resultados agregados finales para su inspección. Consulta los CÓDIGOS COMPLETOS aquí.

con.create_table(“penguin_features”, características, overwrite=True) feat_tbl = con.table(“penguin_features”) prueba: vista previa = feat_tbl.limit(10).to_pandas() excepto Excepción: vista previa = feat_tbl.limit(10).execute() display(preview) out_path = “/content/penguin_features.parquet” con.raw_sql(f”COPY penguin_features TO ‘{out_path}’ (FORMATEAR PARQUET);”) print(out_path)

Materializamos las características diseñadas como una tabla directamente dentro de DuckDB y la consultamos perezosamente para su verificación. También exportamos los resultados a un archivo Parquet, lo que demuestra cómo podemos transferir funciones calculadas por bases de datos a análisis posteriores o flujos de trabajo de aprendizaje automático.

En conclusión, construimos, compilamos y ejecutamos un flujo de trabajo de ingeniería de funciones avanzadas completamente dentro de DuckDB utilizando Ibis. Demostramos cómo inspeccionar el SQL generado, materializar los resultados directamente en la base de datos y exportarlos para su uso posterior, preservando al mismo tiempo la portabilidad entre los backends analíticos. Este enfoque refuerza la idea central detrás de Ibis: mantenemos la computación cerca de los datos, minimizamos el movimiento de datos innecesario y mantenemos una base de código Python única y reutilizable que escala desde la experimentación local hasta las bases de datos de producción.

Consulta los CÓDIGOS COMPLETOS aquí. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 100.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.

Consulte nuestra última versión de ai2025.dev, una plataforma de análisis centrada en 2025 que convierte los lanzamientos de modelos, los puntos de referencia y la actividad del ecosistema en un conjunto de datos estructurado que puede filtrar, comparar y exportar.

Asif Razzaq es el director ejecutivo de Marktechpost Media Inc.. Como empresario e ingeniero visionario, Asif está comprometido a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, Marktechpost, que se destaca por su cobertura en profundidad del aprendizaje automático y las noticias sobre aprendizaje profundo que es técnicamente sólida y fácilmente comprensible para una amplia audiencia. La plataforma cuenta con más de 2 millones de visitas mensuales, lo que ilustra su popularidad entre el público.