"Fünf Exabyte an Informationen wurden von der Menschheit vom Moment der Geburt der Zivilisation bis 2003 erstellt, aber jetzt wird alle zwei Tage die gleiche Menge erstellt." Eric SchmidtDatatable ist eine Python-Bibliothek zur Durchführung einer effizienten Multithread-Datenverarbeitung. Datatable unterstützt Datasets, die nicht in den Speicher passen.
Wenn Sie in R schreiben, verwenden Sie wahrscheinlich bereits das Paket
data.table
.
Data.table ist eine Erweiterung des
data.frame R-Pakets. Darüber hinaus können diejenigen, die R verwenden, um große Datenmengen schnell zu aggregieren, nicht auf dieses Paket verzichten (es handelt sich insbesondere um etwa 100 GB Daten im RAM).
Das
data.table
Paket für R ist sehr flexibel und leistungsstark. Die Verwendung ist einfach und bequem, die Programme, in denen es verwendet wird, sind recht schnell geschrieben. Dieses Paket ist unter R-Programmierern weithin bekannt. Es wird mehr als 400.000 Mal im Monat heruntergeladen und in fast 650 CRAN- und Bioconductor-Paketen (
Quelle ) verwendet.
Was ist die Verwendung von Data Mining für Python? Die Sache ist, dass es ein Python-Datenpaket gibt, das ein Analogon zu
data.table
aus der Welt R ist. Das Datenpaket
datatable
eindeutig auf die Verarbeitung großer Datenmengen ausgerichtet. Es zeichnet sich durch hohe Leistung aus - sowohl bei der Arbeit mit Daten, die vollständig im RAM gespeichert sind, als auch bei der Arbeit mit Daten, deren Größe die Menge des verfügbaren RAM überschreitet. Es unterstützt die Multithread-Datenverarbeitung. Im Allgemeinen kann das
datierbare Paket als der jüngere Bruder von
data.table bezeichnet werden .
Datierbar
Moderne maschinelle Lernsysteme müssen ungeheure Datenmengen verarbeiten und viele Funktionen generieren. Dies ist notwendig, um so genaue Modelle wie möglich zu erstellen. Das
datatable
Python-Modul wurde erstellt, um dieses Problem zu lösen. Dies ist eine Reihe von Tools zum Ausführen von Vorgängen mit großen Datenmengen (bis zu 100 GB) auf einem einzelnen Computer mit der höchstmöglichen Geschwindigkeit. Die
datatable
wird von
datatable
gesponsert und der erste Benutzer des Pakets ist
Driverless.ai .
Dieses Toolkit ist
Pandas sehr ähnlich, konzentriert sich jedoch mehr auf die Bereitstellung einer Hochgeschwindigkeitsdatenverarbeitung und die Unterstützung großer Datenmengen. Die Entwickler des
datatable
Pakets bemühen sich außerdem, den Benutzern die Arbeit damit zu erleichtern. Es handelt sich insbesondere um eine leistungsstarke API und durchdachte Fehlermeldungen. In diesem Artikel werden wir darüber sprechen, wie man
datatable
Daten verwendet und wie sie im Vergleich zu
pandas
bei der Verarbeitung großer Datenmengen aussehen.
Installation
Unter macOS kann
datatable
einfach mit
pip
installiert werden:
pip install datatable
Unter Linux erfolgt die Installation über Binärdistributionen:
Derzeit funktioniert
datatable
unter Windows nicht, aber in dieser Richtung wird gearbeitet, sodass die Windows-Unterstützung nur eine Frage der Zeit ist.
Details zur Installation von
datatable
finden Sie
hier .
Der Code, der in diesem Artikel verwendet wird, befindet sich in
diesem GitHub-Repository oder
hier auf mybinder.org.
Daten lesen
Der Datensatz, mit dem wir hier experimentieren werden, stammt aus Kaggle (
Lending Club Loan Data Dataset ). Dieses Set enthält vollständige Daten zu allen in den Jahren 2007 bis 2015 gewährten Darlehen, einschließlich des aktuellen Status des Darlehens (aktuell, verspätet, vollständig bezahlt usw.) und der neuesten Zahlungsinformationen. Die Datei besteht aus 2,26 Millionen Zeilen und 145 Spalten. Die Größe dieses Datasets ist ideal, um die Funktionen der
datatable
Bibliothek zu demonstrieren.
Laden wir die Daten in ein
Frame
Objekt. Die grundlegende Analyseeinheit in einer
datatable
ist
Frame
. Dies entspricht einem
DataFrame
aus einer
DataFrame
oder SQL-Tabelle. Wir sprechen nämlich von Daten, die als zweidimensionales Array organisiert sind, in dem Zeilen und Spalten unterschieden werden können.
▍Daten laden mit datatable
%%time datatable_df = dt.fread("data.csv") ____________________________________________________________________ CPU times: user 30 s, sys: 3.39 s, total: 33.4 s Wall time: 23.6 s
Die obige Funktion
fread()
ist ein leistungsstarker und sehr schneller Mechanismus. Es kann automatisch Parameter für die überwiegende Mehrheit der Textdateien erkennen und verarbeiten, Daten aus ZIP-Archiven und Excel-Dateien herunterladen, Daten per URL abrufen und vieles mehr.
Darüber hinaus verfügt der
datatable
Parser über die folgenden Funktionen:
- Es kann automatisch Trennzeichen, Überschriften, Spaltentypen, Regeln für das Escapezeichen von Zeichen usw. erkennen.
- Er kann Daten aus verschiedenen Quellen lesen. Darunter befinden sich das Dateisystem, die URL, die Befehlsshell, der Rohtext und die Archive.
- Er ist in der Lage, Multithread-Daten zu lesen, um maximale Leistung zu erzielen.
- Beim Lesen großer Dateien wird eine Fortschrittsanzeige angezeigt.
- Es kann Dateien lesen, die mit RFC4180 kompatibel und nicht kompatibel sind .
▍Download von Daten mit Pandas
Nun wollen wir sehen, wie lange
pandas
brauchen, um dieselbe Datei zu lesen.
%%time pandas_df= pd.read_csv("data.csv") ___________________________________________________________ CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 s Wall time: 1min 4s
Sie können sehen, dass
datatable
beim Lesen großer Datenmengen deutlich schneller sind als
pandas
.
Pandas
in unserem Experiment dauern mehr als eine Minute und die von
datatable
benötigte Zeit wird in Sekunden gemessen.
Rahmenobjektkonvertierung
Ein vorhandenes
datatable
Paket-
Frame
Objekt kann in ein
numpy
oder
pandas
DataFrame
Objekt
DataFrame
werden. Es wird so gemacht:
numpy_df = datatable_df.to_numpy() pandas_df = datatable_df.to_pandas()
Versuchen wir, eine vorhandene
Frame
datatable
in einen
DataFrame
pandas
zu konvertieren und zu sehen, wie lange es dauert.
%%time datatable_pandas = datatable_df.to_pandas() ___________________________________________________________________ CPU times: user 17.1 s, sys: 4 s, total: 21.1 s Wall time: 21.4 s
Es scheint, dass das Einlesen einer Datei in eine
Frame
datatable
und das anschließende Konvertieren dieser Datei in ein
pandas
DataFrame
Objekt weniger Zeit in
DataFrame
nimmt als das Laden von Daten in einen
DataFrame
pandas
. Wenn Sie also große Datenmengen mit
pandas
möchten, ist es möglicherweise besser, diese mit
DataFrame
zu laden und dann in einen
DataFrame
zu
DataFrame
.
type(datatable_pandas) ___________________________________________________________________ pandas.core.frame.DataFrame
Grundlegende Eigenschaften des Frame-Objekts
Berücksichtigen Sie die grundlegenden Eigenschaften eines
Frame
Objekts aus einer
datatable
. Sie sind den ähnlichen Eigenschaften des
DataFrame
Objekts von
pandas
sehr ähnlich:
print(datatable_df.shape)
Hier können wir die
head()
-Methode verwenden, die die
n
ersten Zeilen anzeigt:
datatable_df.head(10)
Die ersten 10 Zeilen eines Frame-Objekts aus einer DatentabelleKopfzeilenfarben geben den Datentyp an. Rot kennzeichnet Linien, Grün kennzeichnet Ganzzahlen, Blau kennzeichnet Gleitkommazahlen.
Zusammenfassende Statistik
Das Berechnen von Zusammenfassungsstatistiken in
pandas
ist eine Operation, die viel Speicher benötigt. Bei
datatable
dies nicht der Fall. Hier sind die Befehle, mit denen Sie verschiedene Metriken in einer
datatable
berechnen können:
datatable_df.sum() datatable_df.nunique() datatable_df.sd() datatable_df.max() datatable_df.mode() datatable_df.min() datatable_df.nmodal() datatable_df.mean()
Wir berechnen den Durchschnittswert über die Spalten mithilfe von
datatable
und
pandas
und analysieren die Zeit, die erforderlich ist, um diesen Vorgang abzuschließen.
▍ Ermitteln des Durchschnitts mithilfe von Datentabellen
%%time datatable_df.mean() _______________________________________________________________ CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 s Wall time: 1.43 s
▍ Ermitteln des Durchschnitts mit Pandas
pandas_df.mean() __________________________________________________________________ Throws memory error.
Wie Sie sehen können, konnten wir bei
pandas
das Ergebnis nicht erhalten - es wurde ein Speicherfehler ausgegeben.
Datenmanipulation
Frame
und
DataFrame
sind Datenstrukturen, die Tabellen sind. In
datatable
Daten werden eckige Klammern verwendet, um Daten zu bearbeiten. Dies ähnelt der Funktionsweise herkömmlicher Matrizen. Wenn Sie jedoch eckige Klammern verwenden, können Sie hier zusätzliche Funktionen verwenden.
Arbeiten mit datierbaren Daten in eckigen KlammernIn der Mathematik werden beim Arbeiten mit Matrizen auch Konstruktionen der Form
DT[i, j]
verwendet. Ähnliche Strukturen finden sich in C, C ++ und R, in
pandas
und
numpy
Paketen sowie in vielen anderen Technologien. Erwägen Sie, allgemeine Datenmanipulationen in einer Datentabelle durchzuführen.
▍ Zeilen- oder Spaltenmuster bilden
Der folgende Code wählt alle Zeilen aus der Spalte "finanziert_amnt "aus:
datatable_df[:,'funded_amnt']
Wählen Sie alle Zeilen der Spalte Funded_amnt ausSo wählen Sie die ersten 5 Zeilen und 3 Spalten aus:
datatable_df[:5,:3]
Auswahl der ersten 5 Zeilen und 3 Spalten▍Sortieren von Daten mit datatable
Sortieren Sie den Datensatz nach der ausgewählten Spalte:
%%time datatable_df.sort('funded_amnt_inv') _________________________________________________________________ CPU times: user 534 ms, sys: 67.9 ms, total: 602 ms Wall time: 179 ms
▍Sortieren von Daten mit Pandas
%%time pandas_df.sort_values(by = 'funded_amnt_inv') ___________________________________________________________________ CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 s Wall time: 12.4 s
Beachten Sie den signifikanten Zeitunterschied, der zum Sortieren von
datatable
und
pandas
erforderlich ist.
▍Löschen Sie Zeilen und Spalten
So entfernen Sie eine Spalte mit dem Namen
member_id
:
del datatable_df[:, 'member_id']
Gruppierung
Datatable unterstützt wie
pandas
Datengruppierungsfunktionen. Schauen wir uns an, wie Sie den Durchschnitt der Spalte "
funded_amound
, deren Daten nach der Spalte "
grade
gruppiert sind.
▍Gruppen gruppieren mit datatable
%%time for i in range(100): datatable_df[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)] ____________________________________________________________________ CPU times: user 6.41 s, sys: 1.34 s, total: 7.76 s Wall time: 2.42 s
Hier sehen Sie die Verwendung des
.f
Konstrukts. Dies ist der sogenannte Frame-Proxy - ein einfacher Mechanismus, mit dem Sie auf das
Frame
Objekt verweisen können, mit dem derzeit einige Aktionen ausgeführt werden. In unserem Fall ist
dt.f
dasselbe wie
datatable_df
.
▍Daten mit Pandas gruppieren
%%time for i in range(100): pandas_df.groupby("grade")["funded_amnt"].sum() ____________________________________________________________________ CPU times: user 12.9 s, sys: 859 ms, total: 13.7 s Wall time: 13.9 s
Linienfilterung
Die Filtersyntax ähnelt der Gruppierungssyntax.
loan_amnt
die Zeilen "
loan_amnt
, für die der Wert "
loan_amnt
größer als "
funded_amnt
.
datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt"]
Speichern eines Frame-Objekts
Der Inhalt des
Frame
Objekts kann in eine CSV-Datei geschrieben werden, die die zukünftige Verwendung von Daten ermöglicht. Es wird so gemacht:
datatable_df.to_csv('output.csv')
Weitere
datatable
Methoden zum Arbeiten mit Daten finden Sie
hier .
Zusammenfassung
Das
datatable
Python-Modul ist definitiv schneller als die üblichen
pandas
. Es ist auch ein Segen für diejenigen, die sehr große Datenmengen verarbeiten müssen. Bisher ist das einzige Minus, das im Vergleich zu
pandas
datatable
ist, der Umfang der Funktionalität. Es wird jedoch aktiv an
datatable
, sodass es durchaus möglich ist, dass
datatable
Zukunft
pandas
in alle Richtungen übertreffen wird.
Liebe Leser! Planen Sie, das
datatable
Paket in Ihren Projekten zu verwenden?

