精华内容
下载资源
问答
  • 2021-07-24 14:43:50

    缺失值:收集到的数据集中往往某个或某些属性的值是空白的,错误的,不符合要求的

    分类:单变量缺失,多变量缺失

    SPSS缺失值分析:分析 多重插补 分析模式

    办法:

    1.直接删除

    条件:1. 整个数据集中的缺失值所占比例很小

               2. 删除后队余实际数据影响不大

    缺点:数据缺失后的值不能包括原有数据的所有信息,被删除的信息中也可能存在重要的信息

    2.均值插补

    用调查项中有的数据的均值替换缺失值,因为回答单元只能算出一个均值,所以也称为单一均值插补法

    条件:缺失情况比较少,缺失数据集较少,数据量总量较大

    优点:均值插补可以减少因为数据缺失后的值不能包含原有数据所有信息,以及被删除的信息中也许存在重要的信息的影响

    缺点:均值只有一个,如果数据的分布较为集中,则误差较大

    3.分层插补(类均值插补)

    在插补之前,利用变量的属性,对总体进行分层,使各层中的各单元尽可能的相似,然后在每一层中用该层有回答单元的均值作为替代值插补该层无回答的缺失值

    分层次数越多,所获得的数据值越准确,相较于均值插补,这种办法可以从逻辑层面得到数据缺失补充,其次可以得到多种插补值,比单一均值插补满足的数据分布更切合实际

    需要结合数据实际情况,从变量逻辑之间进行处理,需要辅助变量与缺失数据之间存在较强的共线性

    4.随机插补

    鉴于使用均值插补法会导致插补值过于集中,扭曲样本分布,我们可以从某种分布的角度入手,从这一个缺失变量的已知数据中随机抽取一些值来进行代替

    随机插补也可以按照某些分类属性先对样本进行分层,然后分别在各层中随机抽取一些代替值进行插补(基于分层思维的随机插补法),会得到更好的效果

    excel:CHOOSE(RANDBETWEEN)

    5.回归插补

    将缺失值数据样本分开后,组成不含缺失值的数据集,结合与缺失值数列的辅助变量进行建立回归模型,并用缺失值数据中的辅助变量带入回归模型进而求得缺失数据。当缺失变量与辅助变量具有较强的线性关系时,适用回归插补

    SPSS: 分析 缺失值分析 勾选回归 把数据分别带入定量变量,分类变量 点击回归 勾选保存完整的数据 创建新数据集 

    条件:辅助变量与确实列存在较强的共线性

    缺点:回归式子只是一种推测

    6.多重插补

    多重插补作为一种基于重复模拟缺失值的方法,面对复杂的缺失值问题时,是最常用的方法。他的插补思想是对缺失数据集插补m次,每次插补后会生成一个完整的数据集,这样可以得到m个完整的数据集。接着对这m个完整数据集进行完全数据分析,最后综合分析这m次插补的结果,做出统计推断,其步骤主要可分为三步:插补、分析、综合 

    SPSS:分析 多重插补 插补缺失数据值 导入模型中的变量 数据集名称 点击确定

    7.ANN人工神经网络(插补和预测)

    SPSS:删除缺失值所在的行 分析 神经网络 多层感知器 导入因变量和协变量 输出网络结构全选 勾选自变量重要性分析 补充删除的值 实用程序 评分向导 选择导出的模型 

    输入层,隐藏层,输出层。其中bias为误差,颜色越深,线条越粗,表明其影响程度越高

    自变量重要性,各个变量对于预测变量的影响程度,可以用于影响因素分析

    更多相关内容
  • 数据处理笔记6:缺失值填充

    千次阅读 2021-12-28 14:26:16
    参考: ... 缺失值,不仅包括数据库中的NULL值,也包括用于表示数值缺失的特殊数值(比如,在...(例如根据其它变量对记录进行数据分箱,然后选择该记录所在分箱的相应变量的均值或中位数,来填充缺失值,效果会更好一些)

    参考:

    http://118.31.76.100:100/math/statics_topic/deal-na/

    缺失值,不仅包括数据库中的NULL值,也包括用于表示数值缺失的特殊数值(比如,在系统中用-999来表示数值不存在)。漠视这些数值的特殊性,直接拿来进行挖掘,那么很可能会得到错误的结论。

    常数来填充常常不是一个好方法。最好建立一些模型,根据数据的分布来填充一个更恰当的数值。(例如根据其它变量对记录进行数据分箱,然后选择该记录所在分箱的相应变量的均值或中位数,来填充缺失值,效果会更好一些)

    参考:

    https://zhuanlan.zhihu.com/p/348005303

    简单填充

    数值型变量用平均值或中位数填充,分类型变量用众数填充

    热卡填充:也叫就近补齐,在完整数据中找一个与含有缺失值的记录最相似的记录进行填充,不过相似的标准很难界定

    聚类填充:聚类后,对一类中的缺失值,使用该类中的样本均值进行填充。

    拟合方法

    回归预测:对于包含空值的对象,将已知数据集带入回归方程来估计预测值,并以此预测值来进行填充,但是当变量不是线性相关时则会导致偏差的估计;

    期望值最大化方法预测:在不完全数据情况下计算极大似然估计或者后验分布的迭代算法,该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

    多重插补预测:为每一个缺失值都产生一套可能的插补值,这些值反应了缺失值的不确定性,然后对插补集合根据评分函数进行选择,产生最终的插补值

    虚拟变量:衍生出一个取值为0,1的变量,来标记某一变量是否缺失

    常数值/拉格朗日插值填充代码示例:

    https://www.cnblogs.com/yanshw/p/10701919.html

    根据数据情况处理, 参考:

    https://zhuanlan.zhihu.com/p/137175585

    sklearn用KNN代码示例

    https://www.zhihu.com/question/268540071/answer/338879847

    填充流程(代码示例), 条件(同label)均值:

    https://www.zhihu.com/question/268540071/answer/338879847

    参考kaggle处理缺失值教程:

    https://www.kaggle.com/dansbecker/handling-missing-values

    from sklearn.impute import SimpleImputer

    my_imputer = SimpleImputer()

    data_with_imputed_values = my_imputer.fit_transform(original_data)

    #需要转换ndarray

    data_with_imputed_values = pd.DataFrame(my_imputer.fit_transform(original_data))

    #但是,这意味着您将丢失列标题。由于列的顺序在插补后不会更改,因此您可以按如下方式重新添加标题:

    data_with_imputed_values.columns = original_data.columns

    # Make new columns indicating what will be imputed

    for col in cols_with_missing:

        X_train_plus[col + '_was_missing'] = X_train_plus[col].isnull()

        X_valid_plus[col + '_was_missing'] = X_valid_plus[col].isnull()

    # Imputation

    my_imputer = SimpleImputer()

    imputed_X_train_plus = pd.DataFrame(my_imputer.fit_transform(X_train_plus))

    imputed_X_valid_plus = pd.DataFrame(my_imputer.transform(X_valid_plus))

    # Imputation removed column names; put them back

    imputed_X_train_plus.columns = X_train_plus.columns

    imputed_X_valid_plus.columns = X_valid_plus.columns

    干货教程:

    https://www.kaggle.com/rtatman/data-cleaning-challenge-handling-missing-values

    用同一列中紧随其后的任何值替换缺失值。

    (这对于观测值具有某种逻辑顺序的数据集很有意义。)

    # replace all NA's the value that comes directly after it in the same column,

    # then replace all the reamining na's with 0

    subset_nfl_data.fillna(method = 'bfill', axis=0).fillna(0)

    参考:

    https://www.kaggle.com/parulpandey/a-guide-to-handling-missing-values-in-python

    线性插值利用相邻数据点的线性关系

    # Interpolate using the linear method

    city_day1.interpolate(limit_direction="both",inplace=True)

    city_day1['Xylene'][50:65]

    from sklearn.impute import KNNImputer

    train_knn = train.copy(deep=True)

    knn_imputer = KNNImputer(n_neighbors=2, weights="uniform")

    train_knn['Age'] = knn_imputer.fit_transform(train_knn[['Age']])

    多元特征插补 - 通过链式方程 (MICE) 进行多元插补

    一种通过以循环方式将缺失值建模为其他特征的函数来估算缺失值的策略。

    它对数据的随机样本执行多重回归,然后取多重回归值的平均值并使用该值来估算缺失值。

    from sklearn.experimental import enable_iterative_imputer

    from sklearn.impute import IterativeImputer

    train_mice = train.copy(deep=True)

    mice_imputer = IterativeImputer()

    train_mice['Age'] = mice_imputer.fit_transform(train_mice[['Age']])

    数据缺失机制

    1. 完全随机缺失(Missing Completely at Random,MCAR)

    数据的缺失与不完全变量以及完全变量都是无关的。

    对整个数据的影响没有任何的偏好性,呈现均一分布。

    2. 随机缺失(Missing at Random,MAR)。

    数据的缺失仅仅依赖于完全变量。

    不是完全随机的,该类数据的缺失依赖于其他观测变量。比如时间梯度越长的采集越可能有缺失值的出现

    将时间变量进行控制,那么数据的缺失也就变成了完全随机的了。所以也有人认为MCAR和MAR二者没啥区别,或者认为MCAR是MAR的一个特例(doi:10.1186⁄1471-2105-13-S16-S5)。

    3.非随机、不可忽略缺失(Not Missing at Random,NMAR,or nonignorable)。

    不完全变量中数据的缺失依赖于不完全变量本身,这种缺失是不可忽略的。

    如某些肽段的含量在仪器的检测限以下,这些肽段的定量信息就很有可能丢失,但是你又不能说这些肽段真的不存在,所以这种情况是比较纠结的,这就是所谓的左删失数据(left-censored data)。

    从缺失值的所属属性上讲,

    如果所有的缺失值都是同一属性,那么这种缺失成为单值缺失

    如果缺失值属于不同的属性,称为任意缺失。

    另外对于时间序列类的数据,可能存在随着时间的缺失,这种缺失称为单调缺失

    常用方法

    删除或补齐

    5.2 数据补齐

    这类方法是用一定的值去填充空值,从而使信息表完备化。通常基于统计学原理,根据决策表中其余对象取值的分布情况来对一个空值进行填充,譬如用其余属性的平均值来进行补充等。数据挖掘中常用的有以下几种补齐方法:

    5.2.1 人工填写(filling manually)

    由于最了解数据的还是用户自己,因此这个方法产生数据偏离最小,可能是填充效果最好的一种。然而一般来说,该方法很费时,当数据规模很大、空值很多的时候,该方法是不可行的。

    5.2.2 特殊值填充(Treating Missing Attribute values as Special values)

    将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值。如所有的空值都用“unknown”填充。这样将形成另一个有趣的概念,可能导致严重的数据偏离,一般不推荐使用。

    5.2.3 平均值填充(Mean/Mode Completer)

    将信息表中的属性分为数值属性和非数值属性来分别进行处理。如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。另外有一种与其相似的方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,缺失属性值的补齐同样是靠该属性在其他对象中的取值求平均得到,但不同的是用于求平均的值并不是从信息表所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。

    5.2.4 热卡填充(Hot deck imputation,或就近补齐)

    对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。

    5.2.5 K最近距离邻法(K-means clustering)

    先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。

    同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。

    该方法主要是通过预先设定的K个邻居(其它肽段或者蛋白质的表达量),根据这些邻居的信息推算出缺失值的大小。一般的数据处理流程是先计算目标对象(含有缺失值的肽段或者蛋白质)与其他对象之间的距离(一般默认计算的是欧氏距离),计算完成后,选择K个(K值是我们预先设定的)距离最近的对象,然后将对应位置的数值进行平均或者加权,其得到的数值用来表征该缺失值的大小。R代码实现:

    5.2.6 使用所有可能的值填充(Assigning All Possible values of the Attribute)

    这种方法是用空缺属性值的所有可能的属性取值来填充,能够得到较好的补齐效果。但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大,可能的测试方案很多。另有一种方法,填补遗漏属性值的原则是一样的,不同的只是从决策相同的对象中尝试所有的属性值的可能情况,而不是根据信息表中所有对象进行尝试,这样能够在一定程度上减小原方法的代价。

    5.2.7 组合完整化方法(Combinatorial Completer)

    这种方法是用空缺属性值的所有可能的属性取值来试,并从最终属性的约简结果中选择最好的一个作为填补的属性值。这是以约简为目的的数据补齐方法,能够得到好的约简结果;但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大。另一种称为条件组合完整化方法(Conditional Combinatorial Complete),填补遗漏属性值的原则是一样的,不同的只是从决策相同的对象中尝试所有的属性值的可能情况,而不是根据信息表中所有对象进行尝试。条件组合完整化方法能够在一定程度上减小组合完整化方法的代价。在信息表包含不完整数据较多的情况下,可能的测试方案将巨增。

    5.2.8 回归(Regression)

    基于完整的数据集,建立回归方程(模型)。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关或预测变量高度相关时会导致有偏差的估计。

    5.2.9 期望值最大化方法(Expectation maximization,EM)

    在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

    EM算法是一种在不完全数据情况下计算极大似然估计或者后验分布的迭代算法。在每一迭代循环过程中交替执行两个步骤:E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。算法在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

    5.2.10 有序K近邻法(Sequential KNN)

    方法是对上述KNN法的改进,它在缺失值占比稍微大些的数据中表现依然良好。实现流程是先根据数据中每个对象缺失值的比例进行排序(这里也就体现出“Sequential”的思想),从比例最小的那个对象开始计算,根据预先设定的K个近邻(注意这里是指没有缺失值的,KNN法里面并没有强调这一点)的值进行加权或者平均计算填充。此外当该对象填充完毕后,也会加入后续其他对象缺失值填充的计算当中。R代码实现:

    >library(SeqKnn)

    >SeqKNN(data,k=10)

    这里我们用SeqKnn包的SeqKNN函数,其中data就是我们要导入的数据,一般是矩阵的形式;k就是我们预先设定的近邻数,根据经验一般取值是10到20之间。

    5.2.10 多重填补(Multiple Imputation,MI)

    多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

    多重填补方法分为三个步骤:;为每个空值产生一套可能的填补值,这些值反映了无响应模型的不确定性;每个值都被用来填补数据集中的缺失值,产生若干个完整数据集合。;每个填补数据集合都用针对完整数据集的统计方法进行统计分析。;对来自各个填补数据集的结果进行综合,产生最终的统计推断,这一推断考虑到了由于数据填补而产生的不确定性。该方法将空缺值视为随机样本,这样计算出来的统计推断可能受到空缺值的不确定性的影响。该方法的计算也很复杂。

    多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。

    假设一组数据,包括三个变量Y1,Y2,Y3,它们的联合分布为正态分布,将这组数据处理成三组,A组保持原始数据,B组仅缺失Y3,C组缺失Y1和Y2。在多值插补时,对A组将不进行任何处理,对B组产生Y3的一组估计值(作Y3关于Y1,Y2的回归),对C组作产生Y1和Y2的一组成对估计值(作Y1,Y2关于Y3的回归)。

    当用多值插补时,对A组将不进行处理,对B、C组将完整的样本随机抽取形成为m组(m为可选择的m组插补值),每组个案数只要能够有效估计参数就可以了。对存在缺失值的属性的分布作出估计,然后基于这m组观测值,对于这m组样本分别产生关于参数的m组估计值,给出相应的预测即,这时采用的估计方法为极大似然法,在计算机中具体的实现算法为期望最大化法(EM)。对B组估计出一组Y3的值,对C将利用 Y1,Y2,Y3它们的联合分布为正态分布这一前提,估计出一组(Y1,Y2)。

    上例中假定了Y1,Y2,Y3的联合分布为正态分布。这个假设是人为的,但是已经通过验证(Graham和Schafer于1999),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。

    多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。

    (1)贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误得结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本渐近完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。

    (2)贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。

    其中是以sleep数据(VIM包中动物睡眠数据)为例展开的,mice()就是进行插补的函数,它里面m参数是指生成完整数据集的个数,defaultMethod参数是指选择填充缺失值的方法,seed参数是为了保证结果的重复性;with()就是我们进行标准方法流程对填充好的完整数据集进行分析,这里面我们选择的是线性模型来分析做梦(Dream)变量与另外两个变量(Span,寿命;Gest,妊娠期)之间的线性关系;pool()函数整合最终的结果。

    5.2.11 C4.5方法

    通过寻找属性间的关系来对遗失值填充。它寻找之间具有最大相关性的两个属性,其中没有遗失值的一个称为代理属性,另一个称为原始属性,用代理属性决定原始属性中的遗失值。这种基于规则归纳的方法只能处理基数较小的名词型属性。

    就几种基于统计的方法而言,删除元组法和平均值法差于hot deck、EM和MI;回归是比较好的一种方法,但仍比不上hot deck和EM;EM缺少MI包含的不确定成分[46]。值得注意的是,这些方法直接处理的是模型参数的估计而不是空缺值预测本身。它们合适于处理无监督学习的问题,而对有监督学习来说,情况就不尽相同了。譬如,你可以删除包含空值的对象用完整的数据集来进行训练,但预测时你却不能忽略包含空值的对象。另外,C4.5和使用所有可能的值填充方法也有较好的补齐效果,人工填写和特殊值填充则是一般不推荐使用的。

    展开全文
  • 分段的原则有基于等距离、等频率或优化的方法。数据离散化的原因主要有以下几点: 1、算法需要  比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的...

    **

    一、离散化原因

    **
      数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。数据离散化的原因主要有以下几点:
    1、算法需要
      比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。
    2、离散化的特征相对于连续型特征更易理解,更接近知识层面的表达
      比如工资收入,月薪2000和月薪20000,从连续型特征来看高低薪的差异还要通过数值层面才能理解,但将其转换为离散型数据(底薪、高薪),则可以更加直观的表达出了我们心中所想的高薪和底薪。
    3、可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定

    二、离散化的优势

    在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
      1.离散特征的增加和减少都很容易,易于模型的快速迭代;
      2.稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
      3.离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
      4.逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
      5.离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
      6.特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
      7.特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
    **

    三、离散化的方法

    **
    1、无监督学习方法
      等宽法
      等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如属性值在[0,60]之间,最小值为0,最大值为60,我们要将其分为3等分,则区间被划分为[0,20] 、[21,40] 、[41,60],每个属性值对应属于它的那个区间
      等频法
      等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如有60个样本,我们要将其分为k=3部分,则每部分的长度为20个样本。
      基于聚类的方法
      基于聚类的方法分为两个步骤,即:
    选定聚类算法将其进行聚类
    将在同一个簇内的属性值做为统一标记。
    注:基于聚类的方法,簇的个数要根据聚类算法的实际情况来决定,比如对于k-means算法,簇的个数可以自己决定,但对于DBSCAN,则是算法找寻簇的个数。
    2、有监督学习方法:
    1R方法、基于信息熵的方法、基于卡方的方法

    下面介绍一种常用便于理解的缺失值填充方案

    均值填充(Mean/Mode Completer)

    将信息表中的属性分为数值属性和非数值属性来分别进行处理。如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。另外有一种与其相似的方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,缺失属性值的补齐同样是靠该属性在其他对象中的取值求平均得到,但不同的是用于求平均的值并不是从信息表所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。

    ☆数据归一化就是把数据变成0-1之间的数,数据离散化就是把数据划分成几个区间,把连续数用区间123表示

    展开全文
  • import pandas as pd import numpy as np # 加载数据 data = pd.read_excel("./qs.xlsx") ...# 检测 是否存在缺失值?---bool_df ---经常与sum连用 # print(pd.isnull(data)) # print(pd.notnull(data)) # ...
    import  pandas as pd
    import  numpy  as np
    
    
    # 加载数据
    data = pd.read_excel("./qs.xlsx")
    print("data:\n",data)
    
    # 检测 是否存在缺失值?---bool_df ---经常与sum连用
    # print(pd.isnull(data))
    # print(pd.notnull(data))
    
    
    # 推荐使用isnull和sum 连用
    print(pd.isnull(data).sum()) # 只要存在大于0 结果---存在缺失值
    # print(data.shape)
    # print(pd.notnull(data).sum()) # 需要将结果与shape[0]进行对比,如果不同---存在缺失值
    
    #---------------------------------------------缺失值处理:1、删除法----------------------------------------------------
    
    # 如果存在缺失值,缺失值处理。
    # 3 种
    # 删除---直接删除---如果存在缺失值,就直接删除
    # 填充--直接填充--根据列的某项指标进行填充
    # 插值 --在列里面查找规律
    
    
    # 1、删除法
    # axis  --按行 删除 还是按列删除
    # how --any  只要有缺失值,就删除
    # how --all  只有全行 或者全列都为缺失值,才删除
    data.dropna(how='any',axis=0,inplace=True)
    data.dropna(how='all',axis=0,inplace=True)
    # print("data:\n",data)
    
    # 删除detail 里面全是缺失值的列
    # detail = pd.read_excel("./meal_order_detail.xlsx")
    # print("detail 的形状:\n",detail.shape)
    # # 检测 缺失值
    print(pd.isnull(detail).sum())
    # # 删除全是空的列
    detail.dropna(how='all',axis=1,inplace=True)
    # print("删除全是空之后的形状:\n",detail.shape)
    
    # 如果说 整列数据全部都是一样的?是否对结果在这一列产生影响???
    # 数据都是一样的,那么对结果在这个列指标产生的影响是一样的。
    
    #-----------------------------------------------------去重------------------------------------------------------
    
    # 判断每一列数值是否全部重复?  ---??怎么做?
    """
     res = df.drop_duplicates(subset='列名',axis=1,inplace=False)
    
     可以直接用 res = df.duplicates("列名")去重,不填参数默认去除完全相同的两行数据。
    """
    
    
    
    # res.shape[0] == 1
    # drop_list = []
    # for tmp in detail.columns:
    #     # 去重,并进行结果展示
    #     res = detail.drop_duplicates(subset=tmp,inplace=False)
    #     if res.shape[0] == 1:
    #         drop_list.append(tmp)
    
    # # 删除
    # detail.drop(labels=drop_list,axis=1,inplace=True)
    
    # print("删除所有数据单一的列之后:\n",detail.shape)
    
    #----------------------------------------------缺失值处理:2、填充法----------------------------------------------------
    
    #  如果 数据里面 所有的列上都存在缺失值而且缺失值分布在不同的行,要是删除,会造成大量数据的丢失
    
    # 如果 整列、或者整行 存在大部分缺失值,我们就进行删除
    
    # # 填充法
    
    # print("data 的数据类型:\n",data.dtypes)
    #
    # 进行填充--需要指定填充的值--数值型 可以使用均值、中位数、众数
    # # 利用均值进行填充  商品ID  列 ---真实情况,商品ID是固定的,不能随便创造,所以用median 或者mode进行填充
    data['商品ID'].fillna(data['商品ID'].mean(),inplace=True) #均值
    data['商品ID'].fillna(data['商品ID'].mode()[0],inplace=True) #众数
    
    
    # # 利用 中位数 进行填充  商品ID  列
    data['类别ID'].fillna(data['类别ID'].median(),inplace=True)
    # # 利用 众数 进行填充  门店编号  列
    data['门店编号'].fillna(data['门店编号'].mode()[0],inplace=True)
    #
    # print(data)
    
     
    #---------------------------------------把缺失值 replace 成 np.nan-----------------------------------------------------------
    #
    # # 我们fillna dropna 针对的类型空值,np.nan类型---float类型
    # # 如果缺失值类型不是np.nan类型 ,先替换成np.nan类型 在进行删除、填充等等一系列操作
    data.replace("*",np.nan,inplace=True)
    #
    # print(data)
    #---------------------------------------------------------------------------------------------------
    
    # # 利用 众数 进行填充  门店编号  列
    # data['门店编号'].fillna(data['门店编号'].mode()[0],inplace=True)
    
    # print(data)
    
    
    
    #---------------------------------------------------缺失值处理:3、插值法----------------------------------------------------
    #  插值法
    # 线性插值  ---拟合线性关系
    #  多项式插值 --拉格朗日、牛顿-拟合多项式---
    # 样条插值 --- 拟合光滑曲线
    
    # 如何做?
    
    x = np.array([1,2,3,4,5,8,9]) # 利用x  来拟合 y z 的缺失值
    y = np.array([3,5,7,9,11,17,19]) # 2 * x + 1
    z = np.array([2,8,18,32,50,128,162]) # 2 * x^2
    
    
    #----------------线性插值-----------------------------------------
    # 线性插值
    from scipy.interpolate import  interp1d
    
    pld_1 = interp1d(x,y,kind='linear') # [ 13.  15.]
    pld_2 = interp1d(x,z,kind='linear') # [  76.  102.]
    
    # print(pld_1([6,7]))
    # print(pld_2([6,7]))
    
    #-------------------拉格朗日多项式插值--------------------------------------
    
    # 拉格朗日多项式插值
    from  scipy.interpolate import  lagrange
    
    la1 = lagrange(x,y) # [ 13.  15.]
    la2 = lagrange(x,z) # [ 72.  98.]
    
    # print(la1([6,7]))
    # print(la2([6,7]))
    #------------------------样条插值---------------------------------
    
    # 样条插值
    from scipy.interpolate import  spline
    
    print(spline(xk=x,yk=y,xnew=[6,7]))  # [ 13.  15.]
    print(spline(xk=x,yk=z,xnew=[6,7]))  # [ 72.  98.]
    
    
    # 线性插值,对于线性拟合问题,效果不错,但是非线性问题,效果不好
    # 多项式插值、样条插值  对于线性问题、非线性问题效果都不错,推荐使用下面这两种
    
    
    
    
    
    
    
    
    
    

     

    展开全文
  • EDA分析-缺失值填充

    2020-03-24 17:37:41
    缺失值填充 转自https://www.cnblogs.com/magle/articles/6110195.html 数据缺失机制 在对缺失数据进行处理前,了解数据缺失的机制和形式是十分必要的。将数据集中不含缺失值的变量(属性)称为完全变量,数据集中...
  • 特征工程系列:数据清洗1... 缺失值清洗(删除、填充、不处理)7.1 数据填充方法(统计量统计、模型预测、插值法填充)7.1.2统计量统计7.1.3 模型预测填充7.1.4 插值法填充7.2 缺失总结 1.什么是特征工程 特征工程是利用
  • 简介常用的缺失值处理方法
  • python缺失值处理的方法

    千次阅读 2021-11-14 19:52:15
    其他数据文件由于缺失值比较少甚至没有缺失值,我就人为的制造缺失值,建议用代码实现这一过程。 目录 1、删除元组 (1)删除存在缺失值的个案 (2)删除含特殊值的特征 2、不处理 3、缺失值插补 (1)人工补...
  • 缺失值的类型必须转化为np.nan类型 replace('?',np.nan)#用pandas的replace 用np.nan替换 sklearn中处理缺失值 from sklearn.preprocessing import Imputer 例如 这里有个含有缺失值的二维数组 [1,3,6],[np.nan,2,4]...
  • 评分模型的缺失值

    千次阅读 2019-06-24 09:21:16
    公式模型必须处理缺失值 构建评分模型过程中,建模属于...缺失值填充的合理性直接决定了评分模型的成败。模型按照形式可划分为公式模型与算法模型,不同形式的模型对缺失值的宽容程度不同。 公式模型必须处理缺...
  • 时间序列数据如何插补缺失值

    千次阅读 2021-12-31 15:56:30
    这里介绍一下,我们当时有哪几种方法处理缺失值 直接删除,如果缺失数据量较大,直接舍弃该列数据,因为仅存的数据难以证明几列数据之间的相关性 上下填补法,取前后临近的数据进行插值 前后加权均值法,按照前后...
  • 缺失值处理方法综述 缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。  ...
  • 什么是缺失值 异常值(outlier):异常值是指数据集中存在不合理的值,又称离群点。一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。【百度...
  • 以下文章来源于Coggle数据科学,作者钱魏Way写在前面在进行数据竞赛中,数据预处理阶段经常需要对数据进行缺失值处理。关于缺失值的处理并没有想象中的那么简单。以下为一些经验分享,基本涵...
  • 数据处理--缺失值处理&异常值处理

    千次阅读 2021-02-10 10:10:51
    缺失值处理: 造成数据缺失的原因是多方面的,主要可能有以下几种: 有些信息暂时无法获取,致使一部分属性值空缺出来。 有些信息因为一些人为因素而丢失了。 有些对象的某个或某些属性是不可用的。如一个未婚者的...
  • 数据质量分析数据质量分析是数据预处理的前提,没有可信的数据,数据挖掘构建的模型将是空中楼阁。...本文只介绍缺失值处理:缺失值处理1)删除删除法是指将缺失值所在的观测行删除(前提是缺失行的比例非常低,如...
  • 数据预处理_缺失值处理

    千次阅读 2019-07-01 23:05:55
    缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。 机械原因是由于机械原因...
  • 这种方法简单易行,在对象有多个属性缺失值、被删除的含缺失值的对象与信息表中的数据量相比非常小的情况下是非常有效的。然而,这种方法却有很大的局限性。它是以减少历史数据来换取信息的完备,会造成资源的大量...
  • R语言_缺失值NA的处理

    2022-04-05 10:22:23
    一、用0替代数据框中的...R语言数据框中,用0替代NA缺失值 - yangk - 博客园1、用0替代数据框中的缺失值NA 生成数据框: 替代数据框中的缺失值 2、用0替代变量中的缺失值https://www.cnblogs.com/yangk/p/6374055.html
  • 缺失值的处理方法

    2020-12-21 16:42:15
    转载自http://blog.sina.com.cn/s/blog_670445240102v08m.html对于数据挖掘和分析人员来说,数据准备(Data ...本文针对缺失值和特殊值这种数据质量问题,进行了初步介绍并推荐了一些处理方法。值得注意的是,这...
  • 机器学习模型支持缺失值的那些事儿机器学习模型如何支持缺失值支持缺失值的一些模型基于树类的模型随机森林XGBoost神经网络模型 之前读过一些别人的文章,对于有些模型可以支持缺失数据这件事有点印象,最近开始做一...
  • 数据常见的预处理方法 (异常剔除,空值填充,归一化,离散化 等) 异常(空值)处理 异常主要分为NULL\重复\明显不在数据范围内等等 异常处理方法: 删除记录\数据填充\不处理 ...
  • 具体介绍如下: 2.1 训练数据集 这里使用的数据集为开源的UCI Spam数据和UCI Letter数据集,数据集内容如下: 2.2 数据处理 按照数据集的不同,读取对应数据集,然后将其中为0的值填充为nan,为后续预测和模型训练...
  • 大家好,我是小五。 ... 上周我码了几篇文章,其中一篇是《花了一周,我总结了120个数据指标与术语。...另外我还写了两篇Pandas的基础...但实际上缺失值的表现形式也并不唯一,我将其分为...
  • 一、Pandas的缺失值 Pandas 的缺失值是同标签的方式表示的:浮点数据类型NaN值及Python的None对象。 1. None None是一个Python单体对象,只能用于'object'数组类型(即由Python对象构成的数组): import ...
  • 目录: 一、缺失值 1、筛选 2、定位空值 3、缺失值的处理 4、实例 二、重复值 1、countif函数 2、条件格式 3、数据透视表 三、异常值 1、异常值的判断 2、实例 四、字段拆分 1、分列 2、文本函数 3、实例 正文开始...
  • 第三章 如何填充缺失值

    千次阅读 2018-03-29 15:00:00
    假如我们的数据集里面有一个缺失值,那么我们应该如何填充这个缺失值。假如我们先填充数据集然后再把数据分为训练集和测试集,那么这个时候出现一个违反原则的事情:我们用的训练集的数据竟然有一部分来自测试集,...
  • 缺失值处理方法综述

    千次阅读 2018-07-09 15:48:30
    缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。 机械原因是由于机械原因...
  • 数据分析认知课(四):数据分析——缺失值处理详解(理论篇)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,141
精华内容 1,656
关键字:

缺失值填充原则