Python bukan bahasa yang cocok untuk data science
(blog.genesmindsmachines.com)- Dalam pekerjaan data non-deep-learning seperti analisis, visualisasi, dan peringkasan data, Python memang cukup fungsional, tetapi pengalaman penggunaannya cenderung rumit dan mudah menjadi tidak efisien
- Di berbagai kasus di laboratorium, berulang kali terlihat bahwa dibanding R, Python membutuhkan lebih banyak kode dan waktu bahkan untuk transformasi grafik sederhana dan perhitungan statistik
- Bahkan saat memakai pandas, matplotlib, dan NumPy, sintaks, indexing, tanda kurung, dan struktur method chaining sering membuat pengguna terjebak pada detail implementasi (logistics) alih-alih logika
- Sebaliknya, tidyverse di R memungkinkan alur pemrosesan data diekspresikan hampir setingkat bahasa alami, sehingga logika kerja lebih mudah langsung diterjemahkan ke dalam kode
- Sebagai bahasa untuk data science, Python memiliki keterbatasan struktural dalam memisahkan logika dan logistik, dan ini berasal dari desain bahasa serta ekosistemnya
Perbandingan pengalaman penggunaan Python dan R di dunia nyata
- Anggota laboratorium bebas memilih bahasa, tetapi lebih banyak yang memakai Python, dan pola bahwa mereka tidak bisa cepat menangani permintaan analisis tambahan yang sederhana muncul secara konsisten
- Pergantian visualisasi seperti boxplot → violin plot, histogram → density plot, atau line chart → heatmap pun tidak mudah dilakukan seketika
- Pekerjaan yang selesai dalam beberapa baris di R terasa di Python seperti “harus kembali ke meja dan menulis ulang kodenya”
- Bahkan saat mengajar bersama ahli Python, perbedaan besar dalam panjang dan kompleksitas kode dibanding R tetap terlihat
- Reaksi seperti “kenapa harus serumit ini?” berulang dalam banyak situasi, dan tampaknya ini bukan soal kemampuan individu, melainkan perbedaan struktural pada arsitektur bahasa dan library
- Untuk logika yang sama, Python memerlukan indexing, pemisahan data, penyusunan ulang, dan penggabungan beberapa method sehingga strukturnya menjadi panjang
- Tidyverse di R dapat mengekspresikannya secara langsung dengan rangkaian alami seperti
filter → group_by → summarize
Mengapa Python dipakai luas dan apa batasannya
- Posisi Python di data science lebih didasarkan pada penyebaran historis, sifat serbaguna, dan besarnya ekosistem daripada kecocokan uniknya
- Di bidang deep learning, Python memang jelas menjadi pusat berkat PyTorch dan ekosistem AI
- Namun, untuk pembersihan data, eksplorasi, visualisasi, dan pemodelan statistik, ketidaknyamanan tetap banyak terasa
- Popularitasnya disebut “hampir seperti kecelakaan sejarah (historical accident)”, dan beratnya struktur bahasa dibanding R berulang kali terlihat lewat berbagai contoh
Syarat bahasa data science yang baik
- Untuk pekerjaan yang berpusat pada eksplorasi data, peringkasan, fitting model, dan visualisasi, yang paling penting adalah lingkungan interaktif, biaya setup rendah, dan iterasi cepat
- Dibanding bahasa terkompilasi, bahasa interpreter berbasis skrip lebih cocok
- Yang diprioritaskan bukan performa, melainkan kesederhanaan kode, penurunan risiko error, dan minimisasi beban berpikir
- Jika perlu, cukup tulis ulang hanya sebagian operasi ke bahasa berperforma tinggi seperti Rust, bukan seluruhnya
- Secara realistis, bahasa yang bisa dipertimbangkan adalah R dan Python
- Matlab, Mathematica, dan sejenisnya bersifat komersial atau ekosistemnya terbatas
- Julia memang sering disebut, tetapi penulis belum cukup menggunakannya sehingga menahan diri untuk menilai
Masalah “logika vs logistik”
- Bahasa analisis data harus memisahkan apa yang ingin dihitung (logika) dari bagaimana menghitungnya (logistik)
- Jika harus memikirkan tipe data, indeks, loop, atau perakitan manual, berarti kita sudah terikat pada logistik
- Dalam contoh Palmer Penguins, tidyverse di R mengekspresikan perhitungan rata-rata dan simpangan baku dengan alur yang mendekati bahasa alami
- Tidak perlu membongkar aliran data lalu merakitnya kembali
- pandas memang menyediakan fungsi serupa, tetapi penentuan string, tanda kurung, method chaining, reset_index, dan pekerjaan tambahan lain membuat keterbacaan dan kesederhanaannya menurun
- Jika pekerjaan yang sama diimplementasikan hanya dengan Python murni
- Menyusun loop → membuat group key → membagi data → menghitung rata-rata → menghitung varians → menghitung simpangan baku → menyusun ulang → mengurutkan, dan seterusnya
- Semua harus ditangani secara manual, sehingga menjadi contoh khas ketika kode logistik mendominasi logika
Kesimpulan dan gambaran isi lanjutan
- Dalam analisis data, Python berulang kali menunjukkan masalah struktural yang membuat pengguna lebih fokus pada detail implementasi daripada logika
- Ini tampak sebagai hasil gabungan dari sifat bahasa itu sendiri, keterbatasan desain library, dan kebiasaan di seluruh ekosistem
- Pada tulisan lanjutan, penulis akan membahas penyebab teknis yang lebih konkret mengapa Python membuat analisis data lebih sulit dibanding R
Sudut pandang tambahan untuk diskusi dan perbandingan (termasuk masukan pembaca)
- Ada pendapat bahwa tidyverse bisa lebih panjang daripada base R, tetapi tetap kuat dari sisi ekspresivitas, konsistensi, dan abstraksi pemrosesan data
- Di sisi lain, ada pula sanggahan bahwa R sangat tidak nyaman dari sisi pengembangan perangkat lunak seperti modularisasi, testing, dan implementasi CLI
- Python unggul dalam pengalaman developer seperti logging, virtual environment, packaging, dan struktur class, tetapi
- matplotlib dinilai memiliki desain yang tidak intuitif,
- pandas memiliki sintaks yang tidak konsisten,
- scikit-learn sering disebut punya masalah desain
- Beberapa pendapat bahkan melihat Python sebagai “bahasa untuk dengan cepat memproduksi kode yang tidak stabil dan berkualitas rendah”, dan menyebut bahwa pengembangan berkelanjutan lebih cocok menggunakan bahasa bertipe statis
2 komentar
Jika kompleksitas dan volume data meningkat sehingga diperlukan pemrosesan terdistribusi bertahap, sekaligus pengolahan melalui data tidak terstruktur, model terstruktur, dan LLM, bukankah justru bahasa ini yang paling cocok karena use case-nya juga banyak?
Opini Hacker News
Memberikan berbagai contoh transformasi, seperti mengganti boxplot menjadi violin plot, atau line plot menjadi heatmap
Sebenarnya diskusi ini lebih tentang matplotlib daripada Python
Jika ingin desain ala ggplot di Python, bisa memakai plotnine
Alasan kode R terlihat lebih ringkas adalah karena evaluasi non-standar (non-standard evaluation) di R
Python tidak mengizinkan perluasan seperti ini di tingkat bahasa
Untuk pembahasan terkait, lihat Computing on the language
Evaluasi non-standar memang nyaman di lingkungan interaktif, tetapi saat menulis kode analisis yang kompleks justru menjadi kelemahan
Pekerjaan sederhana pun kadang harus dilakukan dengan cara memutar
Menurut saya, menaruh operator pipe di depan seperti Elixir lebih baik
Python juga bisa meniru sintaks serupa dengan trik seperti getattr, tetapi pada akhirnya ini lebih merupakan masalah desain API pustaka daripada bahasa
R mudah hanya jika ada pustaka dan recipe, kalau tidak, benar-benar sulit, dan kebanyakan orang tidak melakukannya sama sekali
Ia mengabstraksikan ketidaknyamanan matplotlib sambil tetap menyediakan fitur yang kaya
Tutorial Seaborn
Heran kenapa dalam bahasa pemrograman tabel bukan objek kelas satu
Kebanyakan bahasa mengharuskan orang mempelajari API terpisah seperti pandas atau polars untuk menangani tabel
Di R, data.frame cukup dekat dengan objek kelas satu, tetapi dalam praktiknya orang lebih sering memakai tibble dari dplyr
Bahasa ekspresi untuk menangani data tabel masih belum distandardisasi
Polars dan dplyr berbagi filosofi yang mirip, tetapi pada akhirnya SQL tampak seperti satu-satunya dasar bersama
Python memang tidak sempurna, tetapi menurut saya R juga sama
Struktur seperti tabel, matriks, graf, state machine tidak didukung di level bahasa sehingga pemanfaatannya terbatas
Alat yang tersedia secara bawaan dalam bahasa menentukan “jalur indah” bahasa tersebut
Dulu key-value store juga merupakan pustaka eksternal, tetapi sekarang sudah seperti standar
Saya memperkirakan suatu hari bahasa-bahasa arus utama juga akan menyerap pemrograman berbasis tabel seperti ini
Bahasa Q, artikel perbandingan Rye, alat eksperimen Lil
Konversi di antara ketiga objek itu juga sangat sederhana
Tidak mudah merancang API standar yang bisa menangani perbedaan skala sebesar ini dengan elegan
Hanya saja dplyr menang dalam dokumentasi dan onboarding sehingga memperoleh adopsi industri
Inti tulisannya lumayan, tetapi sayang penulis terlalu cepat membuka dasar argumennya
R kuat untuk pemrosesan data frame, tetapi lemah untuk manajemen file dan maintainability
Jika pekerjaan seperti itu banyak, Python lebih baik, dan jika kecepatan juga penting, pilihan akan condong ke Julia
Pemilihan bahasa akan berubah sesuai prioritas masing-masing
Saya sering melihat mahasiswa mencoba menyelesaikan masalah non-tabular seperti graf dengan pandas; dalam situasi seperti itu, pemilihan alat perlu dipikirkan ulang
Dengan numpy, perhitungan rata-rata dan varians sudah tersedia sebagai bawaan
Python dan R punya tingkat kesulitan belajar yang mirip, tetapi keunggulan Python ada pada kemampuan integrasi dengan aplikasi lain
Saat memproses file besar, Python lebih cocok; saat menganalisis data ringkasan, R lebih efisien
Setiap bahasa memang sebaiknya dipakai sebagai alat yang tepat untuk konteksnya
Sebagai programmer Python, saya juga pernah memakai R, dan Python adalah “bahasa yang melakukan hampir semuanya dengan cukup baik, tetapi tidak sempurna”
Jika Anda melakukan analisis data sepanjang hari, masuk akal untuk mempelajari R
R adalah bahasa yang dirancang sesuai dengan cara berpikir ahli statistik
Awalnya terasa asing, tetapi perubahan cara berpikir itu justru membantu
Meski begitu, saya tetap bekerja sebagian besar di Python
Melakukan data science dengan pandas itu mungkin, tetapi terasa kasar dan rumit
Dengan polars memang sedikit membaik, tetapi saat memakai duckdb semuanya benar-benar berubah
Saya menjalankan kueri SQL langsung di notebook dan menganalisis file parquet
Mencampur sel SQL dan sel Python membuat kode menjadi lebih rapi
Saat melihat perbandingan Python vs R di akhir tulisan, saya sempat berpikir, “bukankah ini akan jauh lebih baik jika ditulis dengan SQL?”
Contoh Python terakhir terlalu bertele-tele tanpa perlu
Dengan
defaultdictdanstatistics.stddev, hasilnya bisa jauh lebih ringkasSering kali orang mengimplementasikannya tanpa mempertimbangkan apakah koreksi itu memang bermakna
Sebenarnya ini lebih tepat disebut sample_std_dev
itertools.groupbyjuga bisa dipakaiKodenya memang tidak menjadi pendek, tetapi bisa mengungkapkan maksud dengan lebih jelas
Tidak baik mengorbankan keterbacaan hanya demi menulis lebih singkat
Saya mencoba mengimplementasikan contoh yang sama dengan TidierData.jl di Julia, dan hasilnya hampir identik dengan versi R
Sintaks makro seperti
@chain,@group_by,@summarizemirip dengan tidyverse di RSaya kurang memahami keluhan penulis
Bahwa Python tidak dioptimalkan untuk data science adalah fakta yang sudah jelas
Python bukan DSL, dan bahkan MATLAB yang memang dirancang untuk komputasi ilmiah pun bukan bahasa yang populer
Bahasa yang baik lebih seperti kota yang nyaman ditinggali daripada cuaca yang sempurna
Python seperti “kota Nordik yang makmur meski cuacanya kurang bagus”
Topik tulisannya terasa agak clickbait sehingga menurut saya tidak menghasilkan diskusi yang produktif
Saya berharap Julia dipakai lebih luas
Dulu saya mengimplementasikan ulang algoritme untuk makalah psikometrik dengan Julia, dan hasilnya berjalan tiga kali lebih cepat daripada MATLAB
Tautan makalah terkait
Contoh terakhir lebih terlihat seperti kode Python yang tidak realistis, semacam sindiran anti-Python
Mengimplementasikan sendiri simpangan baku itu setingkat tugas kuliah S1
Dalam praktiknya, baik R maupun Python sama-sama menjalankan loop seperti ini di dalamnya
Tetapi di lingkungan industri nyata, Python jauh lebih mudah untuk berkolaborasi dengan tim engineering
Saya pernah menerapkan kode R ke production, dan hasilnya sangat rapuh
R luar biasa untuk exploratory data analysis (EDA), tetapi tidak cocok untuk pengembangan perangkat lunak skala besar