Matlab、R 和 Python 功能强大,但对于我想做的一些数据挖掘工作来说要么成本高昂,要么速度缓慢。我正在考虑使用 Javascript speed ,良好的可视化库,并且能够使用浏览器作为界面。
我面临的第一个问题是科学编程中显而易见的问题,如何对数据文件进行 I/O?第二个是客户端还是服务器端?最后一个问题,我可以制作一些真正便携的东西,即将其全部放在 USB 上并从中运行吗?
我花了几周时间寻找答案。 Server2go 似乎解决了客户端/服务器的需求,我认为这意味着我可以从客户端的程序获取数据。 Server2go 还允许从 USB 运行。我使用的数据文件通常是 XML,并且似乎有几个 javascript 到 JSON 的转换器。
但是,在环顾四周之后,我不确定我的方法是否有意义。因此,在我进一步 promise 之前,关于 Javascript 作为科学数据处理的可移植工具有什么建议/想法/指导吗?
最佳答案
我必须同意 JavaScript 不太适合科学处理的评论。然而,您最了解自己的需求;也许您已经找到了可以满足您需要的有用的库。请注意,您必须自己实现所有逻辑。没有内置的复数、矩阵、积分或......通常程序员的时间比机器时间更有值(value)。就我个人而言,我会研究编译语言; 在我创建了第一个版本之后,无论我最喜欢什么语言,该版本都不够快。
假设 JavaScript 是正确的选择:
数据输入/输出
我可以想到三个选项:
使用ajax向服务器发送和接收数据
这似乎是您通过 Server2go 找到的解决方案。它要求您编写一个服务器后端,但这可以保持非常简单。它真正需要做的就是能够读取和写入文件作为对客户端应用程序的响应。
使用 v8 的非浏览器实现,其中包括文件 I/O
例如Node.js 。然后,您就可以避免对服务器的需要,而只需使用命令行界面,并且所有代码都将是 JavaScript。除此之外,它大致相当于第一个选项。
使用 file API 创建文件对象您要求用户保存或加载
我认为这是最糟糕的选择,因为需要用户交互。它将避免对服务器的需要;您的应用程序可以是一个简单的 html 文件,它使用 ajax 请求加载所有数据文件。您必须使用特殊开关启动 Chrome,以允许使用 file://
协议(protocol)进行 ajax 请求,如 here 中所述。
这些选项仅与文件 I/O 相关,您无法在 JavaScript 中执行文件 I/O。这是因为浏览器不能允许任意网页代码执行任意文件 I/O;安全影响将是可怕的。每个选项都描述了一种不执行文件 I/O 的方法。
第一个与为客户端执行文件 I/O 的服务器通信。
第二个使用 JavaScript 的“特殊”版本,其条件与浏览器不同,因此安全影响并不重要。但这意味着您必须在您使用的实际实现中查找文件 I/O 是如何完成的,这对于 JavaScript 来说并不常见。
第三个要求用户控制文件 I/O。
界面
即使您不使用 JavaScript 进行实际处理(到目前为止这是共识),也没有什么可以阻止您使用浏览器作为界面或 JavaScript 库来进行可视化。这是 JavaScript 所擅长的。
如果您想以交互方式控制数据挖掘工具,您将需要一个可以控制该工具的服务器。 Server2go 应该可以工作,或者 Node.js 中的内置服务器(如果您使用它)或者...如果您不需要数据工具的交互式控制;也就是说,您首先生成处理后的数据,然后查看服务器可以通过使用 file//:
协议(protocol)和 JSONP 避免的数据。 。但真的;避免服务器不应该成为目标。
我不会详细讨论接口(interface)问题,因为没有什么具体可说的,几乎所有关于 javascript 的内容都是关于接口(interface)的。
有一件事,一定要使用声明性数据绑定(bind)库,例如 Angular.js或Knockout.js .
关于JavaScript 和科学处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651081/