zoukankan      html  css  js  c++  java
  • 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 - 粘贴

  • 相关阅读:
    sublime开启vim模式
    git命令行界面
    搬进Github
    【POJ 2886】Who Gets the Most Candies?
    【UVA 1451】Average
    【CodeForces 625A】Guest From the Past
    【ZOJ 3480】Duck Typing
    【POJ 3320】Jessica's Reading Problemc(尺取法)
    【HDU 1445】Ride to School
    【HDU 5578】Friendship of Frog
  • 原文地址:https://www.cnblogs.com/cloudtj/p/13029113.html
Copyright © 2011-2022 走看看