码迷,mamicode.com
首页 > 编程语言 > 详细

数据分析2:盒图介绍及相关算法实现

时间:2016-05-12 20:59:12      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

首先我们要简单的介绍一下盒图这种东西:

盒图是在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;
                    }
                 }
            }
        }

上面是伪代码,但是聪明的你肯定已经通过讲解看懂了,希望大家能喜欢这篇博文~~~


转载请说明出处



数据分析2:盒图介绍及相关算法实现

标签:

原文地址:http://blog.csdn.net/qq_23100787/article/details/51357353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!