KeyPoints在常见的机器学习/深度学习项目中,数据准备占整个分析流水线的60%到80%。市场上有各种用于数据清洗和特征工程的编程语言、框架和工具。它们之间的功能有重叠,并且各有优缺点。数据整理是数据预处理的重要扩展。最适合用于可视化分析工具,可以避免分析流程中断。可视化分析工具与R、Python、KNIME和RapidMiner等开源数据科学组件相互补充。避免过度使用组件可以加速数据科学项目。因此,在数据准备步骤中利用流式摄取框架或流式分析产品可能是一个不错的选择。机器学习和深度学习项目在大多数企业中越来越重要。一个完整的项目流程包括数据准备、构建分析模型、部署到生产环境。该过程是一个洞察-行动-循环(insights-action-loop),这个循环可以不断改进分析模型。Forrester将这个完整的流程及其背后的平台称为InsightsPlatform。当您打算使用机器学习或深度学习技术来构建分析模型时,一项重要的任务是整合和准备来自各种数据源(例如文件、数据库、大数据存储、传感器或社交网络等)的数据集。此步骤可以解释高达整个分析项目的80%。本文比较了几种数据准备方法,即提取-转换-加载(ETL)批处理、流式摄取和数据整理。在高级分析技术和开源框架(例如R、ApacheSpark、KNIME、RapidMiner)的帮助下,讨论了各种选项及其权衡。本文还讨论了数据准备如何与可视化分析相关,以及不同用户角色(例如数据科学家或业务分析师)应如何协同工作以构建分析模型的最佳实践。数据准备=数据清洗(DataCleansing)+特征工程(FeatureEngineering)数据准备是数据科学的核心。它包括数据清理和特征工程。另外领域知识(domainknowledge)也很重要,它有助于获得好的结果。数据准备不能完全自动化,至少在最初不能。通常,数据准备占整个分析管道(流程)的60%到80%。然而,为了让机器学习算法在数据集上达到最佳精度,数据准备是必不可少的。数据清洗使数据获得正确的形状和质量以供分析。它包括许多不同的功能,例如:基本功能(选择、过滤、去重、...)采样(平衡、分层、...)数据分布(创建训练+验证+测试数据集,...)转换(normalization,standardization,scaling,pivoting,...)binning(countbased,treatmissingvaluesastheirowngroup,...)datareplacement(cutting,splitting,merging,...))weightingandselection(属性加权,自动优化,...)属性生成(ID生成,...)数据插补(使用统计算法替换缺失的观察值)特征工程以选择正确的属性进行分析。我们需要数据的领域知识来选择或创建允许机器学习算法正确工作的属性。特征工程过程包括:头脑风暴或特征测试特征选择验证这些特征如何与模型一起工作如果需要改进特征返回头脑风暴/创建更多特征直到工作完成注意特征工程已经在建模(构建分析模型)步骤,但它也利用了数据准备功能(例如,提取部分字符串)。数据清洗和特征工程是数据准备的一部分,也是机器学习和深度学习应用的基础。两者都不是那么容易,都需要工作。数据准备发生在分析项目的不同阶段:数据预处理:数据在从源头获取后直接进行处理。通常由开发人员或数据科学家实施,它包括初始转换、聚合和数据清理。此步骤在数据的交互式分析开始之前完成。它只执行一次。数据整理:在交互式数据分析和建模期间准备数据。通常由数据科学家或业务分析师完成,以更改数据集和特征工程的视图。此步骤迭代地更改数据集的形状,直到它很好地找到见解或构建良好的分析模型。不可或缺的数据预处理和DataWrangling让我们看一下模型构建的典型分析过程:数据访问数据预处理探索性数据分析(EDA)模型构建模型验证模型执行部署步骤2重点介绍构建分析模型之前的数据预处理,而数据wrangling在步骤3和4中使用(数据整理允许在分析数据和构建模型时交互式调整数据集)。请注意,所有三个步骤(2、3、4)都可以包括数据清理和特征工程。以下屏幕截图是Google搜索术语“数据准备”、“数据预处理”和“数据整理”的趋势。可以看出,datawrangling越来越受到关注:图1:“数据准备”、“数据预处理”和“数据争用”的Google搜索趋势“内联数据争用”是“数据争用”的一种特殊形式整理。在在线数据整理中,您可以使用可视化分析工具。这些工具不仅可以用于可视化和模型构建,还可以用于直接交互整理。Inlinedatawrangling具有巨大的优势,如下图所示:图2:解耦数据预处理和inlinedatawrangling的比较分析管道中的数据预处理和数据wrangling步骤通常由不同类型的用户完成。以下是分析项目中涉及的各种用户角色:业务分析师:具有特定领域知识的业务/行业专家数据科学家:数学、统计和编程(数据科学/脚本)方面的专家;能够编写低级代码或使用高级工具CitizenDataScientist:类似于数据科学家,但级别更高;需要使用更高级别的工具而不是编写代码;根据工具的易用性,相关工作甚至可以由业务分析师完成作者:软件开发专家(企业应用程序)这些用户必须紧密合作才能在数据科学项目中取得成功(另请参阅“如何避免Anti-PatternsinAnalytics:ThreeTakeawaysfromMachineLearning”,本文可以帮助您更好地理解这些用户角色)。本文虽然侧重于数据准备,但一张图胜过千言万语,而人类只能解读直观可见的事物,而无法解读那些复杂的非结构化数据集,因此了解数据准备与可视化分析之间的关系也很重要。有关更多详细信息,请参阅文章WhyYouShouldUseVisualAnalyticstoMakeBetterDecisions。目前主要的可视化分析工具有Qlik、Tableau和TIBCOSpotfire。那么可视化分析与数据整理有何关系?RITOResearch的首席分析师表示:“要求分析师停止他们正在做的事情并转向另一种工具,这让人抓狂。”它打乱了他们的工作流程。他们不得不回去重新开始。这严重影响了他们的生产力和创造力。”Kaggle的Titanic数据集的以下部分提供了几种数据准备备选方案。我们将使用非常著名的泰坦尼克号数据集(来自Kaggle)来演示一些实际示例。泰坦尼克号数据集分为训练集和测试集,将用于构建预测哪些乘客可能生死的分析模型:图3:Kaggle泰坦尼克号数据集的元数据图4:Kaggle泰坦尼克号数据集数??据行示例原始数据集不能直接用于构建分析模型。它包含重复项、缺失值和包含各种不同信息的单元格。因此,在应用机器学习算法时,需要先对原始数据集进行处理,以获得最佳结果。下面是一些数据清洗和特征工程的例子:通过特征提取创建新列:获取每个乘客的名字前缀来推断他们的性别,例如,先生,夫人,小姐,大师通过聚合创建新列,查看有多少peopleareineachpassenger'stourgroup:"FamilySize=1+SibSp+Parch"通过提取第一个字符创建一个新列用于排序和分析客舱:提取“Cabin”列字符的第一个删除数据集中的重复项,例如乘客同时在训练和测试集中通过填充将数据添加到空单元格,以便能够处理缺少数据的行,例如年龄:将“不可用”替换为所有乘客或将其离散化到相应的箱中;compartments:用“U”(未知)替换空值;或应用高级插补方法,例如,通过链式方程进行多重插补)(MICE)利用数据科学函数,例如缩放、归一化、主成分分析(PCA)或Box-Cox,使所有数据处于“相似形状””,以便进行合理的分析以下部分说明了各种编程语言、框架和数据准备工具。请注意,没有一种解决方案适合所有问题。此外,这些方案之间有很多重叠之处。因此,许多问题可以根据用户角色和用例使用不同的解决方案来解决。数据科学的数据预处理一些编程语言是专门为数据科学项目设计的,或者对它有很好的支持,尤其是R和Python。它们包含机器学习算法的各种实现、过滤或提取等预处理功能,以及缩放、规范化或混洗等数据科学功能。数据科学家需要编写相对低级的代码来进行探索性数据分析和准备。与使用Java或C#的传统编程相反,使用R或Python进行数据预处理时,您不需要编写太多代码;可用于数据预处理和模型构建。这些编程语言是为数据科学家准备数据和构建分析模型而构建的,它们不适合企业部署(将分析模型部署到具有大规模和高可靠性的新数据)。因此,市场上有商业企业运行时可以帮助您实现企业部署。通常,它们支持相同的源代码,因此您无需为企业部署重写任何内容。对于R,你可以使用开源的MicrosoftROpen(原RevolutionR),或者TIBCOEnterpriseRuntimeforR。后者的优点是不受GPL开源许可的限制,所以你可以在任何嵌入式中使用它或外部环境。下面的代码摘自一个很好的R教程,该教程演示了如何使用基本R语言预处理和分析泰坦尼克号数据集:###DatapreprocessingusingbasicRlanguage:#survivalis"yes/no"#=>Typeconversion:no数值和对应的数据处理/分析data.combined$Survived<-as.factor(data.combined$Survived)#从全名中分析姓氏和称谓data.combined[1:25,"Name"]name.splits<-str_split(data.combined$Name,",")name.splits[1]last.names<-sapply(name.splits,"[",1)last.names[1:10]#特征工程:创建家庭规模特征#(siblings/spouse+parents/children+1)temp.SibSp<-c(train$SibSp,test$SibSp)temp.Parch<-c(train$Parch,test$Parch)data.combined$FamilySize<-as.factor(temp.SibSp+temp.Parch+1)除了对预处理的基本支持外,这些编程语言还提供了许多额外的数据科学包。例如,许多数据科学家利用R中非常强大的caret包来简化数据准备并减少代码大小。该软件包简化了复杂回归和分类问题的模型准备和训练。它为数百个现有R模型实现提供了一个通用接口(在后台使用各种API)。以下代码段使用caret的通用API对Titanic数据集进行预处理:###使用Rcaret包进行数据预处理:#使用caret的preProcess函数对数据进行归一化preproc.data.combined<-data.combined[,c("ticket.party.size","avg.fare")]preProc<-preProcess(preproc.data.combined,method=c("center","scale"))#->whatyousee这是一个相对值而不是绝对值(即相互之间的关系):postproc.data.combined<-predict(preProc,preproc.data.combined)另一个用于数据预处理的R包是dplyr包。它不如caret包强大,只专注于操作、清理和汇总非结构化数据。Dplyr旨在为数据操作的每个基本动作提供一个函数:filter()(和slice())arrange()select()(和rename())distinct()mutate()(和transmute())summarize()sample_n(和sample_frac())因此,学习和理解许多数据操作任务变得容易。data.table包也是如此。如您所见,您可以通过多种方式在R中预处理数据集。为数据科学家或开发人员预处理大型数据集可以使用R或Python等编程语言来处理小型数据集。但是,它们并不是为处理真正的大数据集而创建的;同时,我们经常需要分析几GB、TB甚至PB规模的数据。ApacheHadoop或ApacheSpark等大数据框架是为边缘(数据所在的位置)的弹性可扩展性和数据预处理而创建的。这些大数据框架专注于“幕后”编码,配置起来比R或Python环境复杂得多。Hortonworks、Cloudera、MapR或Databricks等商业软件可以提供帮助。通常,数据科学家和开发人员相互协作以完成大数据项目。后者负责集群配置、部署和监控,而数据科学家则利用R或PythonAPI编写用于数据预处理和构建分析模型的代码。源代码通常看起来与仅使用R或Python的代码非常相似,但数据预处理是在整个集群中并行完成的。以下示例演示了如何使用Spark的ScalaAPI对泰坦尼克号数据集进行预处理和特征工程:###DataPreprocessingUsingScalaandApacheSparkAPI:#FeatureEngineering:CreatingFamilySizeFeatures#(siblings/spouse+parents/child+1)valfamilySize:((Int,Int)=>Int)=(sibSp:Int,parCh:Int)=>sibSp+parCh+1valfamilySizeUDF=udf(familySize)valdfWithFamilySize=df.withColumn("FamilySize",familySizeUDF(col("SibSp"),col("Parch")))//为年龄列填空值valavgAge=trainDF.select("Age").union(testDF.select("Age")).agg(avg("Age")).collect()match{caseArray(Row(avg:Double))=>avgcase_=>0}当然,您可以使用Spark的Java或PythonAPI来做同样的事情。公民数据科学家的数据预处理通常,您希望变得敏捷并快速获得结果。这通常需要在准备和分析数据集时进行大量试验和错误。您可以利用现有的各种快速且易于使用的数据科学工具。这些工具提供:开发环境和运行/执行服务器使用拖放和代码生成的可视化“编码”与各种数据科学框架(例如R、Python或更强大的框架,例如ApacheHadoop、ApacheSpark或潜在的H2O。ai)大数据框架数据科学家可以使用这些工具来加速数据预处理和模型构建。此外,此类工具还有助于解决机器学习算法的数据预处理和实现,因此也可供没有太多项目经验的平民数据科学家使用。一些工具甚至能够提出建议,帮助用户预处理、显示和分析数据集。这些工具在底层人工智能的驱动下变得越来越智能。以下示例展示了如何使用两个开源数据科学工具KNIME和RapidMiner对Titanic数据集进行预处理:PreprocessingtheTitanicdatasetwithKNIMEPreprocessingtheTitanicdatasetwithRapidMiner可以使用可视化IDE配置预处理,源代码为不是如前所述用R或Scala编写的。这使得大多数用户的数据准备和分析以及数据维护和移交更加容易。面向业务分析师或公民数据科学家的数据加工数据加工(有时称为数据加工)是一种使用简单直观的图形工具准备数据的方法。这些工具侧重于易用性和敏捷的数据准备。因此,它不必由开发人员或数据科学家来完成,但所有用户都可以(包括业务分析师或公民数据科学家)。DataWrangler和TrifactaWrangler是数据整理的两个例子。用于数据整理的Trifacta请注意,这些工具不如数据预处理框架强大,因此它们通常用于最后一英里的数据准备。它们不会替代其他集成选项,例如ETL(提取-转换-加载)工具,或使用R、Python、KNIME、RapidMiner等进行数据预处理。如介绍中所述,因为数据整理与实际数据分析分离,工具对于数据整理本身可能有一些缺点。VisualAnalytics工具中的数据整理允许在数据的探索性分析期间进行内联数据整理。单个用户可以使用单个工具来完成。例如,请参阅将可视化分析与内联数据争用(以及构建分析模型的其他数据科学功能)相结合的TIBCOSpotfire示例:TIBCOSpotfire中的可视化分析工具内联数据争用数据争用工具和内联数据争用可视化分析工具可以是每个用户角色都在使用:业务分析师、(公民)数据科学家或开发人员,这些工具可加速数据准备和数据分析。本文重点介绍构建机器学习模型的数据准备。您可以使用编程语言(如R或Python)、数据科学工具(如KNIME或RapidMiner)、数据整理(使用DataWrangler或Triificata)或内联数据整理(通过TIBCOSpotfire)。通常,在开始任何这些之前,您需要能够访问您拥有的所有数据,这些数据存储在各种或多或少有组织的数据源(例如关系数据库、数据仓库、大数据集群)中。因此,在接下来的两部分中,我们将简要介绍用于数据摄取的ETL和流式分析工具。通常数据摄取还包括数据准备的一些部分,特别是数据聚合和数据清洗。Developer'sETL(Extract-Transform-Load)和DQ(DataQuality,数据质量)ETL工具是为开发者设计的,用于集成各种数据源,包括许多遗留的和专有的(proprietary)接口(如Mainframe或EDIFACT接口),这些接口有非常复杂的数据结构。它还包括数据清理(在这种情况下通常称为“数据质量”工具),侧重于使用可视化编码的易用性和企业部署(类似于KNIME或RapidMiner等数据科学工具,但侧重于ETL和数据质量).它们还支持大数据框架,例如ApacheHadoop和ApacheSpark。此外,它们还为地址验证等质量改进提供开箱即用的支持。ETL和DQ通常在长时间运行的批处理过程中实现,因此如果您需要使用实时数据构建模型,这有时会产生负面影响。ETL和DQ工具的示例是一些开源工具,如Pentaho或Talend,或专有供应商Informatica。市场正朝着更简单、更易于使用的Web用户界面发展,使其他用户角色也能够执行基本任务。面向开发人员的数据摄取和流分析工具数据摄取和流分析工具可用于在流中添加和预处理数据。这些框架允许批量或实时预处理数据。下图是一个典型的流式分析流程,包括数据采集、预处理、分析、处理、输出:流式分析流程的步骤市面上有各种框架和工具。它们都以某种方式支持Hadoop或Spark等大数据框架。举几个例子:数据采集开源框架(只关注数据采集和预处理步骤):ApacheNiFi、StreamSets、CaskHydrator流处理开源框架(完整的流分析过程):ApacheStorm、ApacheFlink、ApacheApexflowStreaming商用软件(完整的流分析管道):SoftwareAGApama、IBMStreams、TIBCOStreamBase有关更多信息,请参阅流分析框架、产品和云服务的比较。使用这些工具(包括ETL)的巨大优势在于,您可以使用同一套工具或框架进行数据预处理(针对历史数据)和实时处理(针对新数据)(对变化的数据使用分析模型)。这将是一个不错的选择,用户不仅可以保留一个小而精简的工具集,而且可以从一组工具中获得ETL/采集和实时处理。下图是使用TIBCOStreamBase预处理Titanic数据集的示例:StreamingPreprocessingofTitanicDatasets对于数据摄取和ETL工具,流分析市场正在转向更简单的Web用户界面,用户更容易使用该界面启用其他用户角色也可以执行一些基本任务。但这不会取代现有工具用于更高级别的用例,而是为分析师或数据科学家提供新的选择。他们可以更轻松、更直接地部署一些规则、关联或分析模型,而无需开发人员的帮助。数据准备是机器学习项目成功的关键使用机器学习或深度学习技术构建分析模型并不容易。数据准备占整个分析管道的60%到80%。市场上有各种用于数据清洗和特征工程的编程语言、框架和工具。它们之间的功能有重叠,并且各有优缺点。数据整理是数据预处理的重要附加组件。最适合用于可视化分析工具,可以避免分析流程中断。可视化分析工具与R、Python、KNIME和RapidMiner等开源数据科学组件相互补充。避免过度使用组件可以加速数据科学项目。因此,在数据准备步骤中利用流式摄取框架或流式分析产品可能是一个不错的选择。我们只需要编写一次预处理步骤,然后在历史数据的批处理中使用它来构建分析模型。同时,它也可以用于实时处理,使我们构建的分析模型可以用于新的事件。这些幻灯片和视频提供了更多关于数据准备的信息,通过这些材料,您可以更详细地了解本文的内容。
