在瀏覽器中運用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 - 粘貼
