Ich habe viele Monate lang versucht, eine Antwort auf diese Frage zu finden, während ich Pandas lernte. Ich benutze SAS für meine tägliche Arbeit und es ist großartig für die Unterstützung außerhalb des Kerns. SAS ist jedoch aus zahlreichen anderen Gründen als Software schrecklich.
Eines Tages hoffe ich, meine Verwendung von SAS durch Python und Pandas zu ersetzen, aber mir fehlt derzeit ein Out-of-Core-Workflow für große Datenmengen. Ich spreche nicht von "Big Data", für das ein verteiltes Netzwerk erforderlich ist, sondern 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, HDFStore
große Datenmengen auf der Festplatte zu speichern und nur die Teile, die ich zur Analyse benötige, in Datenrahmen zu ziehen. Andere haben MongoDB als einfachere Alternative erwähnt. Meine Frage lautet:
Was sind einige Best-Practice-Workflows, um Folgendes zu erreichen:
- Laden von Flatfiles in eine permanente Datenbankstruktur auf der Festplatte
- Abfragen dieser Datenbank, um Daten abzurufen, die in eine Pandas-Datenstruktur eingespeist werden sollen
- Aktualisieren der Datenbank nach dem Manipulieren von Stücken in Pandas
Beispiele aus der Praxis wären sehr willkommen, insbesondere von allen, die Pandas für "große Datenmengen" verwenden.
Bearbeiten - ein Beispiel dafür, wie dies funktionieren soll:
- Importieren Sie iterativ eine große Flat-Datei und speichern Sie sie in einer permanenten Datenbankstruktur auf der Festplatte. Diese Dateien sind normalerweise zu groß, um in den Speicher zu passen.
- Um Pandas verwenden zu können, möchte ich Teilmengen dieser Daten lesen (normalerweise nur wenige Spalten gleichzeitig), die in den Speicher passen.
- Ich würde neue Spalten erstellen, indem ich verschiedene Operationen an den ausgewählten Spalten ausführe.
- 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. Beim Lesen von Links zu Pandas und Pytables scheint das Anhängen einer neuen Spalte ein Problem zu sein.
Bearbeiten - Auf Jeffs Fragen speziell antworten:
- Ich baue Konsumentenkreditrisikomodelle. Die Arten von Daten umfassen Telefon-, SSN- und Adressmerkmale; Eigenschaftswerte; abfällige Informationen wie Strafregister, Insolvenzen usw. Die Datensätze, die ich täglich verwende, enthalten im Durchschnitt fast 1.000 bis 2.000 Felder gemischter Datentypen: kontinuierliche, nominale und ordinale Variablen sowohl für numerische als auch für Zeichendaten. Ich füge selten Zeilen hinzu, aber ich führe viele Operationen aus, die neue Spalten erstellen.
- Typische Operationen umfassen das Kombinieren mehrerer Spalten unter Verwendung der bedingten 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 Datensatz. - Abschließend 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 beschreibenden Statistiken untersuchen, um interessante, intuitive Beziehungen zum Modell zu finden.
- Eine typische Projektdatei ist normalerweise ungefähr 1 GB groß. Dateien sind so organisiert, dass eine Zeile aus einer Aufzeichnung von Verbraucherdaten besteht. Jede Zeile hat für jeden Datensatz die gleiche Anzahl von Spalten. Dies wird immer der Fall sein.
- Es ist ziemlich selten, dass ich beim Erstellen einer neuen Spalte nach Zeilen unterteilen würde. Es ist jedoch ziemlich üblich, dass ich beim Erstellen von Berichten oder beim Beschreiben von beschreibenden Statistiken eine Teilmenge von Zeilen unterteile. Zum Beispiel möchte ich möglicherweise eine einfache Frequenz für einen bestimmten Geschäftsbereich erstellen, z. B. Kreditkarten für Privatkunden. Zu diesem Zweck würde ich nur die Datensätze auswählen, in denen der Geschäftsbereich = Einzelhandel ist, zusätzlich zu den Spalten, über die ich berichten möchte. Beim Erstellen neuer Spalten würde ich jedoch alle Datenzeilen und nur die Spalten abrufen, die ich für die Operationen benötige.
- Der Modellierungsprozess erfordert, dass ich jede Spalte analysiere, nach interessanten Beziehungen mit einer Ergebnisvariablen suche und neue zusammengesetzte Spalten erstelle, die diese Beziehungen beschreiben. Die Spalten, die ich untersuche, werden normalerweise in kleinen Mengen erstellt. Zum Beispiel werde ich mich auf eine Reihe von beispielsweise 20 Spalten konzentrieren, die sich nur mit Immobilienwerten befassen, und beobachten, wie sie sich auf den Ausfall eines Kredits beziehen. Sobald diese untersucht und neue Spalten erstellt wurden, gehe ich zu einer anderen Gruppe von Spalten über, z. B. College-Ausbildung, und wiederhole den Vorgang. Ich erstelle 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 ist selten, dass ich dem Datensatz jemals Zeilen hinzufügen würde. Ich werde fast immer neue Spalten erstellen (Variablen oder Funktionen in der Statistik / maschinellen Lernsprache).