25

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

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

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

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

4

3 に答える 3

12

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

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

データI/O

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

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

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

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

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

ユーザーに保存またはロードを依頼するファイル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.jsKnockout.jsなどの宣言型データバインディングライブラリを使用することです。

于 2012-07-25T14:57:03.097 に答える
11

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などの他の言語の方がはるかに優れています。

于 2012-07-26T05:54:46.973 に答える
4

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

WebGLはopenGLに基づいており、openGLはBLASなどのライブラリを使用します(ライブラリ情報はこちら)。

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

于 2013-12-18T13:56:19.373 に答える