像数据科学家一样思考:12步指南(下)

2019年09月29日 由 sunlei 发表 287911 0

6 -数据分析




我们的数据科学过程的第6步是数据的统计分析。统计方法通常被认为是做好数据科学所需技能和知识的近一半,或至少三分之一。另一个较大的部分是软件开发和/或应用程序,其余较小的部分是主题或领域专长。

统计学的一边是数学,另一边是数据。数学——尤其是应用数学——为统计提供了一套工具,使分析和解释成为可能。在任何情况下,数学一般不会触及现实世界。数学完全建立在逻辑的基础上,总是从一组假设开始,必须先假设一个它能描述的世界,然后才开始描述它。每一个数学命题都可以从一个if(假设为真)开始表述,而这个if将命题及其结论提升为抽象。这并不是说数学在现实世界中没有用;恰恰相反。数学,而不是一门科学,更多的是我们用来描述事物的词汇。其中一些可能在现实世界中。就词汇表及其所包含的单词而言,描述很少是完全正确的。我们的目标是尽可能接近正确。

然而,数学确实提供了统计学所使用的许多重型机械。统计分布通常用具有实际科学意义的根的复杂方程来描述。拟合统计模型通常采用数学优化技术。即使一个项目的数据被假定存在的空间必须用数学来描述,即使这个描述仅仅是“n维欧几里德空间”。

除了数学之外,统计还拥有自己的一组技术,这些技术主要以数据为中心。

描述性统计通常是一种直观或简单的统计,它可以很好地概述数据,而不会过于复杂或难以理解。从某种意义上说,描述性统计通常与数据紧密相关。

推理统计本质上是从数据中删除一个或多个步骤。推理是基于可测量的相关量来估计未知量的过程。通常,推理统计涉及一个统计模型,它定义了数量、可测量的和不可测量的,以及它们之间的关系。从推理统计学的方法可以从非常简单到非常复杂,它们的精确性、抽象性和可解释性也各不相同。



统计建模是使用统计结构描述系统,然后使用该模型帮助分析和解释与系统相关的数据的一般实践。描述性统计和推理统计都依赖于统计模型,但在某些情况下,模型本身的显式构造和解释起着次要的作用。

使用统计建模,主要的焦点是理解模型和它所描述的底层系统。数学建模是一个相关的概念,它更强调模型的构建和解释,而不是它与数据的关系。统计建模关注的是模型与数据的关系。以下是一些重要的统计建模概念,你应该知道:

  • 线性,指数,多项式,样条,微分,非线性方程。

  • 潜在的变量。

  • 量化不确定性:随机性、方差和误差项。

  • 拟合模型:最大似然估计、最大后验估计、期望最大化、变分贝叶斯、马尔可夫链蒙特卡罗、过拟合。

  • 贝叶斯统计与频率统计。

  • 假设检验。

  • 聚类。

  • 成分分析。


离原始数据最远的是一组统计技术,无论好坏,这些技术通常被称为黑盒方法。“黑匣子”一词指的是,一些统计方法有如此多相互之间有着复杂关系的活动部件,以至于几乎不可能剖析方法本身,因为它被应用于特定上下文中的特定数据。来自机器学习和人工智能的许多方法都符合这种描述。如果你尝试个人出现在一个数据集划分成几类,而你应用机器学习技术随机森林或神经网络等, 那么在事实发生之后,通常很难说为什么某个个体被以某种方式分类。数据进入黑盒子,分类出来,你通常不确定两者之间到底发生了什么。以下是一些最流行的机器学习算法,可应用于从数据点提取的特征值:

  • 随机森林

  • 支持向量机

  • Boosting

  • 神经网络

  • 深度学习


7-工程产品




我们的下一步是构建统计软件。如果统计是分析和从数据中得出结论的框架,那么软件就是使这个框架起作用的工具。除此之外,数据科学家必须为任何项目做出许多软件选择。如果你有一个最喜欢的程序,这通常是一个不错的选择,如果没有其他原因,除了你对它的熟悉。但也有很好的理由选择其他的。如果你刚接触数据科学或统计软件,你可能很难找到一个起点。

