8 poin oleh GN⁺ 2024-08-30 | 2 komentar | Bagikan ke WhatsApp
  • Backend pandas dan dask dihentikan dan akan dihapus pada versi 10.0
  • Tidak ada perbedaan fitur antara backend pandas dan backend DuckDB bawaan, sementara DuckDB jauh lebih unggul dalam performa
  • pandas DataFrame masih bisa digunakan di Ibis sebagai format untuk bertukar data, tetapi menjalankan kueri menggunakan pandas tidak lagi didukung
  • Sebagian besar logika yang sama juga berlaku untuk backend dask, dan dask tetap merupakan proyek yang sangat baik untuk terus digunakan di luar Ibis

Mengapa pandas? Dan sejarah Ibis

  • Pada awal Ibis, hanya ada backend Impala
  • Backend Postgres kemudian ditambahkan, tetapi instalasinya rumit sehingga pengguna tidak bisa dengan mudah mencoba Ibis
  • Dibutuhkan cara untuk menguji API Ibis tanpa infrastruktur tambahan di luar notebook
  • Pada saat itu, jawaban yang paling jelas adalah menghubungkan backend pandas, satu-satunya mesin DataFrame in-memory yang tersedia

Kesulitan pada backend Pandas

  • pandas adalah pilihan terbaik pada masanya, tetapi tidak cocok dengan model analisis data milik Ibis
  • Backend pandas secara mendasar berbeda dari backend lain dan memiliki kode khusus paling banyak
  • pandas pada dasarnya adalah mesin eksekusi eager, sedangkan Ibis menggunakan model eksekusi lazy
  • Sulit membuat antarmuka pandas bekerja dengan cara lazy
  • Backend pandas lebih lambat daripada backend lain dan membutuhkan ribuan baris kode untuk mendukungnya
  • NaN di pandas dan NULL di Ibis adalah konsep yang secara mendasar berbeda, tetapi harus diperlakukan seolah sama
    • Di pandas, NaN digunakan sebagai penanda nilai yang hilang, tetapi hal ini menimbulkan masalah kompatibilitas dengan backend lain
    • NULL berarti nilai hilang, sedangkan NaN berarti bukan angka; keduanya adalah konsep yang secara mendasar berbeda
  • Tipe baru berbasis Arrow di pandas merupakan peningkatan besar, tetapi masalahnya masih belum sepenuhnya hilang

Membingungkan pengguna baru

  • Orang cenderung memilih hal yang sudah mereka kenal
  • Saat pertama kali memakai Ibis, pengguna harus memilih Ibis sekaligus backend-nya
  • Pengguna baru sering melaporkan bahwa "Ibis lambat"
  • Ini sebagian besar karena mereka menggunakan backend pandas
  • Jika mereka memakai DuckDB atau Polars, kemungkinan besar mereka akan jauh lebih mudah memulai

Kesetaraan fitur

  • Alasan paling kuat untuk menghapus backend pandas adalah karena sifatnya yang redundan
  • Backend DuckDB dapat mengueri pandas DataFrame dengan mulus, mendukung berbagai bentuk UDF, dan bisa membaca maupun menulis berbagai format seperti parquet, CSV, dan JSON
  • DuckDB mudah dipasang, berjalan secara lokal, sangat cepat, dan berinteraksi dengan baik dengan ekosistem Python

Ringkasan GN⁺

  • Mengadopsi DuckDB sebagai backend default tampak sebagai keputusan yang sangat bijak. Instalasinya mudah, berjalan secara lokal, sangat cepat, dan berinteraksi dengan baik dengan ekosistem Python. Ini juga merupakan alasan Ibis pada awalnya menambahkan pandas sebagai backend
  • Fakta bahwa pandas masih dapat digunakan sebagai format pertukaran data adalah kabar baik bagi pengguna pandas yang sudah ada. Tidak perlu membuang seluruh kode yang ada
  • Namun, tidak lagi menggunakan pandas untuk mengeksekusi kueri tampak sebagai arah yang tepat. Model eksekusi eager milik pandas tidak cocok dengan model eksekusi lazy milik Ibis. Karena itu, backend pandas sering kali jauh lebih lambat daripada menggunakan pandas secara langsung
  • Seiring Ibis mendukung semakin banyak backend, memelihara kode yang disesuaikan untuk backend tertentu akan menjadi semakin sulit. Menghapus backend pandas akan membuat codebase lebih rapi dan lebih mudah dirawat
  • Jika penggunaan backend DuckDB dapat menggantikan seluruh fungsi pandas, tampaknya tidak ada alasan untuk mempertahankan backend pandas. Sebaliknya, hal itu justru bisa membingungkan pengguna baru

2 komentar

 
yangeok 2024-09-03

Kenyataannya, kita memang masih sangat sering memakai pandas yang paling familiar,,

 
GN⁺ 2024-08-30
Opini Hacker News
  • NaN adalah hasil dari 0/0, yang berarti nilainya ada tetapi tidak diketahui secara pasti

    • NULL berarti nilai pada posisi tertentu tidak diketahui
    • Implementasi NaN dan NULL berbeda, tetapi tidak sepenuhnya tidak berkaitan
    • None di Python berbeda dari NaN dan NULL
  • Ada banyak engine komputasi yang lebih baik daripada pandas

    • pandas tetap digunakan karena codebase yang sudah ada dan integrasi pihak ketiga
    • Untuk pekerjaan data skala kecil, pandas sudah cukup memadai
  • Dalam beberapa bulan terakhir, pandas diganti dengan ibis di proyek baru

    • Sintaks ibis lebih fleksibel daripada pandas
    • Chaining operasi membuat snippet kode lebih portabel
    • Backend DuckDB sangat cepat
    • Komunitasnya sangat aktif dan ramah
    • Sedang merekomendasikan ibis kepada rekan kerja
  • Fitur multi-index di pandas adalah yang paling kuat

    • Ini juga bisa digunakan pada kolom
    • Tidak yakin bagaimana alat-alat baru akan menangani fitur ini
  • Penasaran apakah Polars sudah dipertimbangkan

    • Di grup mereka, pandas tidak disukai sehingga Polars dipakai sebagai standar
  • pandas dapat diperluas ke tipe kolom baru

    • Tidak yakin apakah Polars mendukung ini
  • Nilai Ibis bukan pada kemampuannya memakai DuckDB

    • Bahkan jika alat baru muncul, sintaksnya akan tetap berfungsi
  • Belum pernah banyak mendengar tentang Ibis

    • Jika meninggalkan pandas, kemungkinan kecil akan mencoba Ibis
    • Framework baru mulai menjauh dari pandas/numpy, tetapi akan menunggu sampai kompatibilitas dan edge case terselesaikan
    • Tidak masalah menunggu beberapa milidetik lebih lama
  • API library pandas tidak selalu intuitif

    • Ada masalah NaN/None, tetapi ini hanya ketidaknyamanan kecil
  • Alasan menggunakan pandas adalah ekosistemnya yang terintegrasi

    • pandas nyaman untuk membaca data dari file json, file csv, python dict, dan memvisualisasikannya dengan plotly
    • Jika Ibis kompatibel dengan dataframe pandas, backend tidak terlalu menjadi perhatian besar