Tutorial Ibis: API DataFrame Portabel untuk Banyak Backend

# Ibis: API Dataframe Python yang Portabel di Banyak Backend Ibis adalah library dataframe Python yang memungkinkan Anda menulis kode analitik satu kali lalu menjalankannya di banyak mesin eksekusi,...

By Ruby Abdullah · · tutorial
IbisDataFrameSQLData EngineeringAnalyticsPython

Ibis: API Dataframe Python yang Portabel di Banyak Backend

Ibis adalah library dataframe Python yang memungkinkan Anda menulis kode analitik satu kali lalu menjalankannya di banyak mesin eksekusi, mulai dari DuckDB lokal di laptop hingga BigQuery, Snowflake, atau Spark di produksi. Daripada menulis ulang logika pandas menjadi SQL ketika data sudah tidak muat di memori, Anda cukup mendeskripsikan transformasinya dalam Python, dan Ibis akan mengompilasinya ke dialek backend mana pun yang Anda hubungkan. Tutorial ini membahas konsep intinya: deferred execution, portabilitas backend, dan contoh analitik menyeluruh yang praktis.

Masalah yang Diselesaikan Ibis

Banyak tim data menghadapi kendala yang sama. Anda membuat prototipe analisis dengan pandas karena cepat ditulis dan mudah dipahami. Dataset bertambah besar, tidak lagi muat di memori, dan sekarang Anda harus menerjemahkan kode pandas tersebut menjadi SQL agar bisa berjalan di dalam data warehouse. Kedua implementasi itu mulai berbeda, bug muncul saat penerjemahan, dan Anda harus memelihara dua versi dari logika yang sama.

Ibis menawarkan satu API dataframe yang berdiri di depan mesin eksekusi. Anda menulis ekspresi dalam Python, dan:

  • Kode yang sama berjalan di mesin lokal (DuckDB) saat pengembangan dan di warehouse (BigQuery, Snowflake, Postgres) saat produksi.
  • Komputasi berat terjadi di dalam mesin, dekat dengan data, bukan di proses Python Anda.
  • Anda terhindar dari menerjemahkan pandas ke SQL secara manual, dan bisa menskalakan dari laptop ke warehouse cukup dengan mengganti koneksi.

Model berpikirnya lebih dekat ke query builder ketimbang pandas. Anda menyusun deskripsi sebuah komputasi, bukan langsung memmaterialisasi hasil antara.

Deferred Execution (Eksekusi Tertunda)

Ini adalah konsep paling penting di Ibis. Ketika Anda merangkai operasi seperti filter, select, dan groupby, tidak ada yang dihitung. Anda sedang membangun expression tree. Eksekusi baru terjadi ketika Anda secara eksplisit meminta hasilnya.

import ibis

con = ibis.duckdb.connect()

Ini membangun ekspresi. Belum ada query yang berjalan.

orders = con.table("orders")

expr = (

orders

.filter(orders.status == "completed")

.groupby("country")

.aggregate(total=orders.amount.sum())

)

Masih belum ada yang dieksekusi. expr hanyalah sebuah deskripsi.

print(type(expr)) #

Eksekusi terjadi di sini, mengembalikan pandas DataFrame.

df = expr.execute()

Titik pemicu yang benar-benar menjalankan query adalah:

  • .execute() — mengembalikan pandas DataFrame (default).
  • .topandas() — output pandas secara eksplisit.
  • .topolars() — mengembalikan Polars DataFrame.
  • .topyarrow() — mengembalikan PyArrow Table.
  • .head().execute() — melihat sampel kecil.

Karena eksekusi tertunda, Ibis dapat mendorong seluruh pipeline ke mesin sebagai satu query yang teroptimasi. Inilah yang membuatnya skalabel: Anda tidak menarik data mentah ke Python lalu memfilternya di sana.

Instalasi

Ibis dipasang bersama satu atau lebih extra backend. Setiap backend yang ingin Anda gunakan adalah dependensi opsional, sehingga instalasinya tetap ramping.

# Library inti plus backend DuckDB (titik awal yang direkomendasikan)

pip install 'ibis-framework[duckdb]'

Tambahkan backend lain sesuai kebutuhan

pip install 'ibis-framework[bigquery]'

pip install 'ibis-framework[postgres]'

pip install 'ibis-framework[snowflake]'

pip install 'ibis-framework[polars]'

Beberapa backend sekaligus

pip install 'ibis-framework[duckdb,postgres,bigquery]'

Verifikasi instalasi:

import ibis

print(ibis.version)

DuckDB adalah backend lokal yang direkomendasikan. Ia berjalan in-process, tidak butuh server, dan mendukung jangkauan fitur SQL lengkap yang dikompilasi Ibis, sehingga ideal untuk pengembangan dan pengujian.

Menghubungkan ke Backend

Koneksi adalah objek yang tahu cara berbicara dengan sebuah mesin. API ekspresi yang sama bekerja terlepas dari koneksi mana yang Anda buat.

import ibis

DuckDB in-memory (bagus untuk eksperimen)

con = ibis.duckdb.connect()

DuckDB yang dipersistensi ke file

con = ibis.duckdb.connect("analytics.ddb")

Artikel Terkait

DuckDB: Database Analitik In-Process untuk Data Science

DuckDB: Database Analitik In-Process untuk Data Science DuckDB adalah database analitik in-process yang dirancang khusus...

Tutorial PostgreSQL Advanced untuk ML: Analytics dan Feature Engineering

Tutorial 17: PostgreSQL Lanjutan untuk Machine Learning Daftar Isi Pendahuluan Prasyarat Window Functions untuk Rekayasa...

Tutorial dlt: Pipeline Ingestion Data Berbasis Python

Membangun Pipeline EL Berbasis Python dengan dlt (data load tool) Sebagian besar tim data menghabiskan waktu yang tidak ...

Tutorial Pandera: Validasi Data Statistik untuk DataFrame

Pandera: Validasi Data Statistik untuk DataFrame pandas dan Polars Pipeline data sering gagal tanpa suara. Sebuah kolom ...