对于任何花费大量时间使用Microsoft Excel或其他电子表格应用程序的人来说,电子表格和基于gui的应用程序通常是执行任何类型的数据分析的首选。特别是如果数据是表格形式的,比如CSV,并且没有太多的表格形式,那么在电子表格中开始分析是很容易的。此外,如果您需要做的计算并不复杂,电子表格甚至可以涵盖项目所需的所有软件。这里常用的软件工具有Excel、SPSS、Stata、SAS和Minitab。如果您的目标是学习一门真正的编程语言,那么学习这些中级工具之一的编程语言是一个很好的步骤。这些语言本身就非常有用。特别是SAS,在统计行业拥有广泛的追随者,学习其语言本身就是一个合理的目标。

编程语言比中级统计应用程序更加通用。任何一种流行语言的代码都有潜力做任何事情。这些语言可以在任何机器上执行任意数量的指令,可以通过api与其他软件服务交互,还可以包含在脚本和其他软件中。与父应用程序绑定的语言在这些能力方面受到严重限制。

MATLAB是一种专有的软件环境和编程语言,擅长处理矩阵。MATLAB的成本相当高,但对学生和其他大学附属人员有很大的折扣。有些人决定在一个名为Octave的开源项目中复制它。随着Octave的成熟,它在可用的功能和能力上越来越接近MATLAB。除了使用附加包的代码(也就是工具箱),MATLAB中编写的绝大多数代码都可以使用八度音阶,反之亦然。,如果您发现自己有一些Matlab代码,但没有许可证,这很好。



总的来说,MATLAB和Octave对于在信号处理、通信、图像处理和优化等方面处理大型矩阵的工程师(特别是电气工程师)来说非常适合。

R是基于贝尔实验室开发的S编程语言。它是开放源码的,但是它的许可比其他一些流行的语言,如Python和Java,有更多的限制,特别是如果您正在构建一个商业软件产品。与MATLAB相比,在R中更容易加载和处理不同类型的数据。MATLAB擅长处理表格数据,但一般来说,R更适合处理带有头、混合列类型(整数、小数、字符串等)、JSON和数据库查询的表格。当读取表格数据时,R倾向于默认返回数据帧类型的对象。数据帧是多用途对象,包含列中的数据,其中每个列可以是不同的数据类型——例如,数值、字符串,甚至矩阵——但是每个列中的所有条目必须相同。一开始,使用数据帧可能会让人感到困惑,但经过一段时间后,它们的通用性和强大性肯定会变得非常明显。

R是开源的一个优点是,无论开发人员在什么地方认为合适,他们都更容易为语言和包开发做出贡献。这些开源贡献帮助R极大地成长,并扩展了它与其他软件工具的兼容性。在CRAN网站上有成千上万的程序包可供R使用。这是R语言唯一的最大优势;您很可能会找到一个软件包,它可以帮助您执行您想要执行的分析类型,因此已经为您完成了一些工作。MATLAB也有软件包,但没有那么多,尽管它们通常都很好。R有好的和坏的,以及介于两者之间的所有东西。您还会发现大量的R代码可以在公共repos中免费获得,但它们可能还没有达到正式的包状态。



总的来说,R对于统计学家和其他从事数据量大、探索性工作的人来说是一个不错的选择,而不是从事分析软件行业等生产软件方面的工作。

Python是一种强大的语言,可以用于编写脚本和创建生产软件。它更自然地适合于与其他软件服务集成、创建api和web服务以及构建应用程序等非统计任务。可能因为Python最初是一种通用编程语言,所以它有一个稳健的的面向对象设计框架。

