【陆勤推荐】数据科学的多语言协作编程方式:Python + R + SQL
在这篇文章中,我将试图使用一种新的方法来介绍数据科学编程。
R vs. Python question中集中谈论了数据科学编程的问题,每个人都有自己关于编程的看点,包括受人尊敬的自然杂志(Programming – Pick up Python)。
在这里,我试图让我们跳出R vs. Python类型的争论,转而尝试同时教授R, Python and SQL。为了做到这一点,我们需要首先看看数据科学的第一个大命题(数据科学中我们正在解决的问题),然后看看这些问题是怎么通过不同的途径进而细分为小问题并最终被解决的。这样,我们就可以掌握多种方法,并在需要的时候将它们结合起来。
多语言协作方式很复杂,这是人们对于这种多语言协作方式(掌握多种语言)的第一印象。
为什么要同时教三种语言呢?(为了简便描述,在这里我把SQL看做一种语言)
这里是一些背景
除了数据科学,我还和别人一起创办了一家用于教授孩子们计算机科学的社会企业Feynlabs。在Feynlabs里,我们一直在寻找能够加速学习代码的方法,其中一个方法是将多种语言进行对比和比较,这个方法是管用的。对数据科学来说,这个方法同样具有意义,这是因为一个学习者可以从不同方向潜在的接近数据科学。
对于学习数据科学编程来说,这种方式可以帮助学习者从与他们较为相似的现有基础上开始构建多语言编程方法,然后通过这种方法将现有基础和新的想法联系在一起。从教学观点来看,这一方法与David Asubel的思想非常相似:“影响学习的最重要因素就是学习者已经拥有了什么知识。”David Asubel强调了在学习新知识的过程中先验知识的重要性。
首先,我们要讨论的是我们现在试图解决的是什么问题,以及这个问题如何被细分。
我也建议把这种方式看做 Data Science for IoT course/certification的一部分,但是同时我也希望我能把它当成一个单独的模块来教授——比如用伦敦和美国研讨会模式,如果你想要知道更多,请立即在邮件列表里注册。HERE。
Data Science for IoT course/certification
http://www.opengardensblog.fut … .html
HERE
http://www.futuretext.com/
这两个网址在原文中是文字锚链接的形式。
数据科学——我们正在试图解决的问题
数据科学涉及到从数据中提取知识。在理想情况下,我们需要来自多种数据来源的大量数据。数据科学位于一个多学科交叉的位置:程序设计、统计、算法、数据分析等。要解决数据科学问题,最快的方式是尽快开始数据分析。但是数据科学也需要对理论的良好理解——尤其是机器学习的理论方法。
一个数据科学家通常使用类似OSEMN(获得,清洗,探索,建模,解释)的方法来解决一个问题。这些步骤和一个典型的数据仓库是有共同点的,它也和经典的ETL(提取、转换、加载)方法类似。然而,建模和解释阶段是数据科学所特有的。建模需要理解机器学习算法,并知道它们是如何组合起来的。例如:无监督算法(降维、聚类)和基础算法(回归、分类)。
为了理解数据科学,我同样对编程背景提出一些期望。人们不会期待一个数据科学家从“Hello World”开始学起,当然从另一方面来说,一种语言的语法经常是超额的。语言有怪癖,它们从世界各地得到最新的工具包。
所以,如果我们试图首先看看数据科学问题(在获得,清洗,探索,建模,解释之前)背景阶段——这是比较容易适应语言编程的阶段。机器学习有两个阶段:建模阶段和预测阶段。我们首先建议一个模型(通常是批处理模式——它需要更长的时间),然后,我们进行了动态/实时模式的模型预测。因此,要了解编程的科学数据,我们可以把学习分为四个阶段:工具本身(IDE),数据管理,建模和可视化。
工具包,IDE和背景
在了解了基本语法后——这使得了解这种语言的包或库更为容易,Python和R都有很大数目的包(比如Statsmodels)——通常分布在库中。这两种语言都是可解释的,它们有好的IDE(脚本调试工具),比如Python的Spyder, iPython,以及R的RStudio。如果使用Python,你可能会使用类似scikit-learn的库以及类似 Anaconda distribution的分布。如果使用R,你可以使用RStudio并使用R的CRAN软件包管理系统安装特定的包。
数据管理
除了R和Python,你也需要使用SQL。我提到SQL是因为SQL在数据清理阶段起到了关键作用。有人称此阶段为数据科学的入门工作,它需要大量的时间。SQL同样在类似Apache Drill的Hadoop程序上扮演角色,Apache Drill允许用户使用SQL查询语言查询存放在Hadoop上的数据并输出分析结果。
使用SQL,你可以在数据集范围中处理数据。但是,一旦这些数据处在编程范围内,你需要根据编程语言的不同确定对待数据的方法。
在R中,所有东西都是一个向量,并且R的数据结构和功能是量化的。这意味着,R的绝大部分功能都是在向量上工作的(即在所有的元素上工作,而不是在循环中的单一元素),因此,在R中,你读取你的数据框中的数据并使用一个内置模型(这里是线性回归的包)。在Python中,如果你没有使用类似scikit-learn的库,你需要独自做出许多决定,这会很难。然而,如果你使用一个类似scikit-learn的库,你会得到一个一致的,有据可查的接口模式。它通过使你只需着重于包的用法而轻松不少。
数据探索和可视化
在数据建模阶段之后,我们进入了数据探索和可视化阶段。对于Python来说,熊猫包(pandas package)是一个数据探索的有力工具。HERE是一个关于PYTHON PANDA的快速而简单的介绍(YouTube视频),类似的,R采用dplyr和ggplot2包数据探索和可视化。
HERE http://www.opengardensblog.fut … .html
这个网址在原文中是文字锚链接的形式。
一个不断寻找最优的多协作的工作方式
最后,大部分的讨论可以看做是一个寻找最优方式的过程。例如,在R中,大型计算需要将数据用矩阵的方式(例如n×n个矩阵操作)加载。但是,使用如Revolution Analytics般的平台,这种数据加载方式可以被突破。尤其是随着微软对Revolution Analytics平台分析部门的收购,同时鉴于微软拥有创造优秀开发工具的历史,我们有理由期望R会发展的越来越简单。
此外,由于R和Python都在为数据科学服务的Hadoop的范畴内工作,我们希望通过HDFS连接用于Python的Hadoop和用于R的Hadoop,进而充分利用Hadoop的架构。同样的,有人认为我们如今已处在一个由Spark和Storm所实现的、Hadoop和MapReduce综合使用的世界,对实时计算领域尤其如此,并且至少有一些Hadoop的功能可以通过Spark取代。
HERE是一个关于Apache Spark的很好的介绍,以及一篇关于如何在Spark中开始使用Python的文章。有趣的是,Spark编程指南中包括与三种语言的交互(Scala, Java和Python),但是并没有提到R,但是开源的力量促使我们拥有了使R和Spark交互的SparkR。
HERE http://www.infoq.com/articles/ … ction
这种涵盖了多种语言的工作方式也有一些支持平台,例如 Beaker notebook平台。你同样也可以通过在命令行上工作达到一样的效果,例如Data Science at the Command Line中的例子。
Beaker notebook http://beakernotebook.com/
Data Science at the Command Line http://shop.oreilly.com/product/0636920032823.do
总结
当我们关注更广范围内的数据科学问题并比较不同的方法怎样用于解决数据科学问题时,我们即便在简洁的博客文章中同样可以得到很多见解。你只需要明白对于数据科学来说这些语言是如何相互适应的,以及理解它们之间的主要不同。(如R中的向量)
同时我们也要了解优秀的IDE和包等“软件”对编程的影响,并懂得利用它们。
多语言协作方式改变了我们的规则,作为数据科学家,需要混合和匹配出一个科技的调色板——有时需要跨越多个语言。
文章来源:http://www.ppvke.com/Blog/archives/17811
小编微信:wangluqing360,欢迎添加。一起学习,分享和进步。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!