精华内容
下载资源
问答
  • 异常数据处理
    千次阅读
    2019-07-06 09:49:44

    常用处理方法:

    异常值的处理方法常用有四种

    1.删除含有异常值的记录

    2.将异常值视为缺失值,交给缺失值处理方法来处理

    3.用平均值来修正

    4.不处理

    需要强调的是,如何判定和处理异常值,需要结合实际

     

    # 异常数据处理(异常数据过滤)
    new_df = df.replace('?', np.nan)#替换非法字符为np.nan
    datas = new_df.dropna(axis=0,how = 'any') # 只要有一个数据为空,就进行行删除操作
    datas.describe().T#观察数据的多种统计指标

    关于replace函数

    语法:replace(self, to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad', axis=None)

    使用方法如下:

    1

    2

    3

    4

    import numpy as np

    import pandas as pd

    df = pd.read_csv('emp.csv')

    df

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    #Series对象值替换

    s = df.iloc[2]#获取行索引为2数据

    #单值替换

    s.replace('?',np.nan)#用np.nan替换?

    s.replace({'?':'NA'})#用NA替换?

    #多值替换

    s.replace(['?',r'$'],[np.nan,'NA'])#列表值替换

    s.replace({'?':np.nan,'$':'NA'})#字典映射

    #同缺失值填充方法类似

    s.replace(['?','$'],method='pad')#向前填充

    s.replace(['?','$'],method='ffill')#向前填充

    s.replace(['?','$'],method='bfill')#向后填充

    #limit参数控制填充次数

    s.replace(['?','$'],method='bfill',limit=1)

    #DataFrame对象值替换

    #单值替换

    df.replace('?',np.nan)#用np.nan替换?

    df.replace({'?':'NA'})#用NA替换?

    #按列指定单值替换

    df.replace({'EMPNO':'?'},np.nan)#用np.nan替换EMPNO列中?

    df.replace({'EMPNO':'?','ENAME':'.'},np.nan)#用np.nan替换EMPNO列中?和ENAME中.

    #多值替换

    df.replace(['?','.','$'],[np.nan,'NA','None'])##用np.nan替换?用NA替换. 用None替换$

    df.replace({'?':'NA','$':None})#用NA替换? 用None替换$

    df.replace({'?','$'},{'NA',None})#用NA替换? 用None替换$

    #正则替换

    df.replace(r'\?|\.|\$',np.nan,regex=True)#用np.nan替换?或.或$原字符

    df.replace([r'\?',r'\$'],np.nan,regex=True)#用np.nan替换?和$

    df.replace([r'\?',r'\$'],[np.nan,'NA'],regex=True)#用np.nan替换?用NA替换$符号

    df.replace(regex={r'\?':None})

    #value参数显示传递

    df.replace(regex=[r'\?|\.|\$'],value=np.nan)#用np.nan替换?或.或$原字符

    删除缺失数据
    df.dropna(axis=0, how='any')
    #any表示删除包含任何NaN值的给定轴,how=all会删除所有元素都是NaN的给定轴

    更多相关内容
  • 由于传感器故障、系统误差、多异构数据源、网络传输乱序等因素极易出现噪声、缺失值、数据不一致的情况,如何消除这些因素对模型精度和可靠性产生的负面影响……

    前言

      Hi,久等了,这里是工业大数据预测系列的第二篇。

      前面我们提到,工业大数据具有诸多价值,实现工业建模、预测、控制、决策、优化、故障诊断等一系列应用。但工业界追求稳定可靠的目标使得上述应用对数据质量提出较高要求。

      具体而言,工业过程中产生的数据由于传感器故障、人为操作因素、系统误差、多异构数据源、网络传输乱序等因素极易出现噪声、缺失值、数据不一致的情况,直接用于数据分析会对模型的精度和可靠性产生严重的负面影响。因此在建模前,往往需要对数据进行预处理,消除数据中的噪声、纠正不一致、识别和删除离群数据来提高模型鲁棒性,防止模型过拟合。

    1 数据来源

      我们以2010年PHM协会(Prognostics Health Management Society)刀具磨损预测数据集来完成工业大数据预测系列文章。数据集共包含了C1 -C6共6份数据,C1、C4、C6为训练集、C2、C3、C5为测试集。每份数据共315个样本,每条样本由7个通道数据组成,所有数据均通过一台高速数控机床在铣削作业下采集获得。

    文末扫码关注公众号后回复“2010PHM”获取数据集下载链接。

    在这里插入图片描述

      数控机床作业参数说明如下:铣刀主轴转速为10400rpm;x方向的进给速率为1555mm/min;y方向的径向切削深度为0.125mm;z方向的轴向切削深度为0.2mm。
      为了获得高速数控机床作业过程的在线数据,在工件和加工平台之间安装了Kistler公司的3向平台测力计,在加工平台上固定Kistler公司的3向振动传感器,在靠近工件的位置安装声发射传感器,声发射信号主要由于材料内部结构变化造成材料内应力突变引发的弹性波产生而来的;采用Kistler5019A多通道电荷放大器和DAQ NI PCI1200数据采集卡放大和采集加工过程三个方向(x、y、z)的切削力和振动以及声发射信号;各信号的采样频率为50kHz。
      因此,传感器数据由7个通道组成:x、y、z方向的铣削力、x、y、z方向的振动和声发射信号。在完成每个工件表面的铣削后,用LEICA MZ12显微镜离线测量铣刀三个刀面的磨损情况作为每个样本的标签。

    csv文件的列描述
    第1列x轴铣削力(N)信号
    第2列y轴铣削力(N)信号
    第3列z轴铣削力(N)信号
    第4列x轴振动(g)信号
    第5列y轴振动(g)信号
    第6列z轴振动(g)信号
    第7列声发射信号(AE-RMS(V))

    2 数据预处理

      在该数据集中,通过对数据样本进行抽样并可视化可以发现数据缺陷主要有无效数据、异常数据两类,其中无效数据具体为进刀无效数据和退刀无效数据,异常数据为因某种原因导致的跳变数值。因此,所涉及到的数据预处理技术一般有缺失值和异常值处理等。

    在这里插入图片描述
    在这里插入图片描述

    2.1 无效数据处理

      根据数据量大小和具体工业应用场景可以分为以下两类处理方式:

    • 直接删除:适合数据量足够大而缺失的数据占比较小的情况

    • 平滑插值填补:当样本数据较少时则可以采用平滑插值填补法,具体有线性插值法、拉格朗日插值法等。

      由于数据采集的频率较高,铣削加工过程的数据点较多,每个样本达到了20余万个数据,因此可以采用直接删除的方法。

      那么如何定位到删除点呢?我们可以采用一个简单的第三四分位数法。具体为:首先计算铣削过程所采集数据的第三四分位数Q3作为进退刀无效数据的临界值;然后从数据第一个值起,依次向后比较过程数据,直到出现第一个大于Q3的数值,记下当前位置,然后截断第一个值至该位置的数据;退刀无效数据则从最后一个值向前比较。
      通过该方法截断的数据如图所示,图中是C1数据集第225个样本Z Force的局部放大图,蓝色实线表示截断后的数据,红色虚线表示被截断的进刀无效数据。退刀数据截断效果与之类似,不再赘述。

    在这里插入图片描述

    2.2 异常数据处理

      针对工业环境以及数据特性的不同,异常值可以分为点异常值、波动点、集体离群值和明显噪声信号等类型。处理异常值的关键点在于判断异常值,判断异常值的方法主要有以下四种方式:

    1. 恒定阈值检测。通过人工设置数据统计特征中的最大值和最小值来检测数据,当数据波动幅值超出该最大最小值形成的区间,则判定该数据点为异常点。通常有全局阈值设置和分级阈值设置两种,其中分级阈值设置可以根据不同的阈值对应不同的操作。恒定阈值法较为简单,容易实现,但不适用于非平稳信号数据,只在平稳信号数据上有一定的效果,且灵活性较低。

    2. 分位数异常检测。该方法是一种基于统计的方法。把所有的数值从小到大排列,将全部数据等分为4部分,取25%位置上的值为上四分位值,记为Q1;50%位置上的值为中位数,记为Q2;75%位置上的值为下四分位值,记为Q3;四分位距 I Q R = Q 3 − Q 1 IQR=Q3-Q1 IQR=Q3Q1。则异常值的判断依据为大于 Q 1 + k × I R Q Q1+k \times IRQ Q1+k×IRQ 或小于 Q 3 − K × I Q R Q3-K \times IQR Q3K×IQR 的数值,k通常取1.5。

    3. K-Sigma异常检测。设一个服从正态分布的数据集表示为,其中 μ \mu μ为数据集的均值,delta为数据集的标准差。若数据落在( μ − k × δ \mu - k \times \delta μk×δ, μ + k × δ \mu + k \times \delta μ+k×δ)范围之外,则判断数据为异常数据。可以根据不同的工业场景和时序曲线,设置合适的k值作为不同级别的异常报警。通常取k值为3。

    4. 局部异常检测。局部异常检测基于滑动窗口机制,结合K-Sigma异常检测或分位数异常检测对原始数据进行分析。局部异常检测相比较于上述3种方法,使用更加灵活、适应性更强,对异常值更为敏感。但不适用于具有突变特性的数据。

      突变异常数据在某一个或几个数据点出现的数据幅值突增的跳变,表现为一个较大的数值,针对此类数据的处理需要寻找一个合适的方法,既不影响大部分正常数据又能有效检测出异常值进而处理。我们可以采用基于滑动窗口的中值滤波方法——hampel滤波。具体过程如下:

    1. 设置样本两边的样本数k,则窗口大小为2k+1,设定上下界系数 n δ n_{\delta} nδ
    2. 基于滑动窗口计算每个样本的局部标准差 x δ x_{\delta} xδ、局部估计中值 x m x_m xm
    3. 计算样本的异常值上下界:
      异常值上界: u p b o u n d = x m + n δ × x δ up bound=x_m + n_{\delta} \times x_{\delta} upbound=xm+nδ×xδ
      异常值下界: d o w n b o u n d = x m − n δ × x δ down bound=x_m - n_{\delta} \times x_{\delta} downbound=xmnδ×xδ
    4. 若该样本值大于异常值上界或小于异常值下界,则使用估计中值 x m x_m xm替换该样本。

      设置 k = 4000 k=4000 k=4000 n δ = 3 n_{\delta}=3 nδ=3。最终滤波效果对比如图所示,红色虚线表示含有突变异常值的数据,蓝色实线表示替换异常值后的数据。可以看出,hampel滤波后,C1数据集第001样本Y Force的异常值被替换,而其他数据未受影响,曲线更加平滑,异常数据点也不明显。

    在这里插入图片描述

      至此,针对刀具磨损数据集中的原始数据进行无效数据分析及处理、异常值定位分析、数据滤波处理等,已经得到了较为干净的铣削过程数据,为下一步进行数据特征提取以及建立预测模型打下了基础。

    3 数据预处理完整代码

    function [pre_data,count1,count2] = CutOut_and_Filter( raw_data )
    
    % *********************************
    %         裁剪去除无效数据
    % *********************************
    data_length = length(raw_data);
    
    Q3 = prctile(raw_data,75);  % 上四分位值
    
    for index = 1:data_length
        if raw_data(index) > Q3
            count_forward = index;
            break
        end
    end
    for index = 1:data_length
        num = data_length - index;
        if raw_data(num) > Q3
            count_backward = num;
            break
        end
    end
    data1 = raw_data(count_forward:count_backward);
    
    % *********************************
    %       hampel滤波示例代码
    % *********************************
    [destX,outPos,xMedian,xSigma] = hampel(data1, 10000, 3);
    
    pre_data = destX;
    count1 = count_forward;
    count2 = count_backward;
    
    end
    
    C1_sample = 315;
    C4_sample = 315;
    C6_sample = 315;
    
    start_time = clock;
    
    read_Path_C1 = 'C:\Users\Kaifeng Guan\Desktop\My Tool Wear Prediction\dataset\c1\c1\c_1_';
    save_Path_C1 = 'C:\Users\Kaifeng Guan\Desktop\My Tool Wear Prediction\Code\new_data\dataset1\c1\c_1_';
    for i = 1:C1_sample
        str = num2str(i, "%03d");
    
        fprintf("Processing C1: %s \n", str);
    
        read_path = strcat(read_Path_C1, str, ".csv");
        raw_data = csvread(read_path);
    
        save_path = strcat(save_Path_C1, str);
        mkdir(save_path)
        for j = 1:7
            data1 = raw_data(:, j);
            data2 = CutOut_and_Filter(data1);
    
            save_path1 = strcat(save_path, "\f", num2str(j), ".csv");
            csvwrite(save_path1, data2)
        end
    end
    
    read_Path_C4 = 'C:\Users\Kaifeng Guan\Desktop\My Tool Wear Prediction\dataset\c4\c4\c_4_';
    save_Path_C4 = 'C:\Users\Kaifeng Guan\Desktop\My Tool Wear Prediction\Code\new_data\dataset1\c4\c_4_';
    for i = 1:C4_sample
        str = num2str(i, "%03d");
    
        fprintf("Processing C4: %s \n", str);
    
        read_path = strcat(read_Path_C4, str, ".csv");
        raw_data = csvread(read_path);
    
        save_path = strcat(save_Path_C4, str);
        mkdir(save_path)
        for j = 1:7
            data1 = raw_data(:, j);
            data2 = CutOut_and_Filter(data1);
    
            save_path1 = strcat(save_path, "\f", num2str(j), ".csv");
            csvwrite(save_path1, data2)
        end
    end
    
    read_Path_C6 = 'C:\Users\Kaifeng Guan\Desktop\My Tool Wear Prediction\dataset\c6\c6\c_6_';
    save_Path_C6 = 'C:\Users\Kaifeng Guan\Desktop\My Tool Wear Prediction\Code\new_data\dataset1\c6\c_6_';
    for i = 1:C6_sample
        str = num2str(i, "%03d");
    
        fprintf("Processing C6: %s \n", str);
    
        read_path = strcat(read_Path_C6, str, ".csv");
        raw_data = csvread(read_path);
    
        save_path = strcat(save_Path_C6, str);
        mkdir(save_path)
        for j = 1:7
            data1 = raw_data(:, j);
            data2 = CutOut_and_Filter(data1);
    
            save_path1 = strcat(save_path, "\f", num2str(j), ".csv");
            csvwrite(save_path1, data2)
        end
    end
    
    end_time = clock;
    etime(end_time, start_time)
    


    如果您觉得文章对您有用,请给我点个赞吧!
    您的肯定是对我最大的鼓励。

    展开全文
  • Python异常数据处理——箱型图分析

    万次阅读 2020-08-05 15:35:51
    在数据分析中,利用箱型图的方法对异常数据进行过滤,是一种很快速、很有效的异常数据处理方法。 箱形图(英文:Box plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。...

    在数据分析中,利用箱型图的方法对异常数据进行过滤,是一种很快速、很有效的异常数据处理方法。
    箱形图(英文:Box plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。在各种领域也经常被使用,常见于品质管理,快速识别异常值。
    箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。

    箱型图可以通过程序设置一个识别异常值的标准,即大于或小于箱型图设定的上下界的数值则识别为异常值,箱型图如下图所示:
    在这里插入图片描述
    其中,有5个重要的因素需要理解:

    1. 上四分位数U:表示所有样本中只有1/4的数值大于U ,即从大到小排序时U处于25%处。
    2. 下四分位数 L:表示所有样本中只有1/4的数值小于L,即从大到小排序时L处于75%处。
    3. 中位数Q:表示一组数由小到大排列处于中间位置的数,若序列数为偶数个,该组的中位数为中间两个数的平均数。
    4. 上限:表示非异常范围内的最大值,四分位距为 IQR=U-L,则上限为 U+1.5IQR。
    5. 下限:表示非异常范围内的最小值,下限为 L-1.5IQR。

    不过箱型图进行异常数据处理也有它的局限性,比如并不适合巨量且时间跨度很长的数据,因为箱型图实在太客观了,只关注整体数据的分布,但并不会跟踪数据整体的变化趋势,所以这时候可以把数据分段后再逐步进行异常数据处理。

    下面就用Python来实现箱型图异常数据处理,主要代码如下:

    import pandas as pd
    
    
    def box_plot_outliers(data_ser, box_scale):
        """
        利用箱线图去除异常值
        :param data_ser: 接收 pandas.Series 数据格式
        :param box_scale: 箱线图尺度,默认用 box_plot(scale=3)进行清洗
        :return:
        """
        iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
        # 下阈值
        val_low = data_ser.quantile(0.25) - iqr*1.5
        # 上阈值
        val_up = data_ser.quantile(0.75) + iqr*1.5
        # 异常值
        outlier = data_ser[(data_ser < val_low) | (data_ser > val_up)]
        # 正常值
        normal_value = data_ser[(data_ser > val_low) & (data_ser < val_up)]
        return outlier, normal_value, (val_low, val_up)
    
    
    # 过滤异常值
    outlier, normal_value, value = box_plot_outliers(data[sensor], 3)
    outlier = pd.DataFrame(outlier)   # 异常数据
    normal_value = pd.DataFrame(normal_value)   # 正常数据
    

    以实际数据进行测试,正常值和异常值的分布如图所示:
    在这里插入图片描述
    完整代码如下:

    import numpy as np
    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdate
    from datetime import datetime, timedelta
    from def_files_data import get_all_files, get_path_data
    
    
    def box_plot_outliers(data_ser, box_scale):
        """
        利用箱线图去除异常值
        :param data_ser: 接收 pandas.Series 数据格式
        :param box_scale: 箱线图尺度,取3
        :return:
        """
        iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
        # 下阈值
        val_low = data_ser.quantile(0.25) - iqr*0.5
        # 上阈值
        val_up = data_ser.quantile(0.75) + iqr*0.5
        # 异常值
        outlier = data_ser[(data_ser < val_low) | (data_ser > val_up)]
        # 正常值
        normal_value = data_ser[(data_ser > val_low) & (data_ser < val_up)]
        return outlier, normal_value, (val_low, val_up)
    
    
    '''数据处理'''
    def read_data(sensor, begin_time, end_time):
        path = '../../data/SHMData/梁体位移/{}'.format(sensor)
        # 读取所有文件名
        files_list = get_all_files(path)
        if len(files_list) > 0:
            # 获取文件夹内的所有文件数据并拼接起来
            data = get_path_data(files_list, begin_time, end_time)
    
            # 过滤异常值
            outlier, normal_value, value = box_plot_outliers(data['displacement'], 3)
            outlier = pd.DataFrame(outlier)
            normal_value = pd.DataFrame(normal_value)
            return normal_value, outlier
    
    
    '''异常值分布图'''
    def Outliers_fig(fig_title, fig_num, col_name, xlabel, ylabel):
        # 画布大小
        fig = plt.figure(figsize=(14, 7), edgecolor='blue')
        # 标题
        plt.suptitle(fig_title, fontsize=20, x=0.5, y=0.970)
        # 调整子图在画布中的位置
        plt.subplots_adjust(bottom=0.145, top=0.9000, left=0.075, right=0.990)
        ax = fig.add_subplot(fig_num)
        ax.plot_date(normal_value.index, normal_value[col_name], 'bo', linewidth=1.5, label='正常值')
        ax.plot_date(outlier.index, outlier[col_name], 'ro', linewidth=1.5, label='异常值')
        ax.set_xlabel(xlabel, fontsize=18, labelpad=7)
        ax.set_ylabel(ylabel, fontsize=18, labelpad=7)
        ax.tick_params(labelsize=18, direction='out')
        ax.grid(linestyle='--')
        ax.legend(fontsize=15)
        # 中文显示
        mpl.rcParams['font.sans-serif'] = ['SimHei']
        mpl.rcParams['axes.unicode_minus'] = False
        return ax
    
    
    '''设置刻度'''
    def set_axis(ax):
        plt.xlim([begin_time + timedelta(days=-1), end_time + timedelta(days=1)])  # 日期上下限
        ax.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))
        dayLoc = mpl.dates.DayLocator(interval=5)
        ax.xaxis.set_major_locator(dayLoc)
        ax.xaxis.set_tick_params(rotation=0, labelsize=18)
    
    
    if __name__ == '__main__':
        sensor_list = ['B03-WY-001']
        begin_time = datetime(2020, 1, 1, 0, 0, 0)
        end_time = datetime(2020, 3, 31, 23, 59, 59)
        title_time_begin = begin_time.strftime('%Y-%m')
        title_time_end = end_time.strftime('%Y-%m')
    
        # 绘图
        for sensor in sensor_list:
            normal_value, outlier = read_data(sensor, begin_time, end_time)
    
            fig_title = "{}纵向位移异常值分布图,数据时间:{}——{}".format(sensor, title_time_begin, title_time_end)
            Displacement_ax = Outliers_fig(fig_title, 111, 'displacement', '时间(month-day)', '位移(mm)')
            set_axis(Displacement_ax)
            plt.show()
    
    展开全文
  • 数据处理异常值处理

    千次阅读 2021-03-17 19:52:39
    异常值是指那些在数据集中存在的不...如果忽视这些异常值,在某些建模场景下就会导致结论的错误(如线性回归模型、K均值聚类等),所以在数据的探索过程中,有必要识别出这些异常值并处理好它们。 异常值检测 简单统

    异常值是指那些在数据集中存在的不合理的值,需要注意的是,不合理的值是偏离正常范围的值,不是错误值。比如人的身高为-1m,人的体重为1吨等,都属于异常值的范围。虽然异常值不常出现,但是又会对实际项目分析有影响,造成结果的偏差,所以在数据挖掘的过程中不能不重视。

    异常值出现的原因

    数据集中的异常值可能是由于传感器故障、人工录入错误或异常事件导致。如果忽视这些异常值,在某些建模场景下就会导致结论的错误(如线性回归模型、K均值聚类等),所以在数据的探索过程中,有必要识别出这些异常值并处理好它们。

    异常值检测

    简单统计分析

    最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出合理的范围。

    3σ原则

    3σ原则是建立在正态分布的等精度重复测量基础上而造成奇异数据的干扰或噪声难以满足正态分布。
    在这里插入图片描述
    正态分布,又叫做高斯分布。特征为中间高两边低左右对称。

    正态分布特性:

    • 集中性:曲线的最高峰位于正中央,并且位置为均数所在的位置。
    • 对称性:以均数所在的位置为中心呈左右对称,并且曲线两段无限趋近于横轴。
    • 均匀变动性:正态分布曲线以均数所在的位置为中心均匀向左右两侧下降。

    正态分布函数公式如下:
    在这里插入图片描述
    如果一组测量数据中的某个测量值的残余误差的绝对值 νi>3σ,则该测量值为坏值,应剔除。通常把等于 ±3σ的误差作为极限误差,对于正态分布的随机误差,落在 ±3σ以外的概率只有 0.27%,它在有限次测量中发生的可能性很小,故存在3σ准则。3σ准则是最常用也是最简单的粗大误差判别准则,它一般应用于测量次数充分多( n ≥30)或当 n>10做粗略判别时的情况。

    σ代表标准差,μ代表均值

    样本数据服从正态分布的情况下:

    • 数值分布在(μ-σ,μ+σ)中的概率为0.6826
    • 数值分布在(μ-2σ,μ+2σ)中的概率为0.9544
    • 数值分布在(μ-3σ,μ+3σ)中的概率为0.9974
      在这里插入图片描述
      可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%。

    箱线图

    箱线图是通过数据集的四分位数形成的图形化描述,是非常简单而且效的可视化离群点的一种方法。
    上下须为数据分布的边界,只要是高于上须,或者是低于下触须的数据点都可以认为是离群点或异常值。
    在这里插入图片描述
    下四分位数:25%分位点所对应的值(Q1)

    中位数:50%分位点对应的值(Q2)

    上四分位数:75%分位点所对应的值(Q3)

    上须:Q3+1.5(Q3-Q1)

    下须:Q1-1.5(Q3-Q1)

    其中Q3-Q1表示四分位差

    异常值处理

    删除

    直接将含有异常值的记录删除,通常有两种策略:整条删除和成对删除。这种方法最简单简单易行,但缺点也不容忽视,一是在观测值很少的情况下,这种删除操作会造成样本量不足;二是,直接删除、可能会对变量的原有分布造成影响,从而导致统计模型不稳定。

    视为缺失值

    视为缺失值,利用处理缺失值的方法来处理。这一方法的好处是能够利用现有变量的信息,来填补异常值。需要注意的是,将该异常值作为缺失值处理,需要根据该异常值(缺失值)的特点来进行,针对该异常值(缺失值)是完全随机缺失、随机缺失还是非随机缺失的不同情况进行不同处理。

    平均值修正

    如果数据的样本量很小的话,也可用前后两个观测值的平均值来修正该异常值。这其实是一种比较折中的方法,大部分的参数方法是针对均值来建模的,用平均值来修正,优点是能克服了丢失样本的缺陷,缺点是丢失了样本“特色”。

    盖帽法

    整行替换数据框里99%以上和1%以下的点,将99%以上的点值=99%的点值;小于1%的点值=1%的点值。
    在这里插入图片描述

    分箱法

    分箱法通过考察数据的“近邻”来光滑有序数据的值。有序值分布到一些桶或箱中。
    分箱法包括等深分箱:每个分箱中的样本量一致;等宽分箱:每个分箱中的取值范围一致。

    回归插补

    发现两个相关的变量之间的变化模式,通过使数据适合一个函数来平滑数据。
    若是变量之间存在依赖关系,也就是y=f(x),那么就可以设法求出依赖关系f,再根据x来预测y,这也是回归问题的实质。实际问题中更常为见的假设是p(y)=N(f(x)),N为正态分布。假设y是观测值并且存在噪声数据,根据我们求出的x和y之间的依赖关系,再根据x来更新y的值,这样就能去除其中的随机噪声,这就是回归去噪的原理 。

    多重插补

    多重插补的处理有两个要点:先删除Y变量的缺失值然后插补
    1)被解释变量有缺失值的观测不能填补,只能删除,不能自己乱补;
    2)只对放入模型的解释变量进行插补。

    不处理

    根据该异常值的性质特点,使用更加稳健模型来修饰,然后直接在该数据集上进行数据挖掘。

    展开全文
  • 数据预处理之异常处理

    千次阅读 2022-03-31 17:59:30
    在一般的预测问题中,模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上表现完全与整体样本不一致的点,我们就称其为异常点,通常异常点在预测问题中...
  • pandas添加、删除DataFrame行、列 处理异常数据
  • R语言:异常数据处理

    千次阅读 2019-06-05 14:36:42
      在数据处理中,尤其在作函数拟合时,异常点的出现不仅会很大程度的改变函数拟合的效果,而且有时还会使得函数的梯度出现奇异梯度,这就导致算法的终止,从而影响研究变量之间的函数关系。为了有效的避免这些异常...
  • 在数据分析和建模的过程中,有相当多的时间要用在数据准备上:加载、清理、转换以及重塑。这些工作会占到分析师时间的80...数据处理中的清洗工作主要包括对需要分析的数据集中的缺失值(空值)、重复值、异常值的处理。
  • 数据分析--异常处理

    千次阅读 2020-10-04 18:19:35
    模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上表现完全与整体样本不一致的点,我们就称其为异常异常点在某些场景下极为重要,如疾病预测,...
  • 数据分析学习总结笔记04:异常处理1 异常值概述2 如何判断异常值2.1 简单的统计分析2.2 3δ原则2.3 四分位数检验/箱型图分析2.4 格拉布斯检验2.5 基于模型检测2.6 基于距离检测2.7 基于密度检测3 如何处理异常值 ...
  • 异常数据处理——箱型图分析原理

    千次阅读 2018-09-13 12:41:59
    箱型图可以通过程序设置一个识别异常值的标准,即大于或小于箱型图设定的上下界的数值则识别为异常值,箱型图如下图所示: 首先我们定义下上四分位和下四分位: 上四分位我们设为 U,表示的是所有样本中只有1/4...
  • Python数据预处理--异常处理

    千次阅读 2020-05-15 07:43:04
    异常处理异常值分析3σ原则创建数据、计算均值和标准差、筛选异常值绘制数据密度曲线利用散点图绘制出数据异常值箱型图分析, 较准确箱型图看数据分布情况计算基本统计量和分位差计算异常值条数图表表达 ...
  • 数据分析之异常值检测与处理

    万次阅读 多人点赞 2020-03-20 15:10:22
    在机器学习中,异常检测和处理是一个比较小的分支,或者说,是机器学习的一个副产物,因为在一般的预测问题中,模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些...
  • 数据处理_异常值检测及处理】

    千次阅读 2022-03-21 16:48:07
    数据清洗的过程中,异常值的检测及处理是非常重要的一部分,现就以下问题学习异常值的相关知识。 1.什么是异常值?   指样本中个别数值明显偏离其余的观测值,比如一个学生的年龄<0,身高>5m等等,这些...
  • python数据预处理之异常值、缺失值处理方法

    万次阅读 多人点赞 2020-05-03 20:23:27
    除了互联网埋点的数据或企业内部的业务数据之外,往往我们拿到的,比如说网上采集的数据并不是那样规整,这类数据经常出现错误值、缺失值和异常值。 一、异常异常值是指样本中的个别值,其数值明显偏离其余的...
  • 数据预处理过程中,异常值的处理也相当重要。例如,一批数据中,11 号被试是高中二年级学生,但年龄为 33 岁,显然这个数据比较异常,很可能干扰实际结果,理论上高中二年级学生的平均年龄为 16~17 岁,由于异常值的...
  • 数学建模异常处理

    千次阅读 2020-06-15 18:56:41
    %计算矩阵行列数(r:行数,c:列数) [r,c] = size(S); temp = isnan(S);%将矩阵转化为0、1矩阵来查找缺项 for i = 1:c for j = 1:r Location_1 = find(temp ==1);...%%%判断负荷数据是否符合正态分布
  • MATLAB异常处理机制

    千次阅读 2021-11-24 10:46:06
    在程序中加入错误检查机制,合理处理程序可能出现的异常和错误,确保程序在所有可能条件下都能可靠运行,是现代编程语言的通用处理方式。 在MATLAB中,使用try … catch语句,可以捕获异常并在catch块中处理异常,而...
  • 若是还不清楚的可以再去看看我之前的三篇博客详细介绍这两种数据结构的处理方法: 一文速学-数据分析之Pandas数据结构和基本操作代码 DataFrame行列表查询操作详解+代码实战 DataFrame多表合并拼接函数concat、...
  • 数据清洗之 异常处理

    千次阅读 2020-04-20 15:26:49
    数据清洗异常处理
  • 2、最简单处理:均值、众数插补 定量数据,例如关于一群人的身高、年龄等数据,用整体数据的平均值来补缺失 定性数据,例如关于一群人的性别、文化程度;某些事件调查的满意度,用出现次数最多的值补缺失 ...
  • 数据处理异常值分析、处理

    万次阅读 2018-07-30 21:52:41
    异常值的分析方法 1、简单统计量分析 做一个描述性统计,进而查看哪些数据不合理。最常用的是最大值和最小值,如年龄的最大值199,则存在异常。 2、3σ原则 针对服从正态分布的数据, 3、箱形图分析(R语言)...
  • 数据异常处理

    千次阅读 2019-06-09 17:02:38
    在我们进行数据处理的时候,经常会遇到异常的数据点,偏离平均值或者中位数比较远的点,这种异常值我们可以通过以下三种方式进行处理: 1,3西格玛法,即计算出数据的均值以及标准差,距离均值3个标准差之外的点...
  • python数据分析实战之异常处理

    千次阅读 2021-09-17 09:28:44
    异常处理1、异常值定义2、异常处理方式3、实战 1、异常值定义 2、异常处理方式 3、实战
  • 数据挖掘:数据清洗——异常处理

    千次阅读 多人点赞 2020-02-16 19:46:45
    有时也称非离群点为“正常数据”,离群点为“异常数据”。 离群点跟噪声数据不一样,噪声是被观测变量的随机误差或方差。一般而言,噪声在数据分析(包括离群点分析)中不是令人感兴趣的,需要在数据预处理中剔除的...
  • 数据清洗:异常值识别和处理方法

    千次阅读 2022-04-26 10:47:46
    异常数据进行处理前,需要先辨别出哪些是真正的数据异常。 从数据异常的状态看分为两种: 一种是“伪异常”,这些异常是由于特定的运营动作产生,其实正常反映了业务状态。 一种是“真异常”,这些异常并不是...
  • 数据预处理_异常处理

    千次阅读 多人点赞 2020-04-12 18:45:53
    异常值 1.异常值是指样本中的个别值,其数值明显偏离其余的...真异常,并非业务运营而产生的,是客观反映数据本身存在异常的分布。 3.异常值分析 3σ原则 箱型图 4.异常值的处理方法 剔除异常值 视为缺...
  • 数据分析之异常处理

    千次阅读 2020-03-18 10:30:00
    异常值是我们在数据分析中会经常遇到的一种特殊情况,所谓的异常值就是非正常数据。有的时候异常数据对我们是有用的,有的时候异常数据不仅对我们无用,反而会影响...
  • 数据处理--缺失值处理&异常值处理

    万次阅读 多人点赞 2018-08-12 16:29:21
    缺失值处理: 造成数据缺失的原因是多方面的,主要可能有以下几种: 有些信息暂时无法获取,致使一部分属性值空缺出来。 有些信息因为一些人为因素而丢失了。 有些对象的某个或某些属性是不可用的。如一个未婚者...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,299,882
精华内容 519,952
关键字:

异常数据处理

友情链接: eadmin.zip