虽然Python最初并没有打算成为一种高度统计语言,但是已经为Python开发了几个包,使其能够与R和MATLAB竞争。当处理向量、数组和矩阵时,数值方法的numpy包是必不可少的。scipy和scikit-learn包在优化、集成、集群、回归、分类和机器学习等技术中添加了功能。有了这三个包,Python可以与R和MATLAB的核心功能相媲美,而且在一些领域,比如机器学习,Python似乎更受数据科学家的欢迎。在数据处理方面,pandas包已经变得非常流行。它在某种程度上受到R中的数据帧概念的影响,但从那以后在功能上已经超过了这个概念。如果您的数据集足够大,可以降低计算速度,但又足够小,可以容纳计算机的内存,那么pandas可能适合您。

然而,数据科学中最著名的Python包之一是自然语言工具包(NLTK)。它是自然语言处理(NLP)中最流行、最稳健的工具。现在,如果有人正在解析和分析来自twitter、newsfeeds、enron电子邮件库或其他地方的文本,那么他们很可能已经使用了NLTK。它利用其他NLP工具如wordnet和各种标记化和投票方法,在一个地方提供最全面的nlp功能集。



总的来说,Python非常适合那些想要做一些数据科学以及其他一些纯粹的、非统计软件开发的人。它是唯一一种流行的、稳健的语言,可以同时做好这两件事。

虽然不是脚本语言,也不适合探索性数据科学,但是Java是软件应用程序开发中最突出的语言之一,因此在分析应用程序开发中经常使用它。许多使Java不利于探索性数据科学的相同原因使得它对应用程序开发有好处。

Java对于探索性数据科学不是很好,但对于基于数据科学的大规模或生产代码来说,它是很好的。Java有许多统计库,用于从优化到机器学习。许多这些都是由Apache软件基金会提供和支持的。



在选择统计软件工具时,请牢记以下准则:

  • 方法的实现:如果您正在使用一个相当常见的方法,那么许多工具可能已经有了一个实现,最好使用其中之一。已经被很多人使用过的代码通常是相对没有错误的,相比之下,你一天写的一些代码只使用一两次。

  • 灵活性:除了能够执行您想要的主要统计分析之外,如果统计工具能够执行一些相关的方法,这通常是有帮助的。通常你会发现你选择的方法并不像你所希望的那样有效,在这个过程中你学到的东西会让你相信另一种方法可能会更好。如果您的软件工具没有其他选择,那么您要么坚持使用第一种选择,要么必须切换到另一种工具。

  • 信息性:一些统计工具,特别是像统计编程语言这样的高级统计工具,提供了查看几乎所有统计方法和结果的能力,甚至像机器学习这样的黑箱方法。这些内部并不总是用户友好的,但至少它们是可用的。

  • 共性:使用软件的人越多,意味着更多的人尝试过它,得到了结果,检查了结果,并且可能报告了他们遇到的问题(如果有的话)。这样一来,软件,尤其是开源软件,就有了一个反馈循环,能够以合理及时的方式修复错误和问题。参与这个反馈循环的人越多,一个软件就越有可能是相对无缺陷的,或者是稳定的。

  • 良好的文档:除了常用之外,一个统计软件工具应该有全面和有用的文档。如果你找不到一些大问题的答案,比如如何为线性回归配置输入,或者如何为机器学习设置特征,这是一个坏兆头。如果大问题的答案不在文档中,那么对于以后不可避免地遇到的更具体的问题,要找到答案将更加困难。

  • 专门构建:一些软件工具或其软件包是为特定目的而构建的,然后在以后添加其他功能。例如,Matlab和R语言中的矩阵代数例程是构建语言时主要关注的问题,因此可以安全地假设它们是全面的和稳定的。相反,在Python和Java的初始版本中,矩阵代数并不是首要关注的问题,因此这些能力后来以包和库的形式添加。

  • 互操作性:如果您使用的是数据库,那么使用可以直接与数据库交互的工具会很有帮助。如果要基于结果构建web应用程序,可能需要选择支持web框架的工具,或者至少选择一个可以导出json或其他一些web友好格式的数据的工具。或者,如果您将在各种类型的计算机上使用统计工具,那么您将希望软件能够在各种操作系统上运行。将统计软件方法集成到完全不同的语言或工具中并不少见。

  • 许可证:如果您将商业软件用于商业目的,那么使用学术或学生许可证这样做可能会有法律风险。在未确认许可证不禁止的情况下,将商业软件(无论是否经过修改)出售给其他人也可能是危险的。


