Übersicht über das datierbare Python-Paket

"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 Schmidt


Datatable 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:

 #  Python 3.5 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp35-cp35m-linux_x86_64.whl #  Python 3.6 pip install https://s3.amazonaws.com/h2o-release/datatable/stable/datatable-0.8.0/datatable-0.8.0-cp36-cp36m-linux_x86_64.whl 

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.

 #    import numpy as np import pandas as pd import datatable as dt 

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)       # ( ,  ) print(datatable_df.names[:5])   #   5  print(datatable_df.stypes[:5])  #   5  ______________________________________________________________ (2260668, 145) ('id', 'member_id', 'loan_amnt', 'funded_amnt', 'funded_amnt_inv') (stype.bool8, stype.bool8, stype.int32, stype.int32, stype.float64) 

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 Datentabelle

Kopfzeilenfarben 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 Klammern

In 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 aus

So 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?



Source: https://habr.com/ru/post/de455507/


All Articles