[从头学数学] 第146节 数据的分析

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了筑基中期的修炼,
这次要修炼的目标是[数据的分析]。

正剧开始:

星历2016年03月22日 09:33:07, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[数据的分析]。




[从头学数学] 第146节 数据的分析_第1张图片

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

80.25
79.5
79.5
80.4


[从头学数学] 第146节 数据的分析_第2张图片



		var analyze = new DataAnalyze();
		var a = [[800,5],[1200,10],[1600,12],[2000,17],[2400,6]];

		
		document.write(analyze.weightedAverage(a) + '<br/>');

1672



		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/>');

6276
3400



		var a = [136, 140, 129,180,124,154,146,145,158,175,165,148];
		document.write(analyze.median(a) + '<br/>');

147


[从头学数学] 第146节 数据的分析_第3张图片

		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/>');

23.5



[从头学数学] 第146节 数据的分析_第4张图片

		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/>');

15
18
20.3

[从头学数学] 第146节 数据的分析_第5张图片

[从头学数学] 第146节 数据的分析_第6张图片

[从头学数学] 第146节 数据的分析_第7张图片

		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/>');

7.536999999999999
7.514999999999999
0.009960999999999994
0.0017849999999999897

[从头学数学] 第146节 数据的分析_第8张图片



[从头学数学] 第146节 数据的分析_第9张图片

[从头学数学] 第146节 数据的分析_第10张图片

		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/>');

74.66666666666667
74.93333333333334
2.622222222222222
8.195555555555556


[从头学数学] 第146节 数据的分析_第11张图片

[从头学数学] 第146节 数据的分析_第12张图片

		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/>');

平均数: 9.55
平均数: 9.3
极差:3
极差:8
平均差:0.75
平均差:1.9600000000000002
方差:0.7474999999999999
方差:6.010000000000001
标准差:0.8645808232895291
标准差:2.451530134426253


应该是甲厂比较稳定一些。


本节用到的工具:

/**
* @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;
			}
			
		}
	}
	
		
}


本节到此结束,欲知后事如何,请看下回分解。


你可能感兴趣的:([从头学数学] 第146节 数据的分析)