web-dev-qa-db-ja.com

Javascriptと科学的処理?

Matlab、R、およびPythonは強力ですが、やりたいデータマイニング作業にはコストがかかるか遅いです。 速度 の両方にJavascriptを使用することを検討しています。 、優れた視覚化ライブラリ、およびブラウザをインターフェイスとして使用できるようにするため。

私が直面した最初の質問は、科学プログラミングの明らかな質問です。データファイルへのI/Oをどのように行うのですか。 2つ目は、クライアント側ですか、それともサーバー側ですか。最後の質問ですが、本当にポータブルなものを作ることはできますか?つまり、すべてをUSBに入れて、そこから実行できますか?

私は答えを探すのに数週間を費やしました。 Server2goは、クライアント側のプログラムとの間でデータを取得できることを意味するthinkというクライアント/サーバーのニーズに対応しているようです。 Server2goでは、USBからの実行も可能です。私が扱うデータファイルは通常XMLであり、JSONへのJavaScriptコンバーターがいくつかあるようです。

しかし、周りを見回した後、私のアプローチが理にかなっているかどうかはわかりません。それで、私がさらにコミットする前に、科学的データ処理のためのポータブルツールとしてのJavascriptに関するアドバイス/考え/ガイダンスはありますか?

23
MikeB

JavaScriptは科学的処理には適していないというコメントに同意する必要があります。ただし、要件を最もよく知っています。必要なことを実行する便利なライブラリをすでに見つけているかもしれません。 allロジックを自分で実装する必要があることに注意してください。複素数、行列、積分などの処理は組み込まれていません。通常、プログラマーの時間はマシンの時間よりもはるかに価値があります。個人的には、コンパイルされた言語を調べます。 after私が最も好きな言語では十分に高速ではない最初のバージョンを作成しました。

JavaScriptが進むべき道であると仮定すると:

データI/O

私は3つのオプションを考えることができます:

Ajaxを使用したサーバーへのデータの送受信

Server2goで見つけた解決策のようです。サーバーバックエンドを作成する必要がありますが、それは非常に単純に保つことができます。クライアント側のアプリケーションへの応答としてファイルを読み書きできるようにするために本当に必要なことはすべてです。

ファイルI/Oを含むv8の非ブラウザー実装を使用する

たとえば Node.jscouldすると、サーバーの必要性を回避し、コマンドラインインターフェイスを使用するだけで、すべてのコードがJavaScriptになります。それ以外は、最初のオプションとほぼ同等です。

file API を使用してファイルオブジェクトを作成し、ユーザーに保存またはロードを依頼します

ユーザーの操作が必要であるため、これは私の意見では最悪のオプションです。サーバーの必要性を回避します。アプリケーションは、ajaxリクエストですべてのデータファイルをロードする単純なhtmlファイルである可能性があります。説明されているように、file://プロトコルでajaxリクエストを許可するには、特別なスイッチでChromeを開始する必要があります ここ

これらのオプションはのみファイルI/Oに関係しており、JavaScriptでファイルI/Oを実行することはできません。これは、ブラウザが任意のWebコードに任意のファイルI/Oの実行を許可できないためです。セキュリティへの影響は恐ろしいものになるでしょう。各オプションは、ファイルI/Oを実行しない1つの方法を説明します。

1つ目は、クライアントのファイルI/Oを実行するサーバーと通信します。

2つ目は、ブラウザ以外の条件でJavaScriptの「特別な」バージョンを使用するため、セキュリティへの影響は重要ではありません。ただし、これは、実際に使用する実装でファイルI/Oがどのように行われるかを調べる必要があることを意味します。これは、JavaScriptでは一般的ではありません。

3つ目は、ユーザーがファイルI/Oを制御する必要があります。

インターフェース

JavaScriptを使用して実際の処理を行わなくても(これまでのところコンセンサスです)、視覚化のためのインターフェイスまたはJavaScriptライブラリとしてブラウザーを使用することを妨げるものは何もありません。それはJavaScriptが得意なことです。

