Out-of-Core-Datenanalyseoptionen

18

Ich benutze SAS seit fast 5 Jahren professionell. Ich habe es auf meinem Laptop installiert und muss häufig Datensätze mit 1.000 bis 2.000 Variablen und Hunderttausenden von Beobachtungen analysieren.

Ich habe nach Alternativen zu SAS gesucht, mit denen ich Analysen mit ähnlich großen Datensätzen durchführen kann. Ich bin neugierig, was andere Leute für Situationen wie diese benutzen. Dies ist sicherlich nicht "Big Data" in der heutigen Art und Weise. Meine Datensätze sind auch nicht klein genug, um im Speicher zu bleiben. Ich brauche eine Lösung, die Algorithmen auf Daten anwenden kann, die auf einer Festplatte gespeichert sind. Dies sind die Dinge, die ich erfolglos untersucht habe:

  1. R - BigMemory kann Matrizen erstellen, die nicht genügend Speicherplatz haben, aber die Elemente müssen im selben Modus sein. Ich arbeite mit Daten, die fast zu 50 zwischen Zeichen und Zahlen aufgeteilt sind. Das FF-Paket kommt näher an das heran, was ich brauche, aber ich verstehe nicht genau, welche Prozeduren damit kompatibel sind. Ich denke, die Unterstützung ist etwas begrenzt.
  2. Pandas - Ich war sehr aufgeregt über eine Pythonic-Alternative zu R. Sie muss jedoch auch alle Daten im Speicher halten.
  3. Revolution R - Diese zeigt ziemlich vielversprechend. Ich habe eine Kopie auf meinem Heimcomputer (kostenlos, wenn Sie sich bei Kaggle anmelden) und muss sie noch als praktikable Alternative zu SAS testen. Kommentare zu Revolution R als SAS-Alternative werden sehr geschätzt.

Vielen Dank

UPDATE 1

Durch die Bearbeitung möchte ich hinzufügen, dass ich nach praktischen Lösungen suche, die die Menschen erfolgreich eingesetzt haben. In den meisten Fällen kann ich mit SAS große Dateien durchsuchen, ohne mir Gedanken über Speicherbeschränkungen zu machen. Obwohl SAS implementiert ist, haben sie herausgefunden, wie die Speicherverwaltung für den Benutzer transparent gemacht werden kann. Aber mit schwerem Herzen habe ich SAS für meinen Job verwendet (ich muss es tun) und würde eine FOSS-Alternative LIEBEN, mit der ich an "großen" Daten arbeiten kann, ohne überlegen zu müssen, wo sich die Daten an einem Ort befinden bestimmte Zeit (im Speicher oder auf der Festplatte).

Die nächsten Dinge, auf die ich gestoßen bin, sind Rs FF-Paket und etwas am Horizont für Python, das Blaze heißt . Und doch gibt es diese Probleme seit vielen Jahren. Was haben Analysten in der Zwischenzeit getan? Wie behandeln sie dieselben Probleme mit Speicherbeschränkungen? Die Mehrzahl der angebotenen Lösungen scheint zu sein:

  • Holen Sie sich mehr RAM - Dies ist keine gute Lösung, imo. Es ist einfach, einen Datensatz zu finden, der den Arbeitsspeicher überschreitet und dennoch auf eine Festplatte passt. Darüber hinaus muss der Workflow alle Strukturen berücksichtigen, die während der explorativen Datenanalyse erstellt werden.
  • Teilmenge der Daten - Dies ist in Ordnung für die Erkundung, jedoch nicht für die Fertigstellung der Ergebnisse und die Berichterstellung. Irgendwann müssen alle Prozesse, die in einer Teilmenge entwickelt werden, auf den gesamten Datensatz angewendet werden (in meinem Fall jedenfalls).
  • Durch die Daten blättern - Das ist es, worüber ich mehr von Leuten wissen möchte, die diesen Workflow tatsächlich implementieren. Wie wird es gemacht? Mit welchen Werkzeugen? Kann dies auf eine Weise geschehen, die für den Benutzer transparent ist? (dh erstellen Sie eine Datenstruktur auf der Festplatte, und der Rahmen sorgt für die Aufteilung unter der Haube).
