1178 Stimmen

"Große Daten-Workflows mit Pandas

Ich habe viele Monate lang versucht, eine Antwort auf diese Frage zu finden, während ich Pandas lernte. Ich verwende SAS für meine tägliche Arbeit und es ist großartig für seine Out-of-Core-Unterstützung. Allerdings ist SAS als Software aus zahlreichen anderen Gründen furchtbar.

Ich hoffe, dass ich eines Tages SAS durch Python und Pandas ersetzen kann, aber derzeit fehlt mir ein Out-of-Core-Workflow für große Datensätze. Ich spreche nicht von "Big Data", die ein verteiltes Netzwerk erfordern, sondern eher von Dateien, die zu groß sind, um in den Speicher zu passen, aber klein genug, um auf eine Festplatte zu passen.

Mein erster Gedanke ist die Verwendung von HDFStore um große Datensätze auf der Festplatte zu speichern und nur die Teile, die ich für die Analyse benötige, in Dataframes zu ziehen. Andere haben MongoDB als einfacher zu verwendende Alternative erwähnt. Meine Frage ist folgende:

Welche Arbeitsabläufe haben sich bewährt, um die folgenden Aufgaben zu bewältigen?

  1. Laden von Flat Files in eine permanente Datenbankstruktur auf der Festplatte
  2. Abfrage dieser Datenbank zum Abrufen von Daten für eine Pandas-Datenstruktur
  3. Aktualisieren der Datenbank nach der Bearbeitung von Teilen in Pandas

Beispiele aus der Praxis wären sehr willkommen, vor allem von jemandem, der Pandas für "große Daten" verwendet.

Bearbeiten - ein Beispiel dafür, wie ich mir das vorstelle:

  1. Iterativer Import einer großen Flat-File und Speicherung in einer permanenten Datenbankstruktur auf der Festplatte. Diese Dateien sind in der Regel zu groß, um in den Speicher zu passen.
  2. Um Pandas zu verwenden, möchte ich Teilmengen dieser Daten lesen (normalerweise nur ein paar Spalten auf einmal), die in den Speicher passen.
  3. Ich würde neue Spalten erstellen, indem ich verschiedene Operationen an den ausgewählten Spalten durchführe.
  4. Ich müsste dann diese neuen Spalten an die Datenbankstruktur anhängen.

Ich versuche, eine bewährte Methode zur Durchführung dieser Schritte zu finden. Lesen von Links über Pandas und Pytables scheint es, dass das Anhängen einer neuen Spalte ein Problem sein könnte.

Edit -- Ich antworte speziell auf Jeffs Fragen:

  1. Ich erstelle Modelle für das Verbraucherkreditrisiko. Zu den Daten gehören Telefon, SSN und Adressmerkmale; Immobilienwerte; abweichende Informationen wie Strafregisterauszüge, Konkurse usw.. Die Datensätze, die ich täglich verwende, haben im Durchschnitt fast 1.000 bis 2.000 Felder mit gemischten Datentypen: kontinuierliche, nominale und ordinale Variablen, sowohl numerische als auch Zeichendaten. Ich füge selten Zeilen an, aber ich führe viele Operationen durch, die neue Spalten erzeugen.
  2. Typische Operationen sind die Kombination mehrerer Spalten mit Hilfe bedingter Logik zu einer neuen, zusammengesetzten Spalte. Zum Beispiel, if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B' . Das Ergebnis dieser Operationen ist eine neue Spalte für jeden Datensatz in meinem Dataset.
  3. Schließlich möchte ich diese neuen Spalten an die Datenstruktur auf der Festplatte anhängen. Ich würde Schritt 2 wiederholen und die Daten mit Kreuztabellen und deskriptiven Statistiken untersuchen, um interessante, intuitive Beziehungen zu finden, die sich modellieren lassen.
  4. Eine typische Projektdatei ist in der Regel etwa 1 GB groß. Die Dateien sind so organisiert, dass eine Zeile aus einem Datensatz mit Verbraucherdaten besteht. Jede Zeile hat die gleiche Anzahl von Spalten für jeden Datensatz. Dies wird immer der Fall sein.
  5. Es ist ziemlich selten, dass ich bei der Erstellung einer neuen Spalte nach Zeilen untergliedern würde. Bei der Erstellung von Berichten oder deskriptiven Statistiken ist es jedoch ziemlich üblich, dass ich nach Zeilen subsumiere. Ich möchte zum Beispiel eine einfache Häufigkeit für einen bestimmten Geschäftszweig erstellen, z. B. Kreditkarten für den Einzelhandel. Dazu würde ich nur die Datensätze auswählen, bei denen der Geschäftszweig = Einzelhandel ist, zusätzlich zu den Spalten, über die ich berichten möchte. Bei der Erstellung neuer Spalten würde ich jedoch alle Datenzeilen und nur die Spalten, die ich für die Vorgänge benötige, ziehen.
  6. Der Modellierungsprozess erfordert, dass ich jede Spalte analysiere, nach interessanten Beziehungen zu einer Ergebnisvariablen suche und neue zusammengesetzte Spalten erstelle, die diese Beziehungen beschreiben. Die Spalten, die ich untersuche, werden in der Regel in kleinen Gruppen erstellt. Ich konzentriere mich zum Beispiel auf einen Satz von etwa 20 Spalten, die sich nur mit Immobilienwerten befassen, und beobachte, wie sie mit der Nichtzahlung eines Kredits zusammenhängen. Sobald diese untersucht und neue Spalten erstellt sind, gehe ich zu einer anderen Gruppe von Spalten über, z. B. Hochschulbildung, und wiederhole den Vorgang. Ich erstelle also Kandidatenvariablen, die die Beziehung zwischen meinen Daten und einem bestimmten Ergebnis erklären. Ganz am Ende dieses Prozesses wende ich einige Lerntechniken an, die aus diesen zusammengesetzten Spalten eine Gleichung erstellen.

Es kommt selten vor, dass ich dem Datensatz Zeilen hinzufüge. Ich werde fast immer neue Spalten erstellen (Variablen oder Merkmale im Sprachgebrauch der Statistik und des maschinellen Lernens).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X