数据清洗:缺失值识别和处理方法

缺失值识别

数据缺失分为两种:一是行记录的缺失;二是列值的缺失。

不同的数据存储和环境中对于缺失值的表示不同,例如数据库中是Null、Python返回对象是None、Pandas或Numpy中是NaN。

构造数据:

#导入相关库
import pandas as pd  
import numpy as np  

# 生成缺失数据
df = pd.DataFrame(np.random.randn(6, 4),
                  columns=['col1', 'col2', 'col3', 'col4'])  
df.iloc[:, 1] = np.nan  
df.iloc[4, 3] = np.nan  
print(df)

查看缺失值:

# 查看哪些值缺失,缺失值返回True
nan_all = df.isnull()  
print(nan_all)  
print() 
# 查看哪些列缺失
nan_col1 = df.isnull().any()  # 含有NA的列返回True
nan_col2 = df.isnull().all()  # 全部为NA的列返回True
print(nan_col1)  
print(nan_col2)
print()  
# 查看哪些行缺失
nan_row1 = df.isnull().any(axis=1)  # 含有NA的行返回True
nan_row2 = df.isnull().all(axis=1)  # 全部为NA的行返回True
print(nan_row1)  
print(nan_row2) 
print() 

# 查看每列缺失值个数
print(df.isnull().sum())
# 查看每列未缺失值个数,等价于df.count()
print(df.notnull().sum())  

缺失值处理方式

通常有四种思路:

1.丢弃

直接丢弃带有缺失值的行记录(整行删除)或者列字段(整列删除)。优点:方法简单明了,减少缺失数据对总体数据的影响。缺点:会消减数据特征。

以下任意一种场景都不宜丢弃缺失值:

  • 数据集总体中存在大量的数据记录不完整情况且比例较大,例如超过10%,删除这些带有缺失值的记录意味着将会损失过多有用信息。
  • 带有缺失值的数据记录存在着明显的数据分布规律或特征,例如带有缺失值的数据记录的目标标签主要集中于某一类或几类,如果删除这些数据记录将使对应分类的数据样本丢失大量特征信息,导致模型过拟合或分类不准确。
# 丢弃缺失值
print(df.dropna())            # 直接丢弃含有NA的行记录,默认axis=0,how='any'
print(df.dropna(how='all'))   # 直接丢弃全部值为NA的行记录
print(df.dropna(axis=1))             # 直接丢弃含有NA的列记录
print(df.dropna(axis=1,how='all'))   # 直接丢弃全部值为NA的列记录

2.补全

相对丢弃而言,补全是更加常用的缺失值处理方式,通过一定的方法将缺失的数据补上,从而形成完整的数据记录,对于后续的数据处理、分析和建模至关重要。

常用的补全方法包括:

  • 统计法:对于数值型的数据,使用均值、加权均值、中位数等方法补足;对于分类型数据,使用众数等方法补足。
  • 模型法:可以基于已有的其他字段,将缺失字段作为目标变量进行预测,从而得到较为可能的补全值。如果带有缺失值的列是数值变量,采用回归模型补全;如果是分类变量,则采用分类模型补全。
  • 专家补全:对于少量且具有重要意义的数据记录,专家补足也是非常重要的一种途径。
  • 其他方法:例如随机法、特殊值法、多重填补等。
# 引入sklearn包
from sklearn.impute import SimpleImputer 
# 建立模型规则:strategy默认mean,也可设置为median或most_frequent
nan_model = SimpleImputer(missing_values=np.nan, strategy='mean')  
nan_result = nan_model.fit_transform(df)  
print(nan_result)  

#由于col2列全部为nan值,无法应用模型规则,col4列缺失值可以应用模型规则

# 使用pandas替换缺失值

# 用后面的值替换缺失值,或者用bfill
print(df.fillna(method='backfill'))  
# 用后面的值替代缺失值,限制每列只能替代一个缺失值
print(df.fillna(method='backfill', limit=1))  
# 用前面的值替换缺失值,或者用ffill
print(df.fillna(method='pad'))  

# 用特定值替换缺失值,比如0,也可直接使用df.replace(np.nan,0)
print(df.fillna(0))  
# fillna函数传入字典,用不同值替换不同列的缺失值
print(df.fillna({'col2': 1.1, 'col4': 1.2})) 
# 用平均数mean代替,选择各自列的均值替换缺失值,也可用中位数median或众数mode
print(df.fillna(df.mean()))  

# 插值填充,默认线性填充
print(df.interpolate())

3.真值转换法

某些情况下,我们可能无法得知缺失值的分布规律,并且对于缺失值无法采用上述任何一种方法做处理;或者我们认为数据缺失也是一种规律,不应该轻易对缺失值随意处理,那么还有一种缺失值处理思路——真值转换。

数据缺失也是数据分布规律的一部分,将变量的实际值和缺失值都作为输入维度参与后续数据处理和模型计算中,然而缺失值通常无法参与直接运算,因此需要将缺失值进行真值转换。

4.不处理

在数据预处理阶段,对于具有缺失值的数据记录不作任何处理,也是一种思路。很多模型对于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处理。

常见的能够自动处理缺失值的模型包括:KNN、决策树和随机森林、神经网络和朴素贝叶斯、DBSCAN等。这些模型对于缺失值的处理思路是:

  • 忽略,缺失值不参与距离计算,例如KNN。
  • 将缺失值作为分布的一种状态,并参与到建模过程,例如各种决策树及其变体。
  • 不基于距离做计算,因此基于值的距离计算,本身的影响就消除了,例如DBSCAN。

说明:在数据建模前的特征选择阶段,假如我们通过一定方法确定带有缺失值的字段对于模型的影响非常小,那么我们根本就不需要对缺失值进行处理。因此,后期建模时的字段或特征的重要性判断也是决定是否处理字段缺失值的重要参考因素之一。

