每日一学--如何处理缺失值_使用同一列后一行的数据填补缺失值-程序员宅基地

技术标签: 机器学习  

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

今天学习kaggle上的缺失值处理课程,学习记录,可能不太严谨,请指正。

1.观察

观察几个样本数据或者所有数据有无NaN 或者None    

1.1读取数据,显示数据,肉眼观察


1.2 python中用下列方法

    a.data.isnull( )   ----对整体的series或者dataframe判断

       isnan(data) ----对某一行进行判断(这里我也不是特别明白)

       二者返回False和True,False代表没有缺失值,True代表有缺失值

       参考:https://blog.csdn.net/xidianliutingting/article/details/62041891

    b.统计有多少缺失值

        missing_count = data.isnull( ).sum( )

        返回每列中缺失值个数

    c.统计缺失值占比

        total = np.product(data.shape) ---计算矩阵一共有多少个元素,行数乘以列数

        missing = missing_count.sum( ) ---总共的缺失值的个数

        (missing / total )*100 ---缺失值占比(该统计用于判断如何更好地处理缺失值)

2.判断

判断为什么有有缺失值

2.1 确实不存在

2.2 未被记录

3.处理缺失值

3.1 整行或者整列删除(一般不推荐该方法)

    data.dropna( ) 或者 data.dropna(axis=0) 按行删除,如果有缺失值的话,就把整行删除

    data.dropna(axis = 1) 按列删除

3.2 数据补齐

    3.2.1用“0”值代替缺失值(用值代替缺失值称为imputation)

         data.fillna(0)


    3.2.2 用同一列或者同一行的值代替缺失值

            data.fillna(method = 'bfill',axis=0) ---将缺失值同一列后一行的值赋值给缺失值,对于没有后一行的值仍然是缺失值


            data.fillna(method = 'bfill',axis=0).fillna(0) ---将缺失值同一列后一行的值赋值给缺失值,对于没有后一行的值用“0”填充


            data.fillna(method = 'bfill',axis=1).fillna(0) ---将缺失值同一列后一行的值赋值给缺失值,对于没有后一行的值用“0”填充


        fillna 的用法可以参见

        http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html

        主要说下其中参数method:backfill/bfill:同列或者同行后一值填充,pad/ffill:同列或者同行前一值填充,默认是None(None这边的意思是?看具体用什么值填充吗?如果fillna()括号里没有值的话会报错的)

    3.2.3 用均值、中位数、众数代替NaN值

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

             Imputer 用法

            from sklearn.preprocessing import Imputer

            my_Imputer = Imputer( )

            data_imputer = my_Imputer.fit_transform(data)

            imputer参数中有个strategy:mean(用均值填充),median(用中位数填充),most_frquent(用众数填充),默认值是mean,用均值填充

    3.2.4 有时3.4的方法得到的替代值高于或者低于实际值(可能有些真实值并未采集到,在数据中无法体现),或者缺失值在某方面具有唯一性。(直译,还没完全理解该方法)

        a.复制数据以防更改原数据

            new_data = data.copy( )

        b.新增一列,推算出缺失值可能的值

            cols_with_missing = (col for col in new_data.columns

                                            if new_data[c],isnull( ).any( ))

            for col in cols_with_missing:

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

            my_imputer = Imputer( )

            new_data = my_imputer.fit_transform

还有其他很多处理方法,详见:http://blog.sina.com.cn/s/blog_670445240102v08m.html

3.3 不处理

        直接在包含空值的数据上进行数据挖掘。这类方法包括贝叶斯网络和人工神经网络等。
        贝叶斯网络是用来表示变量间连接概率的图形模式,它提供了一种自然的表示因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。当在任何一个对象中的缺失值数量很大时,存在指数爆炸的危险。
        人工神经网络可以有效的对付空值,但人工神经网络在这方面的研究还有待进一步深入展开。人工神经网络方法在数据挖掘应用中的局限性。这种做法的缺点是在模型的选择上有局限

    

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38313518/article/details/79944375

智能推荐

SpringBoot中mysql的驱动依赖问题_mysql依赖-程序员宅基地

文章浏览阅读6.7k次,点赞5次,收藏14次。springboot中mysql的驱动依赖问题_mysql依赖

Python函数_位置实参位于关键字实参后面-程序员宅基地

文章浏览阅读1.7k次。Python的函数语法:def 函数名(形参列表): //形参列表由一个或者多个形参构成 //由零条到多条可执行语句组成的函数或者pass [return [返回值]]多个形参名之间以英文逗号(,)隔开。谁调用函数谁负责为形参赋值,指定了参数调用的时候肯定需要传参了!为函数添加文档注释:def my_Test(x, y) : ''' 这里是函数说明文..._位置实参位于关键字实参后面

