导读:本文写给有抱负的新兴数据科学家、知道各种专业知识的程序员,还有那些不懂任何编程技巧的初学者。本文提供了简单的教程和可实践的分析,而不是理论。我还试图将Python与R结合起来,为学习者提供对比的方法。
01 什么是Python
Python是一种编程语言,可以让你更快地工作,并且能够更有效地集成系统。Python语言由Guido van Rossum开发。你可以在Python的历史博客上阅读Guido讲述的Python历史。
http://python-history.blogspot.in/2009/01/introduction-and-overview.html
想要在大数据这个领域汲取养分,让自己壮大成长。分享方向,行动以前先分享下一个大数据交流分享资源群 740041381 ,欢迎想学习,想转行的,进阶中你加入学习。
对于Python初学者甚至是经验丰富的人来说,这是值得一读的。以下是其中一段摘录:
许多Python的关键字(if、else、while、for等)与C语言中的相同,Python标识符与C语言具有相同的命名规则,大多数标准运算符与C语言具有相同的含义。当然,显然Python不是C语言,它和C语言一个主要的不同是使用缩进而不是大括号进行语句分组。例如,在C语言中按如下方式编写语句:
Python只是完全省略了括号(以及为了维护良好标准而使用的句末分号)并使用以下结构:
Python与C语言不同的另一个主要领域是动态类型的使用。在C中,必须始终明确声明变量并给定其特定类型,如int或double。然后,此信息用于执行程序的静态编译时检查以及分配存储变量值的内存位置。在Python中,变量只是引用对象的名称。
Python Package Index(PyPI)托管Python的第三方模块。目前有91 625个添加包。
https://pypi.python.org/pypi
你可以按主题浏览Python的添加包。
https://pypi.python.org/pypi?%3A action=browse
02 什么是R
有关R的官方定义见主网站:
http://www.r-project.org/about.html
R是用于数据处理、计算和图形显示的集成软件工具套件。它包括一个有效的数据处理和存储设施,一套其中包含用于计算数列(特别是矩阵)的算子,一个用于数据分析的大型、连贯、集成的中间工具集合,其中包含用于数据分析的图形工具,可在屏幕上或硬拷贝上显示,以及一种发展良好、简单有效的编程语言,包括条件、循环、用户定义的递归函数以及输入和输出设施。
“环境”一词旨在将其描述为一个完全规划和连贯的系统,而不是非常特殊和不灵活的工具的增量增长(这是其他数据分析软件的常见情况)。
Comprehensive R Archive Network(CRAN)上托管了数千个添加包R包:
https://cran.r-project.org/web/packages/
GitHub也是如此,请参阅:
https://github.com/search?utf8=%E2%9C%93&q=stars%3A%3E1+language%3AR
还有Bioconductor作为添加包库。
想要在大数据这个领域汲取养分,让自己壮大成长。分享方向,行动以前先分享下一个大数据交流分享资源群 740041381 ,欢迎想学习,想转行的,进阶中你加入学习。
你可以在这里查看来自这些存储库的所有包(截至2016年共有11 885个包):
http://www.rdocumentation.org/
R既是统计学中的语言,也是计算机科学和分析软件,在分析商务数据和应用数据科学方面非常有用。特别是R的吸引力仍然存在:它是一个免费的开源软件,拥有大量的添加包可用于数据分析。
R的缺点仍然是生产环境中的内存处理,缺乏对R开发人员的激励,以及它有时生成的是稍显学术导向而不是企业用户导向的粗略文档。
03 什么是数据科学
数据科学位于编程、统计和业务分析的交叉点。它是根据统计技术以系统和科学的方式分析数据的编辑工具的应用。Drew Conway的著名图表将数据科学作为三者的交集,见:
http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram
我将数据科学家定义如下:
数据科学家只是一个能够在硬件(本地机器、数据库、云、服务器上)上高效快速地编写代码(使用R、Python、Java、SQL、Hadoop(Pig、HQL、MR)等语言)来处理数据(存储、查询、汇总、可视化)的人,同时了解足够的统计数据以从数据中获取洞察力,以便业务部门做出决策。
04 数据科学家的未来
权威的《哈佛商业评论》将数据科学家定义为21世纪最性感的工作:
https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century/
对工资的调查显示,数据科学家的需求和薪水都在上涨,而且受过训练的专业人员也面临严重短缺,参见:
http://www.forbes.com/sites/gilpress/2015/10/09/the-hunt-for-unicorn-data-scientists-lifts-salaries-for-all-data-analytics-professionals/
事实上,这创造了一个新术语:独角兽数据科学家(unicorn data scientist)。独角兽数据科学家很难找到,因为他具备编程、统计和商业方面的所有技能。更新的图1.1中的数据科学维恩图可在上查看。
http://www. anlytcs.com/2014/01/data-science-venn-diagram-v20.html
▲图1.1 数据科学维恩图,来源:Copyright©2014 Steven Geringer Raileigh, NC
此外,独角兽是投资行业的术语,特别是风险投资行业,它代表一家初创公司,其估值超过10亿美元。这个词已经被Cowboy Ventures的Aileen Lee推广。可以在这里查看:
http://graphics.wsj.com/billion-dollar-club /和http://fortune.com/unicorns/
毫不奇怪,数据科学也为这些初创企业提供了关键优势。因此,我们可以同时满足不断增长的需求和数据科学家的短缺,创造更安全的工作环境。可以在Y Combinator上看到一份初创企业名单,其中包括与数据科学相关的初创企业:
http://yclist.com/
你可以在这里查看有关数据科学家工资的调查:
http://www.burtchworks.com/2015/07/14/compensation-of-data-scientists-insights-from-the-past-year
年度Rexer Analytics调查有助于衡量数据挖掘者的技能和使用情况。你可以在这里阅读访谈:
http://decisionstats.com/2013/12/25/karl-rexer-interview-on-the-state-of-analytics/
或阅读rexeranalytics上的报告:
www.rexeranalytics.com
因此,我们可以总结认为,具有合适技能的数据科学家在专业领域拥有美好的未来。
值得注意的是,数据科学家需要非常快速地更新技能,他们需要响应业务需求来构建数据科学解决方案。因此,过时的风险仍然能够鼓励数据科学家获得多种技能。Insight在这里提供了一个有趣的数据科学研究奖学金计划:
http://insightdatascience.com/
GitHub上免费提供了数据科学的存储库:
https://github.com/okulbilisim/awesome-datascience
言归正传,位于纽约的Byte学院提供基于Python的数据科学计划,网址为:
http://byteacademy.co/
05 什么是大数据
对于数据集而言,大数据是一个广义的术语,它如此巨大或复杂,以至于传统的数据处理应用程序不能满足要求。3V模型有助于理解大数据,它们是:
-
数量(volume,数据的大小和规模)。
-
速度(velocity,流量或数据刷新率)。
-
数据的多样性(variety,结构化或非结构化类型)。
-
第四个V是准确性(veracity)。
处理大数据的典型方法是基于硬件,并且使用分布式计算、并行处理、云计算和Hadoop堆栈等专用软件。有关大数据的有趣观点参见著名的R科学家Hadley Wickham博士的观点:
https://peadarcoyle.wordpress.com/2015/08/02/interview-with-a-data-scientist-hadley-wickham/
有两个特别重要的过渡点:
-
从内存到磁盘。如果你的数据适合内存,那么它就是小数据。现在你可以获得1TB的内存,所以即使是小数据也很大!从内存迁移到磁盘是一个重要的过渡,因为访问速度是如此不同。你可以对内存数据进行非常朴素的计算,它会足够快。而对于使用磁盘数据,你需要计划(和索引)更多。
-
从一台计算机到多台计算机。当你的数据不再适合一台计算机上的一个磁盘时,会出现下一个重要阈值。迁移到分布式环境会使计算变得更具挑战性,因为你进行计算所需的所有数据不在同一个地方。设计分布式算法要困难得多,并且你会极大地受到数据在计算机之间分离方式的限制。
Wes McKinney,数据科学的主要Python添加包pandas的作者,提出此问题:
任何允许你使用以Python或R等语言编写的用户定义代码做扩展的数据处理引擎必须解决至少这3个基本问题:
数据移动或访问:使用Python可以使用的形式访问运行时数据。不幸的是,这通常需要昂贵的序列化或反序列化,并可能主导系统运行时间。通过仔细创建共享字节级内存布局可以避免序列化成本,但这样做需要大量经验丰富且报酬丰厚的人员同意为更大的成果进行重大工程投资。
向量化计算:启用Python或R等解释语言来分摊开销并调用面向数组的快速编译代码(例如NumPy或pandas操作)。这些语言中的大多数添加包也希望使用数组/向量值而不是标量值。因此,如果你想使用自己喜欢的Python或R添加包,则需要此功能。
IPC开销:调用外部函数的低级机制。这可能涉及通过UNIX socket发送带有一些简短指令的简短消息。
http://wesmckinney.com/blog/the-problem-with-the-data-science-language-wars/
对比小数据,我们将大数据定义为需要更多硬件(Cloud等)或更复杂的编程或专用软件(Hadoop)的数据。
06 数据科学家可用的工具
数据科学家广泛使用的一些(而不是全部)工具如下:
-
数据存储:MySQL、Oracle、SQL Server、HBase、MongoDB和Redis。
-
数据查询:SQL、Python、Java和R。
-
数据分析:SAS、R和Python。
-
数据可视化:JavaScript、R和Python。
-
数据挖掘:Clojure、R和Python。
-
云:Amazon AWS、Microsoft Azure和Google Cloud。
-
Hadoop Big Data:Spark、HDFS MapReduce(Java)、Pig、Hive和Sqoop。
备忘单是一张带有书面笔记的纸,旨在帮助记忆。它还可以定义为常用命令的汇总,以帮助你以更快的速度学习该语言的语法。为了帮助记住许多工具的语法,备忘单对于数据科学家来说非常有用。
我写了一篇关于KDnuggets的文章,详细阐述了我的哲学:什么是或不是数据科学家。可见:
http://www.kdnuggets.com/2014/05/guide-to-data-science-cheat-sheets.html
数据科学备忘单指南:
选择最有用的数据科学备忘单,包括SQL、Python(包括NumPy、SciPy和Pandas)、R(包括回归、时间序列、数据挖掘)、MATLAB等。
在过去的几年里,随着对数据科学家的需求不断增长,人们渴望学习如何在这个看似有利可图的职业中入门、学习、进步和茁壮成长。作为撰写分析并偶尔教授分析的人,我经常被问到—如何成为数据科学家?
数据科学似乎是一个多学科领域,这使得这个问题的答案更加复杂,而大学的统计、计算机科学和管理部门处理数据的方式完全不同。
但是为了削减营销创造的术语,数据科学家只是一个人可以用几种语言(主要是R、Python和SQL)编写代码,用于数据查询、操作、聚合和可视化,使用足够的统计知识为商务市场决策提供可操作的见解。
由于工作网站上附带的词汇“数据科学家”强调了其相当实用的定义,因此这里有一些用于学习数据科学中的主要语言的工具—Python、R和SQL。
备忘单或参考卡是主要使用的命令的汇总,可帮助你以更快的速度学习该语言的语法。包含SQL可能会让一些人感到惊讶(这不是NoSQL时代吗?),但这是出于合乎逻辑的原因。PIG和Hive查询语言都与SQL(原始结构化查询语言)密切相关。
另外,你可以单独使用R中的sqldf添加包(以及Pythonic数据科学家不太广泛使用的python-sql或python-sql-parse添加包),甚至可以使用曾经的冠军语言SAS中的Proc SQL命令,并完成数据科学家应该完成的大部分工作(至少在数据调整中)。
Python备忘单是一个相当有争议的列表,因为Python是数据科学家最通用的语言,可以用于完成很多事情。但对于数据科学家来说,NumPy、SciPy、pandas和scikit-learn的添加包似乎是最相关的。
成千上万的R添加包对有抱负的数据科学家有用吗?没有。
因此,我们为你选择了合适的备忘单。请注意,这是列表的策划列表。如果在数据科学领域有任何可以假设的东西,那么零假设应该是数据科学家足够聪明,可以根据数据及其背景做出自己的决定。只需三次打印就可以加速有抱负的数据科学家的旅程。
你还可以在这里查看Slide-Share上的演示文稿,其中拥有超过8000个视图。
http://www.slideshare.net/ajayohri/cheat-sheets-for-data-scientist
07 用于数据科学的Python添加包
一些在Python中对数据科学家有用的包如下:
-
pandas:为Python中的数据结构、数据操作和分析编写的添加包。
-
NumPy:为大型多维数组和矩阵添加Python支持,以及在这些数组上运行高级数学函数的大型添加包。
-
IPython Notebook:演示面向数据分析的Python功能。
-
SciPy:用于科学计算的基础库。
-
Matplotlib:用于图形和数据可视化的全面2D绘图。
-
Seaborn:基于matplotlib的Python可视化库。它提供了一个高级界面,用于绘制有吸引力的统计图形。
-
scikit-learn:一个机器学习库。
-
statsmodels:用于构建统计模型。
-
Beautiful Soup:用于网络爬虫。
-
Tweepy:用于Twitter抓取。
-
Bokeh :一个Python交互式可视化库,面向现代Web浏览器进行演示。它的目标不仅是以D3.js的风格提供优雅、简洁的新颖图形结构,而且还通过非常大或连续传播的数据集提供高性能交互功能。它有Python、Scala、Julia以及现在的R接口。
http://bokeh.pydata.org/en/latest/
-
ggplot:基于R的ggplot2和图形语法的Python绘图系统。它专为使用最少的代码快速制作具有专业外观的图而构建。
http://ggplot.yhathq.com/
对于R,查看添加包的最佳方法是查看CRAN任务视图,其中,添加包按使用类型聚合。
https://cran.r-project.org/web/views/
例如,有关高性能计算的CRAN任务视图,请访问:
https://cran.r-project.org/web/views/HighPerformanceComputing.html
08 Python和R之间的异同
Python用于各种用例,而R主要是统计学的语言。
Python有两个版本:Python 2(或2.7)和Python 3(3.4)。具有一个主要版本的R则不是这样的。
R在数据可视化和数据挖掘方面具有非常好的添加包,Python也是如此。然而,R有大量的添加包可以做同样的事情,而Python通常专注于向同一个包添加函数。这在可用选项方面是有益的,并且使初学者不易混淆。Python拥有相对较少的添加包(如用于数据挖掘的statsmodels和scikit-learn)。
社区在沟通和互动方面有所不同。R社区使用Twitter上的#rstats进行沟通。请参阅:
https://twitter.com/hashtag/rstats
R期刊:
https://journal.r-project.org/
Python在Python Papers上有期刊:
http://ojs.pythonpapers.org/
此外还有一个统计软件期刊Journal of Statistical Software:
http://www.jstatsoft.org/index
1. 为什么R用户应该了解有关Python的更多信息
专业数据科学家不应该依赖于一种统计计算语言来面对他的职业生涯。我们学习一门新语言的难易程度确实会随着年龄的增长而降低,最好将你的职业生涯建立在不仅仅掌握R的基础上。四十年来,SAS语言确实引领世界,但在快速变化的世界中,最好不要轻易打赌,R技能是你在十年职业生涯中从事统计计算所需要的。
2. 为什么Python用户应该了解有关R的更多信息
R将继续拥有统计数据科学和可视化中的最大数量的添加包。由于R也是开源和免费的,因此最好在R中进行原型设计,而不是使用Python在生产环境中进行扩展。
一个有趣的观点在DataCamp创建的kdnuggets上:
http://www.kdnuggets.com/2015/05/r-vs-python-data-science.html
和这里:
http://multithreaded.stitchfix.com/blog/2015/03/17/grammar-of-data-science/
09 教程
有关代码和输出的Python数据科学的Radim Rehurek笔记本可在这里找到:
http://radimrehurek.com/data_science_python/
GitHub上还提供了适用于Python数据科学的笔记本清单。
https://github.com/donnemartin/data-science-ipython-notebooks
有关Python中与数据科学相关的活动的更多常识,请访问:
https://github.com/okulbilisim/awesome-datascience
有关数据科学的更多知识,请参阅:
http://datasciencespecialization.github.io/
它拥有约翰霍普金斯大学Coursera数据科学专业的所有九门课程:
-
数据科学家的工具箱
-
R编程
-
获取和清洗数据
-
探索性数据分析
-
可重复的研究
-
统计推断
-
回归模型
-
实用机器
-
学习开发数据产品
10 如何将Python和R用于大数据分析
大数据是Hadoop的代名词。要将Python与Hadoop一起使用,你可以使用以下添加包:
-
Hadoop Streaming
-
mrjob
-
dumbo
-
hadoopy
-
pydoop
▲图1.3 在Jupyter Notebook中使用SAS,资料来源:Chris Hemedinger,SAS研究所SAS Dummy,经SAS Institute Inc.许可转载
这里给出了一个例子:
https://blog.cloudera.com/blog/2013/01/a-guide-to-python-frameworks-for-hadoop/
最近的一项创新是Apache Arrow,参见:
https://blog.cloudera.com/blog/2016/02/introduction-apache-arrow-a-fast-interoperable-in-memory-columnar-data-structure-standard/
文章中提到:“对于Python和R社区,Arrow非常重要,因为数据互操作性是与大数据系统(主要在JVM上运行)更紧密集成的最大障碍之一。”
下一个创新是Feather,参见:
https://blog.rstudio.org/2016/03/29/feather/
Feather是一种快速、轻量且易于使用的二进制文件格式,用于存储数据框,而Feather文件无论是用Python还是R代码编写都是相同的。Python接口使用Cython向用户公开Feather的C++11核心,而R接口使用Rcpp执行相同的任务。
11 什么是云计算
云计算的官方定义见:
http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication 800-145.pdf
云计算是一种用于提供支持的模型:
在按需网络访问方面方便、无处不在。
可配置计算资源的共享池(例如,网络、服务器、存储、应用程序和服务),可以通过最少的管理工作或服务提供商交互快速配置和发布。
亚马逊(EC2)、谷歌、甲骨文、IBM和Microsoft Azure是云提供商的一些例子。对于数据科学家来说,了解作为服务的基础设施、平台和软件之间的差异非常重要(图1.4)。
▲图1.4 作为服务的基础设施、平台和软件之间的区别,资料来源:
https://blogs.technet.microsoft.com/kevinremde/2011/04/03/saas-paas-and-iaas-oh-my-cloudy-april-part-3/
12 如何在云上使用Python和R
如果你想在云中托管和运行Python,这些实现可能适合你:PythonAnywhere(免费增值托管的Python安装,允许你在浏览器中运行Python,例如,用于教程、展示等)。它还有一个额外的教育用例。
PythonAnywhere提到,Python是一种很好的教学语言,但在所有学生的计算机上安装和设置它可能并不容易。PythonAnywhere提供了一个随时可用的环境,包括语法高亮、错误检查编辑器和Python2和3控制台。
https://www.pythonanywhere.com/details/education
你可以在云上使用Python抓取网页:
http://scrapinghub.com/scrapy-cloud/
Scrapy是Python最流行和最先进的Web爬虫框架。它使编写Web爬虫变得快速、简单和有趣。但是,你仍需要定期部署和运行爬虫程序,管理服务器,监控性能,查看已删除的数据,并在爬虫中断时收到通知。这就是Scrapy Cloud的用武之地。
此外,如果你更喜欢使用RStudio接口,可以根据这里的说明,在云上运行RStudio Server:
http://www.louisaslett.com/RStudio_AMI/