参考资料:《Python数据分析与数据化运营》宋天龙 

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据清洗 1.基本概念 数据清洗从名字上也看的出就是把"脏"的"洗掉",指发现并纠正数据文件识别 的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库 的数据是面向某一主题的数据的集合,这些数据从多个业务系统抽取而来而且包含 历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误 的或有冲突的数据显然是我们不想要的,称为"脏数据"。我们要按照一定的规则把"脏数 据""洗掉",这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤 的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符 合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与 问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。 折叠残缺数据 这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户 的区域信息缺失、业务系统主表与明细表不能匹配等。对于这一类数据过滤出来,按 缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写 入数据仓库。 折叠错误数据 这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入 后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作 、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前 后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修 正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一 类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修 正之后再抽取。 折叠重复数据 对于这一类数据--特别是维表会出现这种情况-- 将重复数据记录的所有字段导出来,让客户确认并整理。 数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问 题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或 者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件, 促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是 不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息 和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支 持过程。在实用数据分析可帮助人们作出判断,以便采取适当行动。 类型 在统计学领域,有些人将数据分析划分为描述性统计分析、探索性数据分析以及验 证性数据分析;其,探索性数据分析侧重于在数据之发现新的特征,而验证性数据分 析则侧重于已有假设的证实或证伪。 探索性数据分析是指为了形成值得假设的检验而对数据进行分析的一种方法,是对 传统统计学假设检验手段的补充。该方法由美国著名统计学家约翰·图基(John Tukey)命名。 定性数据分析又称为"定性资料分析"、"定性研究"或者"质性研究资料分析",是指 对诸如词语、照片、观察结果之类的非数值型数据(或者说资料)的分析。 数据挖掘(英语:Data mining),又译为资料探勘、数据采矿。它是数据库知识发现(英语:Knowledge- Discovery in Databases,简称:KDD)的一个步骤。数据挖掘一般是指从大量的数据自动搜索隐藏 于其的有着特殊关系性(属于Association rule learning)的信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处 理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来 实现上述目标。 折叠数据挖掘的基本步骤 数据挖掘的步骤会随不同领域的应用而有所变化,每一种数据挖掘技术也会有各自 的特性和使用步骤,针对不同问题和需求所制定的数据挖掘过程也会存在差异。此外, 数据的完整程度、专业人员支持的程度等都会对建立数据挖掘过程有所影响。这些因素 造成了数据挖掘在各不同领域的运用、规划,以及流程的差异性,即使同一产业,也 会因为分析技术和专业知识的涉入程度不同而不同,因此对于数据挖掘过程的系统化、 标准化就显得格外重要。如此一来,不仅可以较容易地跨领域应用,也可以结合不同的 专业知识,发挥数据挖掘的真正精神。 数据挖掘完整的步骤如下: 理解数据和数据的来源(understanding)。 获取相关知识与技术(acquisition)。 整合与检查数据(integration and checking)。 去除错误或不一致的数据(data cleaning)。 建立模型和假设(mod
数据清洗数据分析数据挖掘全文共4页,当前为第1页。数据清洗数据分析数据挖掘全文共4页,当前为第1页。数据清洗 数据清洗数据分析数据挖掘全文共4页,当前为第1页。 数据清洗数据分析数据挖掘全文共4页,当前为第1页。 1.基本概念 数据清洗从名字上也看的出就是把"脏"的"洗掉",指发现并纠正数据文件识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库的数据是面向某一主题的数据的集合,这些数据从多个业务系统抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为"脏数据"。我们要按照一定的规则把"脏数据""洗掉",这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。 主要类型 残缺数据 这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。 折叠错误数据 数据清洗数据分析数据挖掘全文共4页,当前为第2页。数据清洗数据分析数据挖掘全文共4页,当前为第2页。这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。 数据清洗数据分析数据挖掘全文共4页,当前为第2页。 数据清洗数据分析数据挖掘全文共4页,当前为第2页。 折叠重复数据 对于这一类数据--特别是维表会出现这种情况--将重复数据记录的所有字段导出来,让客户确认并整理。 数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实用数据分析可帮助人们作出判断,以便采取适当行动。 数据清洗数据分析数据挖掘全文共4页,当前为第3页。数据清洗数据分析数据挖掘全文共4页,当前为第3页。类型 数据清洗数据分析数据挖掘全文共4页,当前为第3页。 数据清洗数据分析数据挖掘全文共4页,当前为第3页。 在统计学领域,有些人将数据分析划分为描述性统计分析、探索性数据分析以及验证性数据分析;其,探索性数据分析侧重于在数据之发现新的特征,而验证性数据分析则侧重于已有假设的证实或证伪。 探索性数据分析是指为了形成值得假设的检验而对数据进行分析的一种方法,是对传统统计学假设检验手段的补充。该方法由美国着名统计学家约翰·图基(John Tukey)命名。 定性数据分析又称为"定性资料分析"、"定性研究"或者"质性研究资料分析",是指对诸如词语、照片、观察结果之类的非数值型数据(或者说资料)的分析。 数据挖掘(英语:Data mining),又译为资料探勘、数据采矿。它是数据库知识发现(英语:Knowledge-Discovery in Databases,简称:KDD)的一个步骤。数据挖掘一般是指从大量的数据自动搜索隐藏于其的有着特殊关系性(属于Association rule learning)的信息的过程。数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。 数据挖掘的基本步骤 数据挖掘的步骤会随不同领域的应用而有所变化,每一种数据挖掘技术也会有各自的特性和使用步骤,针对不同问题和需求所制定的数据挖掘过程也会存在差异。此外,数据的完整程度、专业人员支持的程度等都会对建立数据挖掘过程有所影响。这些因素造

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值