コア外のデータ分析オプション


18

私はSASを5年近くプロとして使用しています。私はそれをラップトップにインストールし、1,000〜2,000の変数と数十万の観測値を持つデータセットを頻繁に分析する必要があります。

私は、同様のサイズのデータ​​セットで分析を実行できるSASの代替を探しています。このような状況で他の人が何を使用するのか興味があります。これは確かに、今日使用されている方法では「ビッグデータ」ではありません。また、私のデータセットはメモリ内に保持するのに十分なほど小さくありません。ハードドライブに保存されたデータにアルゴリズムを適用できるソリューションが必要です。これらは私が役に立たないと調査したものです:

  1. R-BigMemoryはメモリ外に格納された行列を作成できますが、要素は同じモードでなければなりません。私は、文字と数値がほぼ50/50に分割されているデータを使用しています。FFパッケージは必要なものに近づきますが、どのプロシージャがFFパッケージと互換性があるのか​​よくわかりません。サポートはやや限られていると思います。
  2. Pandas-RのPythonの代替案に非常に興奮しました。しかし、それもすべてのデータをメモリに保持する必要があります。
  3. Revolution R-これはかなりの見込みを示しています。自宅のコンピューターにコピーがあり(Kaggleにサインアップした場合は無料)、SASの実行可能な代替手段としてまだテストしていません。SASの代替としてのRevolution Rに関するコメントは大歓迎です。

ありがとう

更新1

編集して、私が実際に使っている実用的なソリューションを探しています。ほとんどの場合、SASを使用すると、メモリの制約について少し心配することなく、大きなファイルを一気に検索できます。SASが実装されている場合、メモリ管理をユーザーに対して透過的にする方法を見つけました。しかし、私は仕事にSASを使用しなければならなかったので、データがどこにあるのかをあまり考えずに「大きな」データに取り組むことができるFOSSの代替手段が大好きです。特定の時間(メモリ内またはディスク上)。

私が遭遇した最も近いものは、RのFFパッケージとPythonの地平線上にあるBlazeと呼ばれるものです。それでも、これらの問題は長年にわたって存在していたので、その間にアナリストは何をしていたのでしょうか?メモリ制限でこれらの同じ問題をどのように処理していますか?提供されているソリューションの大部分は次のようです。

  • RAMを増やす-これは良い解決策ではありません、imo。RAMを超えてもハードドライブに収まるデータセットを簡単に見つけることができます。さらに、ワークフローは、探索的データ分析中に作成されるすべての構造に対応する必要があります。
  • データのサブセット化-これは調査には適していますが、結果とレポートの最終処理には適していません。最終的には、サブセットで開発されたプロセスはすべて、データセット全体に適用する必要があります(私の場合、とにかく)。
  • データのチャンク-これは、このワークフローを実際に実装している人々からもっと知りたいことです。どうやって?どのツールで?ユーザーに対して透過的な方法で実行できますか?(つまり、ディスク上のデータ構造を作成し、フレームワークが内部のチャンクを処理します)。

1
64ビットマシン上のStataの新しいバージョンは、このサイズのデータ​​セットでは問題ありません(最近では5GBがRAMに簡単に収まるため)が、SASの商用の代替品に興味がありますか、それともFOSSのみに注目していますか?
whuber

1
はい、FOSSソリューションは私が探しているものです。データセットが5ギガバイトのRAMに収まる可能性があることに同意しますが、探索データ分析中に作成される操作と追加のデータ構造も処理する必要があります。これを、わずか4GBのRAMを搭載した市販のラップトップと組み合わせると、OSとメモリエラーによって消費されるオーバーヘッドがすぐに現れます。
Zelazny7

2
@ Zelazny7:最近、ラップトップに別の4Gigを追加するのはかなり安いはずです。:)
curious_cat

