Pandalar artık verilerden daha mı hızlı?


18

https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping

Data.table kıyaslamaları 2014'ten beri güncellenmemiştir. PandasŞimdi daha hızlı bir yerde duydum data.table. Bu doğru mu? Herhangi bir kıyaslama yapan var mı? Daha önce hiç Python kullanmadım ama pandasyenebilirse geçiş yapmayı düşünürdüm data.table?


7
Python'a geçmek için gerçekten kötü bir neden.
Matthew Drury

2
@MatthewDrury nasıl yani? Veriler ve işlenmesi benim işimin% 80'i. Sadece% 20'si modelleri ve sunumları takmak içindir. Neden bana sonuçları en hızlı vereni seçmemeliyim?
xiaodai

2
Hem python hem de R, büyük ekosistemlere ve topluluklara sahip dillerdir. Seçimi tek bir kütüphaneye indirgemek, geniş bir ormanda tek bir ağaca ibadet etmektir. Yine de, verimlilik tek bir kütüphane için bile birçok kişi arasında tek bir endişe kaynağıdır (arayüz ne kadar etkileyici, diğer kütüphaneye nasıl bağlanır, kod tabanı ne kadar genişletilebilir, geliştiricileri ne kadar açıktır). Seçimin kendisinin yanlış bir ikilik olduğunu iddia ediyorum; her iki toplumun da farklı bir odağı var, bu da dillere farklı güçler veriyor.
Matthew Drury

3
İşin% 20'si için iyi olan büyük bir ormanınız var mı? işinizin% 80'ini seçmek için bir seçim yapmayın? hiçbir şey veri hazırlama ve sonra R python veya Julia model yapmak için panda kullanmaktan alıkoyan. Bence düşüncem sağlam. Eğer panda daha hızlı ise ana aracım olarak seçmeliyim.
xiaodai

1
Retikülat paketini ilgilendiğiniz / kullandığınız R'de bulabilirsiniz . Ayrıca, R'nin veritabanlarıyla çalışması / oynaması için giderek daha fazla çaba harcanmıştır (bkz . Dbplyr gibi çabalar ).
slackline

Yanıtlar:


16

Herhangi bir kıyaslama yapan var mı?

Evet, sorunuzda bağladığınız karşılaştırma ölçütü yakın zamanda data.table ve pandaların son sürümleri için güncellendi. Ayrıca başka yazılımlar eklendi. Güncellenmiş karşılaştırmalı değerlendirmeyi https://h2oai.github.io/db-benchmark adresinde bulabilirsiniz.
Maalesef 125GB Bellek makinesinde (orijinal olan 244GB değil) planlanmıştır. Sonuç olarak pandalar ve dask, groupby1e9 satır (50GB csv) verilerini denemeyi başaramaz, çünkü veri okurken belleği yetersiz kalır. Pandalar vs data.table için 1e8 satır (5GB) verilerine bakmanız gerekir.

Sadece istediğiniz içeriği bağlamak için bu çözümler için son zamanlamaları yapıştırıyorum.

bu zamanlamaların modası geçmiş olduğunu lütfen güncellemeler için https://h2oai.github.io/db-benchmark adresini
ziyaret edin .

| in_rows|question              | data.table| pandas|
|-------:|:---------------------|----------:|------:|
|   1e+07|sum v1 by id1         |      0.140|  0.414|
|   1e+07|sum v1 by id1:id2     |      0.411|  1.171|
|   1e+07|sum v1 mean v3 by id3 |      0.574|  1.327|
|   1e+07|mean v1:v3 by id4     |      0.252|  0.189|
|   1e+07|sum v1:v3 by id6      |      0.595|  0.893|
|   1e+08|sum v1 by id1         |      1.551|  4.091|
|   1e+08|sum v1 by id1:id2     |      4.200| 11.557|
|   1e+08|sum v1 mean v3 by id3 |     10.634| 24.590|
|   1e+08|mean v1:v3 by id4     |      2.683|  2.133|
|   1e+08|sum v1:v3 by id6      |      6.963| 16.451|
|   1e+09|sum v1 by id1         |     15.063|     NA|
|   1e+09|sum v1 by id1:id2     |     44.240|     NA|
|   1e+09|sum v1 mean v3 by id3 |    157.430|     NA|
|   1e+09|mean v1:v3 by id4     |     26.855|     NA|
|   1e+09|sum v1:v3 by id6      |    120.376|     NA|

