Polars - Tutorial Lengkap Library DataFrame Ultra-Cepat
Daftar Isi
Pendahuluan
Polars adalah library DataFrame yang sangat cepat, ditulis dalam Rust dengan binding Python. Library ini memanfaatkan format memori kolumnar Apache Arrow dan mesin query multi-thread untuk memberikan performa yang seringkali 10-100x lebih cepat dari Pandas. Polars mendukung evaluasi eager dan lazy, menjadikannya ideal untuk analisis data eksploratif maupun pipeline data produksi.
Keunggulan utama Polars dibandingkan Pandas:
- Ditulis dalam Rust dengan interoperabilitas zero-copy melalui Apache Arrow
- Eksekusi multi-thread secara default
- Evaluasi lazy dengan optimasi query
- API yang konsisten tanpa kebingungan berbasis indeks
- Dukungan streaming untuk pemrosesan out-of-core
Prasyarat
- Python 3.8 atau lebih tinggi
- Pemahaman dasar tentang DataFrame dan data tabular
pip install polars
pip install polars[all] # Termasuk dependensi opsional (Excel, konektor database, dll.)
pip install pandas # Untuk benchmark perbandingan
pip install scikit-learn # Untuk contoh pipeline ML
Dasar-Dasar Polars
Membuat DataFrame
import polars as pl
Dari dictionary
df = pl.DataFrame({
"nama": ["Alice", "Bob", "Charlie", "Diana", "Eve"],
"umur": [30, 25, 35, 28, 32],
"departemen": ["Teknik", "Pemasaran", "Teknik", "Penjualan", "Pemasaran"],
"gaji": [95000, 65000, 105000, 72000, 78000],
"tanggalmasuk": ["2020-01-15", "2021-06-01", "2019-03-20", "2022-01-10", "2020-09-05"]
})
Konversi kolom tanggal
df = df.withcolumns(pl.col("tanggalmasuk").str.todate())
print(df)
print(f"Bentuk: {df.shape}")
print(f"Skema: {df.schema}")
print(f"Tipe data: {df.dtypes}")
Membaca Data
# CSV
df = pl.readcsv("data.csv")
Parquet (sangat direkomendasikan untuk performa)
df = pl.readparquet("data.parquet")
JSON
df = pl.readjson("data.json")
Dari Pandas
import pandas as pd
pandasdf = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
polarsdf = pl.frompandas(pandasdf)
Kembali ke Pandas jika diperlukan
pandaskembali = polarsdf.topandas()
Operasi Dasar
# Pilih kolom
df.select("nama", "gaji")
df.select(pl.col("nama"), pl.col("gaji"))
Filter baris
df.filter(pl.col("gaji") > 80000)
df.filter((pl.col("departemen") == "Teknik") & (pl.col("umur") > 30))
Urutkan
df.sort("gaji", descending=True)
df.sort(["departemen", "gaji"], descending=[False, True])
Tambah/modifikasi kolom
df.withcolumns(
(pl.col("gaji") 1.1).alias("gajisetelahkenaikan"),
pl.col("nama").str.touppercase().alias("namakapital"),
pl.lit("Aktif").alias("status")
)
Hapus kolom
df.drop("tanggalmasuk")
Ubah nama kolom
df.rename({"nama": "namakaryawan", "gaji": "gajitahunan"})
Statistik deskriptif
df.describe()
Evaluasi Lazy vs Eager
Evaluasi lazy adalah salah satu fitur paling kuat dari Polars. Fitur ini membangun rencana query yang dioptimasi sebelum dieksekusi:
import polars as pl
EAGER: operasi langsung dieksekusi
df = pl.readcsv("filebesar.csv")
result = df.filter(pl.col("jumlah") > 100).select("id", "jumlah").sort("jumlah")
LAZY: membangun rencana query, mengoptimasi, lalu mengeksekusi
result = (