8 -优化数据




我们流程的第八步是使用辅助软件优化产品。我们第七步中的软件工具可以是多功能的,但它们本质上是统计的。软件能做的远不止统计。特别是,有许多工具可用于有效地存储、管理和移动数据。有些方法可以使计算和分析的几乎每个方面都更快、更容易管理。下面是4个流行的软件,可以使你作为一个数据科学家的工作更容易。

数据库是常见的,而且在项目中运行数据库的可能性相当高,特别是当您要使用其他人经常使用的数据时。但是,与其只是理所当然地遇到一个数据库,不如自己建立一个数据库来帮助您完成项目。最常见的两种类型是关系类型(SQL)和面向文档类型(NoSQL、ElasticSearch)。与将数据存储在计算机的文件系统上相比,数据库和其他相关类型的数据存储具有许多优点。大多数情况下,数据库可以通过查询以比文件系统更快的速度提供对数据的任意访问,而且它们还可以以优于文件系统扩展的便捷方式扩展到具有冗余的大容量。

高性能计算(High-performance computing, HPC)是一个通用术语,适用于需要进行大量计算并希望尽可能快地进行计算的情况。您可以使用超级计算机(比个人计算机快数百万倍)、计算机群集(一组相互连接的计算机,通常通过本地网络,并配置为在执行计算任务时能够很好地协同工作)或图形处理单元(非常擅长执行高度并行化的计算)。如果你有访问权限,那么HPC是一个很好的替代方案,可以让你的电脑计算所有需要计算的东西。在您选择加入之前,必须权衡使用云HPC产品(以及一些功能强大的机器)的好处和金钱成本。

最大的云服务提供商大多是以其他业务为核心的大型技术公司。亚马逊、谷歌和微软等公司在向公众开放之前就已经拥有了大量的计算和存储资源。但他们并不总是把资源用在最大的产能上,因此他们决定出租多余的产能,并扩大总产能,结果是一系列有利可图的商业决策。所提供的服务通常大致相当于个人计算机、计算机群集或本地网络的功能。所有这些都可以在世界各地的地理区域中使用,通过在线连接和标准连接协议以及通常的web浏览器界面访问。如果您没有足够的资源来充分满足您的数据科学需求,那么值得考虑使用云服务。

最后,您可以尝试大数据技术:Hadoop、HBase和Hive等。大数据技术的设计初衷并不是为了大量移动数据。当数据集的规模非常大时,这可以节省时间和金钱,而这些数据集正是为这些技术设计的。只要计算任务是数据传输绑定的,大数据就可以提高效率。但是,与本章描述的其他技术相比,大数据软件需要付出一些努力才能与您的软件一起运行。只有当您有时间和资源来摆弄软件及其配置,并且几乎确定您将从中获得可观的收益时,您才应该跨出这一步。

9 -执行计划




构建阶段的最后一步是执行产品的构建计划。大多数软件工程师可能都熟悉构建复杂软件的测试和磨难,但他们可能不熟悉构建处理质量可疑数据的软件的难度。另一方面,统计学家知道拥有脏数据是什么感觉,但在构建高质量软件方面可能没有什么经验。同样,与项目相关的不同角色的个人,他们每个人都可能拥有不同的经验和能力,将期望和准备不同的事情。

如果你是一个统计学家,你知道脏数据,你知道偏见和夸大结果的重要性。另一方面,您可能没有太多为业务构建软件的经验,特别是生产软件。您应该咨询具有实际经验的软件工程师,以了解如何提高软件的稳定性。

如果您是一名软件工程师,您知道开发生命周期是什么样子的,并且知道如何在部署和交付之前测试软件。但是您可能不了解数据,而且无论您多么擅长软件设计和开发,数据最终都会以您从未想到过的方式破坏您的应用程序。在构建软件时,这需要新的思维模式和对错误和bug的容忍度,因为错误和bug会经常发生。您应该咨询统计学家,他们非常擅长预测和处理有问题的数据,比如异常值、缺失值和损坏值。

