En este tutorial, demostramos cómo usamos Ibis para construir una canalización de ingeniería de características portátil en la cojín de datos que se vea y se sienta como Pandas pero que se ejecute completamente internamente de la cojín de datos. Mostramos cómo nos conectamos a DuckDB, registramos datos de forma segura internamente del backend y definimos transformaciones complejas utilizando funciones de ventana y agregaciones sin tener que extraer datos sin procesar a la memoria específico. Al perseverar todas las transformaciones lentas e independientes del backend, demostramos cómo escribir código analítico una vez en Python y aguardar en Ibis para traducirlo a SQL apto. Mira el CÓDIGOS COMPLETOS aquí.
!pip -q install "ibis-framework(duckdb,examples)" duckdb pyarrow pandas
import ibis
from ibis import _
print("Ibis version:", ibis.__version__)
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. Mira el CÓDIGOS COMPLETOS aquí.
try:
base_expr = ibis.examples.penguins.fetch(backend=con)
except TypeError:
base_expr = ibis.examples.penguins.fetch()
if "penguins" not in con.list_tables():
try:
con.create_table("penguins", base_expr, overwrite=True)
except Exception:
con.create_table("penguins", base_expr.execute(), overwrite=True)
t = con.table("penguins")
print(t.schema())
Cargamos el conjunto de datos de Penguins y lo registramos explícitamente internamente del catálogo de DuckDB para avalar que esté adecuado para la ejecución de SQL. Verificamos el esquema de la tabla y confirmamos que los datos ahora residen internamente de la cojín de datos en sitio de en la memoria específico. Mira el CÓDIGOS COMPLETOS aquí.
def penguin_feature_pipeline(penguins):
cojín = penguins.mutate(
bill_ratio=_.bill_length_mm / _.bill_depth_mm,
is_male=(_.sex == "male").ifelse(1, 0),
)
cleaned = cojín.filter(
_.bill_length_mm.notnull()
& _.bill_depth_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_island_year = ibis.window(
group_by=(cleaned.island),
order_by=(cleaned.year),
preceding=2,
following=0,
)
feat = cleaned.mutate(
species_avg_mass=cleaned.body_mass_g.mean().over(w_species),
species_std_mass=cleaned.body_mass_g.std().over(w_species),
mass_z=(
cleaned.body_mass_g
- cleaned.body_mass_g.mean().over(w_species)
) / cleaned.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 higienización de datos y utilizamos funciones de ventana y agregaciones agrupadas para crear características avanzadas nativas de la cojín de datos mientras mantenemos todo el proceso inactivo. Mira el CÓDIGOS COMPLETOS aquí.
features = penguin_feature_pipeline
print(con.compile(features))
try:
df = features.to_pandas()
except Exception:
df = features.execute()
display(df.head())
Invocamos la canalización de funciones y la compilamos en DuckDB SQL para validar que todas las transformaciones se envíen a la cojín de datos. Luego ejecutamos el proceso y devolvemos solo los resultados agregados finales para su inspección. Mira el CÓDIGOS COMPLETOS aquí.
con.create_table("penguin_features", features, overwrite=True)
feat_tbl = con.table("penguin_features")
try:
preview = feat_tbl.limit(10).to_pandas()
except Exception:
preview = feat_tbl.limit(10).execute()
display(preview)
out_path = "/content/penguin_features.parquet"
con.raw_sql(f"COPY penguin_features TO '{out_path}' (FORMAT PARQUET);")
print(out_path)
Materializamos las características diseñadas como una tabla directamente internamente de DuckDB y la consultamos perezosamente para su comprobación. Además exportamos los resultados a un archivo Parquet, lo que demuestra cómo podemos transferir funciones calculadas por bases de datos a prospección posteriores o flujos de trabajo de formación necesario.
En conclusión, construimos, compilamos y ejecutamos un flujo de trabajo de ingeniería de funciones avanzadas completamente internamente de DuckDB utilizando Ibis. Demostramos cómo inspeccionar el SQL generado, materializar los resultados directamente en la cojín 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 cojín de código Python única y reutilizable que escalera desde la experimentación específico hasta las bases de datos de producción.
Mira el CÓDIGOS COMPLETOS aquí. Encima, no dudes en seguirnos en Gorjeo y no olvides unirte a nuestro SubReddit de más de 100.000 ml y suscríbete a nuestro boletín. ¡Esperar! estas en telegrama? Ahora igualmente puedes unirte a nosotros en Telegram.
Consulte nuestra última lectura de ai2025.devuna plataforma de prospección centrada en 2025 que convierte los lanzamientos de modelos, los puntos de remisión y la actividad del ecosistema en un conjunto de datos estructurado que puede filtrar, comparar y exportar.
Asif Razzaq es el director ejecutante de Marktechpost Media Inc.. Como emprendedor e ingeniero fantaseador, Asif está comprometido a beneficiarse el potencial de la inteligencia fabricado para el correctamente social. Su esfuerzo más fresco es el tiro de una plataforma de medios de inteligencia fabricado, Marktechpost, que se destaca por su cobertura en profundidad del formación necesario y las parte sobre formación 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 divulgado.