JavaScript统计数据处理- 概述

JavaScript是一种广泛使用网页编程语言,
在浏览器中运用JavaScript技术处理统计数据具有最佳的推广传播效果

JavaScript是主要用于开发Web页面的脚本语言,是基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。

毫无疑问,JS+HTML+CSS网页三剑客组合在浏览器环境中表现出的数据(数字、文本、图表、音频)展示能力是无以伦比的。但当数据量较大时,其数据处理能力较低。用JS脚本处理数据一直不是JS的长项。JavaScript处理数据有越界之嫌。

JS代码运行在浏览器环境,当JS和浏览器版本较低时,JS数据处理能力(速度和容量)确实较低。随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了网页渲染的范畴,这就更需要快速的解析和执行JavaScript脚本。Google Chrome V8引擎就是为解决这一问题而生,JS在应用数学、统计学方面的使用场景越来越多,JS在强大数据展示能力基础上正在逐渐具备强大的数据处理能力!

导读

1、JS、R、Python循环速度测试

 [返回]

近年来,Python和R语言在机器学习和统计分析炙手可热。Python和R语言作为开源软件,其相关社区中有关数据处理的Python模块和R包非常丰富,通常是人们进行机器学习和统计数据分析工作的首选。但是,Python和R语言数据处理速度常被人们所诟病。和C语言相比,Python和R语言的数据处理速度确实慢很多。考虑的工作效率和学习成本,Python和R语言还是深受欢迎。

那么和JavaScript比较,Python和R语言的数据处理速度应该有很大优势吗?过去确实如此,但现在如何呢?

//JS高效循序
console.clear();
console.time('sum');
let sum = 0;
let i;
for (i=0; i<100000000; i++) {
    sum+=i;    
}
console.log(sum);
console.timeEnd('sum');
//JS低效循环
console.clear();
console.time('sum');
let sum = 0;
for (var i=0; i<100000000; i++) {
    sum+=i;    
}
console.log(sum);
console.timeEnd('sum');
//JS时间测试
console.clear();
console.time('sum');
let sum = 0;
let i;
for (i=0; i<100000000; i++) {
    sum+=i;    
}
console.log(sum);
console.timeEnd('sum'); //5s
//R时间测试
> system.time({for (i in 1:100000000) {s <- s+i;}})  //40s
//Python时间测试
import time
start=time.clock()
s = 0
for i in range(100000000):
    s += i
end=time.clock()
print(end-start)  //30s

三种语言分别循环1亿次求和,结果JS耗时5秒、Python耗时30秒、R耗时40秒!

当然每次运行耗时略有不同,另外笔记本电脑配置、软件版本等都对运行耗时有影响(读者可以在自己的机器中测试对比)。

代码中JS低效循环程序块是常见的编写方式,对于完成上亿次循环求和简直是灾难!

另外,代码在360浏览器中测试的运算速度不慢于Google Chrome浏览器。有点意外!

2、numeric.js数学库介绍

 [返回]

numeric.js数学库重点用于线性代数等数学计算领域。运行在客户端,执行速度非常快。

  • 下载地址:https://github.com/sloisel/numeric
  • 引用脚本:<script type="text/javascript" src="numeric-1.2.6.min.js"></script>
  • 案例文档:http://www.galaxystatistics.com/webMath/numeric-master/documentation.html

下面是几个线性代数中的几个常用矩阵计算样例:

console.clear();
//I、矩阵求逆
let arrs = [[2,2,3],[2,1,2],[1,3,4]];  //定义矩阵
let res = numeric.inv(arrs);  //调用numeric的矩阵求逆方法
console.table(res);
//II、计算行列式
let arrs1 = [
  	[6,8,4,2,8,5],
  	[3,5,2,4,9,2],
  	[7,6,8,3,4,5],
  	[5,5,2,8,1,6],
  	[3,2,2,4,2,2],
  	[8,3,2,2,4,1]];
let res1 = numeric.det(arrs1);  //计算行列式值
console.log(res1);
//III、计算特征值和特征向量
let arrs2 = [[1,2,5],[3,5,-1],[7,-3,5]];
let res2 = numeric.eig(arrs2);
console.log(res2);  //特征值和特征向量数组
console.log(res2.lambda.x);  //特征值数组
console.log(res2.E.x);  //特征向量数组

JavaScript已经流行多年,经历浏览器兼容、规则混乱等不利因素,随着2015年6月ECMAScript 6的推出,标准化的JavaScript已经无所不能!不仅限于Web浏览器,JQuery、Node.js等框架的出现,Chrome V8开发平台的推广,使得JS程序可以运行在服务器端、可以承担复杂项目的开发。

一门编程语言的数据处理能力取决于运算速度、数组功能和对象的继承、封装。现在的JavaScript在这几方面都不弱于Python和R语言。由于过去重点服务于Web动态展示,数学方面的框架和库函数不多。在数据图表展示方面eCharts、three.js等JS库已经非常优秀,随着类似numeric.js等数学库和数据挖掘、机器学习JS框架或库函数的推出,JavaScript数据处理将迎来春天!

提示:本页中JS脚本代码可复制粘贴到JS代码运行窗口调试体验; 文本编辑快捷键:Ctrl+A - 全选;Ctrl+C - 复制; Ctrl+X - 剪切;Ctrl+V - 粘贴

posted @ 2020-06-05 00:43  银河统计  阅读(1779)  评论(0编辑  收藏  举报