如果你刚开始学数据科学,没有太多的统计或软件工程经验,任何有经验的人都可以给你一些可靠的建议,如果你能向他们解释你的项目和你的目标。作为一个新手,在这个阶段你有双重责任来弥补经验的不足。

如果你只是这个项目团队中的一员,沟通和协调是至关重要的。你不需要知道团队中发生的每件事,但是目标和期望是明确的,并且有人作为一个整体管理团队的领袖是必要的。

计划应该包含多个路径和选项,所有这些都取决于项目的结果、目标和截止日期。不管计划有多好,总有可能随着项目的进展而修改。即使你考虑了所有的不确定性,并且知道每一个可能的结果,超出计划范围的事情可能会改变它。计划需要更改的最常见原因是新信息的出现,来自项目外部的源,或者计划的一个或多个路径更改,或者目标本身更改。

随着项目的进展,您通常会看到越来越多的结果,这给了您一个机会来确保它们满足您的期望。一般来说,在涉及统计的数据科学项目中,预期不是基于统计意义的概念,就是基于对这些结果的实际有用性或适用性的其他概念,或者两者兼而有之。统计意义和实际用途往往密切相关,当然也不是相互排斥的。作为项目计划的一部分,您可能在统计分析的结果中包含了实现某种准确性或重要性的目标。达到这些目标将被认为是项目的成功。

第三阶段-收尾


一旦产品构建好了,您仍然有一些事情要做,以使项目更成功,并使您未来的工作更容易。那么,我们如何才能完成我们的数据科学项目呢?

10 -交付产品




完成阶段的第一步是产品交付。为了创建一个可以交付给客户的有效产品,首先必须理解客户的视角。其次,您需要为项目和客户选择最佳的媒体。最后,您必须选择要在产品中包含哪些信息和结果,以及要删除哪些内容。在产品创建和交付过程中做出正确的选择可以极大地提高项目成功的机会。

交付媒体可以采取多种形式。在数据科学中,产品最重要的一个方面是,客户是否被动地从产品中获取信息,或者客户是否积极地参与到产品中,并能够使用产品回答许多可能的问题中的任何一个。各种类型的产品可以在被动和主动之间的任何位置:

报告或白皮书可能是向客户交付结果的最简单的选择,其中包括文本、表格、数字和其他信息,这些信息可以解决项目要回答的部分或全部问题。报告和白皮书可以打印在纸上,也可以以pdf或其他电子格式发送。

在一些数据科学项目,分析和数据集的结果还可以用于数据超出原项目的范围,其中可能包括在原始数据生成的数据(在未来),类似的数据从不同的来源,或其他数据尚未分析因为这样或那样的原因。在这些情况下,如果您能为客户创建一个分析工具来执行这些分析并在新的数据集上生成结果,那么这将对客户很有帮助。如果客户能够有效地使用这个分析工具,它可能允许他们生成任意数量的结果,并在未来很长一段时间内继续回答他们的主要问题以及各种(但相似的)数据集。

如果你想交付一个比分析工具更主动的产品,你可能需要构建一个成熟的应用程序。如果您正在考虑交付交互式图形应用程序,那么最重要的是您必须设计、构建和部署它。通常,这些都不是一个小任务。如果您希望应用程序具有许多功能并具有灵活性,那么设计和构建它将变得更加困难。

除了决定交付结果的媒介之外,还必须决定它将包含哪些结果。一旦你选择了一种产品,你必须弄清楚你将用来填充它的内容。

一些结果和内容可能是包含的明显选择,但是对于其他信息来说,决策可能不是那么明显。通常,您希望包含尽可能多的有用信息和结果,但是您希望避免客户可能误解或误用您选择包含的任何结果。在许多情况下,这可能是一种微妙的平衡,它在很大程度上取决于具体的项目以及客户和其他受众的知识和经验。