Pandas 基本使用_pandas 使用-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏69次。文章目录一、Pandas介绍1. Pandas介绍2. 为什么使用Pandas3. 小结二、Pandas数据结构1.Series1.1 Series的创建1.2 Series的属性2.DataFrame2.1 DataFrame的创建2.2 DataFrame的属性2.3 DatatFrame索引的设置2.3.1 修改行列索引值2.3.2 重设索引2.3.3 以某列值设置为新的索引3.MultiIndex与Panel3.1 MultiIndex3.1.1 multiIndex的特性3.1.2 multiIn_pandas 使用

【学习摘记】马士兵Servlet&JSP_课时11-课时14_session-程序员宅基地

文章浏览阅读318次。【课时10】Cookie_3——cookie访问的注意事项【在Windows7上如何找到Cookie】http://www.cnblogs.com/gdyblog/p/5874362.html【反馈】这章cookie觉得老师讲的很好!循序渐进、先主干-后分支。【恍然大悟】url是可以自己随便取的。之所以要加servlet就是为了和htm做区分【课

轮流取石子游戏C语言,取石子游戏实例解答(2)-程序员宅基地

文章浏览阅读998次。例3。(29,45,58),29(+)45=48,58-48=10,从58中拿走10个,变为(29,45,48)。例4。我们来实际进行一盘比赛看看:甲:(7,8,9)->(1,8,9)奇异局势乙:(1,8,9)->(1,8,4)甲:(1,8,4)->(1,5,4)奇异局势乙:(1,5,4)->(1,4,4)甲:(1,4,4)->(0,4,4)奇异局势乙:(0,4,4)..._3、 有四堆石子,选取其中一堆,你和对手轮流拾取(你后手),每次最多拾取6

基于鹈鹕算法改进的随机森林回归算法-程序员宅基地

文章浏览阅读921次,点赞21次,收藏10次。摘要:为了提高随机森林数据的回归预测准确率,对随机森林中的树木个数和最小叶子点数参数利用鹈鹕搜索算法进行优化。

随便推点

Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制-程序员宅基地

文章浏览阅读299次。封面图片:《Python可以这样学》,ISBN:9787302456469,董付国,清华大学出版社图书详情(京东):=================关于朴素贝叶斯算法中文垃圾邮件分类,可..._python任调整文本顺序,对抗垃圾邮件检测

(转载) 如何制作电子书?-程序员宅基地

文章浏览阅读2.7k次。电子书(eBook)是一种电子读物,它极大地方便了信息的传播,存储,同时也给我们的学习和工作带来了很多便利之处。比如可以把许多文摘制作成一本电子书,图文并茂,界面美观,既方便阅读又可以很好的保存。 网上有很多小说,教程或者其它一些资料都是用电子书做成的。你是不是想知道这些电子书是怎么做出来的?其实很简单,看完这篇文章后你就可以做出属于自己的电子书来。 一.预备知识: 电子书的 格式有很多种..._怎样做电子书籍

计算机科学发展有关的事,计算机科学前沿热点及发展趋势 计算机前沿技术论文.doc...-程序员宅基地

文章浏览阅读812次。计算机科学前沿热点及发展趋势【摘要】 当代,发展最快而且对人类生活影响最大的学科无疑是计算机科学与信息技术了,计算机已经成为了21世纪的一种象征,当代的社会,计算机科学与信息技术的应用已经渗透到社会生活的各个方面,已经成为推动和社会进步的重要引擎,已被成为“计算机文化”和“计机思维”。计算机科学围绕信息、知识、智能等主题发展迅速。本文详细地介绍了计算机科学前沿热点的若干问题,并提出未来计算机科学的..._列举计算机发展的前沿,如何正确认识我们的短板,

《孵化皮克斯》读书第四天(完结)-程序员宅基地

文章浏览阅读119次。非专业性的书读起来还是比较快的,工作之余,茶余饭后,就这样把一本不太厚的书读完了。劳伦斯和他的团队成功了,他们如愿的上市了,如愿的改签了不平等的合约,如愿的打造了自己的品牌和迪士尼平起平坐,最后,又在市值达到巅峰的时候如愿的卖给了迪士尼。史蒂夫·乔布斯一跃而成为了富翁,成为了成功人士,成为了传奇。乔布斯也如愿..._孵化皮克斯的主要内容

Android面试---弄懂这二十个问题,带你拿20K+的工作!,百度 二面-程序员宅基地

文章浏览阅读570次,点赞15次,收藏7次。答应大伙的备战金三银四,大厂面试真题来啦!这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。《960全网最全Android开发笔记》《379页Android开发面试宝典》包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。

JavaEE5 Learning-JSP-程序员宅基地

文章浏览阅读717次。 JSP -- Reusing content in JSP page.There are three ways to reuse the content in jsp pages:1. include directive This directive just inserts the static content or dynamic content into the in_javaee5