
Dies handelt
Sie können die Daten auf viele verschiedene Arten schneiden. Sie können mit den Daten beitreten, zusammenarbeiten. Sie können verschiedene statistische, zusammenfassende, finanzielle und ML -Algorithmen für die Daten ausführen. Sie können Ihre benutzerdefinierten Algorithmen leicht hinzufügen. Sie können die Sortierung mit mehreren Spalten, benutzerdefinierte Auswahl und Löschen der Daten. Und mehr…
DataFrame enthält auch eine große Sammlung von analytischen Algorithmen in Form von Besuchern. Diese stammen aus grundlegenden Statistiken wie Mittelwert , STD -Abweichung , Rückkehr , mehr involviertem Analyse wie Affinitätsausbreitung , Polynomanpassung , schneller Fourier -Transformation der willkürlichen Länge … einschließlich einer guten Sammlung von Handelsindikatoren. Sie können auch problemlos Ihre eigenen Algorithmen hinzufügen.
DataFrame verwendet auch umfangreiche Multithreading in fast allen APIs für große Datensätze. Das macht DataFrame besonders für die Analyse großer Datensätze geeignet.
Damit grundlegende Operationen Sie anfangen können, finden Sie Hello World. Eine vollständige Liste der Funktionen mit Code -Beispiele finden Sie unter Dokumentation.
Ich habe ein paar Prinzipien in dieser Bibliothek verfolgt:
Sie haben wahrscheinlich von Polars DataFrame gehört. Es ist in Rost implementiert und mit Null-Overhead nach Python portiert (solange Sie keine Schleife haben). Ich wurde von vielen Menschen gebeten, einen Vergleich für DataFrame mit Polars zu schreiben. Also fand ich endlich etwas Zeit, um ein bisschen über Polare zu lernen und einen sehr einfachen Benchmark zu schreiben.
Ich habe die folgenden identischen Programme sowohl für Polar- als auch für C ++ - DataFrame (und Pandas) geschrieben. Ich habe Polars -Version verwendet: 0.19.14 (Pandas -Version: 1.5.3, Numpy Version: 1.24.2). Und ich habe C ++ 20 Clang Compiler mit -O3 -Option verwendet. Ich lief beide auf meinem etwas veralteten MacBook Pro (Intel Chip, 96 GB RAM).
In beiden Fällen habe ich einen Datenrahmen mit 3 zufälligen Spalten erstellt. Der C ++ - DataFrame erforderte auch eine zusätzliche Indexspalte derselben Größe. Polar glaubt nicht an Indexspalten (das hat seine eigenen Vor- und Nachteile. Ich gehe sie hier nicht durch). Jedes Programm hat drei identische Teile. Zunächst generiert und populiert es 3 Spalten mit jeweils 300 m -Zufallszahlen (bei C ++ - DataFrame muss es auch eine sequentielle Indexspalte mit derselben Größe generieren). Das ist der Teil, an dem ich nicht interessiert bin. Im zweiten Teil berechnet es den Mittelwert der ersten Spalte, die Varianz der zweiten Spalte und die Pearson -Korrelation der zweiten und dritten Spalten. Im dritten Teil wird in einer der Spalten eine Auswahl (oder Filter, wie Polars es nennt) ausgewählt.
Ergebnisse :
Der maximale Datensatz, den ich in Polare laden konnte, betrug 300 m Zeilen pro Spalte. Jeder größere Datensatz hat den Speicher in die Luft gesprengt und OS getötet. Ich habe C ++ DataFrame mit 10B Zeilen pro Spalte ausgeführt und bin sicher, dass er auch mit größeren Datensätzen ausgeführt worden wäre. Also war ich gezwungen, beide mit 300 Mio. Zeilen zu vergleichen. Ich habe jeden Test 4 Mal durchgeführt und habe die beste Zeit genommen. Die Polarszahlen variierten sehr stark von einem Lauf zum anderen, insbesondere von Berechnungs- und Auswahlzeiten. Die C ++ - Datenrahmenzahlen waren signifikant konsistenter.
| C ++ Datenframe | Polare | Pandas | |
|---|---|---|---|
| Datenerzeugung/Ladezeit | 26.945900 Sekunden | 28.468640 Sekunden | 36.678976 Sekunden |
| Berechnungszeit | 1.260150 Sekunden | 4.876561 Sekunden | 40.326350 Sekunden |
| Auswahlzeit | 0,742493 Sekunden | 3.876561 Sekunden | 8.326350 Sekunden |
| Gesamtzeit: | 28.948600 Sekunden | 36.876345 Sekunden | 85.845114 Sekunden |
Bitte erwägen Sie, den Datenrahmen zu sponsern, insbesondere wenn Sie ihn in Produktionskapazität verwenden. Es ist die stärkste Form der Wertschätzung