Zelazny7
quelle
1
Die neueren Versionen von Stata auf 64-Bit-Computern haben kein Problem mit Datensätzen dieser Größe (da 5 GB heutzutage problemlos in den Arbeitsspeicher passen). Haben Sie jedoch Interesse an kommerziellen Alternativen zu SAS oder suchen Sie nur nach FOSS?
Whuber
1
Ja, FOSS-Lösungen sind das, wonach ich suche. Ich bin damit einverstanden, dass ein Datensatz in 5 GB RAM passen könnte, er muss jedoch auch die Operationen und zusätzlichen Datenstrukturen verarbeiten, die während der explorativen Datenanalyse erstellt werden. Kombinieren Sie dies mit kommerziellen Laptops, die mit mageren 4 GB RAM ausgestattet sind, und der durch das Betriebssystem verbrauchte Overhead und Speicherfehler treten ziemlich schnell auf.
Zelazny7
2
@ Zelazny7: Hinzufügen weiterer 4Gigs zu einem Laptop sollte heutzutage ziemlich billig sein. :)
curious_cat
3
Eine andere Möglichkeit besteht darin, die Daten in einer Datenbank (SQL oder auf andere Weise) zu speichern. Oft wird für eine Analyse nur eine Teilmenge von Daten benötigt (Variablen 1:10, aber nicht 1: 1000), die in den Speicher passen. Wenn die Teilmenge immer noch größer als der Speicher ist, kann die Analyse in Blöcken durchgeführt werden (laden Sie jeweils 1000 Beobachtungen aus der Datenbank, und stellen Sie die Ergebnisse am Ende entsprechend zusammen).
Jthetzel
1
Lesen Sie unbedingt die Big-Data- Fragen zu SO sowie die Aufgabenansicht für Hochleistungsrechnen zu CRAN, um weitere Diskussionen zu erhalten, sofern Sie dies noch nicht getan haben.
Jthetzel

Antworten:

3

Wenn Sie maximal 500.000 Datensätze x 2.000 Variablen verwenden, würde ich ein wenig mehr Geld für RAM für Ihren Laptop ausgeben und damit fertig sein. Wenn Sie 16 GB haben, können Sie den von Ihnen beschriebenen Datensatz wahrscheinlich direkt in R einlesen. und an diesem Punkt werden Sie in der Lage sein, viel mehr zu tun - und das sehr schnell. Aber Sie sagen, das ist keine Option, also:

Schauen Sie sich SQL-basierte Pakete für R an. Mit diesen können Sie eine Verbindung zu externen Datenbanken herstellen und über SQL auf diese Tabellen zugreifen. Da SQL ziemlich universell ist (und R Open Source ist), geht Ihr Code nicht verloren, wenn Sie Aufträge wechseln oder den Zugriff auf SAS verlieren. Die am einfachsten einzurichtende externe Datenbank ist RSQLitedie mit Abstand schnellste MonetDB.R( Geschwindigkeitstests ).

Es gibt wahrscheinlich ein paar gute Lösungen für Ihr angegebenes Problem. Ich vermute, dass fast alle von ihnen R enthalten;)

Anthony Damico
quelle
2

Vielleicht geht es nicht so sehr um die Anwendungen / Probleme, die Sie anstreben, und deren Eigenschaften, sondern vielmehr um die Algorithmen und Varianten, die Sie verwenden. Genauer gesagt, um mit großen Datenmengen umgehen zu können, gibt es viele Varianten, die auf der stochastischen Gradientenabnahme bekannter Algorithmen wie SVM basieren und damit umgehen können.

Scikit bietet Unterstützung für einige dieser Algorithmen (SVM, kNN, kmeans, ...). Ich denke, diese schöne Grafik kann Ihnen helfen, schnell herauszufinden, ob ein Scikit für Sie überhaupt Sinn macht.