3
別のオプションは、データをデータベース(SQLまたはその他)に格納することです。多くの場合、分析にはメモリに収まるデータのサブセット(変数1:10ではなく1:1000)のみが必要です。サブセットがまだメモリよりも大きい場合、分析はチャンクで行うことができます(データベース1000の観測から一度にデータをロードし、最後に結果を適切に照合します)。
-jthetzel

1
必ず確認してくださいビッグデータ SOの質問だけでなく、高性能コンピューティングお持ちでない場合は、さらに関連する議論のためのCRAN上のタスクビューを。
-jthetzel

回答:


3

500,000レコードx 2,000変数で最大化する場合は、ラップトップのRAMにもう少しお金をかけて、それで完了です。16GBの場合、おそらく説明しているデータセットをRに直接読み込むことができます。そしてその時点で、あなたははるかに多くのことをすることができます-そして、非常に迅速に..しかし、あなたはそれがオプションではないと言うので、:

RのSQLベースのパッケージを見てください。これらを使用すると、外部データベースに接続し、SQLを介してそれらのテーブルにアクセスできます。SQLは非常に普遍的であり(Rはオープンソースであるため)、ジョブを変更したりSASにアクセスできなくなったりしてもコードが失われることはありません。設定するのが最も簡単な外部データベースはRSQLite、最速ですMonetDB.R速度テスト

あなたの述べた問題にはおそらくいくつかの良い解決策があります、私の推測では、それらのほとんどすべてがRに関係していると思います;)


2

たぶんそれはあなたが目指しているアプリケーション/問題とその特徴についてではなく、あなたが使用しているアルゴリズムとバリアントについての詳細です。より具体的には、ビッグデータを処理するために、SVMのような一般的なアルゴリズムの確率的勾配降下に基づく多くのバリアントが登場し、それらを処理できます。

Scikitは、このアルゴリズムの一部(SVM、kNN、kmeansなど)のサポートを提供します。scikitがまったく理にかなっている場合、この素敵なグラフはすぐに理解するのに役立つと思います。

役立つことを願っています

注:以下は、zelazny7によるコメントに対する返信です。

今、私はあなたを理解しました。あなたが探しているのはパンダです。トークセクションをご覧ください。パンダのワークフローとパンダのワークフローを簡単に比較したプレゼンテーションがあります。Pandaを使用すると、さまざまな形式でデータをインポートし、HDF5テーブル統合を通じてbguファイルを処理できます。また、Scikitをインターフェイスできます。


ありがとう!アルゴリズムは間違いなく動作するon-lineか、メモリに読み込まれディスクに書き戻されるデータのチャンク上で動作する必要があります。Scikitは素晴らしく、実際に使用したいのですが、これらのアルゴリズムを適用する前に、探索、変更、およびデータ準備の非常に必要なステップにどのようなツール/ワークフロー/アプローチが存在しますか?これらの言語はこれらのステップを処理できますが、メモリからこれらの問題に対処しなければならない誰かから実際の例を探しています。
Zelazny7

私はあなたが探しているもので返信を編集しました(またはそう信じています!)
jpmuc

2

すでにSASに慣れているようで、データセットはRAMに収まるほど小さいですが、ラップトップに十分なRAMを搭載できない可能性があります。SASに固執することを気にしないのであれば、大量のRAMを搭載したコンピューター上でリモートで実行されているSASに接続するだけではどうでしょうか。私はそれがどのように機能するかわかりませんが、これらのリンクはあなたを始めるかもしれません。

PandasまたはRを使用する理由は他にもありますが、メモリの制限について心配する必要はないと思います。ラップトップに十分なメモリを搭載できない場合は、PythonまたはRインスタンスを別の場所で実行し、SSH、iPython Notebook、またはRStudioに接続します。


1

Graphchiは優れており、巨大なデータセットを処理できます。作業するのは少し苦痛ですが、グラフィカルなデータと非グラフィカルなデータを処理できます。


1

