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 - 粘貼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM