像数据科学家一样思考:12步指南(上)
7-工程产品
下一步是建立统计软件。如果统计是分析和从数据中得出结论的框架,那么软件就是将这个框架付诸行动的工具。数据科学家必须为任何项目做出许多软件选择。如果你有一个喜欢的软件,这通常是一个不错的选择,但是有充分的理由去挑选别的东西。如果你是数据科学或统计软件的新手,或许很难找到一个起点。
电子表格和基于GUI的应用程序通常是执行任何类型数据分析的首选。特别是如果数据是表格形式的,例如CSV,并且数据不是太多,那么在电子表格中开始分析就很容易了。此外,如果你需要进行的计算并不复杂,那么电子表格甚至可以涵盖项目的所有软件需求。这里常用的软件工具包括Excel、SPSS、Stata、SAS和Minitab。学习这些中级工具之一的编程语言可能是学习真正的编程语言的一个很好的一步,这些语言本身就非常有用。特别是SAS在统计行业中拥有广泛的追随者,学习它的语言本身就是一个合理的目标。
MATLAB是一种专有的软件环境和编程语言,而且MATLAB的成本相当高。有些人决定在一个名为Octave的开源项目中复制它。随着Octave的成熟,它在可用功能和功能方面越来越接近MATLAB。除了使用附加软件包(工具箱)的代码之外,用MATLAB编写的绝大多数代码都可以在Octave中工作,反之亦然。
总的来说,MATLAB和Octave非常适合在信号处理、通信、图像处理和优化等方面使用大型矩阵的工程师(特别是电气工程师)。
R语言是基于贝尔实验室S编程语言创建的。它是开源的,但其许可证比Python和Java等其他流行语言更具限制性,特别是你正在构建商业软件产品时。与MATLAB相比,R中更容易加载和处理不同类型的数据。MATLAB擅长处理表格数据,但一般来说,对于包含标题、混合列类型(整数,小数,字符串等)、JSON和数据库查询的表,R更好。
R的另一个优点是开源,开发人员可以更轻松地在他们认为合适的地方为语言和包开发做出贡献。这些开源贡献帮助R大幅增长并扩展了与其他软件工具的兼容性。CRAN网站提供了数以千计的R包,你可以找到你想要进行的分析类型的软件包,这是R语言的最大优势。MATLAB也有包,但不是很多,尽管它们通常非常好。总体而言,对于统计学家和其他追求数据探索性工作而不是在软件行业中构建生产软件的人来说,R是一个不错的选择。
Python是一种功能强大的语言,可用于编写脚本和创建生产软件。它更适合非统计任务,例如与其他软件服务集成,创建API和Web服务以及构建应用程序。可能因为Python最初是一种通用编程语言,它有一个强大的面向对象设计框架。
尽管Python最初并不是一种专门用于统计的语言,但有些人已经为Python开发了几个软件包,这些软件包提升了它的统计能力,现在足够与R和MATLAB竞争。在使用向量、数组和矩阵时,数值方法的numpy包是必不可少的。软件包scipy和scikit-learn在优化、集成、集群、回归、分类和机器学习等功能中很受欢迎。使用了这三个软件包,Python可以与R和MATLAB的核心功能相媲美,在某些领域,例如机器学习,Python似乎在数据科学家中更受欢迎。对于数据处理,pandas已经变得非常受欢迎。
然而,数据科学中最著名的Python包之一是Natural Language Toolkit(NLTK)。它是自然语言处理(NLP)中最受欢迎和最强大的工具。如果有人正在从Twitter、新闻源、电子邮件语料库或其他地方解析和分析文本,那么他们很可能已经使用了NLTK。总的来说,Python非常适合想要进行一些数据科学以及其他一些纯粹的非统计软件开发的人。
虽然Java不是脚本语言,不太适合探索性的数据科学,但Java是软件应用程序开发中最著名的语言之一,因此它经常用于分析应用程序开发。导致Java不利于探索性数据科学的许多原因使其更有利于应用程序开发。Java对于探索性数据科学来说并不是很好,但它对于基于数据科学的大规模或生产代码来说非常有用。Java有许多统计库,可用于从优化到机器学习,其中许多都是由Apache Software Foundation提供和支持的。
在选择统计软件工具时,请牢记以下标准:
- 灵活性:除了能够执行你想要的主要统计分析之外,如果统计工具可以执行一些相关方法,通常也会有所帮助。通常你会发现你选择的方法并不像你希望的那样好,而且你在这个过程中学到的东西会让你相信一种不同的方法可能会更好。
- 良好的文档:除了常用之外,统计软件工具应该有全面而有用的文档。如果你无法找到一些重要问题的答案,例如如何配置进行线性回归的输入或如何格式化机器学习功能,这是一个不好的迹象。如果大问题的答案不在文档中,那么找到你将不可避免地遇到的更具体问题的答案就更难了。
- 专用:某些软件工具或其软件包是为特定目的而构建的,之后又添加了其他功能。例如,MATLAB和R中的矩阵代数例程在构建语言时是主要关注的问题,因此可以安全地假设它们是全面且健壮的。相比之下,矩阵代数在初始版本的Python和Java中并不是主要关注的问题,因此这些功能稍后以包和库的形式添加。
- 互操作性:如果你正在使用数据库,那么使用可以直接与数据库交互的工具会很有帮助。如果你要根据结果构建Web应用程序,则可能需要选择支持Web框架的工具或者至少可以使用JSON或其他一些Web友好格式导出数据的工具。如果你将在各种类型的计算机上使用统计工具,那么你将希望该软件能够在各种操作系统上运行。
- 许可证:如果你将商业软件用于商业目的,那么使用学术或学生许可这样做具有法律风险。将商业软件(无论是否经过修改)出售给其他人而不确认许可证是否禁止此类软件也是危险的。
8-优化产品
接下来我们就需要使用补充软件优化产品。我们在上一步中创建的软件工具可以是多功能的,但它们本质上是统计的。软件可以做的不仅仅是统计数据,特别是,有许多工具可用于有效地存储,管理和移动数据。有些可以使计算和分析的每个方面都更快且更容易管理。这里有4种流行的软件,可以使你作为数据科学家的工作更轻松。
数据库很常见,在项目期间跨越不同数据库的可能性相当高,特别是如果你要使用其他人的数据。但是,当然不是仅仅接触,而是自己建立一个数据库来帮助你完成项目。最常见的两种类型是关系型(SQL)和非关系型(NoSQL,ElasticSearch),与将数据存储在计算机的文件系统上相比,数据库具有许多优势。大多数情况下,数据库可以提供对数据的任意访问且比文件系统更快,并且它们还可以通过冗余方式扩展,这种方式优于文件系统扩展。
高性能计算(HPC)是一个通用术语,适用于需要进行大量计算并且希望尽快完成计算的情况。你可以选择使用超级计算机,计算机集群或图形处理单位(它们非常适合执行高度可并行化的计算)。如果你有权访问,那么HPC是等待PC计算所有需要计算的东西的好选择。使用HPC产品的好处有很多,但是在你选择之前你必须要衡量一下成本。
最大的云服务提供商主要是大型科技公司,例如阿里巴巴、谷歌和微软等公司在向公众开放之前都已经拥有大量的计算和存储资源。但他们并不总是将资源用到最大负荷,因此他们决定出租过剩的产能并扩大其收益,结果证明这是一系列有利可图的商业决策。提供的服务通常大致相当于个人计算机,计算机集群或本地网络的功能。所有这些可以在世界各地的地理区域中获得,可通过在线连接和标准连接协议访问,以及通常是Web浏览器界面。如果你没有足够的资源来充分满足你的数据科学需求,你可以选择尝试购买云服务。
最后,你可以尝试大数据技术:Hadoop,HBase和Hive等。大数据技术的设计不是为了移动数据,而是当数据集处于非常大的规模时,利用大数据技术可以节省大量的时间和金钱。每当计算任务受数据传输限制时,大数据可以提高效率。但是,与本章中描述的其他技术相比,大数据系统软件需要花费一些精力。
9-执行计划
构建阶段的最后一步是执行产品的构建计划。大多数软件工程师可能熟悉构建复杂软件的试验和磨难,但他们可能不熟悉构建处理可疑质量数据的软件的难度。另一方面,统计人员知道拥有脏数据的情况,但可能没有建立更高质量软件的经验。同样,与项目相关的不同角色的每个人可能拥有各种经验,并为不同的事情做好准备。
- 如果你是一名统计学家,你会知道有脏数据,而且你知道偏差和夸大结果的重要性。但你可能没有太多经验来构建业务软件,特别是生产软件。你应该咨询具有实践经验的软件工程师,以了解如何提高软件的稳健性。
- 如果你是软件工程师,你知道开发生命周期是什么样的,并且你知道如何在部署和交付之前测试软件。但是你可能不了解数据,无论你在软件设计和开发方面有多好,数据最终都会以你从未想过的方式破坏你的应用程序。这需要在构建软件时采用新的思维模式以及对错误有容忍度,因为它们会频繁地发生。你应该咨询精通预测和处理有问题数据的统计人员,例如异常值,缺失值。
- 如果你刚开始从事数据科学,没有丰富的统计学或软件工程经验,如果你可以向他们解释你的项目和目标,那么有经验的人可以向你提供一些可靠的建议。作为一个初学者,你在这个过程阶段有职责来弥补经验的不足。
- 如果你只是该项目的一个团队成员,那么沟通和协调是至关重要的。你不必了解团队中发生的所有事情,但有必要明确目标和期望,并确保有人管理整个团队。
设计计划应包含多个路径和选项,所有这些都取决于项目的结果、目标和期限。无论计划有多好,随着项目的进展,总有可能对其进行修订。即使你考虑到所有不确定因素并且意识到每一种可能的结果,计划范围之外的事情也可能会发生变化。计划需要改变的最常见原因是新信息从项目外部的来源出现,并且计划的一个或多个路径发生变化或目标本身发生变化。
随着项目的进展,你通常会看到越来越多的结果积累,让你有机会确保它们符合你的期望。一般而言,在涉及统计的数据科学项目中,期望基于统计显著性的概念或基于这些结果的实际有用性概念。统计意义和实际有用性通常密切相关,当然不是相互排斥的。作为项目计划的一部分,你可能包含了在统计分析结果中达到某种准确性或重要性的目标,实现这些目标将被视为该项目的成功。
本文作者:【方向】
本文为云栖社区原创内容,未经允许不得转载。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。