https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
Benchmark data.table belum diperbarui sejak 2014. Saya mendengar di suatu tempat yang Pandas
sekarang lebih cepat daripada data.table
. Apakah ini benar? Adakah yang melakukan benchmark? Saya belum pernah menggunakan Python sebelumnya tetapi akan mempertimbangkan beralih jika pandas
bisa mengalahkan data.table
?
Jawaban:
Ya, tolok ukur yang Anda tautkan dalam pertanyaan Anda baru-baru ini diperbarui untuk versi terbaru dari data.table dan panda. Selain itu perangkat lunak lain telah ditambahkan. Anda dapat menemukan patokan yang diperbarui di https://h2oai.github.io/db-benchmark
Sayangnya itu dijadwalkan pada mesin Memori 125GB (bukan 244GB seperti aslinya). Akibatnya panda dan dask tidak dapat melakukan upaya
groupby
pada baris 1e9 (50GB csv) karena mereka kehabisan memori saat membaca data. Jadi untuk panda vs data.tabel Anda harus melihat data baris 1e8 (5GB).Untuk tidak hanya menautkan konten yang Anda minta, saya menempelkan timing terakhir untuk solusi tersebut.
harap dicatat bahwa waktu tersebut sudah usang,
kunjungi https://h2oai.github.io/db-benchmark untuk waktu yang diperbarui
Dalam 4 dari 5 pertanyaan, data.tabel lebih cepat, dan kita bisa melihatnya berskala lebih baik.
Perhatikan saja bahwa waktu ini sudah mulai sekarang , di mana
id1
,id2
danid3
merupakan bidang karakter.Itu akan segera diubah menjadiDONEkategoris. Selain itu ada faktor-faktor lain yang kemungkinan akan mempengaruhi waktu tersebut dalam waktu dekat (sepertipengelompokan secara paralelDONE ). Kami juga akan menambahkan tolok ukur terpisah untuk data yang memiliki NAs , danberbagai kardinalitasSELESAI .Tugas-tugas lain yang datang ke proyek benchmarking ini terus-menerus jadi jika Anda tertarik
join
,sort
,read
dan lain-lain pastikan untuk memeriksa nanti.Dan tentu saja Anda dipersilakan untuk memberikan umpan balik dalam repo proyek!
sumber
blocksize
dalamread_csv
). Apakah Anda mencoba menghindari panggilancompute()
dan membuang output ke disk untuk menghindari pemasangan seluruh tabel output dalam memori?Seorang kolega dan saya telah melakukan beberapa studi pendahuluan tentang perbedaan kinerja antara panda dan tabel data. Anda dapat menemukan studi (yang dibagi menjadi dua bagian) di Blog kami (Anda dapat menemukan bagian dua di sini ).
Kami menduga bahwa ada beberapa tugas di mana panda jelas mengungguli data.table, tetapi juga kasus di mana data.tabel jauh lebih cepat. Anda dapat memeriksanya sendiri dan beri tahu kami pendapat Anda tentang hasilnya.
EDIT:
Jika Anda tidak ingin membaca blog secara detail, berikut ini ringkasan singkat dari pengaturan kami dan temuan kami:
Mempersiapkan
Kami membandingkan
pandas
dandata.table
pada 12 set data simulasi yang berbeda pada operasi berikut (sejauh ini), yang kami sebut skenario.Perhitungan dilakukan pada mesin dengan Intel i7 2.2GHz dengan 4 core fisik, RAM 16GB dan hard drive SSD. Versi perangkat lunak adalah OS X 10.13.3, Python 3.6.4 dan R 3.4.2. Versi pustaka masing-masing yang digunakan adalah 0,22 untuk panda dan 1,10.4-3 untuk data.table
Singkatnya
data.table
tampaknya lebih cepat ketika memilih kolom (pandas
rata-rata membutuhkan waktu 50% lebih banyak)pandas
lebih cepat dalam memfilter baris (rata-rata sekitar 50%)data.table
tampaknya jauh lebih cepat dalam menyortir (pandas
kadang-kadang 100 kali lebih lambat)pandas
Harap dicatat bahwa saya berusaha menyederhanakan hasil sebanyak mungkin untuk tidak membuat Anda bosan sampai mati. Untuk visualisasi yang lebih lengkap baca studi. Jika Anda tidak dapat mengakses halaman web kami, silakan kirim saya pesan dan saya akan meneruskan konten Anda kepada Anda. Anda dapat menemukan kode untuk studi lengkap tentang GitHub . Jika Anda memiliki ide bagaimana meningkatkan studi kami, silakan kirim email kepada kami. Anda dapat menemukan kontak kami di GitHub.
sumber
Tidak, sebenarnya jika ukuran dataset sangat besar sehingga panda crash, Anda pada dasarnya terjebak dengan dask, yang menyebalkan dan Anda bahkan tidak bisa melakukan group-sum sederhana. dplyr mungkin tidak cepat, tetapi tidak berantakan.
Saat ini saya sedang mengerjakan beberapa dataset 2G kecil dan sederhana
print(df.groupby(['INCLEVEL1'])["r"].sum())
crash dask.Tidak mengalami kesalahan ini dengan dplyr.
Jadi, jika panda dapat menangani dataset, saya menggunakan panda, jika tidak, tetap pada tabel data R.
Dan ya, Anda dapat mengkonversi dask kembali ke panda dataframe dengan sederhana.
df.compute()
Namun itu membutuhkan waktu yang cukup lama, jadi Anda mungkin juga cukup sabar menunggu panda untuk dimuat atau datatable untuk dibaca.sumber
Saya tahu ini adalah posting yang lebih lama, tetapi saya pikir ini mungkin layak disebut - menggunakan bulu (dalam R dan dengan Python) memungkinkan operasi pada frame data / tabel data dan berbagi hasil tersebut melalui bulu.
Lihat halaman github bulu
sumber