精华内容
下载资源
问答
  • 数据预处理方法总结

    2020-04-22 09:42:00
    数据是机器学习的原料,机器学习是通过对数据的训练才得到某种特性的。因此正确的预处理数据对模型结果的输出尤为重要...1、数据清洗主要通过对缺失值,异常值和重复数据的处理来完成的。 对缺失值的处理首先要判断...

    数据是机器学习的原料,机器学习是通过对数据的训练才得到某种特性的。因此正确的预处理数据对模型结果的输出尤为重要。

    -一、数据可能存在的问题
    数据一开始可能有数据重复,数据缺失,数据存在异常值等情况。
    二、数据预处理的步骤
    数据处理主要包括数据的清洗,数据的转化.数据描述,特征选择和特征抽取这几个步骤。

    1、数据清洗主要通过对缺失值,异常值和重复数据的处理来完成的。

    对缺失值的处理首先要判断是否有缺失值,用isnull函数,这个函数返回的是一个布尔类型的结果。其中缺失值为True,非缺失值为Flase。
    然后再进行缺失值的处理.


    缺失值处理主要有以下两种方式。
    一是删除缺失记录
    删除数据通过pandas的dropna函数来删除缺失值。

    df.dropna(axis = 0,thresh = 2)
    

    axis = 0代表沿着竖直方向(删除行),1代表沿着水平方向(删除列)。使用dropna函数可以直接删除缺失数据所在行或列(默认是行)

    thresh = 2代表保留至少2个非NaN数据所在的行。默认是不保留


    二是填充数据
    填充数据用到的pandas里的函数是

    fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
    '''
    vlaue参数指的是填充的值
    method指填充的方法	pad/ffill表示用之前的数据填充(列,第一行不填充)backfill/bfill表示用之后的数据填充(列。最后一行不填充)。
    limit指限制填充的次数
    '''
    


    另外还有平均值填补,拉格朗日插值法。平均值就是用mean()函数求出平均值。

    拉格朗日插值法是通过其他存在值的计算,来拟合出缺失的数据,不过在缺失大量数据时,偏差较大。

    异常值的处理也主要有两种方法。
    一是利用3σ原则来找出异常值。就是如果数据服从正态分布,异常值则为与平均值相差超过3倍σ的值。

    u = data.mean()#计算均值
    std = data.std()#计算标准差
    error = data[np.bas(data-u)>3*std]#求出异常值
    

    二是箱型图分析

    箱线图是一种用于显示一组数据分散情况的统计图。箱型图不受异常值影响,可以以一种相对稳定的方式描述数据的离散分布情况。

    下面是python代码实现方法。其中的precentile函数是用来求出数组的上四分位,中位和下四分位数的。

    percentile = np.percentile(self.n, (25, 50, 75), interpolation=‘midpoint’)
    #以下为箱线图的五个特征值

    Q1 = percentile[0]#上四分位数
    Q3 = percentile[2]#下四分位数
    IQR = Q3 - Q1#四分位距
    ulim = Q3 + 1.5*IQR#上限 非异常范围内的最大值
    llim = Q1 - 1.5*IQR#下限 非异常范围内的最小值
    

    2、在数据的转换阶段,有对数据进行归一化,标准化,离散化等操作。

    首先,归一化操作是将数据统一映射到[0,1]区间上。由于数据相差过大,所以一般要做归一化处理。

    range_ = np.max(x) - np.min(x)
    num = (x-np.min(x)) / range_
    

    标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导。

    mu = np.mean(self.x,axis=0)#计算平均数
    sigma = np.std(self.x,axis=0)#计算方差
    num =  (x-mu) / sigma
    

    连续值离散化是将数据按照不同的区间分好类,有等宽法和等频法。

    等宽法是将数据平均分成三个相同的区间。

    d1 = pd.cut(df,k, labels = range(k))
    #k表示划分区间的个数
    #df表示输入的dataframe类型的数据
    #lables表示表头
    

    等频法是按数据出现频率划分。将相同数量的记录放在每个区间,保证每个区间的数量基本一致。即分组后,每个分组的元素个数是一样的。

    k = 4
    w = [1.0*i/k for i in range(k+1)]
    w = data.describe(percentiles = w)[4:4+k+1]#取几个分位数的值作为不等长列表,用于cut函数
    w[0] = w[0]*(1-1e-10)#浮点化
    d2 = pd.cut(data, w, labels = range(k))
    #或者直接用qcut(data,k)函数
    

    还有另外一种数据处理操作是离散值处理(独热编码)
    独热编码是将同类型的数据分类按照二进制来变成0或1的数字。例如:
    男:01,女:10

    学生:001,老师:010,领导:100

    date = pd.read_csv(self.n)#读取csv文件
    date_df = pd.DataFrame(date)#转换成DataFrame格式
    date_gd = pd.get_dummies(date_df)#进行编码
    
    展开全文
  • 数据预处理(1)数据清洗

    千次阅读 2018-11-27 13:44:34
    数据预处理的内容主要包括数据清洗,数据集成,数据变换和数据规约。 数据清洗 数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,帅选掉与挖掘主题无关的数据,处理缺失值、异常值等。 缺失值...

    数据预处理的内容主要包括数据清洗,数据集成,数据变换和数据规约。

    数据清洗

    数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,帅选掉与挖掘主题无关的数据,处理缺失值、异常值等。

    缺失值处理

    缺失值处理的方法可分为三类:
    删除记录、数据插补和不处理。
    常用的数据 插补方法有:
    均值中位数众数插补
    使用固定值插补
    使用最近临插补
    回归方法 建立拟合模型预测缺失的属性值
    插值法 利用已知点建立插值函数
    这里重点介绍 拉格朗日插值法
    拉格朗日插值法
    数学基础
    数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数。
    即给出若干个已知点,可以找出一个多项式穿过这些点。
    假设f(a1)=b1,f(a2)=b2,f(a3)=b3
    第一项则为
    f(x)1=b1 * (x-a2)(x-a3) /(a1-a2)(a1-a3)
    将a1带入 (a1-a2)
    (a1-a3) /(a1-a2)(a1-a3)为1,因此在a1的值即为b1
    将这些多项式加起来
    对于经过的点,带入x的值,其他多项式会由于包含该点的多项式而为0.
    例如本例,最后多项式的结果应该是
    f(x)1=b1 * (x-a2)(x-a3) /(a1-a2)(a1-a3)
    f(x)2=b2 * (x-a1)
    (x-a3) /(a2-a1)(a2-a3)
    f(x)3=b3 * (x-a1)*(x-a2) /(a3-a2)(a3-a1)
    这三项的和。
    将点a3,b3带入前两个多项式,由于前两个多项式都包含(x-a3)项,因此两者的值均为0,所以带入点后,整个拉格朗日多项式的值为b3。
    由此画出的曲线具有一定的数学基础。

    拉格朗日插值公式结构紧凑,在理论分析中很方便,但是当插值节点增加时,插值多项式也会随之改变,这在实际计算中是很不方便的。为了克服这一缺点,提出了牛顿插值法。
    牛顿插值法在拉格朗日插值法上做了一定的改进,具有承袭性和易于变动节点的特性,从本质上两者给出结果是一致的,我们可以证明在固定阶次下拉格朗日多项式的唯一性,两者只是表示的形式不同。
    在python的scipy中只实现了拉格朗日插值法,如果要使用牛顿插值法还需要自己去实现。
    lagrange为拉格朗日插值函数
    使用时
    from scipy.interpolate import lagrange #导入拉格朗日插值函数

    异常值处理

    异常值处理常用方法有如下几种:

    • 删除含有异常值的记录
    • 视为缺失值
    • 平均值修正
    • 不处理
    展开全文
  • 数据预处理

    2020-11-25 13:53:34
    数据清洗的内容缺失值处理的方法a.丢弃b.填充异常值异常值的类型异常值的判断方法异常值的处理方法 数据预处理的目的、目标 & 评价数据集质量的主要指标 目的&目标: 现实中收集到的数据大体上都是不完整的...

    数据预处理的目的、目标 & 评价数据集质量的主要指标

    目的&目标:

    现实中收集到的数据大体上都是不完整的、不一致的”脏“数据,这些数据可能无法直接用来进行分析或者说直接分析的结果会与我们的预期不同,不能令我们满意。所以我们希望通过数据预处理技术(包括数据的清洗、数据的集成、数据的变换以及数据的归约)提升分析结果的准确性以及尽可能的缩短计算过程。

    九个维度指标评价数据集

    指标 理解
    准确性 指的是数据采集值\观测值与真实值之间的接近程度,也称为误差,误差越大,准确性越低。
    真实性(正确性) 指的是采集到的数据的真实性。在采集数据过程中,可控程度高,数据的真实性容易得到保障。例如:采用无人干预进行数据的采集,比如使用智能设备采集数据,能够更好的保证数据的真实性,这减少了人为干预,从而让数据更加正确的反映客观事物。
    完整性 从数据采集到的程度来衡量,是应采集和实际采集到的数据之间的差异。例如:在采集员工信息时,需要员工填写姓名、出生、性别等信息,但是某些员工只填了部分的信息,这就是数据的不完整性;或者有些员工拒绝填写,这也是数据的不完整性。
    全面性 指的是数据采集点的遗漏情况。例如:要记录客户的交易数据,如果只采集了订单中的产品信息(价格、数量、产品),没有采集送货地址、时间等信息,那么这个数据时不全面的。
    及时性 指的是数据能否在需要的时候得到保证。例如:某个企业在月初的时候要对上个月的数据进行汇总,这些数据能否及时处理完成,是企业进行数据分析\挖掘的保障。如果企业的财务核算繁琐,速度慢,上个月的数据要月中完成,再等到采取策略的时候已经到月底了。所以如果数据不能及时汇总,会影响到企业的决策。
    即时性 数据的即时性指的是数据采集时间节点和数据传输时间节点,数据采集后立即存储,并且立即加工呈现,就是即时数据。例如:一台生产设备的仪表板反映了设备了温度、电压、电流等数据,这些数据都是即时数据。把这些数据存储下来,那它们就是历史数据。
    精确性 指的是对同一对象重复测量时得到的不同数据之间的接近程度。精确性与数据采集的精度有关系。例如:测量人的身高,精确到厘米,所以重复测量的误差为厘米;测量两地之间的距离,精确到公里,所以重复测量的误差为公里
    关联性 指的是各个数据集之间的关联关系。例如:员工的工资和绩效是关联在一起的,绩效直接关系着工资的多少,这是直接关联;也有间接关联,比如原料采购订单数据和员工的工资数据,生成订单数据与采购订单数据关联起来,生产订单是通过员工完成的,通过员工的作业数据与员工信息联系起来。
    一致性 指的是数据集变量的取值范围、变量之间的相关关系是否合乎要求。如果数据超出正常范围、存在逻辑上不合理的或者相互矛盾的数据,那就不满足一致性。

    数据清洗的内容是什么?处理缺失值数据的方法有哪些?异常值的处理方法有哪些?

    数据清洗的内容

    在收集到数据以后,可能要使用的数据的质量不满足要求,所以要进行数据清洗。首先得知道在拿到数据之后,可能出现的情况,比如说你想要的数据是怎么样的?这些数据存在哪些错误?(根据常识来判断、根据要解决的实际问题来决定)是如何导致这些错误的?在明确了你的目标以及数据存在的错误及可能的原因之后,就可以对症下药进行数据的清洗。比如说:在风险管理领域,我们要研究的是3σ\sigma准则之外的数据,所以从异常值的角度来看,如果我们不根据我们要解决的实际问题来进行数据的清洗,那我们可能就会将3σ\sigma之外的数据给清洗掉了。所以数据清洗的首要内容是确定你要解决的实际问题,然后列举出判断异常值的方法,然后再决定如何处理。

    数据清理主要针对数据数值上的各种异常情况的处理,根据数值异常情况的不同,数据清理常见的有以下:缺失值处理、离群和噪声值处理、异常范围及类型值处理。

    缺失值处理的方法

    a.丢弃

    可以只丢弃缺失项处的值(在丢弃以后还会有其他的操作,比如填充),也可以丢弃包含缺失项的整条数据记录,这得看该条数据记录上其它的数据是否有价值,如果整列数据缺失过多,也可以直接丢弃(前提是这个特征对你要解决的实际问题来说不重要)。通常,在数据样本较少的情况下,是否考虑直接丢弃整行数据或整列数据,都需要权衡一番。

    可以按照下表所示的方法来进行缺失值的处理:

    不重要 重要
    缺失率高 丢弃 填充
    缺失率低 填充 填充

    b.填充

    对缺失值进行填充的方法有很多,这里总结了3点:填充、替代、估计

    填充:

    可以用与缺失值“相似”记录上的值来填充缺失值,但是首先需要定义‘相似’,定义的方法有很多,如:用KNN、聚类等方法估计缺失值都是利用这种思想。对于时间序列,可以用相邻数据记录处的值填充。也可以用插值的方法,包括线性和非线性插值。

    替代:

    一种简单的方法(简单不一定无效,要根据你要解决的实际问题来确定)是使用样本的统计值(众数,中位数,均值等)来填充缺失值。使用缺失值所处特征上的全部值的平均值(也可能是加权平均)、某个分位数来填充缺失值。对于时间序列,可以使用相邻数据记录处的平均值来填充。

    估计:

    一种处理缺失值的方法是估计,其内容是基于非缺失的值构建统计模型,并对模型参数进行估计,然后再预测缺失处的值。

    异常值

    异常值指的是存在于数据集中的不合理的值,也称为离群点。比如说年龄为-1,笔记本电脑重量为1吨等,都属于异常值的范围。

    异常值的类型

    a.异常范围

    异常范围类型指的是记录数据超过了当前场景下属性可取值的范围,比如记录一个人的身高为300cm,或者月收入为负值,这显然是不合理的,这类数据属于异常范围数据。

    b.异常类型值

    异常类型值指的是属性取值类型记录错误,比如记录一个人的身高为“超重”,这显然是将体重给记录到了身高。

    c.自设定异常值

    自设定异常值是我自己总结的名称,不一定准确,大概想表达的意思是:数据在你自己设定的异常值判断的标准之内,就是异常值。例如:一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值等。

    异常值的判断方法

    这里需要反复强调的是要根据要解决的实际问题来确定异常值的判断方法,如同上面说到的风险管理,就不再适合使用3σ\sigma准则作为判断方法

    1.格式错误

    有时候能很明显的看出来数据集中存在哪些错误的地方。格式错误最常见的就是日期型数据的格式不符合要求,数值型数据以字符型数据来表现。也会有数据中存在不该存在的字符、内容与字段应有的内容不符等。

    2.逻辑错误

    有些数据是不符合逻辑的,比如说某个人的身高为300cm,某个人的年龄为150岁。像这些不合乎逻辑的数据可以去除。这里就可以对年龄这个属性进行规约:规定年龄的区间为[0:120],如果样本中的年龄值不在该区间范围内,则表示该样本的年龄属性属于异常值。

    3. 简单统计分析

    通过描述性分析,查看哪些数据记录是不合理的。常用的是箱线图分析。

    箱型图分析提供了一个识别异常值的标准,即大于或小于箱型图设定的上下界的数值即为异常值,这个界可以是4分位数间距的某个倍数。通常我们认为超过1.5倍四分位间距的数据为异常值,超过3倍四分位间距的数据为极端值。

    4. 3σ\sigma原则

    σ\sigma指的是样本标准差,当样本距离样本均值大于3σ\sigma时,则认定该样本为异常值。通常来说,也是需要经验来确定的,不一定就非得要是3倍,倍数的取值也可能需要根据经验和实际情况来决定。

    5.回归分析中异常值检测

    如果你的目标就是要建立回归分析模型来解决实际问题,那么回归分析中异常值的检验方法就派上用场了。下面总结了回归分析中常用的异常值检验方法。

    关于因变量yy的异常值

    a.标准化残差与学生化残差

    在残差分析中,认为超过±3σ\pm3\sigma的残差认为是异常值,但是由于普通残差ϵ1,...,ϵn\epsilon_1,...,\epsilon_n的方差不等,所以使用残差判断会带来一定的麻烦。

    标准化残差:ZREi=ϵiσ^ZRE_i=\frac{\epsilon_i}{\hat{\sigma}},当ZREi>3|ZRE_i|>3时,相应的观测认定为异常值,但是这并没有解决方差不等的问题。

    学生化残差:SREi=ϵiσ^1hiiSRE_i=\frac{\epsilon_i}{\hat{\sigma}\sqrt{1-h_{ii}}}则解决了这一问题。其中hiih_{ii}为帽子阵H=X(XTX)1XTH=X(X^{T}X)^{-1}X^{T}的对角线元素。

    b.删除残差

    但是当数据中存在关于yy的异常值时,上面的方法都不再适用,这时可以使用删除残差的思想:在计算第ii个观测值的残差时,用删除掉这个观测值的其余n1n-1个观测值拟合回归方程,计算出第ii个观测值的拟合值y(i)^\hat{y_{(i)}},这个删除拟合值与第ii个观测值无关,不受第ii个观测值的影响,由此定义第ii个观测值的删除残差为:
    e(i)=yiy(i)^=ei1hii e_{(i)}=y_i-\hat{y_{(i)}}=\frac{e_i}{1-h_{ii}}
    删除残差e(i)e_{(i)}相比eie_i更能反映第ii个观测值的异常性。

    进一步,还有删除学生化残差:
    SRE(i)=SREi(np2np1SREi2)12 SRE_{(i)}=SRE_i(\frac{n-p-2}{n-p-1-SRE^2_i})^\frac{1}{2}
    其中nn代表观测个数,pp代表自变量个数。这里删除残差和删除学生化残差判断异常值的标准都是绝对值大于3。

    关于自变量xx的异常值

    帽子矩阵中对角线元素hiih_{ii}我们称之为杠杆值,我们称杠杆值大的值为强影响点,强影响点不一定是异常值点,其对回归方程并不总会造成不良影响,但是会对回归效果有较强的影响。强影响点中或许存在异常值点,所以需要一些技术手段来识别,库克距离正是这种方法。

    库克距离的定义为:
    Di=ei2(p+1)σ2^hii(1hii)2 D_i=\frac{e_i^2}{(p+1)\hat{\sigma^2}}\cdot\frac{h_{ii}}{(1-h_{ii})^2}
    Di<0.5D_i<0.5时,认为不是异常值点;当Di>1D_i>1时,认为是异常值点。

    异常值的处理方法

    a.删除

    一种最直接的方法就是直接将异常值给删除。这里需要强调的是,这还是需要根据你的实际需求来定,如果数据量很大,那么删除一条两条记录似乎没有多少影响,如果数据量小,那么就要考虑是否删除了。

    b.置为缺失值

    当不考虑删除异常值时,如果异常值是随机的,不是由人为因素造成的,那么可以将这些异常值置位缺失值,然后再按照缺失值的处理方法进行处理。

    c.更正

    对于异常范围、异常类型的数据,有时候是可以直接更正的。如果数据记录异常是有规律的,例如身高记录下的数据依次为“312,365,373…”那么可能原记录是“112,165,173…”。但是这样做的前提是你需要确保这样做是合理的。

    有时候收集到的数据不是一手数据,而是二手数据,这个数据集可能是手动编辑过的,在手动编辑的过程中可能会发生意想不到的事。拼写检查是判断数据是否由手动输入的最明显的方式之一。如果能够发现拼写错误的地方——例如:地方名称与所在城市不一致的地方。那么就可以手动更正这些错误,然后在报告中加以说明。

    展开全文
  • 所谓数据清洗主要处理的是数据中的缺失值、异常值和重复值: 缺失值处理 数据缺失值指由于各种原因导致数据中存在的空缺值:数据库中的null,python返回对象none,pandas或numpy中的nan;另空字符串是实体的不算是...

    问题:

    介绍数据清洗方法。。

    解答:

    所谓数据清洗主要处理的是数据中的缺失值、异常值和重复值:

    缺失值处理

    数据缺失值指由于各种原因导致数据中存在的空缺值:数据库中的null,python返回对象none,pandas或numpy中的nan;另空字符串是有实体的不算是缺失值,缺失值没有实体。

    处理数据缺失值一般有4中方法:

    1. 丢弃
    2. 补全
    3. 真值转化
    4. 不处理

    丢弃

    如果缺失的数据量不大,且对其丢弃对数据特征的影响有限,可以选着丢弃,毕竟这样容易操作。某一列丢失的数据过多,为了避免增加噪声,可以丢弃。

    补全

    相对于丢弃补全更常用,毕竟数据的完整性很重要,但是补全的方式也很重要,会影响到后续的数据处理。
    对全的方法:

    • 用平均值、中值、分位数、众数、随机值等替代。效果一般,因为等于人为增加了噪声。
    • 建立一个模型来“预测”缺失的数据。
    • 对于重要的数据,可以专家不足,或是调用数据源头补全,缺点是成本高

    转化法

    我们承认缺失值的存在,并且把数据缺失也作为数据分布规律的一部分,这将变量的实际值和缺失值都作为输入维度参与后续数据处理和模型计算。但是变量的实际值可以作为变量值参与模型计算,而缺失值通常无法参与运算,因此需要对缺失值进行真值转换。

    以用户性别字段为例,很多数据库集都无法对会员的性别进行补足,但又舍不得将其丢弃,那么我们将选择将其中的值,包括男、女、未知从一个变量的多个值分布状态转换为多个变量的真值分布状态。

    不处理

    一些模型可以自己处理缺失值,所以可以不对缺失值进行处理。常见的能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯、DBSCAN(基于密度的带有噪声的空间聚类)等

    数据:

    # 数据缺失值处理
    import pandas as pd
    import numpy as np
    from sklearn.preprocessing import Imputer
    import random
    # 获取数据
    df1 = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/boston/train.csv')
    df = df0.iloc[:10,:7]
    
    # 查看是否有缺失值
    df.isna().values.any()
    # False 没有缺失值
    
    # 数据行列
    df.shape
    # (10, 7) 10行 7列
    
    # 制造10个缺失值
    for i in range(10):
        df.iloc[random.choice(range(10)), random.choice(range(3,7))] = np.nan
    
    

    看下数据:
    在这里插入图片描述

    # 查看缺失值分布
    df.isna().sum()
    
    ID       0
    crim     0
    zn       0
    indus    1
    chas     2
    nox      3
    rm       3
    dtype: int64
    
    # 丢弃缺失值
    df_droped = df.dropna()
    df_droped
    
      ID	crim	zn	indus	chas	nox	rm
    2	4	0.03237	0.0	2.18	0.0	0.458	6.998
    3	5	0.06905	0.0	2.18	0.0	0.458	7.147
    9	15	0.63796	0.0	8.14	0.0	0.538	6.096
    
    # 将缺失值替代为特定值
    # 用后面的值替代缺失值
    df.fillna(method='backfill')
    
      ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0.0	0.469	6.998
    1	2	0.02731	0.0	7.07	0.0	0.469	6.998
    2	4	0.03237	0.0	2.18	0.0	0.458	6.998
    3	5	0.06905	0.0	2.18	0.0	0.458	7.147
    4	7	0.08829	12.5	7.87	0.0	0.524	6.012
    5	11	0.22489	12.5	7.87	0.0	0.524	6.377
    6	12	0.11747	12.5	7.87	0.0	0.524	5.889
    7	13	0.09378	12.5	7.87	0.0	0.524	5.889
    8	14	0.62976	0.0	8.14	0.0	0.538	5.949
    9	15	0.63796	0.0	8.14	0.0	0.538	6.096
    
    # 限制每一个后值只能替换一个缺失值
    df.fillna(method='bfill', limit=1)
    
      ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0.0	0.469	NaN
    1	2	0.02731	0.0	7.07	0.0	0.469	6.998
    2	4	0.03237	0.0	2.18	0.0	0.458	6.998
    3	5	0.06905	0.0	2.18	0.0	0.458	7.147
    4	7	0.08829	12.5	7.87	0.0	NaN	6.012
    5	11	0.22489	12.5	7.87	0.0	0.524	6.377
    6	12	0.11747	12.5	7.87	0.0	0.524	5.889
    7	13	0.09378	12.5	7.87	0.0	0.524	5.889
    8	14	0.62976	0.0	8.14	0.0	0.538	5.949
    9	15	0.63796	0.0	8.14	0.0	0.538	6.096
    
    # 用前值替换缺失值,如果没有前值则没法替换
    df.fillna(method='pad')
    
    	ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	NaN	NaN	NaN
    1	2	0.02731	0.0	7.07	0.0	0.469	NaN
    2	4	0.03237	0.0	2.18	0.0	0.458	6.998
    3	5	0.06905	0.0	2.18	0.0	0.458	7.147
    4	7	0.08829	12.5	7.87	0.0	0.458	6.012
    5	11	0.22489	12.5	7.87	0.0	0.458	6.377
    6	12	0.11747	12.5	7.87	0.0	0.524	6.377
    7	13	0.09378	12.5	7.87	0.0	0.524	5.889
    8	14	0.62976	0.0	7.87	0.0	0.538	5.949
    9	15	0.63796	0.0	8.14	0.0	0.538	6.096
    
    # 插值法就是通过两点(x0,y0),(x1,y1)估计中间点的值 必须有前后值
    df.interpolate() 
    
        ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.310	NaN	NaN	NaN
    1	2	0.02731	0.0	7.070	0.0	0.469	NaN
    2	4	0.03237	0.0	2.180	0.0	0.458	6.998
    3	5	0.06905	0.0	2.180	0.0	0.458	7.147
    4	7	0.08829	12.5	7.870	0.0	0.480	6.012
    5	11	0.22489	12.5	7.870	0.0	0.502	6.377
    6	12	0.11747	12.5	7.870	0.0	0.524	6.133
    7	13	0.09378	12.5	7.870	0.0	0.524	5.889
    8	14	0.62976	0.0	8.005	0.0	0.538	5.949
    9	15	0.63796	0.0	8.140	0.0	0.538	6.096
    
    # 用0值替换缺失值
    df.fillna(0)
    
       ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0.0	0.000	0.000
    1	2	0.02731	0.0	7.07	0.0	0.469	0.000
    2	4	0.03237	0.0	2.18	0.0	0.458	6.998
    3	5	0.06905	0.0	2.18	0.0	0.458	7.147
    4	7	0.08829	12.5	7.87	0.0	0.000	6.012
    5	11	0.22489	12.5	7.87	0.0	0.000	6.377
    6	12	0.11747	12.5	7.87	0.0	0.524	0.000
    7	13	0.09378	12.5	7.87	0.0	0.524	5.889
    8	14	0.62976	0.0	0.00	0.0	0.538	5.949
    9	15	0.63796	0.0	8.14	0.0	0.538	6.096
    
    # 用不同值替换
    df.fillna(dict(nox=0.5, rm=6.0))
    
      ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	NaN	0.500	6.000
    1	2	0.02731	0.0	7.07	0.0	0.469	6.000
    2	4	0.03237	0.0	2.18	0.0	0.458	6.998
    3	5	0.06905	0.0	2.18	0.0	0.458	7.147
    4	7	0.08829	12.5	7.87	0.0	0.500	6.012
    5	11	0.22489	12.5	7.87	0.0	0.500	6.377
    6	12	0.11747	12.5	7.87	0.0	0.524	6.000
    7	13	0.09378	12.5	7.87	NaN	0.524	5.889
    8	14	0.62976	0.0	NaN	0.0	0.538	5.949
    9	15	0.63796	0.0	8.14	0.0	0.538	6.096
    
    # 用平均数替代,选择各自列的均值
    df.fillna(df.mean()['chas':'rm'])
    
        ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0.0	0.501286	6.352571
    1	2	0.02731	0.0	7.07	0.0	0.469000	6.352571
    2	4	0.03237	0.0	2.18	0.0	0.458000	6.998000
    3	5	0.06905	0.0	2.18	0.0	0.458000	7.147000
    4	7	0.08829	12.5	7.87	0.0	0.501286	6.012000
    5	11	0.22489	12.5	7.87	0.0	0.501286	6.377000
    6	12	0.11747	12.5	7.87	0.0	0.524000	6.352571
    7	13	0.09378	12.5	7.87	0.0	0.524000	5.889000
    8	14	0.62976	0.0	NaN	0.0	0.538000	5.949000
    9	15	0.63796	0.0	8.14	0.0	0.538000	6.096000
    

    异常值处理

    异常数据,是脱离数据正常分布范围的数据,即噪声,对异常处理需要先辨别异常数据是否为真正需要去除掉的数据

    一下几个情况无需对异常数据进行处理:

    异常数据源于业务运营

    由于业务部门特定的动作导致数据分布异常:如双十一销量猛增,如果数据被剔除的话就无法真实对业务做反馈

    异常检测模型

    模型本身就是为了检测出数据中的异常数据,如果剔除掉了这些数据,本末倒置,如信用卡欺诈、药物识别、疾病预测、网络攻击等。

    非异常敏感模型

    如果数据算法和模型对异常值不敏感,不对异常值进行处理也不会对模型造成负面影响,如决策树

    # 制造异常值
    df = df0.iloc[:10,:7]
    df.iloc[4, 5] = 100
    df
    
    	ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0	0.538	6.575
    1	2	0.02731	0.0	7.07	0	0.469	6.421
    2	4	0.03237	0.0	2.18	0	0.458	6.998
    3	5	0.06905	0.0	2.18	0	0.458	7.147
    4	7	0.08829	12.5	7.87	0	100.000	6.012
    5	11	0.22489	12.5	7.87	0	0.524	6.377
    6	12	0.11747	12.5	7.87	0	0.524	6.009
    7	13	0.09378	12.5	7.87	0	0.524	5.889
    8	14	0.62976	0.0	8.14	0	0.538	5.949
    9	15	0.63796	0.0	8.14	0	0.538	6.096
    
    # 用过Z-Scores方法判断异常值
    # 复制一个dataframe来存储score
    df_zscore = df.copy()
    for col in df.columns:
        df_col = df[col]
        # 计算每个值的zscore
        z_score = (df_col - df_col.mean()) / df_col.std()
        # 判断Z-Score得分是否大于2.2
        df_zscore[col] = z_score.abs() > 2.2
    df_zscore
    
    
          ID	crim	zn	indus	chas	nox	rm
    0	False	False	False	False	False	False	False
    1	False	False	False	False	False	False	False
    2	False	False	False	False	False	False	False
    3	False	False	False	False	False	False	False
    4	False	False	False	False	False	True	False
    5	False	False	False	False	False	False	False
    6	False	False	False	False	False	False	False
    7	False	False	False	False	False	False	False
    8	False	False	False	False	False	False	False
    9	False	False	False	False	False	False	False
    

    通过箱型图判断:

    # 通过箱型图
    %matplotlib inline
    import matplotlib.pyplot as plt
    df.boxplot()
    

    在这里插入图片描述

    对于有固定业务规则的可直接套用业务规则,而对于没有固定业务规则的,可以采用常见的数学模型进行判断,即基于概率分布的模型(例如正态分布的标准差范围)、基于聚类的方法(例如KMeans)、基于密度的方法(例如LOF)、基于分类的方法(例如KNN)、基于统计的方法(例如分位数法)等,此时异常值的定义带有较强的主观判断色彩,具体需要根据实际情况选择。

    重复值处理

    重复值包括以下两种情况:数据完全相同的多条数据;数据主体相同但是匹配到的唯一属性不同,多见于数据仓库的变化维度表,同一个事实表的主体匹配到多个属性。

    以下情况需慎重去重:

    重复计入用于分析演变规律

    商品类别的维度表中,每个商品对应了同一类别的值是唯一的,但是在所有商品的类别的值重构或升级时,原有的商品可能被分配了类别中的不同值,对于这种情况需要跟业务进行协商再决定做去重处理。

    为解决样本不均衡产生的重复值

    处理分类数据建模过程中样本不均衡的问题,对数据量较少的样本类别偶简单过采样,这样会产生一些重复值也不能去重。

    运营过程产生的重复记录

    在运营过程中重复的数据可能意味着重大的运营规则问题,特别是这些重复值出现在企业经营中金钱相关的场景,如重复的订单,重复充值

    这些数据一般产生于误操作,重复点击生成订单,如果这样的数据被视为重复数据去除掉的话,运营人员就无法发现出现的问题,无法及时对误操作产生的后果做补救。

    # 创造重复值
    df = df0.iloc[:5,:7]
    df0 = pd.concat([df, df])
    
    # 判断重复数据
    df0.duplicated()
    
    0    False
    1    False
    2    False
    3    False
    4    False
    0     True
    1     True
    2     True
    3     True
    4     True
    dtype: bool
    
    # 删除重复值 
    df0.drop_duplicates()
    
    	ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0	0.538	6.575
    1	2	0.02731	0.0	7.07	0	0.469	6.421
    2	4	0.03237	0.0	2.18	0	0.458	6.998
    3	5	0.06905	0.0	2.18	0	0.458	7.147
    4	7	0.08829	12.5	7.87	0	0.524	6.012
    
    # 根据特定列进行删除重复值
    df0.drop_duplicates(['zn', 'chas'])
    
       ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0	0.538	6.575
    1	2	0.02731	0.0	7.07	0	0.469	6.421
    4	7	0.08829	12.5	7.87	0	0.524	6.012
    
    # inplace 为 true 改变dataframe
    df0.drop_duplicates(['zn', 'chas'], inplace=True)
    df0
    
      ID	crim	zn	indus	chas	nox	rm
    0	1	0.00632	18.0	2.31	0	0.538	6.575
    1	2	0.02731	0.0	7.07	0	0.469	6.421
    4	7	0.08829	12.5	7.87	0	0.524	6.012
    

    参考:
    《python数据分析与数据化运营》 宋天龙
    【Python数据分析基础】: 异常值检测和处理
    机器学习中如何处理缺失数据?

    展开全文
  • 数据预处理环节

    2019-10-02 19:45:26
    数据挖掘中,海量的原始数据存在着大量不完整(缺失值)、不一致、一场的数据,这会严重影响建模的效率和准确客观性,所以进行数据预处理尤其重要。数据预处理包括:数据清洗、集成、转换、规约操作。 1.数据清洗...
  • 数据预处理主要任务: 一、数据预处理 1.数据清洗 2.数据集成 3.数据转换 4.数据归约 1.数据清洗 现实世界的数据一般是不完整的、噪声的和不一致的。数据清理例程试图填充缺失的值,光滑噪声并识别离群点,...
  • 数据预处理备忘

    2018-04-19 14:51:18
    对于异常值的方法主要有删除含有异常值的记录,不处理,平均值修正和视为缺失值 2.数据集成 数据集成是合并多个数据源中的数据,并存放到一个数据存储的过程,比如根据一个人身高,体重,年龄,通过这几个数据...
  • 本节介绍数据清洗主要处理方法。 遗漏数据处理 假设在分析一个商场销售数据时,发现多个记录中的属性值为空,如顾客的收入属性,则对于为空的属性值,可以采用以下方法进行遗漏数据处理。 1)忽略该条记录 若一...
  • 数据预处理总结

    千次阅读 2018-08-08 16:25:44
    数据预处理数据清洗 数据不完整,即数据中存在缺失值,对于缺失值的处理主要有一下几种方法: 1 平均值、众数、中位数进行填充;如数据分布比较均匀,在曲线图上表现为变化比较平缓,可以用均值进行填充;当某一...
  • Python数据分析----数据预处理

    千次阅读 2018-04-04 15:36:23
    数据预处理主要包括:数据清洗、数据集成、数据变换和数据规约。1. 数据清洗数据清洗主要是删除原始数据中的无关数据、重复数据,平滑噪音数据,筛选掉和挖掘主题无关的数据,处理缺失值和异常值。1.1. 缺失值处理...
  • 数据预处理主要内容包括数据清洗、数据集成、数据变换和数据归约。4.1 数据清洗数据清洗主要是删除原始数据中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值。4.1.1 缺失值...
  • 一、数据清洗 主要是删除原始数据中的无关数据、重复数据、噪声数据等,处理缺失值、异常值。 处理缺失值的方法分为三类;删除数据、数据插补、不处理。 其中插补方法包括:均值、中位数、众数、使用固定值、最近...
  • 本节介绍数据清洗主要处理方法。遗漏数据处理假设在分析一个商场销售数据时,发现多个记录中的属性值为空,如顾客的收入属性,则对于为空的属性值,可以采用以下方法进行遗漏数据处理。1)忽略该条记录若一条...
  • 现实世界中的数据总是“脏的”,主要体现在数据不准确,...一 ,数据不完整,即数据中存在缺失值,对于缺失值的处理主要有以下几种方法: # 删除存在缺失值的记录 , 如果样本数据量比较大,缺失信息较少,删除少量...
  • 数据预处理(常用)

    2019-03-07 13:49:12
    1)缺失值处理主要有三种方法:删除记录、数据插补和不处理。当然这里数据插补是最使用最多的,包括均值/中位数/众数插补、固定值插补、最近邻插补、回归方法插补和插值法。 插补:如果该列是字符串的,就将该列中...
  • 本节介绍数据清洗主要处理方法。遗漏数据处理假设在分析一个商场销售数据时,发现多个记录中的属性值为空,如顾客的收入属性,则对于为空的属性值,可以采用以下方法进行遗漏数据处理。1)忽略该条记录若一条记录...
  • 本节介绍数据清洗主要处理方法。遗漏数据处理假设在分析一个商场销售数据时,发现多个记录中的属性值为空,如顾客的收入属性,则对于为空的属性值,可以采用以下方法进行遗漏数据处理。1)忽略该条记录若一条记录...
  • 数据采集与预处理

    2020-03-18 15:19:25
    目录 1.采用哪些方式可以获取大数据? 2.常用大数据采集工具哪些?...7.数据清洗有哪些方法? 8.数据集成需要重点考虑的问题哪些? 9.数据变换主要涉及哪些内容? 10.分别简述常用ETL工具...
  • 数据预处理主要包括数据清洗(Data Cleaning)、数据集成(Data Integration)、数据转换(Data Transformation)和数据消减(Data Reduction)。本节在介绍大数据预处理基本概念的基础上对数据预处理方法进行讲解...
  • 本文主要介绍文本分类的前几个步骤,数据获取+数据清洗 下一个模块会开始讲解文本文本数据到数值数据的过渡,将文本数据转化为数值数据,并且提取转化后的特征,降维,输入到文本分类器中进行训练、测试、评估。 ...
  • 数据清洗方法要考虑你的数据的最终使用目的,不同的特征根据具体含义需要采用不同的策略。根据题主的问题,猜测主要关注缺失与异常值处理。缺失值的处理:1)删除。删除缺失占比较高的特征或样本。需要根据你最终的...
  • 数据预处理包括有数据清洗,数据集成,数据转换,数据规约等过程。数据预处理的目的是提高数据的质量,同时让数据更好的适应特定的挖掘技术或工具。一般的数据挖掘过程中,数据预处理工作量占到了整个过程的60-70%。...
  • PHM算法与智能分析技术——数据处理与特征提取方法1数据...本堂课的主要介绍数据处理的宏观的目标,就是要降低工业场景中建模的3B问题,然后介绍一些常见的数据处理的方法,包括工矿分割数据清洗,针对运动数据的...
  • 这篇文章将包括一些简单的方法清洗预处理文本数据以进行文本分析任务。 我们将在Covid-19 Twitter数据集上对该方法进行建模。 这种方法有3个主要组成部分: 首先,我们要清理和过滤所有非英语的推文/文本,因为...
  • 这篇文章将包括一些简单的方法清洗预处理文本数据以进行文本分析任务。我们将在Covid-19 Twitter数据集上对该方法进行建模。 这种方法有3个主要组成部分:首先,我们要清理和过滤所有非英语的推文/文本,...
  • 数据探索助于选择合适的数据预处理和建模方法,甚至可以完成一些由数据挖掘解决的问题。主要从数据质量分析和数据特征分析两个角度对数据进行探索。 1.1 数据质量分析 主要任务 检测原始数据是否存在脏数据,脏...

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

数据预处理方法主要有数据清洗