Ich arbeite an einem Projekt, in dem viele Analytiker statistische Modelle in R erstellen. Normalerweise stellen sie mir die Modellobjekte (.Rdata-Dateien) zur Verfügung, und ich automatisiere sie für verschiedene Datasets.
Mein Problem ist:
Kann ich eine Datenbank verwenden und diese .RData-Dateien dort speichern? Irgendwelche Hinweise dazu? (Ich speichere derzeit die .Rdata-Dateien auf dem Datenträger und verwende eine Datenbank zum Speichern von Standortinformationen)
Ich erhalte viele R-Skripte von anderen Analysten, die Daten vor der Erstellung der Modelle vorverarbeitet haben. Hat jemand Erfahrung mit PMML, um diesen Prozess ohne manuellen Eingriff wiederholbar zu machen? PMML speichert die Vorverarbeitungsschritte, Modellierungsschritte als Markup-Tags und würde dieselben für ein neues Dataset wiederholen.
Danke für die Vorschläge und das Feedback.
-Harsh
Ja, dies ist zB möglich, wenn MySQL mit dem Paket RMySQL
und DBI
mit R verbunden ist oder mit dem Paket RODBC
oder RJDBC
. Ich bin nicht 100% sicher, ob sie alle Blobs unterstützen, aber im schlimmsten Fall könnten Sie die ASCII-Darstellung verwenden und sie in ein Textfeld einfügen.
Der Trick ist die Verwendung der Funktion serialize()
Jetzt können Sie Obj in einer Datenbank speichern oder abrufen. Es ist eigentlich nicht mehr als ein Vektor von Ascii (oder Binärcodes). ascii = F gibt dir eine binäre Darstellung. Nach dem Abrufen verwenden Sie:
%Vor% Edit: Bezüglich des Pmml gibt es ein pmml
-Paket auf CRAN. Vielleicht bringt dich das irgendwohin?
R kann beliebiges Objekt serialisieren und deserialisieren, so ist mein Digest -Paket erstellt sogenannte Hash-Digests, indem eine Hash-Funktion über das serialisierte Objekt ausgeführt wird.
Wenn Sie also das serialisierte Objekt (das in character
serialisiert werden kann) haben, speichern Sie es. Jede relationale Datenbank unterstützt dies ebenso wie die NoSQL-Schlüssel- / Wertespeicher - und für jedes Backend können Sie sogar den Hash-Digest als Schlüssel oder eine andere Metainformation verwenden.
Andere Alternativen sind zum Beispiel RProtoBuf , die auch sehr effizient serialisieren und deserialisieren können (aber Sie würden muss zuerst die .proto-Dateien schreiben).
Beachten Sie, dass eine .RData-Datei viele R-Objekte enthalten kann. Sie müssen also entscheiden, wie Sie damit umgehen. Wenn Sie die .RData-Datei anhängen, können Sie die Objekte darin mit ls () mit einem pos-Argument erhalten:
%Vor%Dann können Sie über sie hinwegschleifen, sie () von der Position nach Namen benennen und sie zu einer Liste serialisieren (p ist mein Listenindex)
%Vor%Jetzt müssen Sie die Elemente von s in Ihre DB squirten, wahrscheinlich in eine Tabelle von Name (irgendeine Art von char) und Value (die serialisierten Daten, ein BLOB oder varchar, denke ich).
Wie andere bereits erwähnt haben, können Sie die Ausgaben von Modellen als Text in Ihrer Datenbank speichern. Ich bin nicht überzeugt, dass dir das sehr nützlich sein wird.
Wenn Sie diese Modelle zu einem späteren Zeitpunkt erneut erstellen möchten, müssen Sie das Eingabe-Dataset und den Code, der die Modelle erstellt hat, und nicht die Ausgabe speichern.
Natürlich können Sie auch die Modellausgabe speichern. In diesem Fall müssen Sie über das Format in der Datenbank nachdenken. Wenn Sie bestimmte Modellergebnisse finden und filtern oder ordnen möchten, ist es viel einfacher, wenn Sie sie mit einer Struktur (und einigen Metadaten) zur Datenbank hinzufügen.
Sie können beispielsweise alle Modelle abrufen, bei denen eine signifikante Gender-Antwort vorliegt. In diesem Fall müssen Sie diese Informationen als separates Feld in der Datenbank hinzufügen, anstatt die Ascii-Abschnitte durchsuchen zu müssen. Das Hinzufügen weiterer Informationen wie der Ersteller des Modells und das Erstellungsdatum werden Ihnen auch später helfen.