缺失值处理

处理思路

在数据预处理过程中,难免会有数据的确实情况,无论是自己爬虫获取的还是从公开数据源上获取的数据集,都不能保证数据集是完全准确的,难免会有一些缺失值。而以这样数据集为基础进行建模或者数据分析时,缺失值会对结果产生一定的影响,所以提前处理缺失值是十分必要的。

常用的处理思路主要有:

  1. 填充处理:数值变量、类别变量、时间序列
  2. 删除处理:按行删除、按列删除
  3. 不做处理

一、填充处理

常用的填充方法有:

  • 统计量填充:如均值、中位数、众数、最值等
  • KNN填充
  • 预测填充

pandas中用于填充缺失值的方法:
df.fillna()参数解释:
在这里插入图片描述

对于数值型变量

1 统计量填充:

**均值填充:**
缺点:容易受到异常值的影响
df[col].fillna(value=df[col].mean(),inplace=True)**中位数填充**
df[col].fillna(value=df[col].median(),inplace=True)**众数填充**
缺点:众数结果可能有多个,需要取第一个df.mode(numeric_only=False)[0]
df[col].fillna(value=df[col].mode()[0],inplace=True)**最大值填充**
df[col].fillna(value=df[col].max(),inplace=True)**最小值填充**
```python
df[col].fillna(value=df[col].min(),inplace=True)

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

缺点:基于欧式距离找找最相邻的K个点的均值做填充,不能填充类别变量,并且进入KNN模型的数据也不能有非数值变量。

import pandas as pd
import numpy as np
from fancyimpute import KNN
data = pd.DataFrame([[3, 2, 4, 0],[3, np.nan, 3, 1],[5, np.nan, np.nan, 1],[5, 5, 3, 4]],columns=list('ABCD'))
print(data)
# fancyimpute填补缺失值时会自动删除列
data = pd.DataFrame(KNN(k=6).fit_transform(data),columns=data.columns)print(data)

3 预测填充

from sklearn.ensemble import RandomForestRegressordef set_missing_ages(df):#把数值型特征都放到随机森林里面去,除了Age其他四个特征均无缺失值age_df=df[['Age','Fare','Parch','SibSp','Pclass']]known_age = age_df[age_df.Age.notnull()].as_matrix()unknown_age = age_df[age_df.Age.isnull()].as_matrix()y=known_age[:,0]#y是年龄,第一列数据x=known_age[:,1:]#x是特征属性值,后面几列rfr=RandomForestRegressor(random_state=0,n_estimators=2000,n_jobs=-1)#根据已有数据去拟合随机森林模型rfr.fit(x,y)#预测缺失值predictedAges = rfr.predict(unknown_age[:,1:])#填补缺失值df.loc[(df.Age.isnull()),'Age'] = predictedAgesreturn df,rfr

对于类别型变量

1 出现频率最高的变量填充(相当于众数)

data["D"] = data["D"].fillna(data["D"].value_counts().index[0])

2 将缺失作为一个特定的类别
把缺失当作一种特定的状态,
比如对于账户信息的收集,其中有些是选填项,这些特征肯定会存在缺失,我们可以把它当作一个”保密“的类别。

3 预测填充

对于时间序列

由于时间序列的特殊性,相邻的点相关性比较大。所以,对于时间序列的缺失值的处理方式会与数值型缺失值处理方式不同,往往会用相邻的点填充。
前一个值填充

df["col"] = df["col"].fillna(df["col"].fillna(method='ffill'))

后一个值填充

df["col"] = df["col"].fillna(df["col"].fillna(method='bfill'))

线性插值

df["col"] = df["col"].fillna(df["col"].interpolate())

二、删除处理

按列删除

某一列缺失数据较多,比如缺失率高达80%以上时,往往会删除整列特征

按行删除

对于重要的唯一标识ID特征存在缺失,比如我的建模目标是预测每个用户的消费能力。每个用户ID唯一标识一个特定的用户,若用户ID存在缺失直接删除缺失所在行。

三、不处理

其实对于树模型来说是支持缺失值的,但是建模效果可能会差于处理后建模。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线教育,异军突起,有一种华丽转身,叫做.NET在线讲师!(全职/兼职皆可)...

在线教育2020年,注定是不平凡的一年,疫情来袭,人们只能潜伏在家,很多人因此没有了收入甚至没有了工作,各个行业,也正在快速升级和重新洗牌,这其中,有一个行业,异军突起&a…

python计算相关系数

皮尔逊相关系数 用numpy实现 import numpy as npx np.array([1, 4, 3, 5]) y np.array([1, 3, 4, 5]) pc np.corrcoef(x, y)print(pc)输出结果: 调用scipy.stats中的pearsonr方法 from scipy.stats import pearsonr import numpy as npx np.array([1, 4, 3,…

领域模型

领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。学会了面向对象的思想,却依然写不出好的面向对象的…

重新定义代理的扩展性:WebAssembly在Envoy与Istio中的应用

原文:https://istio.io/blog/2020/wasm-announce/作者:CRAIG BOX, MANDAR JOG, JOHN PLEVYAK, LOUIS RYAN, PIOTR SIKORA (GOOGLE), YUVAL KOHAVI, SCOTT WEISS (SOLO.IO)译者:陆培尔编者按Istio的架构在1.5版本中发生了翻天覆地的变化&#…

2019年第十届蓝桥杯国赛B组试题E-路径计数-dfs(坑题)

【问题描述】 从一个 5 x 5 的方格矩阵的左上角出发,沿着方格的边走,满足以下条件的路线有多少种? 总长度不超过 12; 最后回到左上角; 路线不自交; 不走出 5 x 5 的方格矩阵范围之外。如下图所示&#xff…

.NET Core开发实战(第22课:异常处理中间件:区分真异常与逻辑异常)--学习笔记(下)...

接下来介绍使用代理方法的方式,也就是说把 ErrorController 整段逻辑直接定义在注册的地方,使用一个匿名委托来处理,这里的逻辑与之前的逻辑是相同的app.UseExceptionHandler(errApp > {errApp.Run(async context >{// 在 Features 里面…

【朝夕技术专刊】Core3.1WebApi_Filter-Authorize详解

欢迎大家阅读《朝夕Net社区技术专刊》第6期我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦!前言:本部分文档将详细给…

以正确的方式下载和配置 ASP.NET Core 官方源码

我们可以在Github上面直接查看ASP.NETCore 3.x的源代码,但是我们也可以把源代码下载下来进行查看。而下载源代码进行查看有很多好处:任意的导航源代码内置了一个示例项目直接调试源代码下载源代码想下载并配置好源码,你需要:最新版…

h5应用 vue 钉钉_uniapp开发一个小视频应用(一)

“uni-app 是一个使用 Vue.js 开发所有前端应用的框架,是一种终极的跨平台解决方案,这里的平台,主要指的是App平台(android、ios)、小程序平台、H5平台。开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝…

Blazor入门

NOW现在行动!Blazor是一个基于C#, Razor和 HTML的新的Web UI框架。它通过WebAssembly运行在浏览器中。有利于使用C#而不是JavaScript构建交互式的Web UI。这篇文章演示了如何使用Blazor构建SPA应用。Blazor简化了可在任…

C#桌面开发的未来WebWindow

WebWindowWebWindow是跨平台的库。Web Window的当前实验实现可在以下平台上运行:Windows – 需要基于Chromium的EdgeLinux – 使用WebKitMac – 需要Safari源码https://github.com/SteveSandersonMS/WebWindow.gitZeje Fork的分支:https://github.com/ze…

C#小游戏—钢铁侠VS太空侵略者

身为漫威迷,最近又把《钢铁侠》和《复仇者联盟》系列又重温了一遍,真的是印证了那句话:“读书百遍,其意自现”。看电影一个道理,每看一遍,都有不懂的感受~ 不知道大伙是不是也有同样的感受,对于…

受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学

来源:Lrwinlrwinx.github.io/2016/04/28/如何优雅的设计java异常/导语异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经验来谈一谈我是如何对异常进行处理的。由于本文只作一些经验之…

.NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)--学习笔记(上)...

23 | 静态文件中间件:前后端分离开发合并部署骚操作我们先来看一下静态文件中间件有哪些能力1、支持指定相对路径2、支持目录的浏览3、支持设置默认文档4、支持多目录映射源码链接:https://github.com/witskeeper/geektime/tree/master/samples/StaticFi…

src获取同级目录中的图片_一个简单的Python爬虫实例:百度贴吧页面下载图片

本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片。1. 概述本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片。下载图片的步骤如下:获取网页html文本内容;分析html中图片的html标签特征,用正…

十问十答 Apache 许可证

Apache 许可证由 Apache Software Foundation(ASF)发行,是一个由强大社区支持的流行的被广泛部署的许可证。Apache 许可证允许你自由地使用、修改和分发任何 Apache 许可的产品,前提是遵循 Apache 许可的条款。01Apache 许可证的条…

(一)基于企业现金流预测的投资决策-项目介绍

项目背景 某企业想提高现金流的利用率,以便产生更大的投资收益。遇到的问题是:何如在保证更多的资金流向高收益投资的同时,不出现资金短缺的问题。 确定可用于投资的金额 Step1 预测未来的收入、支出和余额 潜在逻辑: 现金流 = 收入 - 支出当月余额(资金存量)= 上月余…

应用程序使用统计信息 – .NET CORE(C#) WPF界面设计

本文首发地址:https://dotnet9.com/10546.html关键功能点抽屉式菜单圆形进度条Demo演示:1. 新建项目使用 VS 2019 的 .NET Core 3.1 WPF 项目模板,创建名为 “MobileAppUsageDashboardCore” 的项目,NuGet 引入 MaterialDesign 的…

iso qemu 安装ubuntu_基于libvirt 和QEMU在macOS安装Ubuntu

在流行的虚拟架构体系中,最重要的技术当然要数libvirt和QEMU了。包括Linux虚拟化技术中KVM和xen都使用了QEMU。关于Xen和KVM进行虚拟化,以及在Window下使用Vmware,VirtualBox和hyper-v构建虚拟机,可能大家都有过很多的尝试。今天我…

在Ocelot中使用自定义的中间件(一)

Ocelot是ASP.NET Core下的API网关的一种实现,在微服务架构领域发挥了非常重要的作用。本文不会从整个微服务架构的角度来介绍Ocelot,而是介绍一下最近在学习过程中遇到的一个问题,以及如何使用中间件(Middleware)来解决…