私は最近SFramesGraphLab Createに出会いました。これらは、あなたが探しているような機能を提供するPythonのライブラリです。Pypiサイトから:「SFrameはスケーラブルなコア外のデータフレームであり、RAMの量よりも大きいデータセットを扱うことができます。システム上で。」したがって、Pandasのデータ操作機能およびAPIであると考えてください。ただし、最初にすべてのデータをメモリに格納する必要はありません。私の知る限り、SFrameは無料でオープンソースです。一方、GraphLabはSFrame機能に基づいて構築され、SFrameに格納されているデータの記述的および予測的(機械学習)分析を行うためのアルゴリズムを提供します。GraphLab Create createは無料/オープンソースではありませんが、無料のデモライセンスがあります。いずれにせよ、アルゴリズムの高度さに応じて、SFrameで十分な場合があります。


-1

Fortranのような「本物の」非解釈言語を検討しましたか?

これまでの提案は、非常にベンダーに依存しているか、解釈されているようです。解釈されたメソッドは、メモリを大量に消費するアプリケーションで悪名が高いことで有名です。MatLabは、「C」よりもはるかに高いレベルの言語ですが、Cのメモリ処理の最適化により、数百倍の数百倍の高速なデータセットを処理できます。

「R」と「Python」はどちらも、素晴らしく、高レベルで、技術的に豊富で、よく使用される言語です。それらも解釈されます。

R-on-Hadoopインスタンスの1つを検討できます。(Rhipe、その他)これには、R(高レベル、プログラムしやすい)をMapReduce / Hadoop命令に変換できるという利点があります。Hadoopは、興味深い貧乏人マルチプロセッシングクラスターを作成できます。

http://www.datadr.org/ <-(Rhipeリンク)

Fortranは何十年も開発されてきました。非常に効率的なメモリ処理とコンパイルが可能です。また、いくつかの高レベルのライブラリがあるため、非常に技術的に洗練された操作を非常に簡単に実行できます。MatLabでおもちゃのCFDを実行することもできますが、現実的で自己コード化された何かのために、「ビッグアイアン」処理にはFortranを使用し、データの表示/要約にはMatLabまたはRなどを使用します。「エンジン」がコンパイルされる代わりに解釈される商用CFDソフトウェアを作成する人はいません。いくつかのベンダーは、CまたはFortranでマネーメーカーCFDをコーディングしています。SASは元々C(link)で書かれていました。

FortranとRhipeはアクセス可能です。MatLabには費用がかかります。私の仕事がそれを支払わなければ、今はRまたはPythonを使用しています。

更新:
私のポイントは「コンパイル」されました。Pythonには、文字通り同じ(基本的な)コードを最大1000倍高速に実行できるcythonがあります。つまり、最大1000倍のデータを保持し、ほぼ同時に処理することができます。Cythonをクリーンに動作させることは困難な場合がありますが、「Sage」などのツールはそれをうまくラップします。 Rcppにも同様の機能があると言われていますが、それが十分に開発されていることは個人的に知りません。

考えてみると、科学計算で実行するほぼすべての基本は、インタプリタ言語でも、FortranまたはCでコンパイルされています。BLASはBLASです。EDAを実行するたびにコードを再発明するわけではありません。インタプリタ言語は、非常に効率的ではありませんが、実行時にそれらのライブラリを呼び出しています。

余談ですが、JMPをご覧ください。インターフェースは非常に使いやすく、非常に視覚的な探索的データ分析(EDA)に最適です。


2
fortranのようなコンパイルされた言語でどのようにデータを探索しますか?インタープリター言語の魅力は、REPLであり、豊富な内観を提供し、自分が扱っていることをすばやく学習できるだけでなく、慣れていないかもしれない新しいライブラリー関数を操作できるようにします。
Zelazny7

1
Rcppは非常によく開発されています(CRANの逆の使用方法を確認してください)が、実際にはcythonとは比較できません。定義済みの関数がある場合、R入力を取得してCppで処理し、データをRに返すことができます。ただし、Rスクリプト全体をすぐにCppにコンパイルすることはできません。
ラッセルピアス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.