스크립트
00:00:00Pesaing terbesar Pandas sebentar lagi akan merilis versi 2.0.
00:00:04Pembaruan Polars hampir tiba, dan perubahan terbesarnya mungkin bukan yang Anda duga.
00:00:09Secara bawaan, setiap kueri yang pernah Anda tulis beralih ke mesin yang berbeda.
00:00:14Anda tidak perlu mengubah satu baris kode pun.
00:00:15Polars juga berhenti menjamin bahwa baris data Anda dikembalikan dalam urutan semula.
00:00:19Terdengar seperti penurunan fungsi, padahal bukan; ini adalah imbalan demi memungkinkan perubahan pertama.
00:00:24Seiring Polars kian populer dengan versi 2.0, pustaka ini benar-benar menjadi saingan berat bagi Pandas.
00:00:30Mari kita lihat pembaruan terbesar sejauh ini.
00:00:37Baiklah, sejak awal, Pandas selalu menjadi pilihan utama untuk sebagian besar pekerjaan data.
00:00:43Pustaka ini sederhana, digunakan secara luas, tidak hanya bagus untuk analisis data, tetapi juga penting dalam machine learning.
00:00:49Lalu beberapa waktu lalu, Polars hadir.
00:00:51Polars selalu lebih cepat daripada Pandas.
00:00:53Kita akan membahasnya nanti.
00:00:54Kini, dengan pembaruan besar 2.0, Polars mungkin akan diadopsi secara lebih luas.
00:01:00Karena Anda sudah tahu latar belakang singkatnya, Polars sebenarnya secara diam-diam memiliki dua mesin.
00:01:05Mesin yang paling sering digunakan orang adalah mesin in-memory.
00:01:08Anda bisa membayangkannya seperti sebuah gudang.
00:01:10Mesin ini memuat seluruh himpunan data Anda ke lantai gudang, lalu menjalankan setiap langkah kueri di seluruh lantai tersebut.
00:01:17Dan proses itu sangatlah cepat.
00:01:19Selama semuanya muat di dalam RAM.
00:01:21Mesin streaming bekerja secara berbeda.
00:01:23Alih-alih satu lantai raksasa, kini kerjanya lebih mirip jalur perakitan.
00:01:27Polars memotong data menjadi bagian-bagian kecil yang disebut pengembangnya sebagai “Morsel”.
00:01:32Ukuran potongan tersebut disesuaikan agar muat di dalam cache CPU Anda.
00:01:36Kemudian potongan itu didorong melalui rencana kueri.
00:01:39Sekarang, bagian kueri yang berbeda dapat terus berjalan tanpa harus menunggu seluruh himpunan data.
00:01:43Dari situlah kecepatannya berasal.
00:01:44Dan pada akhirnya, ini juga menjadi jalan untuk bekerja dengan data yang lebih besar dari kapasitas memori Anda.
00:01:49Tetapi ada satu kendala.
00:01:50Jika Anda memiliki delapan pekerja di jalur perakitan, mereka belum tentu selesai sesuai urutan mereka mulai.
00:01:56Begitu pula dengan Polars.
00:01:58Jadi, di versi 2.0, untuk join, group by, unpivot, dokumentasinya secara harfiah menyatakan, dll.
00:02:04Tidak lagi menjamin urutan baris.
00:02:06Kecuali jika Anda memintanya secara eksplisit.
00:02:08Jika Anda suka membuat alat bantu untuk mempercepat alur kerja Anda, pastikan untuk berlangganan.
00:02:11Kami selalu merilis video baru setiap saat.
00:02:13Nah, jadi inilah bentuk nyatanya.
00:02:15Saya akan menjalankan uv pip install --pre polars.
00:02:18Dan ingat opsi --pre itu.
00:02:20Kita akan membahasnya kembali sebentar lagi.
00:02:22Oke.
00:02:22Saya memiliki LazyFrame dengan kunci 2, 1, 0.
00:02:27Saya melakukan left join ke frame lain, lalu memanggil collect.
00:02:32Dan lihat hasilnya.
00:02:34Kode yang sama persis seperti di Polars 1.
00:02:35Urutannya tidak lagi dijamin.
00:02:37Kodenya sama, hanya saja perilakunya berbeda.
00:02:39Sekarang saya menambahkan maintain_order=True pada join.
00:02:43Saya bisa mengeksekusinya lagi.
00:02:44Saya akan menjalankannya kembali di sini.
00:02:45Dan urutan aslinya telah kembali.
00:02:47Jadi, ini bukan Polars secara acak mengacak-acak data kita.
00:02:51Ini adalah cara Polars berkata, jika urutan itu penting, Anda harus memberi tahu kodenya.
00:02:54Anda benar-benar harus menyatakannya secara eksplisit.
00:02:56Dan ada detail bagus lainnya di sini.
00:02:58Jalankan fungsi explain pada suatu kueri.
00:03:01Fungsi ini tidak menyembunyikan perilaku tersebut.
00:03:03Anda hanya perlu tahu di mana harus melihatnya.
00:03:05Itulah perubahan perilaku yang besar.
00:03:06Namun versi 2.0 ini terbilang unik karena ini bukan sekadar pembaruan fitur.
00:03:10Sebenarnya ini hanyalah pembersihan kode.
00:03:12Dan ada cukup banyak hal yang dibersihkan di sini.
00:03:15Awalnya di Polars, gaya read_csv diubah menjadi scan_csv dengan fungsi collect di bawahnya.
00:03:22Fungsi profile pada LazyFrame telah dihapus.
00:03:25Fungsi melt kini berganti nama menjadi unpivot.
00:03:28Argumen join_nulls berubah menjadi nulls_equal.
00:03:30Pengubahan tipe integer secara langsung ke categorical telah dihapus.
00:03:35Anda bisa menggunakan cat2 sekarang untuk membantu mengatasi hal ini.
00:03:38Pengubahan string secara langsung ke date juga telah dihapus.
00:03:41Itu adalah konversi string ke date.
00:03:43Menjumlahkan integer signed dan unsigned 64-bit kini akan menghasilkan int128, bukan mengubahnya menjadi float yang secara diam-diam mengurangi presisi.
00:03:53Dan masih ada lebih banyak lagi yang akan datang.
00:03:55Anda bisa menggunakan concat.
00:03:57Yang sekarang menolak ukuran data yang tidak cocok alih-alih menebak maksud Anda.
00:04:02Ini sebenarnya keputusan yang cerdas dari pihak Polars.
00:04:05Setiap fitur yang dihapus akan menampilkan AttributeRemovedError.
00:04:09Pesan itu akan memberi tahu Anda penggantinya.
00:04:12Panggil melt, dan pesan error secara harfiah akan menyuruh Anda menggunakan unpivot dengan parameter index dan on.
00:04:17Semua pesan error ini pada dasarnya menjadi panduan cara menggunakannya.
00:04:20Jalankan kodenya, perbaiki masalah sesuai pesan error, dan lanjutkan kembali.
00:04:26Dan itulah alasan mengapa Polars menjadi alat andalan sehari-hari bagi banyak orang.
00:04:31Pandas sering kali membiarkan masalah terjadi saat runtime.
00:04:35Polars mencoba mendeteksi masalah lebih awal melalui semua ini.
00:04:37Anda dapat memanggil collect_schema untuk mengetahui tipe data yang salah sebelum Polars membaca satu baris pun.
00:04:44Polars benar-benar mengantisipasi apa yang akan terjadi.
00:04:47Dan pustaka ini menjadi semakin efisien.
00:04:48Lantas, di mana sebenarnya posisi Polars?
00:04:50DuckDB berfokus pada SQL.
00:04:53Polars adalah API ekspresi yang dirancang untuk Python.
00:04:56Ada juga Dask dan Spark.
00:04:58Pustaka tersebut terdistribusi.
00:04:59Sedangkan Polars berfokus pada pemrosesan dalam satu komputer.
00:05:01Pustaka open source-nya sendiri bersifat terbuka.
00:05:04Namun Polars Cloud tidak.
00:05:05Dan hal kunci itu mengubah banyak hal saat berbicara soal performa.
00:05:09Pengumuman ini menyatakan bahwa mesin streaming baru lima kali lebih cepat.
00:05:13Saya telah mencoba Polars selama bertahun-tahun, dan ya, itu lebih cepat dari Pandas, tetapi saya tidak pernah mendapatkan kecepatan fantastis hingga lima kali lipat.
00:05:21Cobalah pada beberapa himpunan data yang lebih besar.
00:05:23Anda pasti akan melihat perbedaan kecepatannya.
00:05:25Hasilnya akan bervariasi setiap eksekusi dan dataset, tetapi Anda akan merasakan perbedaannya dan melihatnya dalam waktu eksekusi.
00:05:30Dan ini mungkin perbedaan paling penting di seluruh pembaruan ini.
00:05:34Bagian yang memungkinkan mesin menulis data sementara ke disk, yaitu eksekusi out-of-core yang sesungguhnya, belum dirilis.
00:05:40Jadi, saat ini, streaming berarti data diproses secara terpotong (chunked) dan melalui pipeline.
00:05:43Ini belum berarti ukuran dataset Anda bisa secara ajaib melebihi kapasitas RAM.
00:05:46Angka 5x tersebut merupakan ekspektasi internal dari pihak Polars sendiri.
00:05:50Tidak ada tabel pengujian tolok ukur (benchmark) di dalam artikelnya.
00:05:53Dan sejujurnya, sebagian besar orang tampaknya tidak keberatan dengan hal itu.
00:05:55Banyak pengguna tampak senang dengan rilis yang berguna meskipun terkesan biasa saja.
00:05:59Tidak ada penambahan fitur raksasa secara berlebihan.
00:06:01Anda tidak perlu mempelajari hal baru dari awal.
00:06:02Pesan error tersebut, saat Anda menulis kode, akan memberi tahu Anda apa yang harus diganti.
00:06:07Hanya perbaikan perubahan mendasar, pembersihan kode, dan penggunaan versi (semver) sebagaimana mestinya.
00:06:12Namun ada dua keluhan yang terus muncul secara berulang.
00:06:14Yang pertama adalah urutan baris.
00:06:15Jika opsi maintain_order bernilai false secara bawaan, Anda bisa membuat bug yang berbahaya di dalam kode.
00:06:19Karena program tidak akan mengalami crash.
00:06:21Angka-angka Anda masih bisa tetap sepenuhnya benar.
00:06:23Hanya saja nilai tersebut terikat pada baris dalam urutan yang berbeda.
00:06:26Hal itu jauh lebih sulit disadari dibandingkan jika terjadi exception/error.
00:06:29Keluhan kedua adalah penggunaan kata “streaming” di sini.
00:06:32Orang-orang berpendapat bahwa istilah itu membingungkan untuk mesin yang belum sepenuhnya mendukung out-of-core.
00:06:38Lalu ada bug aktual pada versi Release Candidate (RC).
00:06:41Sejak versi RC dirilis, ada masalah berprioritas tinggi di mana
00:06:44fungsi group_by_dynamic menghasilkan error datetime out-of-range pada mesin streaming.
00:06:49Memanggil metode limit.
00:06:51Metode limit tidak langsung berhenti lebih awal setelah operasi join.
00:06:54Dan konversi string ke datetime bisa mengembalikan nilai null, yang dulunya langsung memunculkan error.
00:06:58Itulah mengapa saya meminta Anda untuk mengingat perintah instalasi dengan opsi --pre.
00:07:02Sebelum versi 2.0 resmi.
00:07:04Ini masih merupakan Release Candidate.
00:07:06Dan saat ini, kinerjanya memang seperti versi uji coba.
00:07:08Dan itu wajar saja.
00:07:09Bukan?
00:07:09Ini belum menjadi versi penuh.
00:07:11Satu hal lagi.
00:07:12Crate untuk Rust masih berada pada versi 0.55.
00:07:15Jadi, jika Anda menggunakan Polars dari Rust, belum ada Polars 2.0 untuk Anda saat ini.
00:07:19Namun saya mengasumsikan sebagian besar dari kita mungkin hanya akan menggunakan Python di sini.
00:07:24Sekarang, haruskah Anda memperbaruinya?
00:07:25Untuk proyek baru, ya, saya akan melakukannya.
00:07:27Benar?
00:07:27Kita sedang beradaptasi dengan teknologi dan pembaruan baru.
00:07:30Jika pipeline Anda sudah menggunakan sink_parquet atau sink_csv, Anda sebenarnya sudah
00:07:34menggunakan streaming selama ini.
00:07:36Tetapi ada beberapa kasus di mana saya sebaiknya menunggu dulu.
00:07:39Benar?
00:07:39Jika kode Anda bergantung pada urutan baris, jangan asal perbarui dan berharap semuanya lancar.
00:07:43Coba cari (grep) penggunaan group_by yang tidak diikuti oleh fungsi sort setelahnya.
00:07:47Jika Anda menggunakan group_by_dynamic, saya sarankan untuk menunggu sampai semuanya stabil.
00:07:51Maksud saya, sangat menarik untuk melihat ke mana arah perkembangan ini.
00:07:54Ini kemungkinan besar akan menjadi versi 2.0, tetapi ini belum menjadi rilis resmi.
00:07:57Anda bisa mulai membiasakan diri dengannya, tetapi ini belum sepenuhnya siap.
00:08:00Hal yang terus saya pikirkan adalah betapa tidak biasanya pembaruan ini.
00:08:03Polars 2.0 tidak menghadirkan fitur baru sama sekali.
00:08:07Namun hal itu tetap mengubah cara kerja kode yang sudah ada.
00:08:10Mesin baru ini lebih cepat di komputer saya, hanya saja tidak sampai lima kali lebih cepat.
00:08:14Jadi versi 2.0 menarik bukan karena menambahkan banyak hal baru.
00:08:18Ini menarik karena Polars menggunakan lonjakan versi utama untuk benar-benar membersihkan fondasinya
00:08:24di balik semua fungsi yang sudah kita gunakan.
00:08:26Saya Josh dari BetterStack.
00:08:28Jika Anda menyukai tips dan trik pemrograman seperti ini, pastikan untuk berlangganan.
00:08:30Sampai jumpa di video lainnya.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기