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 - 粘贴
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架