如何成为数据科学家?

删除一切问题描述,因为标题就很清晰的说明了问题。“问题描述”处为了避免有推销自己的嫌疑,无原则问题请大家不要修改,谢谢!
关注者
21,225
被浏览
1,385,244

127 个回答

"Data Science = statistics who uses python and lives in San Francisco"

恰好我马上启程到Twitter的data science team,而且恰巧懂一点点统计和住在旧金山,所以冲动地没有邀请就厚脸回答了:D

我认为有几个大方面

1)学好python。

现在几乎所以公司的数据都可以api给你,而python的数据处理能力强大且方便。加之在machine learning的很多算法上,python也独俏一方。另外,它的简明方便迅速迭代开发,15分钟写完个算法就可以看效果了。

除此之外,py还有点酷酷的感觉。任何程序拿matlab和c++都是可以写的,不过我真没认识过哪个d愿意自己把自己扔那个不酷的框框里:D

对不规则输入的处理也给python一个巨大的优势。通常来说,在我现在日常的工作里,所有的数据都是以纯文本但是非格式的形式存储的(raw text, unstructured data)。问题在于,这些文本不可以直接当作各种算法的输入,你需要

  1. 分词,分句
  2. 提取特征
  3. 整理缺失数据
  4. 除掉异类(outlier)

在这些时候,python可谓是神器。这里做的1-4都可以直接在scikit-learn里面找到对应的工具,而且,即使是要自己写一个定制的算法处理某些特殊需求,也就是一百行代码的事情。

简而言之,对于数据科学面临的挑战,python可以让你短平快地解决手中的问题,而不是担心太多实现细节。

2)学好统计学习

略拗口。统计学习的概念就是“统计机器学习方法”。

统计和计算机科学前几十年互相平行着,互相造出了对方造出的一系列工具,算法。但是直到最近人们开始注意到,计算机科学家所谓的机器学习其实就是统计里面的prediction而已。因此这两个学科又开始重新融合。

为什么统计学习很重要?

因为,纯粹的机器学习讲究算法预测能力和实现,但是统计一直就强调“可解释性”。比如说,针对今天微博股票发行就上升20%,你把你的两个预测股票上涨还是下跌的model套在新浪的例子上,然后给你的上司看。

Model-1有99%的预测能力,也就是99%的情况下它预测对,但是Model-2有95%,不过它有例外的一个附加属性——可以告诉你为什么这个股票上涨或者下跌。

试问,你的上司会先哪个?问问你自己会选哪个?

显然是后者。因为前者虽然有很强的预测力(机器学习),但是没有解释能力(统计解释)。

而作为一个数据科学家,80%的时间你是需要跟客户,团队或者上司解释为什么A可行B不可行。如果你告诉他们,“我现在的神经网络就是能有那么好的预测力可是我根本就没法解释上来”,那么,没有人会愿意相信你。

具体一些,怎么样学习统计学习?

  • 先学好基本的概率学。如果大学里的还给老师了(跟我一样),那么可以从MIT的概率论教材【1】入手。从第1章到第9章看完并做完所有的习题。(p.s.面试Twitter的时候被问到一个拿球后验概率的问题,从这本书上抓来的)。
  • 了解基本的统计检验及它们的假设,什么时候可以用到它们。
  • 快速了解统计学习有哪些术语,用来做什么目的,读这本【5】。
  • 学习基本的统计思想。有frequentist的统计,也有bayesian的统计。前者的代表作有【2】,后者看【3】。前者是统计学习的圣书,偏frequentist,后者是pattern recognition的圣书,几乎从纯bayesian的角度来讲。注意,【2】有免费版,作者把它全放在了网上。而且有一个简易版,如果感觉力不从心直接看【2】,那么可以先从它的简易版开始看。简易版【4】是作者在coursera上开课用的大众教材,简单不少(不过仍然有很多闪光点,通俗易懂)。对于【3】,一开始很难直接啃下来,但是啃下来会受益匪浅。

注意,以上的书搜一下几乎全可以在网上搜到别人传的pdf。有条件的同学可以买一下纸制版来读,体验更好并且可以支持一下作者。所有的书我都买了纸制版,但是我知道在国内要买本书有多不方便(以及原版书多贵)。

读完以上的书是个长期过程。但是大概读了一遍之后,我个人觉得是非常值得的。如果你只是知道怎么用一些软件包,那么你一定成不了一个合格的data scientist。因为只要问题稍加变化,你就不知道怎么解决了。

如果你感觉自己是一个二吊子数据科学家(我也是)那么问一下下面几个问题,如果有2个答不上来,那么你就跟我一样,真的还是二吊子而已,继续学习吧。

  • 为什么在神经网络里面feature需要standardize而不是直接扔进去
  • 对Random Forest需要做Cross-Validatation来避免overfitting吗?
  • 用naive-bayesian来做bagging,是不是一个不好的选择?为什么?
  • 在用ensembe方法的时候,特别是Gradient Boosting Tree的时候,我需要把树的结构变得更复杂(high variance, low bias)还是更简单(low variance, high bias)呢?为什么?