11 -进行修订




在交付产品之后,我们在最初的反馈之后继续修改产品。一旦客户开始使用产品,就有可能出现一系列新的问题。尽管你尽了最大的努力,你可能并没有预料到你的客户会使用(或试图使用)你的产品的每一个方面。即使产品做了它应该做的事情,你的客户和用户也可能没有做这些事情并且没有有效地去做。

获得反馈很难。一方面,很难从客户、用户或其他人那里获得建设性的反馈。另一方面,如果不把它看作是对你花了大量时间和精力构建的产品的攻击或误解,你很难听取反馈和批评。一些数据科学家交付产品却忘记了它们。一些数据科学家交付产品并等待客户给出反馈。一些数据科学家不断地提供产品和打扰那些客户。通常,与客户保持联系是一个好主意,以确保您交付的产品能够解决一些问题。

进行产品修订可能比较棘手,而找到合适的解决方案和实现策略取决于您遇到的问题的类型以及您必须更改什么来修复它。如果在整个项目过程中,你一直保持着对不确定性的意识,并且在前进的每一步中都对许多可能的结果保持着意识,那么你发现自己现在面对的结果与之前预期的结果不同,可能就不足为奇了。但同样的意识实际上可以保证你至少接近一个可行的解决方案。实际上,这意味着你从来没有想过第一次就能把所有的东西100%正确,所以当然也有问题。但如果你一直很勤奋,问题就会变得很小,修复起来也相对容易。

一旦您发现了产品的一个问题,并确定了如何修复它,就仍然需要决定是否修复它。有些人的最初倾向是,每个问题都需要解决;这并不一定是真的。您可能有理由不希望对产品进行修正来解决问题,正如您有理由这样做一样。重要的是停止并考虑这些选项,而不是盲目地解决发现的每个问题,这会花费大量的时间和精力。

12 -完成项目




我们的数据科学过程的最后一步是结束它。当数据科学的一个项目结束时,看起来所有的工作都已经完成了,剩下的就是在你完全停止对项目的思考并进入下一个项目之前修复任何剩余的错误或其他问题(持续的产品支持和改进没有经受住NG)。但是,在完成这个项目之前,你可以做一些事情来增加你将来成功的机会,无论是扩展这个项目还是完全不同的项目。

有两种方法可以让你现在做的事情增加你将来成功的机会。一种方法是确保在将来的任何时候都可以轻松地再次获取此项目并重新执行、扩展或修改它。通过这样做,你将增加你在后续项目中成功的机会,与几个月或几年后你挖掘你的项目材料和代码,发现你不记得你到底做了什么或是怎么做的情况相比。有两种可行的方法是通过文档和存储。

如果你只从每个项目中吸取一个教训,那么它可能与一路上发生的最大意外有关。不确定性可以渗透到你工作的方方面面,记住过去给你带来问题的所有不确定性,有希望防止类似的事情再次发生。从数据到分析再到项目目标,几乎任何事情都可能在短时间内改变。意识到所有的可能性不仅是一个困难的挑战,而且几乎是不可能的。一个好的数据科学家和一个伟大的数据科学家的区别在于,他们能够预见可能出现的错误并做好准备。

结论


数据科学仍然带着一个新领域的光环。它的大部分组成部分——统计、软件开发、基于证据的问题解决等等——都是直接从成熟的、甚至是旧的领域发展而来的,但数据科学似乎是将这些部分重新组合成新的东西。数据科学的核心并不关注特定的数据库实现或编程语言,即使这些对于实践者来说是必不可少的。核心是数据内容、给定项目的目标和用于实现这些目标的数据分析方法之间的相互作用。



我非常希望你能看看Brian的书,了解更多关于数据科学过程每一步的细节。它对于数据科学、软件和统计方面的非专家来说非常容易理解。它生动地描述了数据科学是一个包含许多细微差别、警告和不确定性的过程。数据科学的力量不在于弄清楚接下来会发生什么,而在于意识到接下来可能发生什么,并最终发现接下来会发生什么。
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消