https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
Die data.table-Benchmarks wurden seit 2014 nicht mehr aktualisiert. Ich habe gehört, dass sie Pandas
jetzt schneller sind als data.table
. Ist das wahr? Hat jemand irgendwelche Benchmarks gemacht? Ich habe Python noch nie benutzt, würde aber überlegen zu wechseln, ob ich pandas
schlagen kann data.table
?
Antworten:
Ein Kollege und ich haben einige vorläufige Studien zu den Leistungsunterschieden zwischen Pandas und data.table durchgeführt. Sie finden die Studie (die in zwei Teile geteilt wurde) in unserem Blog (Teil zwei finden Sie hier ).
Wir haben festgestellt, dass es einige Aufgaben gibt, bei denen Pandas die data.table deutlich übertreffen, aber auch Fälle, in denen die data.table viel schneller ist. Sie können es selbst überprüfen und uns Ihre Meinung zu den Ergebnissen mitteilen.
BEARBEITEN:
Wenn Sie die Blogs nicht im Detail lesen möchten, finden Sie hier eine kurze Zusammenfassung unseres Setups und unserer Ergebnisse:
Installieren
Wir verglichen
pandas
und untersuchtendata.table
12 verschiedene simulierte Datensätze für die folgenden Operationen (bisher), die wir Szenarien nannten.Die Berechnungen wurden auf einer Maschine mit einem Intel i7 2,2 GHz mit 4 physischen Kernen, 16 GB RAM und einer SSD-Festplatte durchgeführt. Softwareversionen waren OS X 10.13.3, Python 3.6.4 und R 3.4.2. Die jeweils verwendeten Bibliotheksversionen waren 0.22 für Pandas und 1.10.4-3 für data.table
Führt zu einer Nussschale
data.table
scheint beim Auswählen von Spalten schneller zu sein (pandas
durchschnittlich 50% mehr Zeit)pandas
filtert Zeilen schneller (durchschnittlich ca. 50%)data.table
scheint beim Sortieren erheblich schneller zu sein (pandas
war manchmal 100-mal langsamer)pandas
Bitte beachten Sie, dass ich versucht habe, die Ergebnisse so weit wie möglich zu vereinfachen, um Sie nicht zu Tode zu langweilen. Für eine vollständigere Visualisierung lesen Sie die Studien. Wenn Sie nicht auf unsere Webseite zugreifen können, senden Sie mir bitte eine Nachricht und ich werde Ihnen unsere Inhalte weiterleiten. Sie finden den Code für die vollständige Studie auf GitHub . Wenn Sie Ideen zur Verbesserung unserer Studie haben, schreiben Sie uns bitte eine E-Mail. Sie finden unsere Kontakte auf GitHub.
quelle
Ja, der Benchmark, den Sie in Ihrer Frage verlinkt haben, wurde kürzlich für die neueste Version von data.table und pandas aktualisiert. Zusätzlich wurde weitere Software hinzugefügt. Den aktualisierten Benchmark finden Sie unter https://h2oai.github.io/db-benchmark
Leider ist ein Speicher mit 125 GB geplant (nicht 244 GB wie der ursprüngliche). Infolgedessen können Pandas und Dask keine
groupby
Daten mit 1e9 Zeilen (50 GB CSV) verarbeiten, da ihnen beim Lesen der Daten der Speicherplatz ausgeht. Für pandas vs data.table müssen Sie sich also 1e8-Zeilen (5 GB) -Daten ansehen.Um nicht nur die Inhalte zu verlinken, nach denen Sie fragen, füge ich die letzten Zeitangaben für diese Lösungen ein.
Bitte beachten Sie, dass diese Zeiten nicht mehr aktuell sind. Aktuelle Zeiten finden
Sie unter https://h2oai.github.io/db-benchmark
In 4 von 5 Fragen ist data.table schneller und skaliert besser.
Es genügt bemerken diese Timings ab jetzt sind , wo
id1
,id2
undid3
sind Zeichenfelder.Diese werden demnächst auf kategorischFERTIG geändert . Daneben gibt es andere Faktoren, die wahrscheinlich in naher Zukunft Auswirkungen auf diese Zeitabläufe haben werden (wie dasGruppieren parallelerFERTIGSTELLUNGEN ). Wir werden auch separate Benchmarks für Daten mit NAs undverschiedenen Kardinalitätenhinzufügen .Dieses fortlaufende Benchmarking-Projekt wird noch weitere Aufgaben erfüllen. Wenn Sie also daran interessiert
join
sindsort
,read
sollten Sie dies später überprüfen.Und natürlich sind Sie herzlich eingeladen, Feedback zum Projekt-Repo zu geben!
quelle
blocksize
inread_csv
). Haben Sie versucht, einen Aufruf zu vermeidencompute()
und die Ausgabe auf die Festplatte zu sichern, um zu vermeiden, dass die gesamte Ausgabetabelle im Arbeitsspeicher erstellt wird?Nein, in der Tat, wenn die Datenmenge sooooooo groß ist, dass Pandas abstürzt, stecken Sie im Grunde mit dem Dask fest, was scheiße ist und Sie können nicht einmal eine einfache Gruppensumme machen. dplyr mag nicht schnell sein, aber es bringt nichts durcheinander.
Ich arbeite gerade an einem kleinen 2G-Datensatz und ein einfacher
print(df.groupby(['INCLEVEL1'])["r"].sum())
stürzt das Dask ab.Ich habe diesen Fehler nicht mit dplyr erlebt.
Wenn Pandas also mit dem Datensatz umgehen können, verwende ich Pandas. Wenn nicht, halte dich an die R-Datentabelle.
Und ja, Sie können dask mit einem einfachen Befehl zurück in pandas dataframe konvertieren.
df.compute()
Es dauert jedoch ziemlich lange, sodass Sie genauso gut geduldig darauf warten können, dass pandas geladen oder mit Daten versehen werden, um sie zu lesen.quelle
Ich weiß, dass dies ein älterer Beitrag ist, aber es könnte erwähnenswert sein, dass die Verwendung von feather (in R und in Python) das Bearbeiten von Datenrahmen / Datentabellen und das Teilen dieser Ergebnisse über feather ermöglicht.
Siehe feather's github Seite
quelle