精华内容
下载资源
问答
  • 数据清洗的方法包括
    千次阅读
    2021-07-20 22:25:58

    常用的数据清洗方法

    常用的数据清洗方法

       在数据处理过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在缺失、数据是否具有完整性和一致性、数据中是否存在异常值等。当发现数据中存在如上可能的问题时,都需要有针对性地处理,本节将重点介绍如何识别和处理重复观测、缺失值和异常值。
    

    (1)重复观测处理
    重复观测,顾名思义是指观测行存在重复的现象,重复观测的存在会影响数据分析和挖掘结果的准确性,所以在数据分析和建模之前需要进行观测的重复性检验,如果存在重复观测,还需要进行重复项的删除。

    (2)缺失值处理

       缺失值是指数据集中的某些观测存在遗漏的指标值,缺失值的存在同样会影响到数据分析和挖掘的结果。
    
        
       一般而言,当遇到缺失值(Python中用NaN表示)时,可以采用三种方法处置:
    

    1、删除法
    删除法是指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测,或者当某些变量的缺失比例非常高时(如85%以上),直接删除这些缺失的变量;

    2、替换法
    替换法是指用某种常数直接替换那些缺失值,例如,对连续变量而言,可以使用均值或中位数替换,对于离散变量,可以使用众数替换;

    3、插补法
    插补法是指根据其他非缺失的变量或观测来预测缺失值,常见的插补法有回归插补法、K近邻插补法、拉格朗日插补法等。

    (3)异常值处理

       异常值是指那些远离正常值的观测,即“不合群”观测。
    
    对于异常值的检测,一般采用两种方法,一种是n个标准差法,另一种是箱线图判别法。
    

    1、n个标准差法
    标准差法的判断公式是

    其中 为样本均值,σ为样本标准差,当n=2时,满足条件的观测就是异常值,当n=3时,满足条件的观测就是极端异常值;

    2、箱线图判别法

    箱线图的判断公式是 outlinear>Q3+nIQR 或者 outlinear<Q1-nIQR ,其中Q1为下四分位数(25%),Q3为上四位数 (75%),IQR为四分位差(上四分位数与下四分位数的差),当n=1.5s时,满足条件的观测为异常
    值,当n=3时,满足条件的观测即为极端异常值。

    这两种方法的选择标准如下,如果数据近似服从正态分布时,优先选择n个标准差法,因为数据的分布相对比较对称;否则优先选择箱线图法,因为分位数并不会受到极端值的影响。 当数据存在异常时,一般可以使用删除法将异常值删除(前提是异常观测的比例不能太大)、 替换法(可以考虑使用低于判别上限的最大值或高于判别下限的最小值替换、使用均值或中位数替换等)。

    更多相关内容
  • 数据清洗是一项复杂且繁琐的工作,同时也是整个数据分析过程中最为重要的环节。 在python中空值被显示为NaN。首先,我们要构造一个包含NaN的DataFrame对象。 >>> import numpy as np >>> import pandas as pd >>> ...
  • 常用的数据清洗方法 本文首发于微信公众号《Python希望社》,欢迎关注,完整详细的原文链接请点击这里 在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在确实、数据是否具有...

    常用的数据清洗方法

    本文首发于微信公众号《Python希望社》,欢迎关注,完整详细的原文链接请点击这里

    在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在确实、数据是否具有完整性和一致性、数据中是否存在异常值等。当发现数据中存在如上可能的问题时,都需要有针对性地处理。

    本文大纲如下: 全文共5746字。

    认真阅读本文你将掌握常用的数据清洗方法和策略

    常用的数据清洗方法
    重复观测处理
    检测
    处理
    缺失值处理
    数据过滤/删除法dropna
    数据填充 / 替换法fillna
    插值法
    异常值处理
    异常值检测
    异常值处理及其前后对比

    一、重复观测处理

    重复观测是指观测行存在重复的现象,重复观测的存在会影响数据分析和挖掘结果的准确性,所以在进行数据分析和建模之前都需要进行观测的重复性检验,如果存在重复观测,还需要进行重复项的删除。

    1.1处理方法

    (1)检测重复观测

    pandas中使用duplicated方法,该方法返回的是数据行每一行的检验结果,即每一行返回一个bool值;

    (2)处理重复观测

    使用drop_duplicated方法移除重复值。

    1.2 案例展示(电商类APP相关数据)

    (1)待清洗的原始数据


    原始数据

    可以看出,**浅绿色 ** 突出显示数据行为重复观测示例。为此进行如下处理:

    (2)重复观测处理示例

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BSli6Jji-1615030308261)(F:\Typroa\微信公众号\1-向希望\数据清洗\2.gif)]

    (3)源码

    import pandas as pd
    # load data
    data = pd.read_excel('1.xlsx')
    data
    #----------------------------------------------------
    # 判断是否存在重复观测
    print('是否存在重复观测:',any(data.duplicated()))
    #----------------------------------------------------
    # 处理重复观测
    data.drop_duplicates(inplace=True) # inplace=True时直接删除data中重复的数据
    data
    #----------------------------------------------------
    ## 将处理后的数据 重新保存
    f = pd.ExcelWriter('data_processed.xlsx')   # 创建文件对象
    data.to_excel(f)                            # 将处理后的data写入新建的excel中
    f.save()                                    # 保存文件
    

    二、缺失值处理

    数据缺失在大部分数据应用中都很常见,Pandas使用浮点值NaN表示浮点或非浮点数组中的缺失数据,Python内置的None值也会被当作缺失值处理。

    2.1 检测数据缺失

    Pandas使用方法isnull检测是否为缺失值,检测对象的每个元素返回一个bool值。

    结果演示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYeE7G0Y-1615030308266)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\22.gif)]

    从上面的结果可以看出:data 数据中的第2个、第四个都被视为缺失值。(源码如下)

    # 导入包库
    import numpy as np
    import pandas as pd
    # 生成原始测试数据
    data = pd.Series([10.0, None, 20,np.NaN, 30])
    data
    #----------------------------------------------------
    print(data.isnull())
    #----------------------------------------------------
    print("是否存在缺失值:",any(data.isnull()))
    

    2.2 处理数据缺失

    对于缺失值一般可以采用三种方法,分别是过滤法、填充法和插值法。在这里我们分别给出每种方法的内容和案例展示(附源码)

    (1)数据过滤 / 删除法 (dropna)

    是指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测;或者当某些变量的缺失比例非常高时(如85%以上),直接删除这些缺失的变量。

    数据过滤dropna方法的语法格式如下

    dropna(axis = 0, how = 'any', thresh = None)
    ## -------- 参数注释 -----------
    # (1)axis = 0 表示删除行(记录);axis = 1 表示删除列(变量)
    # (2)how 参数可选值为 any 或 all, all 表示删除全有NaN的行
    # (3)thresh 为整数类型,表示删除的条件,如thresh = 3,表示一行中至少有3个非NaN值时,才将其保留。
    

    要查看关于 dropna方法的帮助,可以使用下面命令:(其他命令同理)

    import pandas
    help(pd.DataFrame.dropna)
    
    案例展示:

    原始数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8XhggXIW-1615030308270)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\222.gif)]

    源码
    import pandas as pd
    a = pd.read_excel('3.xlsx',usecols = range(1,4))   # 提取 第2列到第4列的数据
    a
    #-------------------------------------
    b1 = a.dropna()    # 删除所有的缺失值
    print(b1)
    #-------------------------------------
    b2 = a.dropna(axis = 1, thresh = 9)  # 删除有效数据个数小于 9 的列
    print(b2)
    #-------------------------------------
    b3 = a.drop('用户B', axis = 1)   # 删除用户B的数据
    print(b3)
    
    

    (2)数据填充 / 替换法 (fillna

    是指用某种常数直接替换那些缺失值,例如,对于连续变量而言,可以使用均值或中位数替换;对于离散变量,可以使用众数替换。

    当数据中出现缺失值时,还可以用其他的数值进行填充,常用的方法是 fillna, 其基本语法格式为:

    fillna(value = None, method = None, axis = None, inplace = False)
    # 其中value值除基本类型外,还可以使用字典,这样可以实现对不同的列填充不同的值。method表示采用的填补数据的方法,默认是None。
    

    下面通过示例说明fillna 的用法。

    案例展示:

    原始数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bmpxEsaQ-1615030308274)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\2222.gif)]

    源码
    import pandas as pd
    a = pd.read_excel('4.xlsx')
    a
    #----------------------------
    b1 = a.fillna(0)  							# 用 0 填补所有的缺失值
    b2 = a.fillna(method = 'ffill') 			# 用前一行的值填补缺失值
    b3 = a.fillna(method = 'bfill') 			# 用后一行的值填补,最后一行缺失值不处理	
    b4 = a.fillna(value = {'gender':a.gender.mode()[0],'age':a.age.mean(),'income':a.income.median()})
    ## 性别使用众数替换 年龄使用均值替换 收入使用中位数替换
    #----------------------------
    print(b1,'\n----------------------------\n',b2,'\n----------------------------\n',b3,'\n----------------------------\n',b4)
    

    (3)插值法

    插值法是指根据其他非缺失的变量或观测来预测缺失值,常见的插值法有线性插值法、K近邻插值法、Lagrange插值法等。

    当出现缺失值时,也可以使用插值法对缺失值进行插补,插值的数学原理在 其中的插值方法可以使用:‘linear’, ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’,‘cubic’,‘spline’,‘barycentric’,‘polynomial’.

    案例演示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t1uEp6nC-1615030308277)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\22222.gif)]

    源码
    import pandas as pd
    a = pd.read_excel('4.xlsx')
    a
    # ----------------------------------
    import numpy as np
    b = a.fillna(value = {'gender':a.gender.mode()[0],                              # 性别使用众数替换
                          'age':a.age.interpolate(method = 'polynomial',order = 2), # 年龄使用 二次多项式插值 替换
                          'income':a.income.interpolate()})                         # 收入使用线性插值替换 
    

    三、异常值处理

    异常值(Outlier)是指哪些远离正常值的预测,即“不合群”观测。异常值的出现会对模型的创建和预测产生严重的后果。当然异常值的出现也不一定都是坏事,有些情况下,通过寻找异常值就能够给业务带来良好的发展,如【销毁“钓鱼网站”,关闭“薅羊毛”用户的权限等】

    对于异常值的检测,一般采用两种方法,一种是标准差法,另一种是箱线图判别法。标准差法的判别公式是: outlier > x ^ + n σ \text{outlier}>\hat{x}+n\sigma outlier>x^+nσ 或者 outlier < x ^ − n σ \text{outlier}<\hat{x}-n\sigma outlier<x^nσ , 其中 outlier < x ^ − n σ \text{outlier}< \hat x -n\sigma outlier<x^nσ , 其中 x ^ \hat{x} x^ 是均值, σ \sigma σ是样本标准差。当 n = 2 n=2 n=2 时, 满足条件的观测就是异常值;当 n = 3 n=3 n=3 时,满足条件的观测即是极端异常值。

    箱线图的判别公式是: outlier > Q 3 + n IQR \text{outlier}>Q_3+n\text{IQR} outlier>Q3+nIQR outlier < Q 1 − n IQR \text{outlier}<Q_1-n\text{IQR} outlier<Q1nIQR , 其中 Q 1 Q_1 Q1 为下四分位数(25%), Q 3 Q_3 Q3 为上四分位数(75%), IQR \text{IQR} IQR 为上四分位数与下四分位数的差。当$ n=1.5 时 , 满 足 条 件 的 观 测 为 异 常 值 , 当 时,满足条件的观测为异常值,当 n=3$ 时,满足条件的观测为极端异常值。

    这两种方法的选择标准如下,如果数据近似服从正态分布,因为数据的分布相对比较对称,优先选择标准差法。否则优先选择箱线图法,因为分位数并不会收到极端值的影响。当数据存在异常时,若异常观测的比例不要打,一般可以使用删除法将异常值删除;也可以使用替换法,可以考虑使用低于判别上限的最大值替换上端异常值、高于判别下限的最小值替换下端异常值,或使用均值或中位数替换等。

    3.1 案例展示:

    (1)异常值检测

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6diSHbF-1615030308278)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\222222.gif)]

    原始数据和异常值检验结果


    原始数据

    直方图与核密度图

    (2)异常值的处理及其前后对比

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFOaax3T-1615030308279)(F:\DataCodes\《Codes》\Codes_from_JupyterNotebook\xxw_data_processing\2222222.gif)]

    countmeanstdmin25%50%75%max
    替换前28948.613539.4741015.63968.9190.2
    替换后28948.066037.9189015.63968.9141.7

    源码如下:

    # =============================================
    # 异常值检测
    # =============================================
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    a = pd.read_csv('ISSN_Y_tot.csv')
    a
    #---------------------------------------------
    plt.plot(a.counts)
    plt.show()
    #---------------------------------------------
    mu = a.counts.mean()  # 计算黑子 个数年平均值
    s = a.counts.std()    # 计算黑子个数标准差
    print('标准差法异常值上限检测:',any(a.counts>mu+2*s))  # 输出: True
    print('标准差法异常值下限检测:',any(a.counts<mu-2*s))  # 输出: False
    #---------------------------------------------
    Q1 = a.counts.quantile(0.25) # 计算下四分位数
    Q3 = a.counts.quantile(0.75) # 计算上四分位数
    IQR = Q3 - Q1
    print("箱线图法异常值上限检测:",any(a.counts> Q3 + 1.5*IQR))  # 输出:  True
    print("箱线图法异常值下限检测:",any(a.counts< Q1 - 1.5*IQR))  # 输出:  False
    #---------------------------------------------
    plt.style.use('ggplot')     # 设置绘图风格
    a.counts.plot(kind = 'hist', bins = 30 , density = True)    # 绘制直方图
    a.counts.plot(kind = 'kde')                                 # 绘制核密度曲线
    plt.show()
    # =============================================
    #  异常值处理
    # =============================================
    print('异常值替换前的数据统计特征',a.counts.describe())
    #---------------------------------------------
    UB = Q3 + 1.5 * IQR;
    st = a.counts[a.counts < UB].max()
    print('判别异常值的上限临界值为:',UB)
    print('用以替换异常值的数据为:',st)
    #---------------------------------------------
    a.loc[a.counts>UB,'counts'] = st      # 替换超过判别上限异常值
    print('异常值替换后的数据特征\n',a.counts.describe())
    
    参考文献

    司首奎,孙玺菁.《Python数学实验与建模》. 北京:科学出版社,2020

    推文中所涉及到的所有 数据集和全部源代码 均可通过在后台回复关键字”数据清洗“获得。

    展开全文
  • 数据清洗过程包括遗漏数据处理,噪声数据处理,以及不一致数据处理。本节介绍数据清洗的主要处理方法。 遗漏数据处理 假设在分析一个商场销售数据时,发现有多个记录中的属性值为空,如顾客的收入属性,则对于为空...
  • 数据清洗以及常用的方法

    千次阅读 2022-04-22 14:09:56
    数据清洗的概念以及常用的数据清洗方法

    最近用到数据清洗,写篇博客,供自己回忆,供有需要的人参考~


    一、数据清洗是什么?

    数据清洗,顾名思义就是将要用到的数据中重复、多余部分的数据进行筛选并清除;把缺失部分补充完整,并将不正确的数据纠正或者删除。最后整理成可以进一步加工、使用的数据。

    注:很多做ml和dl任务拿到的数据并非可以直接使用的数据,往往需要先进行数据清洗这一步。


    二、数据清洗想要洗掉什么?

    从上面数据清洗的概念就可以大概知道数据清洗是在清洗什么了,洗掉的就是数据集中的“脏”数据。“脏数据”,即数据集中残缺、错误、重复的数据。数据清洗,旨在提高数据的质量、缩小数据统计过程中的误差值。


    三、常见的数据清洗方法?

    注:不同类型的数据异常所要用到的方法有所不同,因此我们拿到原始数据之后,需要先分析都有什么样的数据异常,然后再使用相应异常下常常采用的方法,正所谓“对症下药”,方能“药到病除”。

    1、重复数据:

    (1)删除法

    2、缺失值处理:

    (1)删除法:删除法是指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测,或者当某些变量的缺失比例非常高时(如85%以上),直接删除这些缺失的变量;
    (2)替换法:替换法是指用某种常数直接替换那些缺失值,例如,对连续变量而言,可以使用均值或中位数替换,对于离散变量,可以使用众数替换;
    (3)插补法:插补法是指根据其他非缺失的变量或观测来预测缺失值,常见的插补法有回归插补法、K近邻插补法、拉格朗日插补法等。

    3、异常值处理:异常值是指那些远离正常值的观测,即“不合群”观测。

    异常值检测方法:

    a、简单统计量分析:计算统计量值,常见的就是看最大最小值是否合理。
    b、3 \sigma准则:\sigma是正态分布的参数,所谓3\sigma准则就算是将不落在正负 3\sigma内的值认为是异常值,应为它们发生的概率为0.3%
    c、基于模型检测:首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显著属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象
    d、基于距离:通过在对象之间定义临近性度量,异常对象是那些远离其它对象的对象
    e、基于聚类:基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类。​​​​​​​

    处理异常值常用的方法:
    (1)删除异常值----明显看出是异常且数量较少可以直接删除
    (2)不处理---如果算法对异常值不敏感则可以不处理,但如果算法对异常值敏感,则最好不要用这种方法,如基于距离计算的一些算法,包括kmeans,knn之类的。
    (3)平均值替代----损失信息小,简单高效。
    (4)视为缺失值----可以按照处理缺失值的方法来处理

    四、数据清洗简单案例:

    注:这里推荐菜鸟教程中的一个利用Pandas读取csv文件并进行数据清洗的案例,既简单,又清晰易懂

    案例学习链接:数据清洗简单案例

    分享完毕,希望这篇博客,对看到的你有所帮助🤭

    展开全文
  • Python常用的数据清洗方法

    千次阅读 2021-09-17 09:02:59
    数据处理的过程中,一般都需要进行数据清洗工作,如数据集是否存在重复、是否存在缺失、数据是否具有完整性和一致性、数据中是否存在异常值等。当发现数据中存在如上可能的问题时,都需要有针对性地处理,本文...

    Python常用的数据清洗方法

    在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在缺失、数据是否具有完整性和一致性、数据中是否存在异常值等。当发现数据中存在如上可能的问题时,都需要有针对性地处理,本文介绍如何识别和处理重复观测、缺失值和异常值。

    1.重复观测处理

    重复观测是指观测行存在重复的现象,重复观测的存在会影响数据分析和挖掘结果的准确性,所以在数学分析和建模之前,需要进行观测的重复性检验,如果存在重复观测,还需要进行重复项的删除。

    在这里插入图片描述
    检测数据集的是否重复,pandas 使用duplicated方法,该方法返回的是数据行每一行的检验结果,即每一行返回一个bool值,再使用drop_duplicates方法移除重复值。

    import pandas as pd
    
    dataset= pd.read_csv("red_wine_repetition.csv")
    print("是否存在重复值:",any(dataset.duplicated()))     #输出:True
    dataset.drop_duplicates(inplace=True)
    
    dataset.to_csv('red_wine_repetition2.csv',index=False)   #保存移除重复值后的数据集
    

    2.缺失值处理

    数据缺失在大部分数据分析应用中都很常见,pandas使用浮点值NaN表示浮点或非浮点数组中的缺失数据,python内置的None值也会被当做缺失值处理。
    pandas使用isnull方法检测是否为缺失值,检测对象的每个元素返回一个bool值

    from numpy import NaN
    from pandas import Series
    
    data=Series([5, None, 15, NaN, 25])
    print(data.isnull())    #输出每个元素的检测结果
    print('是否存在缺失值:',any(data.isnull()))  #输出 :True
    

    缺失值的处理可以采用三种方法:过滤法、填充法和插值法。过滤法又称删除法,是指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测;或者当某变量缺失的观测比例非常高时(如85%以上),直接删除这些缺失的变量。填充法又称替换法,是指用某种常数直接替换那些缺失值,例如:对于连续值变量采用均值或中位数替换,对于离散值变量采用众数替换。插值法是指根据其他非缺失的变量或观测来预测缺失值,常见的插值法有线性插值法、KNN插值法和Lagrange插值法等。
    在这里插入图片描述

    2.1数据过滤

    数据过滤dropna 语法格式如下:dropna(axis=0, how='any', thresh=None)
    (1)axis=0 表示删除行变量;axis=1 表示删除列变量
    (2)how 参数可选值为any或all ,all表删除全为 NaN的行
    (3)thresh 为整数类型,表示删除的条件

    import pandas as pd
    
    dataset= pd.read_csv("red_wine_deficiency.csv")
    data1=dataset.dropna()  #删除所有的缺失值
    data2=dataset.dropna(axis=1, thresh=9)  #删除有效属性小于9的列
    data3=dataset.drop("free sulfur dioxide", axis=1)   #删除free sulfur dioxide的数据
    
    print(data1,'\n---------------\n',data2,'\n---------------\n',data3)
    

    2.2数据填充

    当数据中出现缺失值时,可以用其他的数值进行填充,常用的方法是fillna,其语法格式为:fillna(value=None, method=None, axis=None,inplace=Flase)
    其中value值除了基本类型外,还可以使用字典,实现对不同的列填充不同的值,method 表示采用填充数据的方法,常用“ffill”、“bfill”

    import pandas as pd
    
    dataset= pd.read_csv("red_wine_deficiency.csv")
    data1=dataset.fillna(0)    #用0填补所有的缺失值
    data2=dataset.fillna(method='ffill')      #用前一行的值填补缺失值
    data3=dataset.fillna(method='bfill')      #用后一行的值填补缺失值,最后一行缺失不处理
    data4=dataset.fillna(value={'pH':dataset.pH.mode()[0],           #使用众数填补
                                'density':dataset.density.mean(),    #使用均值填补
                                'alcohol':dataset.alcohol.median()}) #使用中位数填补
                                
    print(data1,'\n-----\n',data2,'\n-----\n',data3,'\n-----\n',data4)
    

    2.3插值法

    当出现缺失值时,也可以使用插值法来对缺失值进行插补,常见的方法为:'linear','nearest','zero','slinear','quadratic','cubic','spline','barycentric','polynomial'.

    import pandas as pd
    
    dataset= pd.read_csv("red_wine_deficiency.csv")
    data=dataset.fillna(value={'pH':dataset.pH.mode()[0],           #使用众数填补
                                'density':dataset.density.interpolate(method='polynomial',order=2),
                                #使用二项式插值填补
                                'alcohol':dataset.alcohol.interpolate()})  #使用线性插值填补
    print(data)
    

    3.异常值处理

    异常值是指那些远离正常值的观测值,异常值的出现会给模型的常见和预测产生严重的后果,但有时也会利用异常值进行异常数据查找。
    对于异常值的检测,一般采用两种方法,一种是标准差法,另一种是箱线图判别法。标准差法的判别公式是outlier > x+nδ 或者outlier < x-nδ,其中x为样本均值,δ为样本标准差。当n=2时,满足条件的观测就是异常值;当n=3时,满足条件的观测就是极端异常值。箱线图的判别公式是outlier > Q3+nIQR 或者outlier < Q1-nIQR,其中Q1为下四分位数,Q3为上四分位数,IQR为上四分位数和下四分位数的差,当n=1.5时,满足条件的观测为异常值,当n=3时,满足条件的观测为极端异常值。
    这两种方法的选择标准如下,如果数据近似服从正态分布,因为数据的分布相对比较对称,优先选择标准差法。否则优先选择箱线图法,因为分位数并不会受到极端值的影响。当数据存在异常时,若异常观测的比例不太大,一般可以使用删除法将异常值删除,也可以使用替换法,可以考虑使用低于判别上限的最大值替换上端异常值、高于判别下限的最小值替换下端异常值,或者使用均值、中位数替换
    在这里插入图片描述

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    dataset= pd.read_csv("red_wine_abnormal.csv")
    dataset=dataset['fixed acidity']
    
    mu=dataset.mean()      #计算平均值
    δ=dataset.std()      #计算标准差
    print('标准差法异常值上限检测:',any(dataset > mu+2*δ))    #输出:True
    print('标准差法异常值下限检测:',any(dataset < mu-2*δ))    #输出:True
    
    Q1=dataset.quantile(0.25)    #计算下四分位数
    Q3=dataset.quantile(0.75)    #计算上四分位数
    IQR=Q3-Q1
    print('箱线图法异常值上限检测:',any(dataset > Q3+1.5*IQR))  #输出:True
    print('箱线图法异常值下限检测:',any(dataset < Q1-1.5*IQR))  #输出:True
    
    plt.style.use('ggplot')
    dataset.plot(kind='hist',bins=30,density=True)  
    dataset.plot(kind='kde')
    plt.show()
    
    #替换异常值
    UB=Q3+1.5*IQR
    st=dataset[dataset < UB].max()    #找出低于判断上限的最大值
    dataset.loc[dataset >UB] = st
    
    plt.style.use('ggplot')
    dataset.plot(kind='hist',bins=30,density=True)  
    dataset.plot(kind='kde')
    plt.show()
    

    运行不同dataset 得到的图像
    (1)异常值处理前
    在这里插入图片描述
    (2)替换异常值后
    在这里插入图片描述

    参考

    司守奎,孙玺菁《python数学实验与建模》

    展开全文
  • 在这个教程中,我们将利用Python的Pandas和Numpy包来进行数据清洗。主要内容如下:删除DataFrame中的不必要columns改变DataFrame的index使用.str()方法来清洗columns使用DataFrame.applymap()函数按元素的清洗整个...
  • 涵盖8大场景的数据清洗代码这些数据清洗代码,一共涵盖8个场景,分别是:删除多列、更改数据类型、将分类变量转换为数字变量、检查缺失数据、删除列中的字符串、删除列中的空格、用字符串连接两列(带条件)、转换...
  • 常用数据清洗方法大盘点

    千次阅读 2018-08-22 17:03:28
    所谓的数据清洗,也就是ETL处理,包含抽取Extract、转换Transform、加载load这三大法宝。在大数据挖掘过程中,面对的至少是G级别的数据量,包括用户基本数据、行为数据、交易数据、资金流数据以及第三方的数据等等。...
  • 数据清洗有哪些方法

    千次阅读 2021-10-19 17:48:48
    顾名思义,数据清洗是清洗脏数据,是指在数据文件中发现和纠正可识别错误的最后一个程序,包括检查数据一致性、处理无效值和缺失值。哪些数据被称为脏数据?例如,需要从数据仓库中提取一些数据,但由于数据仓库通常...
  • 数据清洗:一是为了解决数据质量问题,二是让数据更加适合做挖掘 一、解决数据质量问题 数据的完整性,比如人的属性中缺少性别、籍贯、年龄等 数据的唯一性,比如不同来源的数据出现重复的情况 数据的权威性,比如同...
  • ETL工程师必知的数据清洗方法【最全】

    千次阅读 多人点赞 2021-04-22 17:11:04
    回到正题,数据清洗是ETL工程师的核心工作之一,我们以终为始,剖析一下数据清洗这件事。 好,干货开始。数据清洗的目的可以从两个角度上看一是为了解决数据质量问题,二是让数据更适合做挖掘。不同的目的下分不同...
  • 【数据分析】5大SQL数据清洗方法

    千次阅读 2020-10-26 11:00:00
    但真正的原始表是混乱且包含了很多无用的冗余特征,所以能够根据原始数据清洗出相对干净的特征表就很重要。 前两天在Towards Data Science上看到一篇文章,讲的是用Pandas做数据清洗,作者将常用的清洗逻辑封装成了...
  • 基本概念 数据清洗从名字上也看的出就是把 "脏" 的" 洗掉 " 指发现并纠正数据文件中 可识别的错误的最后一道程序包括检查数据一致性处理无效值和缺失值等 因为数据仓库 中的数据是面向某一主题的数据的集合这些数据...
  • 数据挖掘:数据清洗——异常值处理 一、离群点是什么? 离群点,是一个数据对象,它显著不同于其他数据对象,与其他数据分布有较为显著的不同。有时也称非离群点为“正常数据”,离群点为“异常数据”。 离群点跟...
  • 广义地说,数据清洗包括识别和替换不完整、不准确、不相关或有问题的数据和记录。数据清洗从名字上也看的出就是把“脏”的“洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理...
  • 数据离散化 数据离散化就是分箱 一把你常用分箱方法是等频分箱或者等宽分箱 一般使用pd.cut或者pd.qcut函数 ...'D:\\Jupyter\\notebook\\Python数据清洗实战\\数据' os.chdir('D:\\Jupyter\\noteboo
  • 本书主要内容包括数据清洗在数据科学领域中的重要作用,文件格式、数据类型、字符编码的基本概念,组织和处理数据的电子表格与文本编辑器,各种格式数据的转换方法,解析和清洗网页上的HTML 文件的三种策略,提取...
  • 12月232019大数据清洗的方法及流程数据清洗简单概述就是对企业在运行经营过程中,产生的纷繁复杂的数据进行抽取、转换、加载三个部分。具体细化流程则分为分析数据、缺失值处理、异常值处理、去重处理、噪音数据处理...
  • 数据清洗是数据分析的必备环节,在进行分析过程中,会有很多不符合分析要求的数据,例如重复、错误、缺失、异常类数据。一、 重复值处理数据录入过程、数据整合过程都可能会产生重复数据,直接删除是重复数据处理的...
  • 数据清洗的概念和方法总结 部分代码练习 1.数据清洗的概念和方法总结 2.部分代码练习 其中包含: 2.1识别和处理缺失值 2.2数据标准化 2.3数据归一化 2.4查看数据分布的分箱和指标变量 数据清洗的目的:将数据转化为...
  • 数据挖掘中常用的数据清洗方法

    万次阅读 多人点赞 2018-05-15 14:16:15
    在数据挖掘过程中,数据清洗主要根据探索性分析后得到的一些结论入手,然后主要对四类异常数据进行处理;分别是缺失值(missing value),异常值(离群点),去重处理(Duplicate Data)以及噪音数据的处理。 1. 探索性...
  • 数据清洗方法有哪些?

    千次阅读 2019-09-26 19:08:32
    其中大数据的热度是最高的,这是因为现在很多的行业积累了庞大的原始数据,通过数据分析可以得到对企业的决策有帮助的数据,而大数据技术能够比传统的数据分析技术更优秀。但是,大数据离不开数据分析,数据分析离不...
  • ​说起数据清洗,可能会有些小伙伴会觉得这一步可以忽略掉,但是!作为混迹在数据分析这一块多年的老油条,小编在此严肃地声明!资料清理是资料处理中最不能被忽略的部分,它是资料分析过程中不可缺少的一环,其结果...
  • 目录工具包准备纵向合并横向合并总结附录代码 ...初始数据包含3个工作簿的Excel工作表,3个工作簿的列标签都一致。 原创文章 9获赞 8访问量 395 关注 私信 展开阅读全文 作者:制了个了个杖
  • 针对中英数据对齐的清洗,提高对齐质量,附带代码包含对中英序号不匹配,长数字不匹配等问题进行清洗

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,940
精华内容 24,376
关键字:

数据清洗的方法包括