Ich erstelle einen Workflow zum Erstellen von Modellen für maschinelles Lernen (in meinem Fall mit Python pandas
und sklearn
Paketen) aus Daten, die aus einer sehr großen Datenbank (hier Vertica über SQL und pyodbc
) abgerufen wurden , und ein wichtiger Schritt in diesem Prozess besteht darin, fehlende Daten zu unterstellen Werte der Prädiktoren. Dies ist innerhalb einer einzelnen Analyse- oder Statistikplattform unkompliziert - sei es Python, R, Stata usw. -, aber ich bin gespannt, wo Sie diesen Schritt in einem plattformübergreifenden Workflow am besten finden.
Es ist einfach genug, dies in Python entweder mit der sklearn.preprocessing.Imputer
Klasse, mit der pandas.DataFrame.fillna
Methode oder von Hand zu tun (abhängig von der Komplexität der verwendeten Imputationsmethode). Da ich dies jedoch für Dutzende oder Hunderte von Spalten in Hunderten von Millionen von Datensätzen verwenden werde, frage ich mich, ob es eine effizientere Möglichkeit gibt, dies im Voraus direkt über SQL zu tun. Abgesehen von der potenziellen Effizienz einer verteilten Plattform wie Vertica hätte dies den zusätzlichen Vorteil, dass wir eine automatisierte Pipeline zum Erstellen "vollständiger" Versionen von Tabellen erstellen können, sodass wir keinen neuen Satz ausfüllen müssen von Grund auf fehlende Werte jedes Mal, wenn wir ein Modell ausführen möchten.
Ich habe nicht viel Anleitung dazu finden können, aber ich stelle mir vor, dass wir:
- Erstellen Sie für jede unvollständige Spalte eine Tabelle mit Ersatzwerten (z. B. Mittelwert / Median / Modus, entweder insgesamt oder nach Gruppe)
- Verbinden Sie die Ersatzwerttabelle mit der Originaltabelle, um einen Ersatzwert für jede Zeile und unvollständige Spalte zuzuweisen
- Verwenden Sie eine Reihe von case-Anweisungen, um den ursprünglichen Wert (sofern verfügbar) und den Ersatzwert (sofern nicht anders angegeben) zu verwenden
Ist dies in Vertica / SQL eine vernünftige Sache, oder gibt es einen guten Grund, sich nicht darum zu kümmern und stattdessen nur in Python damit umzugehen? Und wenn letzteres der Fall ist, gibt es ein starkes Argument dafür, dies eher bei Pandas als bei Sklearn oder umgekehrt zu tun? Vielen Dank!
quelle
Therriault, wirklich froh zu hören, dass Sie Vertica verwenden! Vollständige Offenlegung, ich bin der Chefdatenwissenschaftler dort :). Der von Ihnen beschriebene Workflow ist genau das, was mir recht häufig begegnet, und ich bin fest davon überzeugt, dass ich diese sehr großen Datensätze in der Datenbank vor der Arbeit mit pyODBC und Pandas verarbeiten muss. Ich würde vorschlagen, eine Ansicht oder Tabelle über eine dateibasierte Abfrage zu erstellen, um eine reproduzierbare Arbeit zu gewährleisten. Viel Glück
quelle