前言

数据科学家目前是北美最热门的职业之一,平均年薪突破10万美元。但数据科学并不是一个低门槛的行业,除了对数学,统计,计算机等相关学科技术的要求以外,还要需要相关应用领域的知识。这个职业听起来很酷,但如果你对数据分析没有兴趣的话,你也会觉得这个行业很苦。这里我默认本书的读者都至少是对这个行业有兴趣和激情的。本书的写作对象是那些现在从事数据分析相关行业,或者之后想从事数据分析行业的人,意在为实践者提供数据科学家这门职业的相关信息。读者可以从阅读中了解到数据科学家需要的技能,及背后的“分析哲学”。书中会对部分最常用,有效的模型加以展开。关于模型技术部分,我希望读者有初步统计知识,最好知道线性回归。

数据科学家这个行业的本质是应用。市面上有很多文章,出版物介绍各种数据模型,大多数此类书籍并不能让读者重复书中所述的分析过程,对于书中介绍的知识,读者真正实践起来会遇到很多困难。本书着重在于数据科学的实际应用,让读者能够重复书中的结果,这也用到了统计软件R的自动化报告功能。可能有读者会问,为什么要可重复?根据个人经验,学习数据分析技能最好的方式是实践:动手重复分析的过程,检查分析结果,发现问题后再去查询相关模型的背景技术知识。这一过程得到的学习效果远远超过死磕一本大部头的技术理论书籍。磕了一年之后发现碰到实际问题不知道该用什么工具实践这些书中讲到的模型方法。而且对于新手而言,一开始就直奔艰深的理论,很容易因为困难而失去兴趣最终放弃。本书倡导的是一种循序渐进的启发性教学路径,从实际问题入手,抽丝剥茧进入技术内核。

本书主要部分将避免过多的数学公式,但难免有例外。我们在一些地方提到方法背后的技术细节是为了帮助读者理解模型的长处和弱点,而非单纯的介绍数理统计知识。这并不意味着这些数理背景知识不重要,相反尽可能多的了解模型背后的数学重要且有意义,为了平衡理论和应用,我们会在有的章中加一些选学小节,用来介绍更多的模型数理背景或给出必要的参考资料来源,如果不感兴趣的读者可以跳过这些小节,不会影响本书主要部分的阅读。书中的每一章都只是冰山一角,我并不试图彻底的介绍模型,而是有选择性的解释其中部分我觉得重要的地方。我会尽量将想要强调的概念和内容在分析数据的过程中体现出来,而不仅仅是数学公式符号表达。想要成为数据科学家,仅靠阅读本书是远远不够的,读者需要进一步查阅书中提到的参考资料,或者选修相关课程。

随着计算机科学的发展,不仅收集存储的数据增加了,分析数据的软件包也不断推陈出新,这极大的降低了应用统计学习方法的壁垒。现在不管会建模的不会建模的,大都听过线性回归,这个经典统计模型可追根溯源至19世纪Legendre和Gauss发表的若干关于最小二乘的论文。现在你要通过最小二乘拟合一个线性模型那就动动指头两秒钟的事情。可在那个计算器都没有的时代,能优化误差平方和这样的东西的大牛都会被认为是火星人。那会美国宪法规定每十年必须进行一次人口普查,1880年排山倒海的普查资料花了8年时间处理分析,一个名叫Herman Hollerith的品学兼优的美国少年跳出来,在1890年发明了一种排序机,利用打孔卡储存资料,再由机器感测卡片,协助人口调查局对统计资料进行自动化制表,结果不出3年就完成了户口普查工作,Herman同学也顺带用这个发明拿个了工程学博士学位。你可能要问,计算能力这么落后那这伙数学家捣鼓出来的方法谁用?天文学家用。线性模型最早用在天文学研究中。研究使用统计方法的,那会绝对是小众边缘群体,全都可以贴上火星制造的标签。然后盼星星盼月亮我们终于在1912年6月等到了图灵这个天才的降临。

