D3.js的基础部分之数组的处理数组的排序和求值(2)

d3.sum(array[,accessor])
//返回数组的总和,如果数据为空,则返回0。
d3.mean(array[,accessor])
 //返回数组的平均值,如果数组为空,则返回undefined 

以上连个函数的参数同样是:必选参数array和可选参数accessor。array中无效的值undefined和NaN会被忽略。举个例子 : 

//数组定义 var numbers = [30,20,undefined,50,10,80,60,NaN] //求总和与平均值 var sum = d3.sum(numbers,function(d){return d-10}) var mean = d3.mean(numbers) //输出结果 console.log(sum) //190 console.log(mean) //41.666666666666664

上面代码中,数组内有undefined和NaN,但是对于函数的使用是不受影响的。
var mean = d3.mean(numbers) //数组中的数据总和除以6,而并非数组的length。而是除以去掉无效数值之后的有效长度。

d3.median(array[,accessor])
//求数组的中间值,如果数组为空,则返回undefined。
 d3.quantile(numbers,p)
//求取p分位点的值,p的范围为[0,1]。数组需先递增排序。 

d3.median()参数为 : 数组array和可选参数accessor。与d3.sum()和d3.mean()一样,会忽略掉undefined和NaN。如果数组的有效长度为奇数,则中间值为数据经过递增排序之后位于正中间的值;如果有效长度为偶数,则中间值为经过递增排序后位于正中间的两个数的平均值。d3.median()其实是使用d3.quantile()实现的。d3.quantile()接受两个参数:第一个是经过递增排序后的数组;第二个是分位点,范围是[0,1]。先看一下d3.quantile()是如何使用的 :

//数组定义 var numbers = [2,8,15] numbers.sort(d3.ascending); console.log(d3.quantile(numbers,0)) //返回2 console.log(d3.quantile(numbers,0.25)) //返回5 console.log(d3.quantile(numbers,0.5)) //返回8 console.log(d3.quantile(numbers,0.75)) //返回11.5 console.log(d3.quantile(numbers,0.9)) //返回13.599999999999998 console.log(d3.quantile(numbers,1.0)) //返回15

这段代码的数组中,2位于0分位处,8位于0.5分位处,15位于1分位处。d3.median()其实相当于是将数组中的无效值(undefined和NaN)去掉之后,再使用d3.quantile()获取0.5分位处的值。

接下来看一下使用d3.median()的例子:

//定义数组 var numbers1 = [3,5,9,undefined,11,NaN]; console.log(d3.median(numbers1)) //返回7 var numbers2 =[3,5,9,undefined,11,NaN,17]; console.log(d3.median(numbers2)) //返回9

d3.variance(array[,accessor])
 //求方差
d3.deviation(array,[,accessor])
 //求标准差

方差和标准方差用于度量随机变量和均值之间的偏离程度,在概率统计中经常用到。其中标准差是方差的二次方根。这两个值越大,表示此随机变量均值的程度越大。这两个函数的参数为必选参数array和可选参数accessor,并且都会忽略数组array中的undefined和NaN。请看代码 :

//定义数组 var numbers1 = [1,9,7,9,5,8,9,10] console.log(d3.mean(numbers1)) //返回平均值7.25 console.log(d3.variance(numbers1)) //返回方差值 约8.79 console.log(d3.deviation(numbers1)) //返回标准差值 约2.96 var numbers2 = [7,8,6,7,7,8,8,7]; console.log(d3.mean(numbers2)) //返回平均值7.25 console.log(d3.variance(numbers2)) //返回方差值 约0.5 console.log(d3.deviation(numbers2)) //返回标准差值 约0.71

这段代码中,数组numbers1和numbers2的平均值都是7.25,但是前者的方差和标准差分别为8.79和2.96,后者的方差和标准差分别为0.50和0.71,表明数组numbers1中的值偏离平均值7.25的程度较大。

d3.bisectLeft()
 //获取某数组项左边的位置
d3.bisect()
//获取某数组项右边的位置
d3.bisectRight()
//和d3.bisect() ,获取某数组项右边的位置

有时候需要对数组中指定的位置插入项,因此需要获取指定的位置。在JavaScript中,要向某数组插入项,可使用splice(),而bisectLeft()、bisect()和bisectRight()可配合splice()使用。首先来看一下,splice()是怎样插入数组项的:

//定义数组 var dataList = ["China","America","Japan","France"] //在数组索引为1的位置处,删除0个项后,插入字符串Germany dataList.splice(1,0,"Germany"); //再来打印一下新数组 console.log(dataList) //输出 ["China", "Germany", "America", "Japan", "France"] //在数组索引为3的位置处,删除一个项后,插入两个字符串Britain和Russis dataList.splice(3,1,"Britain","Russis") //再来打一下新数组 console.log(dataList) //输出["China", "Germany", "America", "Britain", "Russis", "France"]

splice()可用于删除数组项,也可以用于插入数组项。

接下来看看d3.bisectLeft()的使用方法 :

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/57553b3b2deeae09c1c1e5000cefb0be.html