5 sorudan 4'ünde data.table daha hızlıdır ve daha iyi ölçeklendiğini görebiliriz.
Sadece bu zamanlamaları bugün itibariyle unutmayın , nerede id1, id2ve id3karakter alanlardır. Bunlar yakında kategorik DONE olarak değiştirilecek . Ayrıca bu zamanlamaları yakın gelecekte etkileyebilecek başka faktörler de vardır ( paralel YAPILDI gibi gruplama gibi ). Ayrıca NA'lı veriler ve çeşitli kardinaliteler YAPILDI için ayrı kriterler ekleyeceğiz .

Eğer ilgilenen varsa o kadar diğer görevleri bu sürekli kıyaslama projesine geliyor join, sort, readve diğerleri emin daha sonra kontrol etmek.
Ve elbette proje deposunda geri bildirimde bulunabilirsiniz!


1
JuliaDB ne olacak?
skan

1
@skan sen o durumunu takip edebilirsiniz github.com/h2oai/db-benchmark/issues/63
jangorecki

1
İyi yanıt - Bağlantı verdiğiniz kriterlerin hepsi aynı sanal makinede çalıştırıldı mı? Yani, aynı koşullar altında, pandalar ve dask'ın 50GB masa için 128GB'tan fazla RAM'e ihtiyacı vardır, diğerleri ise bu kısıtlama altında çalışabilir mi? Öyleyse, pandaların ılımlı (~ 10GB) tablolarda normal günlük şeyler için çok RAM verimsiz olmasıyla ilgili deneyimlerimi de yansıtıyor ve çoğu zaman yürütme hızından çok daha büyük bir sorun. (bu, belirli iş yüküne bağlı olarak her durumda çok daha yakın ve esnaf-ticarettir.)
jkf

@jkf evet, kesinlikle. Makine 128 GB bellektir, çünkü 500 GB veri kümesinde (10e9 satır) bellek işlemeyi test etmeyi planlıyoruz. Şu anda sadece kıvılcım ve pydatatable bunu destekleyecek, yakında da eklenecek.
jangorecki

@jangorecki bu son derece kullanışlı bir ölçüt. Çaba için çok teşekkürler. Ben dask'ın 50GB veri kümesini sindirmemekle ilgili biraz şaşkınım. Dask parametrelerden biri (örn olarak bölüm boyutuna sahip blocksizeyılında read_csv). compute()Tüm çıktı tablosunu bellekte birleştirmekten kaçınmak için arama yapmaktan ve çıktıyı diske dökmek mi istediniz ?
Mischa Lisovyi

15

Bir meslektaşım ve ben pandalar ve veriler arasındaki performans farklılıkları üzerine bazı ön çalışmalar yaptık. Araştırmayı (iki bölüme ayrılmış olan) Blogumuzda bulabilirsiniz (ikinci bölümü burada bulabilirsiniz) ).

Pandaların verilerden açıkça daha iyi performans gösterdiği bazı görevler olduğunu düşündük. Tablo, aynı zamanda data.table'ın çok daha hızlı olduğu durumlar. Bunu kendiniz kontrol edebilir ve sonuçlar hakkında ne düşündüğünüzü bize bildirebilirsiniz.

DÜZENLE:
Blogları ayrıntılı olarak okumak istemiyorsanız, kurulumumuzun ve bulgularımızın kısa bir özeti:

Kurmak

Biz karşılaştırıldı pandasve data.tablebiz senaryolar denilen (şimdiye kadar) aşağıdaki işlemleri üzerinde 12 farklı simüle veri setleri üzerinde.

  • Seçim benzeri bir işlemle veri alma
  • Koşullu seçme işlemi ile veri filtreleme
  • Veri sıralama işlemleri
  • Veri toplama işlemleri