hoffentlich hilft das

HINWEIS: Es folgt eine Antwort auf den Kommentar von zelazny7

Jetzt habe ich dich verstanden. Was Sie suchen, ist Pandas . Schauen Sie sich den Vortragsbereich an. In einer Präsentation werden der Arbeitsablauf von Panda und der von Panda kurz verglichen. Mit Panda können Sie Daten in verschiedenen Formaten importieren und Bgu-Dateien über die Integration von HDF5- Tabellen verarbeiten. Außerdem können Sie Scikit anschließen.

jpmuc
quelle
Vielen Dank! Die Algorithmen müssten auf jeden Fall funktionieren on-lineoder Teile der Daten in den Speicher lesen und auf die Festplatte zurückschreiben. Scikit ist großartig und genau das würde ich sehr lieben, aber welche Tools / Workflows / Ansätze gibt es für die sehr notwendigen Schritte der Exploration, Mungierung und Datenvorbereitung, bevor diese Algen angewendet werden? Diese Sprachen können mit diesen Schritten umgehen, aber ich suche wirklich nach einem konkreten Beispiel von jemandem, der sich mit diesen Problemen aus dem Speicher beschäftigt.
Zelazny7
Ich habe meine Antwort mit dem bearbeitet, wonach Sie suchen (oder glaube ich!)
jpmuc
2

Sie scheinen bereits mit SAS vertraut zu sein, und Ihre Datensätze sind klein genug, um in den Arbeitsspeicher zu passen. Möglicherweise können Sie jedoch nicht genug Arbeitsspeicher in Ihren Laptop einbauen. Wenn es Ihnen nichts ausmacht, bei SAS zu bleiben, wie wäre es dann mit einer Verbindung zu SAS, die remote auf einem Computer mit viel RAM ausgeführt wird? Ich habe keine Ahnung, wie das funktioniert, aber diese Links könnten Ihnen den Einstieg erleichtern.

Es gibt andere gute Gründe, Pandas oder R zu verwenden, aber ich glaube, Sie müssen sich keine Gedanken über Speicherbeschränkungen machen. Wenn Sie nicht genug Speicher auf Ihrem Laptop haben, führen Sie die Python- oder R-Instanz an einer anderen Stelle aus und stellen Sie eine Verbindung mit SSH, iPython Notebook oder RStudio her.

Thomas Levine
quelle
1

Graphchi ist exzellent und kann mit riesigen Datenmengen umgehen. Es ist ein bisschen mühsam, damit zu arbeiten, aber es kann mit grafischen und nicht grafischen Daten umgehen.

Zach
quelle
1

Ich bin kürzlich auf etwas gestoßen SFrames und GraphLab Create gestoßen. Dies sind Bibliotheken für Python, die die Art von Funktionalität bieten, nach der Sie scheinbar suchen Von der Pypi-Site: "SFrame ist ein skalierbarer, nicht zum Kern gehörender Datenframe, mit dem Sie mit Datensätzen arbeiten können, die größer sind als der Arbeitsspeicher auf Ihrem System. " Stellen Sie sich das also als Datenmanipulationsfunktionalität und API in Pandas vor, ohne zuerst alle Daten im Speicher zu speichern. SFrame ist meines Wissens kostenlos und Open Source. Andererseits baut GraphLab auf der SFrame-Funktionalität auf, um Algorithmen für deskriptive und prädiktive (maschinelles Lernen) Analysen von in SFrames gespeicherten Daten bereitzustellen. GraphLab Create Create ist kein Open-Source-Programm, verfügt jedoch über eine kostenlose Demo-Lizenz. In jedem Fall kann SFrame ausreichen, je nachdem, wie ausgefeilt Ihre Algorithmen sein müssen.

Mateo
quelle
-1

Haben Sie eine "echte", nicht interpretierte Sprache wie Fortran in Betracht gezogen?

