美文网首页Python数据挖掘
Python数据挖掘002-数据质量分析

Python数据挖掘002-数据质量分析

作者: 科技老丁哥 | 来源:发表于2019-12-05 14:31 被阅读0次

    高质量的数据集才能得到高质量的模型,垃圾数据集只能产生垃圾

    通过检样数据集的数据质量,绘制图表,计算某些特征量等,对样本数据集的结构和规律进行分析的过程就是数据探索。

    数据探索有助于选择合适的数据预处理和建模方法。主要包含有数据质量分析和数据特征分析两个方面。

    数据质量分析主要是检查原始数据中是否有脏数据,是数据预处理的前提。脏数据包括:缺失值,异常值,不一致的值。

    1. 缺失值分析

    主要有记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确。

    处理方法有:删除存在缺失值的样本,对缺失值进行插补,不处理三种。

    2. 异常值分析

    检样数据中是否有录入错误,或者不合常理的数据。一般指,样本中的个别值,其数值明显偏离其余的观测值,也成为离群点,异常值分析也称为离群点分析。

    分析方法有:简单统计量分析,3sigma原则,箱型图分析

    2.1 简单统计量分析

    相对变量做一个描述性统计,进而查看哪些数据不合理,最初能够用的是min和max,用于判断某个变量值是否超出合理范围。

    这个要根据常识来判断,比如年龄为199等。

    2.2 3sigma原则

    如果数据服从正态分布,在3sigma原则中,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。也因为距离平均值3sigma之外的值出现的概率为P(|x-u|>3sigma)<=0.003,为小概率事件,当作异常值处理。

    如果数据不服从正态分布,也可以用原理平均值多少倍的标准来界定异常值。

    2.4 箱型图分析

    如上图中,低于下界或者大于上界的数据点被认为是异常点或离群点。

    箱型图识别异常值的结果比较客观,在识别异常值方面具有一定的优越性。

    3. 一致性分析

    数据不一致性指的是数据的矛盾性,不相容性。其产生可能发生于:来自于不同的数据源,对于重复存放的数据未能一致性更新。

    4. 箱型图异常值分析的代码实战

    用箱型图判断哪些数据点属于异常值,代码如下:

    data=pd.read_excel(r"E:\PyProjects\DataSet\PyMining\Data\chapter3\demo\data\catering_sale.xls",index_col=0)
    plt.rcParams['font.sans-serif']=['SimHei'] # 可以在plt图中显示中文
    plt.rcParams['axes.unicode_minus']=False # 可以正常显示负号
    result=data.boxplot(return_type='dict')
    
    箱型图

    上面的箱型图中含有上界,下届,均值,箱体线等重要信息,,打印出result可以得到很多信息:

    image.png

    打印出信息为:

    print('下届:',result['caps'][0].get_ydata())
    print('上届:',result['caps'][1].get_ydata())
    ### 至此,异常值存在于result['fliers'][0]中,取出看看
    abnormal=result['fliers'][0].get_ydata()
    abnormal.sort()
    print('异常值:',abnormal)
    

    下届: [1958. 1958.]
    上届: [3802.8 3802.8]
    异常值: [ 22. 51. 60. 865. 4060.3 4065.2 6607.4 9106.44]

    '''
    boxplot的参数说明:
    sym:表示异常点的形状
    vert:是否垂直,箱线图是横向的(False)还是竖向的(True)
    whis: IQR,默认1.5,也可以设置区间比如[5,95],代表强制上下边缘为数据95%和5%位置
    patch_artist:上下四分位框内是否填充,True为填充
    meanline:是否用线的形式表示均值,默认用点表示
    showmeans:是否显示均值,默认不显示
    showbox:是否显示箱线图的箱体
    showcaps:是否显示边缘线,箱线图顶端和末端的两条线默认显示
    showfliers:是否显示异常值
    notch:中间箱体是否缺口
    return_type:返回类型
    其它
    positions:指定箱线图的位置,默认为[0.1.2...]
    widths:指定箱线图的宽度,默认为0.5
    '''

    boxes: 箱线
    medians: 中位值的横线,
    whiskers: 从box到error bar之间的竖线.
    fliers: 异常值
    caps: error bar横线
    means: 均值的横线

    在具体的任务中,由于4060,4065两个点距离上界很近,故而也可以不将其当作异常点,而放入到正常点中来处理,故而截取的范围可以是:1958-4100,超过这个范围的就是异常值。

    去掉异常值后,再对数据集进行统计学分析,

    data = data[(data['销量'] > 400)&(data['销量'] < 5000)] #过滤异常数据
    statistics = data.describe() #保存基本统计量
    
    statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #极差
    statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean'] #变异系数
    statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距
    
    print(statistics)
    

    参考资料:

    《Python数据分析和挖掘实战》张良均等

    相关文章

      网友评论

        本文标题:Python数据挖掘002-数据质量分析

        本文链接:https://www.haomeiwen.com/subject/rordgctx.html