详解:七步就能掌握Python数据准备

更多深度文章,请关注:

https://yq.aliyun.com/cloud

详解:七步就能掌握Python数据准备

上图为CRISP-DM模型中的数据准备

下面七个步骤涵盖了数据准备的概念,个别任务以及从Python生态系统中处理整个任务过程的不同方法。

维基百科将数据清洗定义为:

它是从记录集、表或者数据库检测和更正(或删除)损坏或不正确的记录的过程。指的是识别数据的不完整、不正确、不准确或不相关的部分,然后替换、修改或删除它们。数据清洗(data cleaning)可以与数据整理(data wrangling)的工具交互执行,也可以通过脚本进行批处理。

数据整理(data wrangling)被维基百科定义为:

1. 它将数据从一个原始形式手动转换或者映射到另一种格式的过程,这样可以在半自动化工具的帮助下更方便的使用数据。这可能包括进一步的整理,数据可视化,数据聚合,训练统计模型,以及许多其他潜在的用途。数据再加工过程通常遵循一套通用步骤,首先从数据源中提取原始数据中的数据,使用算法(例如排序)或通过预定义的数据结构将数据解析,最后将所得到的内容用数据接收器接收并且存储到数据库中以便将来使用。

本文包含了一组特定的数据准备技术,并且可以根据需求在给定情况下使用其他完全不同的技术。这里所用的解决方法都是一种正统的和普遍的方法。

步骤1:为了准备而准备(Preparing for the Preparation)

首先,其他人已经告诉过你:数据准备不只是机器学习任务之前的一个可有可无步骤,而是一个机器学习的非常必须组成部分。

由于Python是生态系统,我们提到的大部分内容都与Pandas相关。对于Pandas新手来说,Pandas是一个数据操作和分析库,是Python科学编程的基础之一,非常适合于数据准备相关的许多任务。

数据准备可以在上面所示的CRISP-DM模型中看到(可以合理地认为“数据理解”也属于我们的数据准备的范围)。我们的数据准备与KDD流程的框架有很多相同的地方,特别是前3个主要步骤:**选择、预处理、转换**。我们可以把这些细节分解成更细小,但在宏观层面上,KDD过程的还包括了什么是数据整理(data wrangling)。

详解:七步就能掌握Python数据准备

KDD流程

如果对Pandas感兴趣,并且想进行更全面的了解,可以参考一下文件。

• 10 Minutes to pandas,Pandas文件

• Intro to pandas data structures,由Greg Reda介绍

• Modern Pandas (in 7 parts),汤姆•奥格斯格尔(Tom Augspurger)

下面是关于三名大牛,关于数据准备的一些想法。

• 数据准备技巧,技巧和工具: Matthew Mayo

第二步:探索性数据分析(Exploratory Data Analysis)

探索性数据分析(EDA)是任何大型的数据分析,数据科学或机器学习项目的组成部分。在处理数据之前了解数据不仅仅是一个好主意,而且是一个优先项。在Chloe Mawer的文章“探索性数据分析的价值”中,她提到:

在高水平阶段,EDA是使用视觉和定量方法来理解和总结数据集的做法,而不对其内容做出任何假设。在进入机器学习或统计建模之前,这是一个重要的步骤,因为它提供了解决现有问题的适当模型。

基本要点是,我们需要提前知道我们的数据构成,这样才能有效地选择预测算法或描绘数据准备的其他步骤。用先进的算法抛出我们的数据集,寄希望于最好的并不是一个策略。

了解我们的要求也很重要:如果有一个人可读的输出是一个高优先级,为了证明我们的结果,使用神经网络可能不会削减它的优先级。在给定的情况下,决策树可能不能提供最高的分类准确性,但为了可解释的过程,也许任何这样牺牲的是准确性的方法是可接受的。

Chloe表示,EDA通常涉及以下方法的组合:

• 原始数据集中每个字段的单变量可视化和汇总统计信息。

• 用于评估数据集中每个变量与感兴趣目标变量之间的双变量可视化和评估的汇总统计。

• 多变量可视化理解数据中不同字段之间的交互

• 缩小尺寸以了解数据中的字段,这些字段占据了观察值之间的最大差异,并允许处理数据量的减少。

