Wie kann man Pandas bei der Verarbeitung großer Datenmengen helfen?

Die Pandas-Bibliothek ist eines der besten Werkzeuge für die explorative Datenanalyse . Dies bedeutet jedoch nicht, dass Pandas ein universelles Werkzeug zur Lösung von Problemen ist. Insbesondere geht es um die Verarbeitung großer Datenmengen. Ich habe sehr, sehr lange darauf gewartet, dass Pandas viele Dateien lesen oder verarbeiten, und anhand der darin enthaltenen Informationen einige Indikatoren berechnet, die mich interessieren. Tatsache ist, dass Pandas keine parallelen Datenverarbeitungsmechanismen unterstützen. Infolgedessen kann dieses Paket die Funktionen moderner Mehrkernprozessoren nicht voll ausnutzen. Große Datensätze in Pandas werden langsam verarbeitet.



Kürzlich machte ich mich auf die Suche nach etwas, das mir bei der Verarbeitung von Big Data helfen würde. Ich habe gefunden, wonach ich gesucht habe, und das gefundene Tool in meine Datenverarbeitungs-Pipeline eingebettet. Ich benutze es, um mit großen Datenmengen zu arbeiten. Zum Beispiel, um Dateien mit 10 Gigabyte Daten zu lesen, zu filtern und zu aggregieren. Wenn es mir gelingt, solche Probleme zu lösen, speichere ich das, was ich habe, in einer kleineren CSV-Datei, die für Pandas geeignet ist, und beginne dann mit den Daten, die mit Pandas erhalten wurden.

Hier ist ein Jupyter-Notizbuch mit Beispielen für dieses Material, mit denen Sie experimentieren können.

Dask


Das Tool, mit dem ich große Datenmengen verarbeite, ist die Dask- Bibliothek . Es unterstützt die parallele Datenverarbeitung, sodass Sie die Arbeit vorhandener Tools beschleunigen können. Dies beinhaltet Numpy, Pandas und Sklearn. Dask ist ein kostenloses Open Source Projekt. Es verwendet Python-APIs und Datenstrukturen, wodurch es einfach ist, Dask in vorhandene Projekte zu integrieren. Wenn wir Dask kurz beschreiben, können wir sagen, dass diese Bibliothek die Lösung gewöhnlicher Probleme vereinfacht und es ermöglicht, Probleme von enormer Komplexität zu lösen.

Pandas und Dask vergleichen


Ich kann hier die Fähigkeiten von Dask beschreiben, da diese Bibliothek viele interessante Dinge enthält, aber stattdessen betrachte ich nur ein praktisches Beispiel. Während der Arbeit stoße ich normalerweise auf große Dateien, deren gespeicherte Daten analysiert werden müssen. Lassen Sie uns eine meiner typischen Aufgaben spielen und 10 Dateien erstellen, von denen jede 100.000 Datensätze enthält. Jede solche Datei hat eine Größe von 196 MB.

from sklearn.datasets import make_classification
import pandas as pd
for i in range(1, 11):
    print('Generating trainset %d' % i)
    x, y = make_classification(n_samples=100_000, n_features=100)
    df = pd.DataFrame(data=x)
    df['y'] = y
    df.to_csv('trainset_%d.csv' % i, index=False)

Lesen Sie diese Dateien nun mit Pandas und messen Sie die Zeit, die zum Lesen erforderlich ist. In Pandas gibt es keine integrierte Unterstützung glob, daher müssen wir die Dateien in einer Schleife lesen:

%%time
import glob
df_list = []
for filename in glob.glob('trainset_*.csv'):
    df_ = pd.read_csv(filename)
    df_list.append(df_)
df = pd.concat(df_list)
df.shape

Pandas brauchten 16 Sekunden, um diese Dateien zu lesen:

CPU times: user 14.6 s, sys: 1.29 s, total: 15.9 s
Wall time: 16 s

Wenn wir über Dask sprechen, können Sie feststellen, dass Sie mit dieser Bibliothek Dateien verarbeiten können, die nicht in den Speicher passen. Dies geschieht durch Aufteilen in Blöcke und Kompilieren von Aufgabenketten. Messen wir die Zeit, die Dask benötigt, um diese Dateien zu lesen:

import dask.dataframe as dd
%%time
df = dd.read_csv('trainset_*.csv')
CPU times: user 154 ms, sys: 58.6 ms, total: 212 ms
Wall time: 212 ms

