正剧开始:
星历2016年03月22日 09:33:07, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[数据的分析]。
<span style="font-size:18px;"> var analyze = new DataAnalyze(); var a = [85, 78, 85, 73]; var b = [73, 80, 82, 83]; var weight = [2, 1, 3, 4]; document.write(analyze.average(a) + '<br/>'); document.write(analyze.average(b) + '<br/>'); for (var i = 0; i < a.length; i++) { a.push([a.shift(), weight[i]]); b.push([b.shift(), weight[i]]); } document.write(analyze.weightedAverage(a) + '<br/>'); document.write(analyze.weightedAverage(b) + '<br/>');</span>
var analyze = new DataAnalyze(); var a = [[800,5],[1200,10],[1600,12],[2000,17],[2400,6]]; document.write(analyze.weightedAverage(a) + '<br/>');
var analyze = new DataAnalyze(); var a = [[45000,1],[18000,1],[10000,1],[5500,3],[5000,6],[3400,1],[3000,11],[1000,1]]; var b = analyze.weightedToNormalArray(a); document.write(analyze.weightedAverage(a) + '<br/>'); document.write(analyze.median(b) + '<br/>');
var a = [136, 140, 129,180,124,154,146,145,158,175,165,148]; document.write(analyze.median(a) + '<br/>');
var a = [[22,1],[22.5,2],[23,5],[23.5,11],[24,7],[24.5,3],[25,1]]; document.write(analyze.mode(a) + '<br/>');
var analyze = new DataAnalyze(); var a = [ 17,18,16,13,24,15,28,26,18,19, 22,17,16,19,32,30,16,14,15,26, 15,32,23,17,15,15,28,28,16,19]; var b = analyze.normalToWeightedArray(a); document.write(analyze.mode(b) + '<br/>'); document.write(analyze.median(a) + '<br/>'); document.write(analyze.average(a) + '<br/>');
var a = [ 7.65,7.50,7.62,7.59,7.65,7.64,7.50,7.40,7.41,7.41]; var b = [7.55,7.56,7.53,7.44,7.49,7.52,7.58,7.46,7.53,7.49]; document.write(analyze.average(a) + '<br/>'); document.write(analyze.average(b) + '<br/>'); document.write(analyze.variance(a) + '<br/>'); document.write(analyze.variance(b) + '<br/>');
var analyze = new DataAnalyze(); var a = [ 74,74,75,74,76,73,76,73,76,75,78,77,74,72,73]; var b = [75,73,79,72,76,71,73,72,78,74,77,78,80,71,75]; document.write(analyze.average(a) + '<br/>'); document.write(analyze.average(b) + '<br/>'); document.write(analyze.variance(a) + '<br/>'); document.write(analyze.variance(b) + '<br/>');
var analyze = new DataAnalyze(); var a = [0,0,2,8,7,3,0,0,0]; var b = [4,2,0,6,2,2,2,0,2]; for (var i = 6; i <=14; i++) { a.push([i, a.shift()]); b.push([i, b.shift()]); } a = analyze.weightedToNormalArray(a); b = analyze.weightedToNormalArray(b); document.write('平均数: '+analyze.average(a) + '<br/>'); document.write('平均数: '+analyze.average(b) + '<br/>'); document.write('极差:'+ analyze.extremeDifference(a) + '<br/>'); document.write('极差:'+ analyze.extremeDifference(b) + '<br/>'); document.write('平均差:'+ analyze.meanDifference(a) + '<br/>'); document.write('平均差:'+ analyze.meanDifference(b) + '<br/>'); document.write('方差:'+ analyze.variance(a) + '<br/>'); document.write('方差:'+ analyze.variance(b) + '<br/>'); document.write('标准差:'+ analyze.RMS(a) + '<br/>'); document.write('标准差:'+ analyze.RMS(b) + '<br/>');
应该是甲厂比较稳定一些。
本节用到的工具:
/** * @usage 数据的集中分析 * @author mw * @date 2016年03月22日 星期二 08:24:39 * @param 原始数据数组 * @return * */ function DataAnalyze() { //小数位数超过精度的数会四舍五入到指定精确位数 //但如果小数位数小于要求精度,不会进行处理 //整数部分加上精度位数不超过15个数字可以达到要求 this.round = function(number, precision) { var scale = Math.pow(10, precision); return Math.round(number*scale)/scale; } //平均数, 数组为[num1, num2, ... ] this.average = function(array) { if (array == []) { return 0; } else { var len = array.length; var sum = 0; for (var i = 0; i < len; i++) { sum += array[i]; } return sum/len; } } //加权平均数, 数组为[[num1, weight1], [num2,weight2], ... ] this.weightedAverage = function(array) { if (array == []) { return 0; } else { var len = array.length; var sum = 0; var totalWeight = 0; for (var i = 0; i < len; i++) { sum += array[i][0]*array[i][1]; totalWeight += array[i][1]; } return sum/totalWeight; } } //中位数, 数组为[num1, num2, ... ] this.median = function(array) { if (array == []) { return 0; } else { array.sort(function(a, b) { return a - b; }); var len = array.length; if (len%2 == 1) { //样本总数为奇数个 return array[(len-1)/2]; } else { //样本总数为偶数个 return (array[len/2-1]+array[len/2])/2; } } } //极差, 数组为[num1, num2, ... ] this.extremeDifference = function(array) { if (array == []) { return 0; } else { array.sort(function(a, b) { return a - b; }); var len = array.length; return Math.abs(array[0] - array[len-1]); } } //众数, 数组为[[num1, weight1], [num2,weight2], ... ] this.mode = function(array) { if (array == []) { return 0; } else { //根据权重进行排序 array.sort(function(a, b) { return -(a[1] - b[1]); }); //返回权重最大的数 return array[0][0]; } } //方差, 数组为[num1, num2, ... ] this.variance = function(array) { if (array == []) { return 0; } else { var average = this.average(array); var len = array.length; var sum = 0; for (var i = 0; i < len; i++) { sum += Math.pow((array[i]-average), 2); } return sum/len; } } //标准差(root-mean-square deviation) , 数组为[num1, num2, ... ] this.RMS = function(array) { return Math.sqrt(this.variance(array)); } //平均差 , 数组为[num1, num2, ... ] this.meanDifference = function(array) { if (array == []) { return 0; } else { var average = this.average(array); var len = array.length; var sum = 0; for (var i = 0; i < len; i++) { sum += Math.abs(array[i]-average); } return sum/len; } } //把[[num1, weight1], [num2,weight2], ... ]形式的数组转化成 //[num1, num2, ... ]形式的数组 this.weightedToNormalArray = function(array) { if (array == []) { return []; } else { var len = array.length; if (array[0].length < 2) { return array; } else { var retArray = new Array(); var times = 0; for (var i = 0; i < len; i++) { //权重转为重复次数 times = array[i][1]; for (var j = 0; j < times; j++) { retArray.push(array[i][0]); } } return retArray; } } } //把[num1, num2, ... ]形式的数组转化成 //[[num1, weight1], [num2,weight2], ... ]形式的数组 this.normalToWeightedArray = function(array) { if (array == []) { return []; } else { var len = array.length; var len2 = 0; if (array[0].length > 1) { return array; } else { var retArray = new Array(); retArray.push([array[0], 1]); for (var i = 1; i < len; i++) { len2 = retArray.length; for (var j = 0; j < len2; j++) { if (Math.abs(array[i]-retArray[j][0]) < 0.0001) { retArray[j][1]+=1; break; } if (j >= len2 - 1) { retArray.push([array[i], 1]); } } } return retArray; } } } }
本节到此结束,欲知后事如何,请看下回分解。