• 将数据集中的类似观察值聚类分组,通过将数据折叠成几个小数据点,可以更容易地识别行为模式。

要更全面地了解为什么EDA很重要,请阅读Chloe的文章。

详解:七步就能掌握Python数据准备

虹膜数据集的分布可视化的摘录

对于应用于泰坦尼克号数据集(Titanic dataset)的示例性数据分析过程,请阅读:

• 泰坦尼克号EDA,由Tarek Dib

要了解如何使用Seaborn(统计数据可视化库)请参阅:

• 可视化数据集的分布,Seaborn

一些可能对数据探索有用的附加库:

• Dora - 由Nathan Epstein在Python中进行探索性数据分析的工具

• Pandas-profiling - 由Jos Polfliet创建pandas DataFrame对象的HTML分析报告

有关分类数据的快速词汇,请参阅以下内容:

• 数据科学的定性研究方法?, Kevin Gray

在Python中生成一个wordcloud Andreas Mueller

步骤3:处理缺失值(Dealing with Missing Values)

我们有各种各样的处理缺失数据的策略,并没有一个是通用的。

不同类型的数据和流程处理缺失值有不同最佳做法。然而,由于这种类型的知识既体现在经验上,也是基于领域的,所以我们重点关注可以采用的最基本的策略。

详解:七步就能掌握Python数据准备

那些讨厌的缺失值

处理缺失值的一些常见方法包括:

• 丢弃实例(dropping instances)。

• 丢弃属性(dropping attributes)。

• 估算所有缺失值的属性均值。

• 估算所有缺失值的属性中位数。

• 估算所有缺失值的属性模式。

• 使用回归来估计属性缺失值。

如上所述,所使用的建模方法的类型一定会对您的决策产生影响。例如,决策树不适合缺失值。此外,你可以从技术处理中想到,更多用于从数据集中确定缺失值的统计方法。但列出的方法都是可靠的,经过验定的和常用的方法。

• 使用缺少的数据,Pandas文档

• pandas.DataFrame.fillna,Pandas文档

有很多方法可以在Pandas DataFrame中完成填充缺失值,并将其替换为所需的内容。以下是几个基本的例子:

关于处理缺失价值的一些额外意见,特别是估算。

• 如何处理您的数据中的缺失值:第一部分,雅各布•约瑟夫

• 如何处理您的数据中的缺失值:第二部分,雅各布•约瑟夫

步骤4:处理异常值(Dealing with Outliers)

详解:七步就能掌握Python数据准备

你能找到异常吗?

关于处理异常值的一些讨论:

• 异常值:掉落或不掉落 The Analysis Factor

• 从数据中移除异常值可以吗? Stack Exchange

异常值可能是数据收集不佳的结果,或者它们可能是真的异常的数据。这是两种不同的场景,必须采取不同的方式,所以没有适合所有的“一刀切”的建议,类似于处理缺失值的建议。有时候在建模时包含异常值也是合适的。

来自Analysis Factor的一篇文章有一个特别好的观点:

一个选择是尝试转换。平方根和对数转换都拉高。如果异常值是一个因变量,这可以使假设更好,如果异常值是一个独立变量,可以减少单个点的影响。

我们将决定是否在数据集中放弃异常值。但是,如果您的模型确实要求以某种方式处理异常值数据,这里有几种讨论方法:

• 处理异常值的3种方法 Alberto Quesada

• 在Python中使用标准偏差去除异常值 Punit Jajodia

• 使用百分位数删除Pandas DataFrame中的异常值 Stack Overflow

步骤5:处理不平衡数据(Dealing with Imbalanced Data)

如果你的另一个强大的数据集缺少缺失值和异常值是由两个类组成:一个包含95%的实例,另一个包括仅5%的数据集呢?或者是更糟 - 99.8%vs 0.2%?

如果是这样,你的数据集就是不平衡的。这可能是有问题的,但没有必要把数据折腾到一边。或许你应该寻找更好的解决方法。

尽管这可能不是真正的数据准备任务,但是在数据准备阶段(EDA的重要性)早期就是要知道一个数据集的特征,数据的有效性当然也可以在这个准备阶段被初步评估。