如果你刚开始入门,没有关系,回答不出来这些问题很正常。如果你是一个二吊子,体会一下,为什么你跟一流的data scientist还有些差距——因为你不了解每个算法是怎么工作,当你想要把你的问题用那个算法解决的时候,面对无数的细节,你就无从下手了。


说个题外话,我很欣赏一个叫Jiro的寿司店,它的店长在(东京?)一个最不起眼的地铁站开了一家全世界最贵的餐馆,预订要提前3个月。怎么做到的?70年如一日练习如何做寿司。70年!除了丧娶之外的假期,店长每天必到,8个小时工作以外继续练习寿司做法。

其实学数据科学也一样,沉下心来,练习匠艺。


3)学习数据处理

这一步不必独立于2)来进行。显然,你在读这些书的时候会开始碰到各种算法,而且这里的书里也会提到各种数据。但是这个年代最不值钱的就是数据了(拜托,为什么还要用80年代的“加州房价数据”?),值钱的是数据分析过后提供给决策的价值。那么与其纠结在这么悲剧的80年代数据集上,为什么不自己搜集一些呢?

  • 开始写一个小程序,用API爬下Twitter上随机的tweets(或者weibo吧。。。)
  • 对这些tweets的text进行分词,处理噪音(比如广告)
  • 用一些现成的label作为label,比如tweet里会有这条tweet被转发了几次
  • 尝试写一个算法,来预测tweet会被转发几次
  • 在未见的数据集上进行测试

如上的过程不是一日之功,尤其刚刚开始入门的时候。慢慢来,耐心大于进度。

4)变成全能工程师(full stack engineer)

在公司环境下,作为一个新入职的新手,你不可能有优待让你在需要写一个数据可视化的时候,找到一个同事来给你做。需要写把数据存到数据库的时候,找另一个同事来给你做。

况且即使你有这个条件,这样频繁切换上下文会浪费更多时间。比如你让同事早上给你塞一下数据到数据库,但是下午他才给你做好。或者你需要很长时间给他解释,逻辑是什么,存的方式是什么。

最好的变法,是把你自己武装成一个全能工作师。你不需要成为各方面的专家,但是你一定需要各方面都了解一点,查一下文档可以上手就用。

  • 会使用NoSQL。尤其是MongoDB
  • 学会基本的visualization,会用基础的html和javascript,知道d3【6】这个可视化库,以及highchart【7】
  • 学习基本的算法和算法分析,知道如何分析算法复杂度。平均复杂度,最坏复杂度。每次写完一个程序,自己预计需要的时间(用算法分析来预测)。推荐普林斯顿的算法课【8】(注意,可以从算法1开始,它有两个版本)
  • 写一个基础的服务器,用flask【9】的基本模板写一个可以让你做可视化分析的backbone。
  • 学习使用一个顺手的IDE,VIM, pycharm都可以。

4)读,读,读!

除了闭门造车,你还需要知道其它数据科学家在做些啥。涌现的各种新的技术,新的想法和新的人,你都需要跟他们交流,扩大知识面,以便更好应对新的工作挑战。

通常,非常厉害的数据科学家都会把自己的blog放到网上供大家参观膜拜。我推荐一些我常看的。另外,学术圈里也有很多厉害的数据科学家,不必怕看论文,看了几篇之后,你就会觉得:哈!我也能想到这个!

读blog的一个好处是,如果你跟他们交流甚欢,甚至于你可以从他们那里要一个实习来做!

betaworks首席数据科学家,Gilad Lotan的博客,我从他这里要的intern :D

Gilad Lotan

Ed Chi,六年本科硕士博士毕业的神人,google data science

edchi.blogspot.com/

Hilary Mason,bitly首席科学家,纽约地区人尽皆知的数据科学家:

hilarymason.com

在它们这里看够了之后,你会发现还有很多值得看的blog(他们会在文章里面引用其它文章的内容),这样滚雪球似的,你可以有够多的东西早上上班的路上读了:)


5)要不要上个研究生课程?

先说我上的网络课程:

Coursera.orgcoursera.org/course/mac

前者就不说了,人人都知道。后者我则更喜欢,因为教得更广阔,上课的教授也是世界一流的机器学习学者,而且经常会有一些很妙的点出来,促进思考。



对于是不是非要去上个研究生(尤其要不要到美国上),我觉得不是特别有必要。如果你收到了几个著名大学数据科学方向的录取,那开开心心地来,你会学到不少东西。但是如果没有的话,也不必纠结。我曾有幸上过或者旁听过美国这里一些顶级名校的课程,我感觉它的作用仍然是把你领进门,以及给你一个能跟世界上最聪明的人一个交流机会(我指那些教授)。除此之外,修行都是回家在寝室进行的。然而现在世界上最好的课程都摆在你的面前,为什么还要舍近求远呢。


