首先我们要简单的介绍一下盒图这种东西:
盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的。它由五个数值点组成:
最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(max)。也可以往盒图里面加入平均值(mean)。如图。下四分位数、中位数、上四分位数组成一个“带有隔间的盒子”。上四分位数到最大值之间建立一条延伸线,这个延伸线成为“胡须(whisker)”。
由于现实数据中总是存在各式各样地“脏数据”,也称为“离群点”,于是为了不因这些少数的离群数据导致整体特征的偏移,将这些离群点单独汇出,而盒图中的胡须的两级修改成最小观测值与最大观测值。这里有个经验,就是最大(最小)观测值设置为与四分位数值间距离为1.5个IQR(中间四分位数极差)。即
1、IQR = Q3-Q1,即上四分位数与下四分位数之间的差,也就是盒子的长度。
2、最小观测值为min = Q1 - 1.5*IQR,如果存在离群点小于最小观测值,则胡须下限为最小观测值,离群点单独以点汇出。如果没有比最小观测值小的数,则胡须下限为最小值。
3、最大观测值为max = Q3 + 1.5*IQR,如果存在离群点大于最大观测值,则胡须上限为最大观测值,离群点单独以点汇出。如果没有比最大观测值大的数,则胡须上限为最大值。
如果给出了一个数据集D,D是一个结构体数组,我们要对其中的元素 communicate结构进行盒图分析,即要求出来盒图的五个元素,这时候我们该怎么办?
一个非常简单的办法叫做桶排序!!!这个方法参照我的一篇博文:
http://blog.csdn.net/qq_23100787/article/details/51143387 超链接在左边
然后我们假设T数据集是桶排序后的数据集,那么我们对这个数据集进行循环遍历即可,桶排序是一种典型的用空间换时间的排序方法。
算Q1方法:遍历过去1/4位置时候的值
算Q3方法:遍历过去3/4位置时候的值
算中位数方法:遍历过去1/2位置时候的值 (分奇数偶数)
算众数方法:遍历过去单次最多的值
算最大值最小值方法:遍历过去第一个和最后一个
最后思想我们知道了,如果有代码就更好了,我就给出我写的局部的代码:
<strong> </strong>int min_value = 99999999,max_value = 0,most_value=0,ave_value=0; for(int i=0;i<5000;i++){ if(T[i].flag==true){ //计算众数 if(T[i].virable>max_temp){ most_value = i; max_temp = T[i].virable; } for(int j=0;j<T[i].virable;j++){ //计算均值 ave_value +=i; //计算中位数,最大最小值,两个胡须 count_temp ++; //问题出在这儿,一次加太多了 if(count_temp==((row_count-1)/4)){ q_1 = i; } if(count_temp==((row_count-1)/2)){ middle = i; } if(count_temp==((row_count-1)/4*3)){ q_3 = i; } if(count_temp==1){ min_value = i; } if(count_temp==row_count-1){ max_value = i; } } } }
上面是伪代码,但是聪明的你肯定已经通过讲解看懂了,希望大家能喜欢这篇博文~~~
转载请说明出处