Dask brauchte 154 ms! Wie ist das überhaupt möglich? In der Tat ist dies nicht möglich. Dask implementiert ein verzögertes Aufgabenparadigma. Berechnungen werden nur durchgeführt, wenn ihre Ergebnisse benötigt werden. Wir beschreiben das Ausführungsdiagramm, mit dem Dask die Ausführung von Aufgaben optimieren kann. Wiederholen Sie den Versuch. Beachten Sie, dass die Funktion read_csvvon Dask eine integrierte Unterstützung für die Arbeit mit globfolgenden Funktionen bietet :

%%time
df = dd.read_csv('trainset_*.csv').compute()
CPU times: user 39.5 s, sys: 5.3 s, total: 44.8 s
Wall time: 8.21 s

Die Verwendung der Funktion computezwingt Dask, das Ergebnis zurückzugeben, für das Sie die Dateien wirklich lesen müssen. Das Ergebnis ist, dass Dask Dateien doppelt so schnell liest wie Pandas.

Mit Dask können Sie Python-Projekte mit Skalierungswerkzeugen ausstatten.

Vergleich der CPU-Auslastung in Pandas und Dask


Verwendet Dask alle Prozessorkerne im System? Vergleichen Sie die Verwendung von Prozessorressourcen in Pandas und in Dask beim Lesen von Dateien. Hier gilt derselbe Code, den wir oben überprüft haben.


Verwenden von Prozessorressourcen beim Lesen von Dateien mit Pandas


Verwenden von Prozessorressourcen beim Lesen von Dateien mit Dask Mit

einigen der oben genannten animierten Bilder können Sie deutlich sehen, wie Pandas und Dask beim Lesen von Dateien Prozessorressourcen verwenden.

Was passiert im Darm von Dask?


Ein Dask-Datenrahmen besteht aus mehreren Pandas-Datenrahmen, die durch Indizes getrennt sind. Wenn wir eine Funktion read_csvvon Dask ausführen , liest sie dieselbe Datei von mehreren Prozessen.

Wir können sogar ein Diagramm dieser Aufgabe visualisieren.

exec_graph = dd.read_csv('trainset_*.csv')
exec_graph.visualize()


Dask-Laufzeitdiagramm beim Lesen mehrerer Dateien

Dask Nachteile


Vielleicht haben Sie jetzt den folgenden Gedanken: "Wenn die Dask-Bibliothek so gut ist, warum nicht einfach anstelle von Pandas verwenden?" Aber nicht so einfach. Nur einige Pandas-Funktionen sind auf Dask portiert. Tatsache ist, dass bestimmte Aufgaben schwer zu parallelisieren sind. Zum Beispiel das Sortieren von Daten und das Zuweisen von Indizes zu unsortierten Spalten. Dask ist kein Tool, das absolut alle Aufgaben der Datenanalyse und -verarbeitung löst. Es wird empfohlen, diese Bibliothek nur für die Arbeit mit Datensätzen zu verwenden, die nicht vollständig in den Speicher passen. Da die Dask-Bibliothek auf Pandas basiert, bleibt alles, was in Pandas langsam funktioniert, in Dask langsam. Wie ich bereits sagte, ist Dask ein nützliches Tool, das Sie in eine Datenverarbeitungspipeline einbetten können, aber dieses Tool ersetzt keine anderen Bibliotheken.

Installieren Sie Dask


Um Dask zu installieren, können Sie den folgenden Befehl verwenden:

python -m pip install "dask[complete]"

Zusammenfassung


In diesem Artikel habe ich die Fähigkeiten von Dask nur oberflächlich angesprochen. Wenn Sie an dieser Bibliothek interessiert sind, schauen Sie sich diese großartigen Tutorials zu Dask und die Dokumentation von datafreymam Dask an. Wenn Sie wissen möchten, welche Funktionen Dask-Datenrahmen unterstützen, lesen Sie die API- BeschreibungDataFrame .

Würden Sie die Dask-Bibliothek verwenden?

Wir erinnern Sie daran, dass wir den Vorhersagewettbewerb fortsetzen, bei dem Sie ein brandneues iPhone gewinnen können. Es bleibt noch Zeit, sich darauf einzulassen und die genauesten Prognosen zu aktuellen Werten zu erstellen.


All Articles