データマイニングツールをインタラクティブに制御したい場合は、ツールを制御できるサーバーが必要になります。 Server2goが機能するか、それを使用する場合はNode.jsの組み込みサーバー、または...データツールのインタラクティブな制御が必要ない場合。つまり、最初に処理されたデータを生成し、次にfile//:プロトコルと [〜#〜] jsonp [〜#〜] を使用して、サーバーを回避できるデータを確認します。しかし、本当に;サーバーを回避することは目標ではありません。

インターフェイスの問題については詳しく説明しません。特に言うことはなく、javascriptについて書かれているほとんどすべてはインターフェイスに関するものです。

1つは、 Angular.js または Knockout.js のような宣言型データバインディングライブラリを使用することです。

11
Odalrick

JavaScriptの速度は大幅に過大評価されています。これはWeb2.0の神話です。

この主張について少し説明させてください(そして、聞きたくないことを言ったことに対して私を否定しないでください!)

確かに、JavaScriptV8は非常に高度に最適化されたVMです。素朴なベンチマークでは、他の多くのスクリプト言語を上回っています。

ただし、これは非常に限定されたスコープ言語です。これは、Webの「ADHSワールド」を対象としています。これは最善の努力ですが、失敗する可能性があり、時間どおりに完了または完了する保証はほとんどありません。

たとえば、MongoDBについて考えてみます。最初は、それは良くて速いようで、たくさん提供します。たとえば、MapReduceはシングルスレッドのみであるため、非常に遅いことがわかります。輝くのはすべての金ではありません!

次に、BLASなどのデータマイニング関連ライブラリを見てください。基本的な線形代数、数学演算など。 IntelやAMDなどのすべてのCPUメーカーは、CPU用に最適化バージョンを提供しています。これは、現在のコンパイラの機能をはるかに超えて、個々のCPUの詳細な理解を必要とする最適化です。ライブラリには、さまざまなCPU用に最適化されたコードパスが含まれており、すべて基本的に同じことを実行します。また、これらの操作では、BLASなどの最適化されたライブラリを使用すると、5〜20倍のスピードアップを簡単に実現できます。同時に、O(n ^ 2)またはO(n ^ 3)で行われることが多い行列演算が、ランタイム全体を支配します。

したがって、データマイニングに適した言語を使用すると、マシンコードに至るまで進むことができます!

ここでは、PythonのSciPyとRが適切な選択です。最適化されたライブラリが内部にあり、簡単にアクセスできますが、同時に、より単純な言語でラッパーを実行できます。

このプログラミング言語のベンチマークをご覧ください。

http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.html

純粋なJavaScriptは分散が大きく、いくつかのことを速く(ほとんどは正規表現!)他のことをはるかに遅く実行できることを示しています。それは明らかにPHPを打ち負かすことができますが、CとJavaも同様に明らかに打ち負かされます。

マルチスレッドも最新のデータマイニングにとって重要です。今日、単一のコアを備えた大規模なシステムはほとんどなく、すべてのコアを利用したいと考えています。したがって、ライブラリと、強力なマルチスレッド操作のセットを備えたプログラミング言語が必要です。これが実際にFortranとCがここで人気を失っている理由です。 Javaなどの他の言語はここではるかに優れています。

この議論は少し古く、私は想像力の範囲でJavascriptの第一人者ではありませんが、上記の議論は、処理速度や高度な数学演算の機能がないことについて疑わしいと思います。 WebGLは、高度な数学演算に大きく依存する高度な2Dおよび3DグラフィックスをレンダリングするためのJavasciptAPIです。技術的な観点からは機能があると思いますが、不足しているのは、データマイニングに含まれる統計分析、自然言語処理、その他の予測分析を処理するための優れたライブラリです。

WebGLはopenGLに基づいており、openGLは [〜#〜] blas [〜#〜] (library info here )のようなライブラリを使用します。

Node.js、w8のような進歩により、技術的に可能になります。不足しているのは、同じ操作を実行するためにRとScilabにあるようなライブラリです。

4
user1082748