精华内容
下载资源
问答
  • 数据分析--缺失值填充的几种方法

    千次阅读 2020-03-18 16:57:09
    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1 数据集介绍: 数据集...

    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。

    1 数据集介绍:

    数据集来源于 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测。该数据集共有1000条数据,特征共83维,加上id和label共85列,每维特征缺失数量范围为0~911。为了简单比较各种填充方法的效果,我们选取最简单的二分类模型(逻辑回归),选取F1 score作为评测指标。
    读取数据集如下:

    train_data = pd.read_csv('train_data.csv', encoding='gbk') # 读取数据集
     
    filter_feature = ['id','label'] # 过滤无用的维度
    features = []
    for x in train_data.columns: # 取特征
        if x not in filter_feature:
            features.append(x)
     
    train_data_x = train_data[features] 
    train_data_y = train_data['label']
    X_train, X_test, y_train, y_test = train_test_split(train_data_x, train_data_y, random_state=1) # 划分训练集、测试集
    
    1. 常见的填充方法

    (1)填充固定值

    选取某个固定值/默认值填充缺失值。

    train_data.fillna(0, inplace=True) # 填充 0
    

    (2)填充均值

    对每一列的缺失值,填充当列的均值。

    train_data.fillna(train_data.mean(),inplace=True) # 填充均值
    

    (3)填充中位数

    对每一列的缺失值,填充当列的中位数。

    train_data.fillna(train_data.median(),inplace=True) # 填充中位数
    

    (4)填充众数

    对每一列的缺失值,填充当列的众数。由于存在某列缺失值过多,众数为nan的情况,因此这里取的是每列删除掉nan值后的众数。

    train_data.fillna(train_data.mode(),inplace=True) # 填充众数,该数据缺失太多众数出现为nan的情况
    features_mode = {}
    for f in features:
        print f,':', list(train_data[f].dropna().mode().values)
        features_mode[f] = list(train_data[f].dropna().mode().values)[0]
    train_data.fillna(features_mode,inplace=True)
    

    (5)填充上下条的数据

    对每一条数据的缺失值,填充其上下条数据的值。

    train_data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值
    train_data.fillna(0, inplace=True)
     
    train_data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值
    train_data.fillna(0, inplace=True)
    

    (6)填充插值得到的数据

    用插值法拟合出缺失的数据,然后进行填充。

    for f in features: # 插值法填充
        train_data[f] = train_data[f].interpolate()
        
    train_data.dropna(inplace=True)
    

    (7)填充KNN数据

    填充近邻的数据,先利用knn计算临近的k个数据,然后填充他们的均值。(安装fancyimpute)除了knn填充,fancyimpute还提供了其他填充方法。

    from fancyimpute import KNN
     
    train_data_x = pd.DataFrame(KNN(k=6).fit_transform(train_data_x), columns=features)
    

    (8)填充模型预测的值

    把缺失值作为新的label,建立模型得到预测值,然后进行填充。这里选择某个缺失值数量适当的特征采用随机森林RF进行拟合,其他缺失特征采用均值进行填充。

    new_label = 'SNP46'
    new_features = []
    for f in features:
        if f != new_label:
            new_features.append(f)
            
    new_train_x = train_data[train_data[new_label].isnull()==False][new_features]
    new_train_x.fillna(new_train_x.mean(), inplace=True) # 其他列填充均值
    new_train_y = train_data[train_data[new_label].isnull()==False][new_label]
     
    new_predict_x = train_data[train_data[new_label].isnull()==True][new_features]
    new_predict_x.fillna(new_predict_x.mean(), inplace=True) # 其他列填充均值
    new_predict_y = train_data[train_data[new_label].isnull()==True][new_label]
     
    rfr = RandomForestRegressor(random_state=666, n_estimators=10, n_jobs=-1)
    rfr.fit(new_train_x, new_train_y)
    new_predict_y = rfr.predict(new_predict_x)
     
    new_predict_y = pd.DataFrame(new_predict_y, columns=[new_label], index=new_predict_x.index)
    new_predict_y = pd.concat([new_predict_x, new_predict_y], axis=1)
    new_train_y = pd.concat([new_train_x, new_train_y], axis=1)
    new_train_data = pd.concat([new_predict_y,new_train_y]) 
     
    train_data_x = new_train_data[features]
    train_data_y = train_data['label']
    
    1. 实验对比

    (1)评测指标

    选取F1 score进行评测。

    def countF1(train, predict):
        count = 0 # 统计预测的正确的正样本数
        for i in range(len(train)):
            if predict[i] == 1 and train[i] == 1:
                count += 1
        pre =  count * 1.0 / sum(predict) # 准确率
        recall =  count * 1.0 / sum(train) # 召回率
        return 2 * pre * recall / (pre + recall)
    

    (2)对比结果

    原文链接:https://blog.csdn.net/jingyi130705008/article/details/82670011

    展开全文
  • 对于很多数据分析小白来说,刚开始学习数据分析师时,对很多关于数据分析的方法记得不是很全面,下面是我这几年对数据分析工作进行运用比较常见数据分析方法汇总。希望会你们有所帮助。 一、描述统计 描述性统计是...

    常见数据分析方法汇总

    对于很多数据分析小白来说,刚开始学习数据分析师时,对很多关于数据分析的方法记得不是很全面,下面是我这几年对数据分析工作进行运用比较常见数据分析方法汇总。希望会你们有所帮助。

    一、描述统计

    描述性统计是指运用制表和分类,图形以及计筠概括性数据来描述数据的集中趋势、离散趋势、偏度、峰度。

    1、缺失值填充:常用方法:剔除法、均值法、最小邻居法、比率\回归法、决策树法。

    2、正态性检验:很多统计方法都要求数值服从或近似服从正态分布,所以之前需要进行正态性检验。常用方法:非参数检验的K-量检验、P-P图、Q-Q图、W检验、动差法。

    二、假设检验

    1、参数检验

    参数检验是在已知总体分布的条件下(一股要求总体服从正态分布)对一些主要的参数(如均值、百分数、方差、相关系数等)进行的检验 。

    1)U验   使用条件:当样本含量n较大时,样本值符合正态分布

    2)T检验 使用条件:当样本含量n较小时,样本值符合正态分布

    A单样本t检验:推断该样本来自的总体均数μ与已知的某一总体均数μ0 (常为理论值或标准值)有无差别;

    B  配对样本t检验:当总体均数未知时,且两个样本可以配对,同对中的两者在可能会影响处理效果的各种条件方面扱为相似;

    C 两独立样本t检验:无法找到在各方面极为相似的两样本作配对比较时使用。

    2、非参数检验

    非参数检验则不考虑总体分布是否已知,常常也不是针对总体参数,而是针对总体的某些一股性假设(如总体分布的位罝是否相同,总体分布是否正态)进行检验。

    适用情况:顺序类型的数据资料,这类数据的分布形态一般是未知的。

    A 虽然是连续数据,但总体分布形态未知或者非正态;

    B 体分布虽然正态,数据也是连续类型,但样本容量极小,如10以下;

    主要方法包括:卡方检验、秩和检验、二项检验、游程检验、K-量检验等。

    三、信度分析

    检査测量的可信度,例如调查问卷的真实性。

    分类:

    1、外在信度:不同时间测量时量表的一致性程度,常用方法重测信度

    2、内在信度;每个量表是否测量到单一的概念,同时组成两表的内在体项一致性如何,常用方法分半信度。

    四、列联表分析

    用于分析离散变量或定型变量之间是否存在相关。

    对于二维表,可进行卡方检验,对于三维表,可作Mentel-Hanszel分层分析。

    列联表分析还包括配对计数资料的卡方检验、行列均为顺序变量的相关检验。

    五、相关分析

    研究现象之间是否存在某种依存关系,对具体有依存关系的现象探讨相关方向及相关程度。

    1、单相关: 两个因素之间的相关关系叫单相关,即研究时只涉及一个自变量和一个因变量;

    2、复相关 :三个或三个以上因素的相关关系叫复相关,即研究时涉及两个或两个以上的自变量和因变量相关;

    3、偏相关:在某一现象与多种现象相关的场合,当假定其他变量不变时,其中两个变量之间的相关关系称为偏相关。

    六、方差分析

    使用条件:各样本须是相互独立的随机样本;各样本来自正态分布总体;各总体方差相等。

    分类

    1、单因素方差分析:一项试验只有一个影响因素,或者存在多个影响因素时,只分析一个因素与响应变量的关系

    2、多因素有交互方差分析:一顼实验有多个影响因素,分析多个影响因素与响应变量的关系,同时考虑多个影响因素之间的关系

    3、多因素无交互方差分析:分析多个影响因素与响应变量的关系,但是影响因素之间没有影响关系或忽略影响关系

    4、协方差分祈:传统的方差分析存在明显的弊端,无法控制分析中存在的某些随机因素,使之影响了分祈结果的准确度。协方差分析主要是在排除了协变量的影响后再对修正后的主效应进行方差分析,是将线性回归与方差分析结合起来的一种分析方法,

    七、回归分析

    分类:

    1、一元线性回归分析:只有一个自变量X与因变量Y有关,X与Y都必须是连续型变量,因变量y或其残差必须服从正态分布。

    2、多元线性回归分析

    使用条件:分析多个自变量与因变量Y的关系,X与Y都必须是连续型变量,因变量y或其残差必须服从正态分布 。

    1)变呈筛选方式:选择最优回归方程的变里筛选法包括全横型法(CP法)、逐步回归法,向前引入法和向后剔除法

    2)横型诊断方法:

    A 残差检验: 观测值与估计值的差值要艰从正态分布

    B 强影响点判断:寻找方式一般分为标准误差法、Mahalanobis距离法

    C 共线性诊断:

    ·诊断方式:容忍度、方差扩大因子法(又称膨胀系数VIF)、特征根判定法、条件指针CI、方差比例

    ·处理方法:增加样本容量或选取另外的回归如主成分回归、岭回归等

    3、Logistic回归分析

    线性回归模型要求因变量是连续的正态分布变里,且自变量和因变量呈线性关系,而Logistic回归模型对因变量的分布没有要求,一般用于因变量是离散时的情况

    分类:

    Logistic回归模型有条件与非条件之分,条件Logistic回归模型和非条件Logistic回归模型的区别在于参数的估计是否用到了条件概率。

    4、其他回归方法 非线性回归、有序回归、Probit回归、加权回归等

    八、聚类分析

    样本个体或指标变量按其具有的特性进行分类,寻找合理的度量事物相似性的统计量。

    1、性质分类:

    Q型聚类分析:对样本进行分类处理,又称样本聚类分祈 使用距离系数作为统计量衡量相似度,如欧式距离、极端距离、绝对距离等

    R型聚类分析:对指标进行分类处理,又称指标聚类分析 使用相似系数作为统计量衡量相似度,相关系数、列联系数等

    2、方法分类:

    1)系统聚类法: 适用于小样本的样本聚类或指标聚类,一般用系统聚类法来聚类指标,又称分层聚类

    2)逐步聚类法 :适用于大样本的样本聚类

    3)其他聚类法 :两步聚类、K均值聚类等

    九、判别分析

    1、判别分析:根据已掌握的一批分类明确的样品建立判别函数,使产生错判的事例最少,进而对给定的一个新样品,判断它来自哪个总体

    2、与聚类分析区别

    1)聚类分析可以对样本逬行分类,也可以对指标进行分类;而判别分析只能对样本

    2)聚类分析事先不知道事物的类别,也不知道分几类;而判别分析必须事先知道事物的类别,也知道分几类

    3)聚类分析不需要分类的历史资料,而直接对样本进行分类;而判别分析需要分类历史资料去建立判别函数,然后才能对样本进行分类

    3、进行分类 :

    1)Fisher判别分析法 :

    以距离为判别准则来分类,即样本与哪个类的距离最短就分到哪一类, 适用于两类判别;

    以概率为判别准则来分类,即样本属于哪一类的概率最大就分到哪一类,适用于

    适用于多类判别。

    2)BAYES判别分析法 :

    BAYES判别分析法比FISHER判别分析法更加完善和先进,它不仅能解决多类判别分析,而且分析时考虑了数据的分布状态,所以一般较多使用;

    十、主成分分析

    将彼此梠关的一组指标变适转化为彼此独立的一组新的指标变量,并用其中较少的几个新指标变量就能综合反应原多个指标变量中所包含的主要信息 。

    十一、因子分析

    一种旨在寻找隐藏在多变量数据中、无法直接观察到却影响或支配可测变量的潜在因子、并估计潜在因子对可测变量的影响程度以及潜在因子之间的相关性的一种多元统计分析方法

    与主成分分析比较:

    相同:都能够起到済理多个原始变量内在结构关系的作用

    不同:主成分分析重在综合原始变适的信息.而因子分析重在解释原始变量间的关系,是比主成分分析更深入的一种多元统计方法

    用途:

    1)减少分析变量个数

    2)通过对变量间相关关系探测,将原始变量进行分类

    十二、时间序列分析

    动态数据处理的统计方法,研究随机数据序列所遵从的统计规律,以用于解决实际问题;时间序列通常由4种要素组成:趋势、季节变动、循环波动和不规则波动。

    主要方法:移动平均滤波与指数平滑法、ARIMA横型、量ARIMA横型、ARIMAX模型、向呈自回归横型、ARCH族模型

    十三、生存分析

    用来研究生存时间的分布规律以及生存时间和相关因索之间关系的一种统计分析方法

    1、包含内容:

    1)描述生存过程,即研究生存时间的分布规律

    2)比较生存过程,即研究两组或多组生存时间的分布规律,并进行比较

    3)分析危险因素,即研究危险因素对生存过程的影响

    4)建立数学模型,即将生存时间与相关危险因素的依存关系用一个数学式子表示出来。

    2、方法:

    1)统计描述:包括求生存时间的分位数、中数生存期、平均数、生存函数的估计、判断生存时间的图示法,不对所分析的数据作出任何统计推断结论

    2)非参数检验:检验分组变量各水平所对应的生存曲线是否一致,对生存时间的分布没有要求,并且检验危险因素对生存时间的影响。

    A 乘积极限法(PL法)

    B 寿命表法(LT法)

    3)半参数横型回归分析:在特定的假设之下,建立生存时间随多个危险因素变化的回归方程,这种方法的代表是Cox比例风险回归分析法

    4)参数模型回归分析:已知生存时间服从特定的参数横型时,拟合相应的参数模型,更准确地分析确定变量之间的变化规律

    十四、典型相关分析

    相关分析一般分析两个变里之间的关系,而典型相关分析是分析两组变里(如3个学术能力指标与5个在校成绩表现指标)之间相关性的一种统计分析方法。

    典型相关分析的基本思想和主成分分析的基本思想相似,它将一组变量与另一组变量之间单变量的多重线性相关性研究转化为对少数几对综合变量之间的简单线性相关性的研究,并且这少数几对变量所包含的线性相关性的信息几乎覆盖了原变量组所包含的全部相应信息。

    十五、R0C分析

    R0C曲线是根据一系列不同的二分类方式(分界值或决定阈).以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。cda数据分析师培训

    用途:

    1、R0C曲线能很容易地査出任意界限值时的对疾病的识别能力

    用途 ;

    2、选择最佳的诊断界限值。R0C曲线越靠近左上角,试验的准确性就越高;

    3、两种或两种以上不同诊断试验对疾病识别能力的比较,一股用R0C曲线下面积反映诊断系统的准确性。

    十六、其他分析方法

    多重响应分析、距离分祈、项目分祈、对应分祈、决策树分析、神经网络、系统方程、蒙特卡洛模拟等。

    转载于:https://www.cnblogs.com/amengduo/p/9587290.html

    展开全文
  • 缺失值填充的几种方法

    万次阅读 多人点赞 2018-09-12 22:59:51
    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1. 数据集介绍 数据...

    面试不仅仅是一个找工作的过程,还是一个向面试官交流学习的过程。之前的某次面试中,聊到了缺失值填充方法,经面试官指点学到了一些技能,下面简要总结一下。

    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。

    1. 数据集介绍

    数据集来源于 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测。该数据集共有1000条数据,特征共83维,加上id和label共85列,每维特征缺失数量范围为0~911。为了简单比较各种填充方法的效果,我们选取最简单的二分类模型(逻辑回归),选取F1 score作为评测指标。

    读取数据集代码如下:

    train_data = pd.read_csv('train_data.csv', encoding='gbk') # 读取数据集
    
    filter_feature = ['id','label'] # 过滤无用的维度
    features = []
    for x in train_data.columns: # 取特征
        if x not in filter_feature:
            features.append(x)
    
    train_data_x = train_data[features] 
    train_data_y = train_data['label']
    X_train, X_test, y_train, y_test = train_test_split(train_data_x, train_data_y, random_state=1) # 划分训练集、测试集
    

    2. 常见的填充方法

    (1)填充固定值

    选取某个固定值/默认值填充缺失值。

    train_data.fillna(0, inplace=True) # 填充 0

    (2)填充均值

    对每一列的缺失值,填充当列的均值。

    train_data.fillna(train_data.mean(),inplace=True) # 填充均值

    (3)填充中位数

    对每一列的缺失值,填充当列的中位数。

    train_data.fillna(train_data.median(),inplace=True) # 填充中位数

    (4)填充众数

    对每一列的缺失值,填充当列的众数。由于存在某列缺失值过多,众数为nan的情况,因此这里取的是每列删除掉nan值后的众数。

    train_data.fillna(train_data.mode(),inplace=True) # 填充众数,该数据缺失太多众数出现为nan的情况
    features_mode = {}
    for f in features:
        print f,':', list(train_data[f].dropna().mode().values)
        features_mode[f] = list(train_data[f].dropna().mode().values)[0]
    train_data.fillna(features_mode,inplace=True)

    (5)填充上下条的数据

    对每一条数据的缺失值,填充其上下条数据的值。

    train_data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值
    train_data.fillna(0, inplace=True)
    
    train_data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值
    train_data.fillna(0, inplace=True)

    (6)填充插值得到的数据

    用插值法拟合出缺失的数据,然后进行填充。

    for f in features: # 插值法填充
        train_data[f] = train_data[f].interpolate()
        
    train_data.dropna(inplace=True)

    (7)填充KNN数据

    填充近邻的数据,先利用knn计算临近的k个数据,然后填充他们的均值。(安装fancyimpute)除了knn填充,fancyimpute还提供了其他填充方法。

    from fancyimpute import KNN
    
    train_data_x = pd.DataFrame(KNN(k=6).fit_transform(train_data_x), columns=features)

    (8)填充模型预测的值

    把缺失值作为新的label,建立模型得到预测值,然后进行填充。这里选择某个缺失值数量适当的特征采用随机森林RF进行拟合,其他缺失特征采用均值进行填充。

    new_label = 'SNP46'
    new_features = []
    for f in features:
        if f != new_label:
            new_features.append(f)
            
    new_train_x = train_data[train_data[new_label].isnull()==False][new_features]
    new_train_x.fillna(new_train_x.mean(), inplace=True) # 其他列填充均值
    new_train_y = train_data[train_data[new_label].isnull()==False][new_label]
    
    new_predict_x = train_data[train_data[new_label].isnull()==True][new_features]
    new_predict_x.fillna(new_predict_x.mean(), inplace=True) # 其他列填充均值
    new_predict_y = train_data[train_data[new_label].isnull()==True][new_label]
    
    rfr = RandomForestRegressor(random_state=666, n_estimators=10, n_jobs=-1)
    rfr.fit(new_train_x, new_train_y)
    new_predict_y = rfr.predict(new_predict_x)
    
    new_predict_y = pd.DataFrame(new_predict_y, columns=[new_label], index=new_predict_x.index)
    new_predict_y = pd.concat([new_predict_x, new_predict_y], axis=1)
    new_train_y = pd.concat([new_train_x, new_train_y], axis=1)
    new_train_data = pd.concat([new_predict_y,new_train_y]) 
    
    train_data_x = new_train_data[features]
    train_data_y = train_data['label']

    3. 实验对比

    (1)评测指标

    选取F1 score进行评测。

    def countF1(train, predict):
        count = 0 # 统计预测的正确的正样本数
        for i in range(len(train)):
            if predict[i] == 1 and train[i] == 1:
                count += 1
        pre =  count * 1.0 / sum(predict) # 准确率
        recall =  count * 1.0 / sum(train) # 召回率
        return 2 * pre * recall / (pre + recall)
        

    (2)对比结果

    填充方式 训练集_F1 测试集_F1
    默认值0 0.70516717 0.59689922
    均值(mean) 0.70186335 0.67768595
    中位数(median) 0.70826833 0.67479675
    众数(mode) 0.70479134 0.68852459
    上一个数据(pad) 0.70409712 0.62711864
    下一个数据(bfill) 0.66981132 0.60169492
    插值 0.69018405 0.61333333
    KNN_3 0.71076923 0.66393443
    KNN_6 0.70897833 0.68852459
    KNN_10 0.70479134 0.68032787
    随机森林_feature3 0.571428571 0.4
    随机森林_feature46 0.585139319 0.41509434

    (3)实验小结

    对于缺失值的处理,除了直接删除缺失严重的特征外,还可以选择各种各样的填充方法。对于每一种填充方式而言,都有其适用的场景,没有绝对的好坏之分,因此在做数据预处理时,要多尝试几种填充方法,选择表现最佳的即可。

     

    本文完整代码已上传至git(https://github.com/AHNU/fill_missing_values)

    参考文献

    1. 训练模型填充空值(fill null)的几种方法

    2. https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python

    展开全文
  • python缺失值填充的几种方法

    万次阅读 多人点赞 2019-06-14 10:37:41
    常见的数据缺失填充方式分为很多种,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包中在此方面比较全面,python稍差。 python目前已有的两种常见的包,第一个是impyute,第二个是fancyimpute。比如...

    缺失值的产生机制

    缺失值可分为两类:一类是这个值实际存在但是没有被观测到,例如客户的性别;另一类是这个值实际就不存在,例如,在调查顾客购买的洗发液品牌时,如果某位顾客根本没有购买任何洗发液,那么这位顾客购买的洗发液品牌缺失。如何处理缺失值是一个很复杂的课题,有兴趣的读者可以参阅这方面的专著。

    缺失值的产生有三种机制:

    1.完全随机缺失(MissingCompletelyatRandom)

    某个变量是否缺失与它自身的值无关,也与其他任何变量的值无关。例如,由于测量设备出故障导致某些值缺失。

    2.随机缺失(MissingatRandom)

    在控制了其他变量已观测到的值后,某个变量是否缺失与它自身的值无关。例如,人们是否透露收入可能与性别、教育程度、职业等因素有关系。

    如果这些因素都观测到了,而且尽管收入缺失的比例在不同性别、教育程度、职业的人群之间有差异,但是在每一类人群内收入是否缺失与收入本身的值无关,那么收入就是随机缺失的。

    3.非随机缺失(MissingNotatRandom)

    即使控制了其他变量已观测到的值,某个变量是否缺失仍然与它自身的值有关。例如,在控制了性别、教育程度、职业等已观测因素之后,如果收入是否缺失还依赖于收入本身的值,那么收入就是非随机缺失的。

    缺失值的处理

    常见的数据缺失填充方式分为很多种,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包中在此方面比较全面,python稍差。
    python目前已有的两种常见的包,第一个是impyute,第二个是fancyimpute。比如fancyimpute中集成了很多方式,包括均值、众数、频数填充,KNN填充、MCMC填充等。

    一、直接填充

    0值/-1值填充

    data = pd.read_csv(path,encoding='gbk')
    data = data.fillna(-1)
    

    单变量填补

    用单一变量的均值/中位数/众数/二分之一最小值/零值进行补值,这种方法会导致数据分布的偏移,方差偏小,PCA上会看到一条补值导致的直线等问题。
    这种方法仅在缺失数据集满足正态分布的情况下可以达到比较好的效果,而在现实应用中,往往连对数据具一定的先验知识都很难做到,而现实数据往往又并不是简单的正态分布,因此这一方法不可避免的将带来数据的各种统计参数的扭曲。

    二、插值填充

    所谓的插值法就是通过两点(x0,y0),(x1,y1)估计中间点的值,假设y=f(x)是一条直线,通过已知的两点来计算函数f(x),然后只要知道x就能求出y,以此方法来估计缺失值。当然我们也可以假设f(x)不是直线,而是其他函数。

    data = pd.read_csv(path,encoding='gbk')
    for f in data:  # 插值法填充
        data[f] = data[f].interpolate()
        data.dropna(inplace=True)
    

    interpolate函数默认采用线性插值,即假设函数是直线形式,缺失值用前一个值和后一个值的平均数填充。
    还可以根据数字来进行插值,用到参数method=‘values’,此时索引的数值实际上就是用于估计y的x值。
    如果index是时间,我们还可以用method=time来插值。不过当dataframe是多重索引(multiIndex)时,只能用线性插值。
    此外还可以通过参数设定采用多项式插值填充等方式。
    参考:
    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.interpolate.html
    https://jingyan.baidu.com/article/a501d80cf7c9c3ec620f5e5a.html

    三、KNN预测缺失值进行填充

    KNN预测的步骤是选择出其他不存在缺失值的列,同时去除掉需要预测缺失值的列存在缺失值的行,然后计算距离。
    如果缺失值是离散的,使用K近邻分类器,投票选出K个邻居中最多的类别进行填补;如果为连续变量,则用K近邻回归器,拿K个邻居中该变量的平均值填补。

    这里使用的是fancyimpute库,安装的时候需要visual C++环境。

    from fancyimpute import KNN
    
    data = pd.read_csv(path,encoding='gbk')
    data = pd.DataFrame(KNN(k=6).fit_transform(data)) 
    data.columns = ['sex','age','label']  # fancyimpute填补缺失值时会自动删除列名
    

    注意fancyimpute的KNN填补会自动去除DataFrame数据的列名,所以如果后续操作对列名有要求,需要重新添加列名。

    四、Kmeans预测缺失值进行填充

    五、可视化

    见本人的另一篇博文

    参考网址:
    面对有大量缺失值的数据应该怎样处理比较合理? - 晔无殊的回答 - 知乎
    MetImp 1.2 (开源的的缺失值补值软件)
    缺失值处理方法综述
    缺失值的产生机制
    缺失值的处理(非常好)

    展开全文
  • 今天我们就来学习一下,日常工作中常见的四大序号填充方法。案例一:最简单的输入数字序号1-10操作步骤:1、我们首先在序号最前方输入1、2两个数字序号,然后鼠标选中这两个单元格,光标放到单元格右下角的十字符号...
  • 常见的数据预处理--python篇1、 加载数据1.1 数据读取1.2 CSV文件合并1.3 CSV文件拆分1.4 数据查看2、缺失值2.1 缺失值查看2.2 缺失值处理2.2.1 不处理2.2.2 删除2.2.3 填充2.2.3.1 固定值填充2.2.3.2 出现最频繁值...
  • excel隔行填充颜色三种方法

    千次阅读 2016-05-10 15:50:18
     excel隔行填充颜色的方法也很多,本文总结几种常见方法。  excel隔行填充颜色方法一:  添加一辅助列,如A列,分别输入1、2、1、2这样数字,然后启用筛选,再选中其中奇数或者偶数行填充颜色。动画演示: ...
  • #include #include #include /*sizeof计算数据(包括数组、变量、类型、结构体等...//2) 结构体每个成员相对于结构体首地址偏移量(offset)都是成员大小整数倍,如有需要编译器会在成员之间加上填充字节(inter
  • 缺失值处理----缺失值填充方法总结

    千次阅读 2020-10-01 16:44:24
    对于特征值缺失的一种常见的方法就是可以用固定值来填充,例如0,9999, -9999, 例如下面对灰度分这个特征缺失值全部填充为-99 data['灰度分'] = data['灰度分'].fillna('-99') 2. 用均值填充 对于数值型的特征,其...
  • 因此本期文章分享集中常见的序号生成方法,包括:1.常规顺序排序2.筛选后序号仍然保持连续3.按部门填充序号4.按合并单元格填充序号第一:常规顺序排序常规顺序排序:根据数据记录数量来排序,也就是说有多少行数据就...
  • 表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过Java编程在PDF中添加以及...
  • 简单来说是一个比较常见的小问题。但是有比较特殊,行业特殊性导致的问题。我们没见过的就看看,见过的就学习一下。想起一个小问题,留课堂作业,看看谁能第一个回答出来。怎么在Excel里面替换 回车符 ?今天重点...
  • KDD全过程利用缺失数据的方法 by张师超挑战问题缺失数据利用方式填充结果即用式混合属性填充统计参数最优填充聚类填充缺失数据填充缺失数据分类结束语 挑战问题 数据缺失在机器学习人工智能领域十分常见,如何处理...
  • oracle一些常用的数据类型字符数据类型char数据类型 当需要固定长度时,使用char数据类型,此数据类型长度可以使1-2000字节.若是不指定大小默认占1字节,如果长度有空余时会以空格进行填充,如果大于设定长度数据库则会...
  • ##############缺失值填充的几种方法

    千次阅读 2018-10-23 17:12:14
    常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1. 数据集介绍 数据...
  • 常见的股票收盘价数据为例,表1是长数据常见形式,而表2是宽数据常见形式。而R语言作为处理数据的好手,提供了非常多工具来处理这两种数据,以及二者间的转换工具。接下来首先介绍这两种数据,然后分析二者的优...
  • 1. 简单的数据绑定 2. 复杂数据绑定 3. 实例 3.1 手动给dataGridView绑定数据源的方法 3.2 利用泛型集合向DataGridView中添加数据 List<>泛型集合: Dictionary<>泛型集合 3.3 利用SqlDataReader...
  • excel数据快速输入 数据快速输入快捷键。 Tab键:横向向右切换一个单元格。 Enter键:向下切换一个单元格。...单元格数字自动填充:我们可以自定义格式自动填充单元格,简化我们数据的输入。下述会列
  • 服务器收到请求和函数后,以json格式作为回调函数参数传递给它,也就是用json数据填充回调函数,并返回数据到客户端;客户端收到服务器响应后执行回调函数,该回调函数可以用来处理服务器返回数据。 2
  • 遇到数据中带有缺失值是非常常见的现象,简单粗暴的做法如直接删除包含缺失值的记录、删除缺失值比例过大的变量、用0填充缺失值等,但这些做法会很大程度上影响原始数据的分布或者浪费来之不易的数据信息,...
  • 01 生成数据表第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据。 Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导入。获取外部...
  • SQL Server表索引的填充因子选项是最常见的针对索引的一种调优方法。索引的填充因子是一个百分比,用于告诉SQL Server每个叶级索引页可以填充多少索引数据,多少空间应该保留作为成长空间。如果基础表的列被修改或列...
  • 01 生成数据表第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据。 Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导入。获取外部...
  • 常见的缺失值填充方法有填充默认值、均值、众数、KNN填充、以及把缺失值作为新的label通过模型来预测等方式,为了介绍这几种填充方法的使用以及填充效果,本文将在真实数据集上进行简单比较。 1. 数据集介绍 数据...
  • 在文本数据中,由于每个句子的长度不同,又无法像图像一样可以调整到固定高度,所以在对文本数据进行批处理 (batching) 时需要一些特殊操作,最常见的方法是使用填充(padding)的方法,即将同一批块内的句子长度补...
  • SSL/TLS常见漏洞检测及修复方法

    千次阅读 2020-03-26 14:46:48
    漏洞利用了SSLv3处理填充字节方式(密码块链接)CBC操作模式,该缺陷允许中间人(MiTM)攻击者在少于256个SSLv3连接中解密密文所选字节,攻击者可利用此漏洞绕过服务器加密机制直接获取用户数据。 修复方法:禁用...
  • python缺失值填充

    千次阅读 多人点赞 2019-04-26 15:50:12
    对于特征值缺失的一种常见的方法就是可以用固定值来填充。 data['分数'] = data['分数'].fillna('-1') 2. 用均值填充 对于数值型的特征,其缺失值也可以用未缺失数据的均值填充。 data['分数'] = data['分数']...
  • 功能:类似于java中的方法 好处:提高重用性和隐藏实现细节 调用:select 函数名(实参列表); 二、单行函数 1、字符函数 concat: 连接 substr: 截取子串 upper: 变大写 lower: 变小写 replace:替换 length:获取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 391
精华内容 156
关键字:

常见的数据填充方法