Es sieht so aus, als ob die bisherigen Vorschläge entweder sehr herstellerabhängig sind oder interpretiert werden. Interpretierte Methoden sind bei speicherintensiven Anwendungen notorisch schlecht. MatLab ist möglicherweise eine viel höhere Sprachstufe als "C", aber die Speicherbehandlungsoptimierungen in C können dazu führen, dass es 100-mal schnellere Datensätze verarbeitet, die millionenfach größer sind.

Sowohl "R" als auch "Python" sind wunderbare, technisch reichhaltige und häufig verwendete Sprachen. Sie werden auch interpretiert.

Sie könnten eine der R-on-Hadoop-Instanzen in Betracht ziehen. (Rhipe, andere) Dies hat den Vorteil, dass R (hohe Ebene, einfach zu programmieren) in MapReduce / Hadoop-Anweisungen übersetzt werden kann. Hadoop kann ein interessantes armen Mann Multi-Prozessor-Cluster machen.

http://www.datadr.org/ <- (Rhipe-Link)

Fortran wird seit Jahrzehnten entwickelt. Es hat eine sehr effiziente Speicherbehandlung und Kompilierung. Es hat auch einige höhere Bibliotheken, so dass es ziemlich einfach sehr technisch anspruchsvolle Operationen durchführen kann. Ich könnte eine Spielzeug-CFD in MatLab durchführen, aber für etwas Realistisches und Selbstcodiertes würde ich Fortran für die "Big Iron" -Verarbeitung und so etwas wie MatLab oder R für die Darstellung / Zusammenfassung von Daten verwenden. Niemand stellt kommerzielle CFD-Software her, deren "Engine" interpretiert statt kompiliert wird. Bei mehreren Anbietern ist der Moneymaker-CFD in C oder Fortran codiert. SAS wurde ursprünglich in C ( Link ) geschrieben.

Fortran und Rhipe sind zugänglich. MatLab kostet Geld und wenn mein Job es nicht bezahlt hätte, würde ich jetzt R oder Python verwenden.

UPDATE:
Mein Punkt wurde "zusammengestellt". Python verfügt über Cython, mit dem derselbe (grundlegende) Code ~ 1000x schneller ausgeführt werden kann. Das heißt, Sie können Daten haben, die ~ 1000x größer sind, und sie in nahezu derselben Zeit verarbeiten. Cython sauber zum Laufen zu bringen, kann eine Herausforderung sein, aber Tools wie " Sage " verpacken es gut. Rcpp hat angeblich ähnliche, aber ich persönlich weiß nicht, dass es so gut entwickelt ist.

Wenn Sie darüber nachdenken, werden die Grundlagen von fast allem, was Sie im wissenschaftlichen Rechnen betreiben, auch in interpretierten Sprachen, zusammengestellt. Fortran oder C. BLAS ist BLAS; Sie erfinden den Code nicht jedes Mal neu, wenn Sie EDA ausführen . Ihre interpretierte Sprache ruft diese Bibliotheken auf, wenn auch ineffizient, wenn sie ausgeführt werden.

Nebenbei können Sie sich JMP ansehen . Es ist sehr einfach zu bedienen und eignet sich hervorragend für die visuelle explorative Datenanalyse ( EDA ).

EngrStudent
quelle
2
Wie erforschen Sie Daten mit einer kompilierten Sprache wie fortran? Der Reiz von interpretierten Sprachen liegt für mich in der REPL, die eine umfassende Selbstbeobachtung bietet und es mir ermöglicht, schnell zu lernen, mit was ich zu tun habe, und mit neuen Bibliotheksfunktionen zu spielen, mit denen ich möglicherweise nicht vertraut bin.
Zelazny7
1
Rcpp ist sehr gut entwickelt (sehen Sie sich nur die umgekehrte Verwendung auf CRAN an), aber nicht wirklich vergleichbar mit Cython. Wenn Sie eine definierte Funktion haben, können Sie die R-Eingabe in Cpp verarbeiten und die Daten an R zurückgeben. Sie werden jedoch in Kürze kein vollständiges R-Skript in Cpp kompilieren.
Russellpierce