总结一下吧

我很幸运地跟一些最好的数据科学家交流共事过,从他们的经历看和做事风格来看,真正的共性是

他们都很聪明——你也可以

他们都很喜欢自己做的东西——如果你不喜欢应该也不会看这个问题

他们都很能静下心来学东西——如果足够努力你也可以




【1】

Introduction to Probability and Statistics

【2】Hastie, Trevor, et al. The elements of statistical learning. Vol. 2. No. 1. New York: Springer, 2009. 免费版

【3】Bishop, Christopher M. Pattern recognition and machine learning. Vol. 1. New York: springer, 2006.

【4】

Introduction to Statistical Learning

免费版

【5】Wasserman, Larry. All of statistics: a concise course in statistical inference. Springer, 2004.

【6】

d3js.org/

【7】

highcharts.com/

【8】

Coursera.org

【9】

flask.pocoo.org/

如果你只是即将毕业或者转专业想进入数据科学圈子,我的建议是点好一个方向的技能点就好。我会先总结每个方向的定义,帮助大家选择,然后再进入到每个技能如何学习的细节。

数据科学家三大方向

作为一个比较新的行业,工业界并没有对数据科学家(Data Scientist)应该做什么有非常清楚的定义。以我个人的理解,我会把数据科学家分成三个大方向:分析、推论和算法。每一个方向所需要的具体能力可能相差很大:我是不会觉得三个方向有高低差别,也不是说每个数据科学家都能够做到面面俱到(尤其对于想入门的准数据科学家们)。(更详细的方向信息详见我的另一个回答

数据科学家最重要的三个核心技能及其内容总结

在粗略的介绍了数据科学家的方向后,我的建议是:根据你自身的基础和经验,选择一个方向,点好这个方向所需的技能点。如果你是即将毕业的学生,我会建议有经济背景的同学选择推论方向,计算机背景的同学选择算法方向,而数学背景的可以在推论和算法中随便选一个方向。如果你是已经在工业界或者想要转专业的同学,我会建议往分析方向走。当然,我的这些推荐也是非常粗暴的,大家也可以往下看看具体的能力介绍来决定你想要走的方向。

一般来说,如果你能点出其他方向的技能点会有加分。例如一个算法方向的数据科学家如果有很敏锐的商业敏感度,能够发现商业上的问题并且利用自己的建模知识来解决它,会是一个大加分的项目。但是,对于初级的数据科学家,一是一般不会去进行考察,二是人的精力也有限,很难能够在两个方向中兼顾。所以还是会建议先把自己方向的所需技能练好再去选择其他方向的能力

数据科学家每个方向具体的能力和所应掌握的熟练度

上图中我总结了一下我觉得每个方向,每个能力所需要的熟练度。熟练代表你应该能独立、高效地完成可能较复杂的任务,而基础只需要你能解决比较简单的问题就可以了。拿SQL而言,分析方向的数据科学家应该需要知道OVER语句,但是其他方向会GROUP BY就够了。

接下来我会对每个具体能力分享一些我觉得很不错的资料。我会尽量选择博文或者网站,我也会推荐一些书,不过。如果有遗漏的话也请大家留言分享。

其中,数理基础主要是大学的时候日常积累。如果想提高的话就拿起大学的高等代数,统计学,数学分析等等看看吧。

SQL

  1. [基础] 2天SQL速成 w3schools.com/sql/
  2. [熟练] Udemy 的课程 udemy.com/the-complete-
  3. [熟练] LeetCode Database 题目 leetcode.com/problemset

商业敏感度

  1. [基础/熟练] Sequoia medium.com/sequoia-capi
  2. [熟练] (还得向PM取经)Cracking the PM Interview: How to Land a Product Manager Job in Technology
  3. [熟练] (这本也挺不错的,可选)Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking

数据可视化 & 交流

  1. [基础/熟练] (强力推荐,你只需要这么一本书就够了)Storytelling with Data: A Data Visualization Guide for Business Professionals

统计推断

  1. [基础] 知道t test就够了,再想想怎么解释p value
  2. [熟练] 复习一下概率论,统计,回归分析,打开你大学的统计学教材吧。

因果分析 & 实验设计

  1. [基础] 了解如何做基础的A/B测试:原理、目的和如何解读 zhuanlan.zhihu.com/c_46, udacity.com/course/ab-t
  2. [熟练] 了解A/B测试失效的时候应该怎么做:switchback, market A/B, Cluster A/B, Interleaving.

机器学习

  1. [基础] Andrew Ng Coursera: coursera.org/learn/mach
  2. [熟练] (简单一些,强调上手) An Introduction to Statistical Learning: With Applications in R
  3. [熟练] (算是圣经了这本) The Element of Statistical Learning

写码能力

  1. Leet Code 基础的同学只需要会用 Python 实现 Easy 的算法,熟练的同学就刷题吧。

希望大家都能找到想要的工作。(ง •̀_•́)ง