若不是图灵这个孩子被性取向拖了后腿,数据科学家这个行业早几十年可能就火了。当然,统计泰斗们也没有闲着,Fisher在1936年提出了线性判别分析。在1940s,又一家喻户晓的经典统计模型——逻辑回归——问世了!在1970s早期,Nelder和Wedderburn发明了广义线性模型这个词,这是一个更大的统计模型框架,它将随机分布函数和系统效应(非随机效应)通过一个连接函数(link function)连起来,之前的线性模型和逻辑回归都是该框架下的特例。到1970s末,可以用来分析数据的方法已经有好些了,但这些方法几乎都是线性模型,因为在那时,拟合非线性关系的计算量相对当时计算机水平来说还是太大了。等到1980s,计算机技术终于发展到可以使用非线性模型了。Breiman, Fridman, Olshen和Stone提出了分类回归树。随后的一些机器学习方法进一步丰富了数据科学家可以使用的工具集。计算机软件的飞速发展使得这些方法模型得以应用在更加广泛的领域,应用涵盖了商业,健康,基因,社会心理学研究和政策分析等等。数据科学家这个行业随着数据量的增加和分析软件的进步不断向前发展。

关于分析软件,本书使用R。选择R语言的原因如下:

  1. R免费,且可以在不同操作系统上使用。
  2. R开源、可扩展:它在通用公共许可(General Public License)下发行,在此构架下任何人可以检查修改源程序。含有很多最新的模型。
  3. R有强大图形可视化和自动化报告功能
  4. 笔者10年使用R的经验证明无论在学术还是业界,这都是非常有效的工具。

网上有大量的R入门教程,关于用R进行数据分析的书也有好些,所以这里就不重复造轮子,不熟悉R的读者可以先学习相关资料,这里我假设读者已经有一定R语言基础

本书布局如下,本书先介绍数据科学家这个行业和“分析哲学”和数据分析的一般流程。这是非技术的部分,但对于从业者来说非常重要,它帮助你对这个职业设定一个合理的预期。其中会讨论数据科学家需要的技能。之后的章节会对这里提到的部分我觉得重要的技能进一步展开讨论,由于篇幅所限,不可能详细讨论开始这几章中提到的所有技能。随后开始进入技术部分,讲分析环节的第一步——数据预处理,这一步虽然不是正式建模,但却是整个分析过程中最耗时的一个环节。这步没有到位将严重影响模型质量。也正是因为预处理重要,所以单独作为一个章节,没有和章其它建模技术合并起来。“基础建模技术”这个章节介绍的是一些在建模过程中需要的辅助性的技术以及建模需要注意的问题。之后正式介绍各种笔者在从业过程中经常用到的模型。

本书用来展示模型的数据大部分是通过R得到的模拟数据集。为什么用模拟数据而不是真实数据呢?原因如下:

  1. 你可以控制数据生成过程,免去了传输下载数据的麻烦。
  2. 你可以根据需要改变生成数据的代码,得到新的数据,观察数据变化对模型结果的影响。
  3. 对于自己创建的数据,我们知道数据要表达的真实信息,那么就可以评估分析使用的模型的准确性,然后再用于真实数据。
  4. 可以通过使用模拟数据在拿到真实数据前准备好代码模板,这样,当你有真实数据时就可以迅速进行分析。
  5. 通过重复数据模拟的过程可以加深对模型假设的理解。

同一章后面的代码通常建立在之前代码上,但每章的代码自成系统,也就是说你不需要以其它章节代码运行结果为前提重复某章的代码。有一定R语言基础的读者可以通过学习生成数据的代码了解数据的结构,以及模型假设。R语言的新手学习这些代码可能会觉得太困难,没有关系,你们可以跳过生成数据的细节,只需要了解数据的语境,都有哪些变量以及变量类型。你可以直接从网站上读取这些数据。书中的代码和数据可以在这个github页面上找到:https://github.com/happyrabbit/DataScientistR

现在开始我们的旅程吧!