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 - 粘贴
©哈尔滨商业大学 银河统计工作室
银河统计工作室成员由在校统计、计算机部分师生和企业数据数据分析师组成,维护和开发银河统计网和银河统计博客(技术文档)。专注于数据挖掘技术研究和运用,探索统计学、应用数学和IT技术有机结合,尝试大数据条件下新型统计学教学模式。