【刻意练习-2】数据科学家是怎样炼成的?

关于“如何成为一名数据科学家”的问题,网上有很多讨论(比如知乎)。大部分人的回答都是列举一大堆技能和公开课的链接。我觉得如果只是不加思考地按照他们所列举的内容一一看下去,既没有目的性,也没有系统性,学习的效果肯定不好。看过《刻意练习》后,我决定用书中的方法来定义自己的修炼之路。

我们先来回忆一下什么是“有目的的练习”。

走出你的舒适区,但要以专注的方式制定明确的目标,为达到那些目标制订一个计划,并且想出监测你的进步的方法(反馈)。还要想办法保持你的动机

首先我们要有一个明确的目标。在设定目标的时候,要分清什么是自己的舒适区(工作中经常用到,已经非常熟练,心理表征清晰),什么是学习区(实践机会少,要边看文档边完成,心理表征模糊),什么是恐慌区(从未接触过,难度很大,完全没有任何心理表征)。

接下来就是为自己的目标制订一个详细的训练计划。计划一定要有针对性(很明确地知道自己正在提高哪一方面的技能)。

在训练的时候,一定要十分专注。较短的时间内投入百分之百的努力来练习,比在更长时间内只投入70%的努力来练习,效果更好。

在没有教练的情况下,如何获得反馈?我想到以下几种方法:

  1. 把学到的东西用自己的话写下来(不是简单摘抄),分享给大家。如果能写的出来,写的清楚明白,说明心理表征已经形成。如果写不清楚,说明还没学懂。
  2. 复制大师们的作品(比如统计模型或者数据可视化),然后做对比。用优秀的作品做参考,很快能发现自己的差距。
  3. 参加各种比赛。训练的成果就体现在自己的排名上。

最后谈一谈如何在长期的训练中保持动机。对我来说很简单:先看看自己的薪水,再看看我写的那篇《将薪比薪》,啥也别说了,撸起袖子好好练吧!

以上是较为笼统的概括,下面将具体阐述如何训练自己的各项技能。

为了不让自己在训练中迷失方向,我需要先绘制一个“技能地图(skill map)”。我很喜欢Swami Chandrasekaran 在博客中制作的一张地铁线路图。地铁线代表的是数据科学中的不同领域,线路上的站点代表在该领域中需要掌握的具体技能。图中一共有10大领域,上百种技能。如果依照这幅图循序渐进地学下去,估计要好几年的时间。

【刻意练习-2】数据科学家是怎样炼成的?_第1张图片
RoadToDataScientist1.png

我的目标不是重复他的路,而是走出一条具有自己特色的道路。所以我参考了他的部分内容并结合自身实际情况,提出了自己的修炼之路:

1. 数据获取(Data Acquisition)

目前我能够分析的数据除了比赛组织者提供的数据外,大部分都是从互联网上获取的开放数据(在修炼成功之前,没人愿意把具有商业价值的大数据给我分析)。因此,平时要十分注意收集和整理公共数据源(Open Data Source)。公共数据的形式有以下几种:

  1. 文件
  2. 数据库/API
  3. 网页

训练目标:

  1. 在Github上维护一个公共数据源地址以及相关API文档的列表(舒适区)
  2. 提高编写爬虫程序的技能(学习区)
  3. 如何抓取某些被墙的数据/API(如国外某著名社交网络)?(恐慌区)

2. 数据清洗 (Data Cleaning)

数据清洗是最繁重的工作,如果能高效地完成,将会大大提高工作效率。所以我要在以下几个方面苦练基本功:

  1. 字符串(文本)操作,包括自然语言处理(NPL)
  2. 字符编码(如何有效处理中文)
  3. 正则表达式(Regex)
  4. 处理日期和时间数据
  5. 处理地理信息数据
  6. Data Wrangling (selecting, filtering, grouping, summarizing, arranging, joining) with R and Python

训练目标:
数据清洗所需的技术虽然难度不大,但是比较琐碎,需要经常查阅文档,也说明我在这方面的心理表征还不够完善。我的目标是将数据清洗中的每个步骤细化成各个专项技能,对每个专项技能做针对性训练,直到完全进入舒适区为止。

3. 数据探索 (Data Exploration)

在数据清洗完毕后,我们会从各个角度来探索这个数据,目的是为了对数据集有一个较为全面的认识。如果发现问题,有可能还需要重新进行数据清洗。

训练目标:

  1. 数据的分布(distribution)
  2. 异常值(outlier)和缺失值(missing value)
  3. 变量之间的相关性(correlation)
  4. 主成分分析(PCA)

这部分技能大多属于舒适区,为了进一步提高,可以学习更高级的技术或者对已掌握的技术背后的数学原理进行更深刻地理解。

4. 数据存储与服务(Data Storage and Service)

目前我所能接触到的数据离真正意义上的Big Data还有很大差距,所以像Hadoop这样的分布式文件系统并不是我急需掌握的。我只需将数据存储在数据库中,然后通过开发RESTful API,对外提供数据访问的Web服务就可以了。

训练目标:
数据库我选择的是MongoDB,API的开发我选择的是 Node.js + Express

5. 数据可视化(Data Visualization)

数据可视化一般用在3个地方(数据探索、生成报表、Web应用)。针对不同的场景,需要掌握的技术也有所差别。在数据探索的时候,我们只需要快速看到结果,对图的美观性要求不高,用R的基本画图工具就可以完成。在生成报表和或给文章做插图的时候,对图形元素、颜色、排版设计的要求很高,除了用基本款的R之外,我们需要使用大量外部的软件包(如ggplot2,pheatmap等)。在开发Web应用的时候,除了以上几点要求外,我们还要考虑到交互性,这个时候就需要掌握一些Javascript工具,比如D3.js。

训练目标:

  1. 掌握R和JS中的常用绘图工具
  2. 数据可视化的基础理论、配色技巧
  3. 多看高手的作品,在模仿的基础上提高自己的技术
  4. 提高用图来讲故事的能力

6. 统计检验(Statistic Test)

统计学检验涵盖的内容很广泛,本文就不一一列举了。
训练目标:

  1. 掌握常用统计检验方法的原理和适用条件
  2. 用R语言实现各种统计检验
  3. 正确地解释检验结果

7. 机器学习、深度学习和人工智能 (ML、DL and AI)

前面6大部分都属于我的舒适区和学习区,而这一部分距离我的舒适区比较远,已经靠近甚至落入恐慌区了。尽管如此,训练还是要继续下去的,只不过步子可以迈得小一点。

训练目标:

  1. 机器学习平台的搭建(scikit-learn,Tensorflow等)
  2. 机器学习常用算法和Python实现
  3. 人工神经网络(CNN,RNN等)的原理和应用
  4. 参加比赛(Kaggle,天池等),积累经验

这7个方面只能算是我的修炼之路的草图,也是我的心理表征的一个初步架构。未来我还会依靠刻意练习来不断地完善和细化它,使它在我脑海中的形象越来越清晰。

【刻意练习-2】数据科学家是怎样炼成的?_第2张图片
qrcode.jpg

你可能感兴趣的:(【刻意练习-2】数据科学家是怎样炼成的?)