Hesaplamalar, 4 fiziksel çekirdekli, 16 GB RAM ve SSD sabit sürücülü Intel i7 2.2GHz bir makinede gerçekleştirildi. Yazılım Sürümleri OS X 10.13.3, Python 3.6.4 ve R 3.4.2 idi. Kullanılan ilgili kütüphane versiyonları pandalar için 0.22 ve veriler için 1.10.4-3 idi.

Özetle sonuçlar

  • data.tablesütunları seçerken daha hızlı görünüyor (pandas ortalama% 50 daha fazla zaman alıyor)
  • pandas filtreleme satırlarında daha hızlıdır (ortalama olarak yaklaşık% 50)
  • data.table sıralamada oldukça hızlı görünüyor (pandas bazen 100 kat daha yavaştı)
  • ile yeni bir sütun eklemek daha hızlı görünür pandas
  • toplama sonuçları tamamen karışık

Sizi ölüme düşürmemek için sonuçları mümkün olduğunca basitleştirmeye çalıştığımı lütfen unutmayın. Daha eksiksiz bir görselleştirme için çalışmaları okuyun. Web sayfamıza erişemiyorsanız, lütfen bana bir mesaj gönderin, size içeriğimizi ileteceğim. Tüm çalışmanın kodunu GitHub'da bulabilirsiniz . Çalışmamızı nasıl geliştireceğiniz hakkında fikirleriniz varsa, lütfen bize bir e-posta gönderin. Kişilerimizi GitHub'da bulabilirsiniz.


1
Cevabımdan okumuş olabileceğiniz gibi, sonuçların karışık olduğunu zaten söylüyorum. Cevabımda daha spesifik olup olmayacağımı ve potansiyel olarak bazı sayıları ayrıntılı olarak açıklayacağımı açıklayınız.
Tobias Krabel

1
"Bu siteye erişiminiz sınırlı." Siteye telefonumdan veya iş bilgisayarımdan erişemiyorum.
xiaodai

1
Bunu okuduğum için üzgünüm. Telefonumda kendim kontrol ettim ve hiçbir sorun yaşamadım. Bağlanmaya çalıştığınız ülke ile bir ilginiz olabilir mi?
Tobias Krabel

1
"4 fiziksel çekirdek" = 8 mantıksal çekirdek. Ayrıca hangi belirli Intel i7 2.2GHz (hangi nesil? Hangi varyant? -HQ?) Ve hangi önbellek boyutunun söylenmesine yardımcı olur. SSD için okuma ve yazma hızları nelerdir?
smci

Julia veri çerçeveleri ve JuliaDB ile nasıl kıyaslanıyorlar?
skan

4

Hayır, Aslında veri seti boyutu pandaların çöktüğü sooooooo büyükse, temelde berbat dask ile sıkışıp kalırsınız ve hatta basit bir grup toplamı bile yapamazsınız. dplyr hızlı olmayabilir, ancak bozulmaz.

Şu anda biraz 2G veri kümesi üzerinde çalışıyorum ve basit print(df.groupby(['INCLEVEL1'])["r"].sum()) dask çöküyor.

Dplyr ile bu hatayı yaşamadım.

Yani, pandalar veri kümesini işleyebiliyorsa, pandaları kullanırım, değilse, R veri tablosuna yapışırım.

Ve evet, dask'i basit bir şekilde panda veri çerçevesine dönüştürebilirsiniz.Ancak df.compute() oldukça uzun zaman alır, bu yüzden pandaların yüklenmesi veya okunması için sabırla bekleyebilirsiniz.


1
Dask'ın çok kötü olduğunu bilmiyordum. Belki de R'nin disk.frame'ini denemek istersiniz? github.com/xiaodaigh/disk.frame Ben yazarım
xiaodai

1

Bu eski bir yazı olduğunu biliyorum, ama anlamaya değer düşündüm - tüy (R ve Python) kullanarak veri çerçeveleri / veri tabloları üzerinde çalışma ve tüy aracılığıyla bu sonuçları paylaşma sağlar.

Tüyün github sayfasına bakın


Orta ve büyük veri setleri için
Segfaults
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.