首先,看看汤姆•福切特关于如何处理的这个问题:

• 学习不平衡课程,汤姆Fawcett

接下来,看看关于处理类不平衡的技术问题的讨论:

• 7种技术处理不平衡数据,叶武和Rick Radewagen

详解:七步就能掌握Python数据准备

认清和处理不平衡是重要的。

为什么我们会遇到不平衡的数据,以及为什么我们可以在某些领域比其他领域更频繁地处理不平衡数据的一个很好的解释是:

在那些领域中使用的数据通常少于1%,但也有例外(比如使用信用卡的欺诈者,用户点击广告或损坏的服务器扫描其网络。)然而,大多数机器学习算法对于不平衡数据集处理并不是很好。(7技术处理不平衡数据)可以帮助您训练分类器来检测异常类。

步骤6:数据转换(Data Transformations)

维基百科给数据转换定义是:

在统计学中,数据变换是将确定性数学函数应用于数据集中的每个点。也就是,每个数据点zi被变换值yi = f(zi),代替,其中f是函数。通常应用变换,使得数据看起来更接近地满足要应用的统计推断过程的假设,或提高图形的可解释性或外观。

数据转换是数据准备最重要的方面之一,而且数据转换的过程要比其他步骤更为精密。当缺失的数值显示在数据中时,它们通常易于查找,并且可以通过上述常见方法之一处理或者通过在域中随时间的洞察而获得的更复杂的措施来处理。然而,当需要数据转换时,如果不需要转换类型,通常就不容易识别。

我们来看几个具体的转换。

Scikit的学习文档概述了一些最重要的预处理转换的理论依据,即标准化,归一化和二进制值化。

• 预处理数据,Scikit学习文档。

单热编码“将分类特征转换为使用分类和回归算法更好的格式”。详情参阅下面的文章:

• 什么是热编码,什么时候用于数据科学? HåkonHapnes Strand

• 如何在Python中进行热编码? Stack Overflow

• 什么时候你应该记录一个分配(数字)的日志吗?,Stack Exchange

步骤7:完成接触和前进(Finishing Touches & Moving Ahead)

你的数据是“干净的”。为了我们的目的,这意味着你现在需要有一个有效和可用的Pandas DataFrame。

如果您想要将数据送入机器学习算法,以便尝试构建模型,则可能需要以更合适的方式显示数据。在Python生态系统中,这通常是一个numpy ndarray(或矩阵)。你可以看看下面的一些初步的想法:

• 将Pandas DataFrame转换为数组,并评估多线性回归模型, Stack Overflow

详解:七步就能掌握Python数据准备

非常简单的数据准备过程

有了干净的数据,你还想在Python中进行机器学习。请看下下面的文章!

• 使用Python掌握机器学习的更多步骤,Matthew Mayo

如果你不想继续建模,怎么办?或者,如果你这样做,但是你想将这些数据输出到更适合你的情况的存储形式?以下是有关Pandas DataFrame存储的一些信息:

• 将Pandas DataFrame写入MySQL,Stack Overflow

• Quick HDF5 with Pandas Giuseppe Vettigli

不要忘记在前进之前还有其他数据集相关的注意事项,特别是将数据集分成培训和测试集,以适用于各种机器学习任务的过程:

• Numpy:如何将数据集(数组)分割/分割成训练和测试数据集,例如交叉验证?,Stack Overflow

• 有没有Python函数将数据分成列车,交叉验证和测试集?,Quora

• 做数据科学:Kaggle演练第3部分 - 清洁数据,由Brett Romero

• 机器学习工作流程从Python第1部分:数据准备Matthew Mayo

作者介绍:

Matthew Mayo是数据科学家,KDnuggets的编辑,以及机器学习爱好者和全能数据爱好者。他对无监督学习,深层神经网络,自然语言处理,算法设计和优化以及分布式数据处理和分析方法特别感兴趣。它拥有CS硕士学位和数据挖掘研究生文凭

个人网站:http://www.kdnuggets.com/author/matt-mayo

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《7 Steps to Mastering Data Preparation with Python》,作者:Matthew Mayo, KDnuggets,译者:袁虎,审阅:我是主题曲哥哥 6816816151 阿福

相关推荐