Matlab、R和Python功能强大,但对于我想做的一些数据挖掘工作来说,要么代价高昂,要么速度慢。我正在考虑使用Javascript作为速度,良好的可视化库,并能够使用浏览器作为一个接口。
我面临的第一个问题是科学编程中最明显的一个问题:如何对数据文件进行I/O处理?第二个是客户端还是服务器端?最后一个问题,我能做一些真正可移植的东西吗?那就是把所有的东西放在USB上,然后从USB上运行?
我花了几个星期寻找答案。Server2go似乎满足了客户机/服务器的需求,我认为这意味着我可以从客户端的程序中获取数据。Server2go还允许从USB上运行。我处理的数据文件通常是XML,并且似乎有几个javascript转换器到JSON。
然而,在环顾四周之后,我不确定我的方法是否有意义。因此,在我进一步提交之前,有关于Javascript作为可移植的科学数据处理工具的建议/想法/指导吗?
发布于 2012-07-25 14:57:03
我不得不同意关于JavaScript不适合科学处理的评论。但是,您最了解自己的需求;也许您已经找到了一些有用的库来满足您的需要。请注意,您必须自己实现所有的逻辑。在处理复数、矩阵、积分或.通常,程序员的时间比机器时间更有价值。就我个人而言,我会关注编译语言;在我创建了第一个版本之后,无论我最喜欢哪种语言,它的速度都不够快。
假设JavaScript是要走的路:
数据I/O
我可以想到三个选择:
用ajax向服务器发送和接收数据
这似乎是您在Server2go中找到的解决方案。它要求您编写服务器后端,但这可以保持相当简单。它真正需要做的就是能够读写文件作为客户端应用程序的响应。
使用非浏览器实现的v8,其中包括文件I/O
例如,Node.js。然后,您可以避免对服务器的需求,只需使用命令行接口,所有代码都将是JavaScript。除此之外,它大致相当于第一种选择。
使用要求用户保存或加载的文件API创建文件对象
在我看来,这是最糟糕的选择,因为需要用户交互。这将避免对服务器的需求;您的应用程序可以是一个简单的html文件,可以用ajax请求加载所有数据文件。您必须用一个特殊的开关启动Chrome,以允许使用file://协议的ajax请求,如这里所述
这些选项只涉及文件I/O,您不能在JavaScript中执行文件I/O。这是因为浏览器不能允许任意web代码执行任意文件I/O;安全问题将是可怕的。每个选项都描述了一种不执行文件I/O的方法。
第一个服务器与为客户端执行文件I/O的服务器通信。
第二个版本使用“特殊”版本的JavaScript,其条件不是浏览器的条件,因此安全性含义并不重要。但这意味着您必须在实际使用的实现中查找文件I/O是如何完成的,这在JavaScript中并不常见。
第三种要求用户控制文件I/O。
接口
即使您没有使用JavaScript来进行实际的处理,这是目前为止的共识,但没有什么可以阻止您使用浏览器作为界面或JavaScript库进行可视化。这是JavaScript擅长的事情。
如果您想要交互式地控制您的数据挖掘工具,您将需要一个可以控制该工具的服务器。Server2go应该可以工作,或者Node.js中内置的服务器,如果你使用它或者.如果您不需要对数据工具进行交互控制,即首先生成处理过的数据,然后使用file//:协议和JSONP查看服务器可以避免的数据。但实际上,避免服务器不应该是一个目标。
我不会详细讨论接口问题,因为没有什么要说的,而且几乎所有关于javascript的文章都是关于接口的。
首先,一定要使用声明性数据绑定库,比如Angular.js或Knockout.js。
发布于 2012-07-26 05:54:46
JavaScript速度被严重高估了。这是一个Web2.0神话。
让我解释一下这个说法(别因为我说了你不想听的话就投我反对票!)
当然,JavaScript V8是一个非常优化的VM。在简单的基准测试中,它确实击败了许多其他脚本语言。
然而,它是一种非常有限的范围语言。它是为网络的"ADHS世界“而设计的。这是最好的努力,但它可能只是失败,你没有什么保证的事情完成或按时完成。
例如,考虑一下MongoDB。起初,它似乎是好的,快速的,并提供了很多。直到您看到,例如,MapReduce是单线程的,因此非常慢。并不是所有的金子都发光!
现在看看数据挖掘相关的库,比如BLAS。基本线性代数,数学运算等。所有的CPU制造商,比如英特尔和AMD,都为他们的CPU提供优化版本的。这是一个需要详细了解单个CPU的优化,远远超出了我们当前编译器的能力。库包含各种CPU的优化代码页,这些代码页基本上都在执行相同的操作。对于这些操作,使用优化的库(如BLAS )可以轻松地产生5-20x的加速;同时,通常在O(n^2)或O(n^3)中的矩阵操作将主导整个运行时。
是一种很好的数据挖掘语言,可以让你一直使用机器代码!
SciPy和R是这里很好的选择。它们内部有优化的库,易于访问,但同时允许使用更简单的语言进行包装。
请看一下这个编程语言基准:
http://benchmarksgame.alioth.debian.org/u32/which-programs-are-fastest.html
纯JavaScript具有很高的方差,表明它可以快速完成一些事情(主要是正则表达式!)另一些则慢得多。它可以明显地击败PHP,但它也同样明显地被C和Java打败。
Multithreading对于现代数据挖掘也很重要。现在很少有大型系统有一个单一的核心,而且您确实希望使用所有的核心。因此,您需要库和具有强大的多线程操作集的编程语言。这就是为什么Fortran和C在这里失去人气的原因。其他语言(如Java )在这里要好得多。
发布于 2013-12-18 13:56:19
虽然这个讨论有点老了,而且我并不是任何想象中的Javascript大师,但我发现上面的论点对于没有处理速度或高级数学操作的能力是有疑问的。WebGL是一个用于绘制高级2D和3D图形的Javascipt,它严重依赖于高级数学操作。我相信从技术的角度来看,这些能力是存在的,然而,缺少的是处理统计分析、自然语言处理和数据挖掘中包含的其他预测分析的良好库。
WebGL基于openGL,而openGL又使用布拉斯 (库信息这里)之类的库。
像node.js,w8这样的技术进步使得技术上成为可能。缺少的是像我们可以在R和Scilab中找到的库来执行相同的操作。
https://stackoverflow.com/questions/11651081
复制相似问题