附注是我2014年年初的时候写的。我还提过那时候譬如大统计数据、统计数据自然生物学家之类基本概念刚刚蓬勃发展,我也是那时候受一位我极为敬重的媒体人后辈的应邀,加入到他的念书群,写了两个自学“统计数据自然科学:从低阶到低阶”的经验贴,我就直接把它贴在下面了。虽然题主问的是大统计数据的低阶,但事实证明“大统计数据”是统计数据自然科学的两个低阶状态。附注中除少数情况,我基本上单厢使用“统计数据自然科学”这个基本概念。
如果让我那时做两个统计数据自然科学的低阶帖,一定和彼时写的路子和文本全然不同。所以我也考虑是否要把这篇回答废黜改写。彼时的统计数据自然科学和工程应用领域仍然属于两个快速生长和插值的时期,广度自学的研究还固定在两个某一城市布局,PyTorch、TensorFlow那些架构也都还在孕育出之中。分布式系统和云计算也远远达不到那时的自然生态。相应地,自学资源事实上极为短缺。我还提过彼时的Coursea的专业课程数量不足一千门,Andrew Ng的Machie Learning却是用MATLAB课堂教学,并且在专业课程里说过”掌握了尖萼课,你就已经比矽谷90%以上的人懂更多机器自学“如此一来,这放在现在是全然无法想象的事情。
但我却是决定留存那些2014年写出的文本,因为经典之作的文本还没那么容易落伍。ESL仍然是机器自学应用领域的重要脚注,杨家炜的统计数据分析也仍然是绕不行的教科书。即便是在Jalgaon微观,Wes的Python for Data Analysis也仍然是帮助低阶Pandas最好的讲义,之类。这类红豆还有许多,历经许多亲自动手课堂教学之后你就会明白,占据预览更全的资料并非须要。
统计数据自然科学并没有两个独立的学科专业体系,语言学,机器自学,统计数据分析,统计资料库,并行计算,云计算,信息建模等技术或方法来对抗统计数据。但从广义上来看,我认为统计数据自然科学是解决四个问题:
1. data pre-processing;
2. data interpretation;
3. data modeling and analysis.
这也是他们做统计数据工作的四个大关键步骤:
1、原始统计数据要历经连串搜集、抽取、冲洗、整理之类的后处理过程,才能形成高效率的统计数据;
2、他们想看看统计数据“长怎样”,有什么特点和规律;
3、按照自己的需要,比如要对统计数据贴标签分类,或者预测,或者想要从大量复杂的统计数据中抽取有价值的且不易发现的信息,都要对统计数据建模,得到output。
这四个关键步骤未必严谨,每个大关键步骤下面可能依问题的不同也会有不同的小步骤,但按我这几年的经验来看,按照这个大路子走,统计数据一般不会做跑偏。这样看来,统计数据自然科学其实是门复合型的技术,既然是技术就从编程语言谈起吧,为了简练,只说说R和Python。但既然是荐统计数据自然科学方面的书,我这里就不提R/Python编程基础
之类的书了,直接上跟统计数据自然科学相关的。
R programming如果只是想初步了解一下R语言已经R在统计数据分析方面的应用,那不妨就看看这两本:
R in action:我的R语言大统计数据101。其实对于两个没有任何编程基础的人来说,一开始就学这本书,自学曲线可能会比较陡峭。但如果配合上一些辅助材料,如官方发布的R basics(http://cran.r-project.org/doc/contrib/usingR.pdf),stackoverflow上有tag-R的问题集(Newest r Questions),遇到复杂的问题可在上面搜索,总会找到解决方案的。这样一来,用这本书拿来低阶自学也问题不大。而且这本书作者写得也比较轻松,紧贴实战。
Data analysis and graphics using R:使用R语言做统计数据分析的低阶书。这本书的特点也是紧贴实战,没有过多地讲解语言学理论,所以喜欢通过情境应用来自学的人应该会喜欢这本低阶书。而且这本书可读性比较强,也是说哪怕你手头没电脑写不了代码,有事没事拿出这本书翻一翻,也能读得进去。
但如果你先用R来从事实实在在的统计数据工作,那么上面两本恐怕不够,还需要那些:
Modern applied statistics with S:这本书里语言学的理论就讲得比较多了,好处是你可以用一本书既复习了语言学,又学了R语言。(S/Splus和R的关系就类似于Unix和Linux,所以用S讲义自学R,一点问题都没有)
Data manipulation with R:这本书实务性很强,它教给你怎么从不同格式的原始数据文件里读取、冲洗、转换、整合成高效率的统计数据。当然和任何一本注重实战的书一样,本书也有丰富的真实统计数据或模拟统计数据供你练习。对于真正从事统计数据处理工作的人来说,这本书的文本非常重要,因为对于任何研究,一项熟练的统计数据后处理技能可以帮你节省大量的时间和精力。否则,你的研究总是要等待你的统计数据。
R Graphics Cookbook:想用R做建模,就用这本书吧。150多个recipes,足以帮你应付绝大多数类型的统计数据。以我现在极业余的建模操作水平来看,R是最容易做出最漂亮的图表的工具了。
An introduction to statistical learning with application in R:这本书算是著名的the element of statistical learning的姊妹篇,后者更注重统计(机器)自学的模型和算法,而前者所涉及的模型和算法原没有后者全面或深入,但却是用R来自学和应用机器自学的很好的入口。
A handbook of statistical analysis using R:这本书文本同样非常扎实,许多语言学的学生是用这本书来自学用R来进行统计建模的。
PythonThink Python,Think Stats,Think Bayes:这是Allen B. Downey写的著名的Think X series三大卷。其实是三本精致的小册子,如果想快速地掌握Python在统计方面的操作,好好阅读这三本书,认真做习题,答案链接在书里有。这三本书学通了,就可以上手用Python进行基本的统计建模了。
Python For Data Analysis: 作者是pandas的主要开发者,也正是Pandas使Python能够像R一样拥有dataframe的功能,能够处理结构比较复杂的统计数据。这本书其实analysis讲得不多,说成统计数据处理应该更合适。掌握了这本书,处理各种糟心的统计数据就问题不大了。
Introduction to Python for Econometrics, Statistics and Data Analysis:这本书第一章就告诉你要安装Numpy, Scipy, Matplotlib, Pandas, IPython之类。然后接下来的十好几章是逐一介绍这几个库该怎么用。很全面,但读起来比较枯燥,可以用来当工具书。
Practical Data Analysis: 这本书挺奇葩,貌似很畅销,但作者把文本安排得东一榔头西一棒子,什么都讲一点,但两个都没讲透。这本书可以作为他们自学统计数据分析的两个索引,看到哪块文本有意思,就顺着它这个藤去摸更多的瓜。
Python Data Visualization Cookbook: 用Python做建模的教科书肯定不少,我看过的也就这一本,觉得还不错。其实这类书差别都不会很大,咬住一本啃下来就是王道。
Exploratory Data Analysis 和 Data VisualizationExploratory Data Analysis:John Tukey写于1977年的经典之作老教科书,是这一应用领域的开山之作。如今EDA已经是语言学里的重要一支,但彼时却是有许多人对他的工作不屑一顾。可他爱统计数据,坚信统计数据可以以一种出人意料的方式呈现出来。正是他的努力,让统计数据建模成为一门无比迷人的技术。但这本书不推荐阅读了,文本略落伍。要想完整地了解EDA,推荐下一本:
Exploratory Data Analysis with MATLAB:这本书虽然标题带了个MATLAB,但实际上文本几乎没怎么讲MATLAB,只是每讲两个方法的时候就列出对应的MATALB函数。这本书的重要之处在于,这是我读过的讲EDA最系统的一本书,除了对visualization有不输于John Tucky的讲解外,对于高维的统计数据集,通过怎样的方法才能让他们从中找到潜在的pattern,这本书也做了详尽的讲解。全书所以案例都有对应的MATALB代码,而且还提供了GUI(图形用户界面)。所以这本书学起来却是相当轻松愉悦的。
Visualize This:中译本叫“鲜活的统计数据”,作者是个“超级统计数据迷”,建立了两个叫http://flowingdata.com的网页展示他的统计数据建模作品,这本书告诉你该选择怎样的建模工具,然后告诉你怎样visualize关系型统计数据、时间序列、空间统计数据等,最后你就可以用统计数据讲故事了。如果你只想感受一下统计数据建模是个什么,可以直接点开下面这个链接感受下吧!A tour through the visualization zoo(A Tour Through the Visualization Zoo)
Machine Learning & Data Mining这一块就不多说了,不是因为它不重要,而是因为它太太太重要。所以这一部分就推两本书,都是”世界名著“,都比较难读,需要一点点地啃。这两本书拿下,基本就算是登堂入室了。其实作为机器自学的延伸和深化,概率图模型(PGM)和广度自学(deep learning)同样值得研究,特别是后者现在简直火得不得了。但PGM偏难,啃K.Daphne那本大作实在太烧脑,也没必要,而且在统计数据应用领域的应用也不算很广。deep learning目前工业界的步子迈得比学术界的大,各个domain的应用如火如荼,但要有公认的好教科书问世则还需时日,所以PGM和deep learning这两块就不荐书了。
The Element of Statistical Learning:要学机器自学,如果让我只推荐一本书,我就推荐这本巨著。Hastie、Tibshirani、Friedman这三位大牛写书写得太用心了,大厦建得够高够大,结构也非常严谨,而且很有前瞻性,纳入了许多前沿的文本,而不仅仅是一部综述性的教科书。(图表也做得非常漂亮,应该是用R语言的ggplot2做的。)这本书注重讲解模型和算法本身,所以需要具备比较扎实的数理基础,啃起这本书来才不会太吃力。事实上掌握模型和算法的原理非常重要。机器自学(统计自学)的库现在已经非常丰富,即使你没有全然搞懂某个模型或算法的原理和过程,只要会用那几个库,机器自学也能做得下去。但你会发现你把统计数据代进去,效果永远都不好。但是,当你透彻地理解了模型和算法本身,你再调用那几个库的时候,心情是全然不一样的,效果也不一样。
Data Mining: Concepts and Techniques, by Jiawei Han and Micheline Kamber 统计数据分析的教科书汗牛充栋,之所以推荐这本杨家炜爷爷的,是因为虽然他这本书的出发点是应用,但原理上的文本也一点没有落下,文本非常完整。而且紧跟时代,预览的很快,我看过的是第二版,就已经加进去了social network analysis这种彼时的前沿文本。现在已经有第三版了,我还没看过,但应该也加入了不少新文本。其实这本书并不难读,只是篇幅较长,啃起来比较耗时。
其实这两本书里单拎出来一块文本可能又是几本书的节奏,比如bayesian方法,再拿出两三本书来讲也不为过,我个人用到的比较多,而且也确实有不少好书。但并非是所有data scientist都要用到,所以这一块就不再细说。
还有一些印象比较深刻的书:
Big Data Glossary: 主要讲解大统计数据处理技术及工具,文本涵盖了NoSQL,MapReduce,Storage,Servers,NLP库与工具包,机器自学工具包,统计数据建模工具包,统计数据冲洗,序列化指南之类。总之,是一本辞典式的大统计数据低阶指导。Mining of Massive Datasets:这本书是斯坦福大学Web Mining的讲义,里面许多文本与杨家炜的Data Mining那本书重合,但这本书里详细地讲了MapReduce的设计原理,PageRank(Google创业时期的核心排序算法,现在也在不断优化预览)讲解得也比较详细。
Developing Analytic Talent: 作者是个从事了十几年统计数据工作的geek,技术博客写得很有个人风格,写的文本都比较偏门,通常只有具备相关统计数据处理经验的人能体会出来,丝毫不照顾初学者的感受。比如他会谈到当统计数据流预览太快时该怎么办,或者MapReduce在什么时候不好用的问题,才不管你懂不懂相关基础原理。所以这本书不太适合初学者阅读。这本书其实是作者的博客文章的集结,用how to become a data scientist的逻辑把他近几年的博客文章串联了起来。
Past, Present and Future of Statistical Science:这本书是由COPSS(语言学社主席委员会,由国际各大语言学会的带头人组成)在50周年出版的一本纪念册,里面有50位语言学家每人分别贡献出的一两篇文章,有的回忆了自己当年如何走上语言学这条路,有的探讨了一些语言学的根本问题,有的谈了谈自己在从事的前沿研究,有的则给年轻一代写出了寄语。非常有爱的一本书。
其它资料Harvard Data Science:这是H大的Data science在线课,我没有修过,但口碑很好。尖萼课需要费用8千刀左右,比起华盛顿大学的4千刀的Data science在线课虽贵一倍,但比斯坦福的14千刀要便宜将近一半(而且斯坦福的更偏计算机)。如果想自学,早有好心人分享了slides: (https://drive.google.com/folderview?id=0BxYkKyLxfsNVd0xicUVDS1dIS0k&usp=sharing)和homeworks and solutions: (https://github.com/cs109/content)
PyData:PyData是来自各个domain的用Python做统计数据的人每年举行一次的聚会,期间会有各路牛人举行一些规模不大的seminar或workshop,有好心人已经把video上传到github,有兴趣的去认领吧(DataTau/datascience-anthology-pydata · GitHub)
工具R/Python/MATLAB(必备):如果是做统计数据分析和模型开发,以我的观察来看,使用这三种工具的最多。R生来是两个语言学家开发的软件,所做的事也自然围绕语言学展开。MATLAB虽然算不上是个专业的统计数据分析工具,但因为许多人不是专业做统计数据的,做统计数据却是为了自己的domain expertise(特别是自然科学计算、信号处理等),而MATLAB又是个强大无比的Domain expertise工具,所以许多人也就顺带让MATLAB也承担了统计数据处理的工作,虽然它有时候显得效率不高。Python虽然不是做统计数据分析的专业软件,但作为两个面向对象的高级动态语言,其开源的自然生态使Python拥有无比丰富的库,Numpy, Scipy 实现了矩阵运算/自然科学计算,相当于实现了MATLAB的功能,Pandas又使Python能够像R一样处理dataframe,scikit-learn又实现了机器自学。
SQL(必备):虽然现在人们都说传统的关系型统计资料库如Oracle、MySQL越来越无法适应大统计数据的发展,但对于许多人来说,他们每天都有处理统计数据的需要,但可能一辈子都没机会接触TB级的统计数据。不管怎么说,不论是用关系型却是非关系型统计资料库,SQL语言是必须要掌握的技能,用什么统计资料库视具体情况而定。
MongoDB(可选):目前最受欢迎的非关系型统计资料库NoSQL之一,不少人认为MongoDB全然可以取代mySQL。确实MongoDB方便易用,扩展性强,Web2.0时代的须要品。
Hadoop/Spark/Storm(可选): MapReduce是当前最著名也是运用最广泛的并行计算架构,由Google建立。Hadoop是基于MapReduce的架构建立起来的并行计算系统,Spark在Map Reduce的基础上利用有向无环图构建了RDD,目的是为了减少Map和Reduce之间的统计数据交换次数,所以速度就快了。另两个区别是,Hadoop用硬盘存储统计数据,Spark用内存存储统计数据,Storm只接受实时统计数据流而不存储统计数据。Hadoop因为“历史”最为悠久,有不少技术和产品都是基于Hadoop开发的,所以在较长的时间内Hadoop并不会不会被淘汰。而Spark是目前自然生态最好,最活跃的分布式系统架构。如果刚刚起步研究并行计算,可从Spark入手。
OpenRefine(可选):Google开发的一个易于操作的统计数据冲洗工具,可以实现一些基本的冲洗功能。
Tableau(可选):两个可交互的统计数据建模工具,操作简单,开箱即用。而且图表都设计得非常漂亮。专业版1999美刀,终身使用。媒体和公关方面用得比较多。
Gephi(可选):跟Tableau类似,都是那种可交互的建模工具,不需要编程基础,生成的图表在美学和设计上也是花了心血的。更擅长复杂网络的建模。