【数据分析师的基本素养】论如何成为一名数据科学家

1,032 阅读30分钟
原文链接: click.aliyun.com

更多深度文章,请关注: yq.aliyun.com/cloud


Alex Kamil,就读于哥伦比亚大学

准确的说,不存在"数据科学"这样的东西(详见什么是数据科学?)。

这里有一些我收集的关于数据处理方面的材料,希望能够对你有所帮助(请注意:我是一名本科生,下面提到的资料仅为个人整理所得,在任何方面都不可视为专家意见)。

  1. 了解矩阵因式分解
    • 学习计算机线性代数相关的课程(这类课程有时也叫做线性代数应用、矩阵计算、数值分析或者矩阵分析等,它既可以属于计算机科学,也可以属于应用数学课程)。矩阵分解算法是许多数据挖掘应用的基础,而在标准的"机器学习"课程中使用的矩阵分解算法通常不具有代表性。面对TB规模的数据时,Matlab等传统工具无法有效地执行数据处理工作,你不可能在大数据上只执行一条eig()语句就可以得出预期的结果。分布式矩阵计算包,例如Apache Mahout[1] 中包含的那些,试图填补这方面的空白,但是,你仍需要理解数值算法/LAPACK/BLAS [2][3][4][5]的工作机制,以便正确使用它们,针对特殊情况进行调整,构建自己的数据处理工具,并将其扩展到商业机器集群中TB级别规模的数据之上[6]。数学课程通常基于本科代数与微积分的基础,因此你应该具有良好的先决条件。
    • 我推荐下面这些自学和参考资料:Jack Dongarra的一些课程以及有哪些不错的学习数值分析的资料?
  2. 了解分布式计算
    • 了解如何使用Linux集群以及如何设计可扩展的分布式算法(如果你打算对大数据进行分析的话,可以看看这篇文章:为什么人们现在执着于大数据?)非常重要。
    • 过去的Cray和连接机器如今已经被廉价的云主机节点所替代,计算成本也从1984年的1500万美元降低至2011年的低于1.80美元/ GFlop:en.wikipedia.org/wiki/FLOPS。
    • 如果你想充分利用自己的(租用的)硬件环境,那么如何尽可能地发挥多核硬件的性能也至关重要(详见en.wikipedia.org/wiki/Moore'…
    • 请注意:这部分内容并不在标准的机器学习课程的范围之内,但你或许可以在计算机科学授课目录中找到诸如分布式系统或者并行编程之类的课程。可参考一些分布式系统的资料,对于初学者也可以参照计算机网络简介
    • 在学习了网络和分布式系统的基础知识后,我建议你了解下分布式数据库,这些数据库不久将随着数据规模的迅速增长以及纵向规模达到极限而得到普及。详见分布式数据库的一些关键工作研究趋势,对于初学者也可以参照 关系型数据库导论以及分布式数据库导论(HBase实战)
  3. 了解统计分析
  4. 了解最优化
  5. 了解机器学习
  6. 了解信息检索
  7. 了解信号检测与评估
  8. 掌握算法与数据结构
  9. 实践

如果你打算攻读硕士学位:

  1. 学习工程学
    • 我建议你在计算机科学领域中,将重心放在信息检索、机器学习或者二者的结合上,并参加一些相关的系统课程。作为一名"数据科学家",你必须亲手编写大量代码,可能还需要开发分布式算法或系统来处理海量规模的数据。统计学的硕士学位会让你学会如何建模,并进行回归分析,而不是如何实现一个系统,我认为,随着数据规模的迅速增长以及现有分析工具逐渐过时,后者在现在看来更为重要。能够从头搭建数据挖掘系统的工程师相对来说比较短缺。你可以从相关图书中获取统计数据并使用R进行实验(详见建议3),或者你也可以在攻读计算机科学学位时报名参加一些统计学的课程。

祝你好运。

[1] mahout.apache.org/

[2] www.netlib.org/lapack/

[3] www.netlib.org/eispack/

[4] math.nist.gov/javanumeric...

[5] www.netlib.org/scalapack/

[6] labs.google.com/papers/ma...

[7] Amazon.com: Causality: Models, Reasoning and Inference (9780521895606): Judea Pearl: Books

[8] Introduction to Biology, MIT 7.012 video lectures

[9] Hanahan & Weinberg, The Hallmarks of Cancer, Next Generation: Page on Wisc

[10] The chaotic organization of tumor-associated vasculature, from The Biology of Cancer: Robert A. Weinberg: 9780815342205: Amazon.com: Books, p. 562


Monica Rogati,数据科学顾问。曾在Jawbone与LinkedIn担任数据副总裁与数据科学工程师职位。

长话短说:做一个你真正感兴趣的项目。公开并维护这个项目。

成为一名数据科学家是一件很有趣的事情,原因有很多:高影响力、高工作满意度、高薪酬以及高需求。在互联网上稍微查找一下就能找到很多对你有所帮助的资源——MOOC、个人博客、Quora上关于此类问题的回答、图书、硕士课程、相关培训、自主课程、论文、各种各样的论坛以及播客节目等等。这些资源的质量参差不齐,其中一些是非常优秀的资料和课程,但也有一些只是单纯地想骗取点击量的诱饵。由于数据科学家是一个相对比较新兴的职位,大家对于这个职位应当扮演什么样的角色并没有达成一致的看法,初学者很难搞清楚该从哪里开始,面对众多选择时不知所措。

有很多资料都遵循着一个相同的模式:1)这里有你需要的技能,2)你在这里可以学习这些技能。在这个链接中学习Python,在这里可以学习R;参加一门机器学习课程,复习线性代数。下载虹膜数据集,然后训练一个分类器("在实践中学习!")。安装Spark和Hadoop。哦,不要忘了深度学习——你可以按照TensorFlow的教程(面向机器学习新手的资料,所以当你不理解它如何工作时可能会感到更加无力)按部就班地学。买一本橙色的《模式识别》教材,然后读了两章选择放弃,随手丢到一边。

这样讲是有道理的,我们的教育机构教导我们这就是学习新事物的方式。从总体上看这种方法或许是有效的——但是,这确实也是一个不必要且低效率的过程。一些课程会有实案项目(通常使用预先组织好的精简数据集,制定了明确的目标,看起来不错但实际上却没什么帮助)。许多人意识到,"在工作中学习"是不可代替的——但是,你最开始怎么才能找到一份数据科学方面的工作?

与这些方式相反,我建议搭建并开源一些简单但有趣的项目。在实际操作的过程中,你会学到你需要的所有知识,甚至也可以参考上面提到的各种资源。但是,你需要强大的动力推动自己这样做,你会对大部分知识有很深刻的印象,而不是被动地记忆那些复杂公式,然后在一个月内就把它们忘得一干二净。如果对你来说获得一份数据科学家的工作是当务之急,那么这些开源项目会为你开启就职的大门,而且,如果你的课题、发现或者产品能够引起大家的兴趣,那么你接到的招聘电话可能会超乎你的想象。

以下是我推荐的学习步骤。它们能够优化你的学习路线,并提高你获得数据领域岗位的机会。

1. 选择一个你热爱或感兴趣的主题

猫,健身,初创企业,政治,蜜蜂,教育,人权,祖传番茄,劳动力市场等等。研究有哪些可用的数据集,或者只需最少的工作和开销就能创建或获取的数据集。也许你现在已经就职于一家具有独特数据的公司,或者你可以在类似的非营利机构中担任志愿者。你的目标是回答有趣的问题,或者在一周之内实现一些很酷的东西(时间可以更长一些,但一周的时间可以引导你规划自己的时间)。

你找到值得深入分析的数据了吗?你是否对自己能够提出一些问题感到兴奋并好奇别人的回答?你能否将这份数据与其他数据集合并在一起,分析出一些别人还未发现的独特看法?人口普查数据、邮政编码或州级人口统计数据、天气和气候数据都是不错的选择。你渴望开始你的探索吗?如果你的回答是"哦"或者对此提不起兴趣,那么换一个新的主题,重新开始。

2. 先写一条微博

你可能永远都不会发微博,你也可能认为微博不是传播科学发现的正规途径。但是在你开始之前,有必要就自己的(假设的)发现写一两句话。尽量切合实际(特别是能够在一周之内完成)并且保持乐观(对实际取得的任何发现,或者其它有趣的东西要有信心)。思考一种可能的情况,它可能不够准确(你可以就这一点展开工作),但你知道这值得去探索。

这里有一些例子:

  • "我使用LinkedIn数据来探索企业家的不同之处——结果表明他们比你想象中的更老,他们更倾向于物理,而非护理学或神学。我估计很难获得风险投资资金来开创自己的宗教。"
  • "我使用Jawbone数据来了解天气是如何影响人们日常活动的——我发现,纽约人对天气变化的敏感程度低于加利福尼亚人。你认为是因为纽约人更强壮还是只是更多地在室内工作?"
  • "我结合BBC的讣告数据和维基百科的条目来研究2016年是否和那些名人一样令我们感到糟糕。"

如果你的目标是学习一些具体的技术或者找到一份工作,把它们加进来。

  • 来自Shelby Sturgis:"我搭建了一个Web应用,通过提供关于学校排名的分析以及不同学科领域的表现,帮助教师和管理员提高学生教学质量。我使用MySQL、Python、Javascript、Highcharts.jsD3.js来存储、分析并可视化加利福尼亚STAR测试数据。"
  • "我使用TensorFlow来恢复黑白照片,并为其自动着色。我为奶奶做了一个巨大的拼贴画——这是最好的圣诞节礼物!"

想象一下你在聚会和面试的时候反复重复这个过程。想象这刊登在今日美国或者华尔街日报上(不提及具体的技术,只介绍模糊的"算法"或者"AI"或许真的可以做到)。你是厌烦自己,觉得解释起来很麻烦,还是感到开心和自豪?如果你的回答是"哦",那么重复第二步(也可能是第一步),直到你有两三个吸引人的想法。从其他人那里获得反馈——这是不是听起来很有趣?你会采访为了获得数据领域岗位而做了这些事情的人吗?

记住,在这一点上,坦白地讲,除了研究数据集、初步了解需要使用哪些技术和工具以及它们的用途,你还没有动手写任何代码,也没有做任何数据方面的工作。这一阶段很容易反复进行,直到你找到自己想要做的事情。这是显而易见的,但是人们总是喜欢随便找一个教程或一门课,感受下自己的实践能力,然后花几个月的时间沉浸在一个毫无价值的项目之中。

3. 进行数据分析

探索隐含在数据之中的信息。进行数据清洗,并可视化数据。反复重复。查看每列最频繁出现的10个属性值。研究数据中的异常点。检查数据分布。若数据过于分散,将相似值归为一类。寻找数据间的相似性以及缺失值。尝试各种聚类和分类算法。调试代码。了解实际使用的算法为什么在某些数据上工作或不工作。如果你的数据集较大,在AWS上创建数据管道。在你的非结构化文本数据上尝试各种NLP工具库。是的,你可能会用到Spark、numpy、pandas、nltk、矩阵分解以及TensorFlow——这不是因为别人告诉你要学,而是你需要使用这些工具完成你在意的事情。化身为一名侦探,思考新的问题以及以前没有想到的方向。看看所做的事情是否有意义。你是否在数据采集的过程中发现了关键问题?如果你加入了另外一个数据集会怎么样?驾驭数据。偶尔出现的困难应该令你感到刺激而有趣。从Kaggle、导师以及做同样事情的同伴那里获得帮助和反馈。

如果你在这样的学习过程中仍然找不到乐趣,那么回到第一步。如果这样的想法让你厌恶生活,重新考虑一下,是否还要成为一名数据科学家:这是一件有趣的事情,但是,如果你对这样的工作提不去兴趣,你将无法承受实际数据科学工作中的辛勤劳作。

4. 沟通

使用简洁的语言描述你的发现,并使用简单形象的方式将其可视化。我强烈建议你在这个过程中学习几种数据可视化工具,这会是你在技能培养上的一笔投资。如果你实现了一个原型系统,整理出一个简洁有趣的演示文档或视频。技术细节和代码应该以链接的形式提供。把它发布出来,然后看看能够得到什么样的反馈。这种公开的方式可使你以更高的标准要求自己,并保持良好的代码质量、文档编写水平与可视化效果。


Peter Skomoroch,LinkedIn数据科学工程师

如果你有时间去参加课程学习,不要犹豫。

  1. 试着报名参加一些你错过的本科数学课程。线性代数、高等微积分、微分方程、概率论、统计学等等都是非常重要的课程。在这之后,你可以参加一些机器学习课程。阅读几本著名的机器学习教材,时常翻阅相关的学术期刊,保持对机器学习领域良好的了解。
  2. 了解顶级数据公司现在都在做什么。学习完一两门机器学习课程之后,你应该具备了足够的背景知识来学习大多数的学术论文。在真实数据上实现一些这样的算法。
  3. 如果你使用了大型的数据集,那么你应该熟悉使用最新的技术和工具(Hadoop、NoSQL、Spark等等),并把它们应用在实际的工作(或工作之外的地方)当中。
  4. 在产品开发的角度上看,大部分的数据科学本质上都属于软件工程,并且能够创建、修改和实现相应的算法。正如William Chen所提到的,许多数据科技家都知道Python、R、scikits-learn等等,但是它们大多用于分析或原型设计。如果你需要在生产环境中或大规模地实现一些算法,你可能就需要学习如何使用Java或C++来编写代码。你可以阅读《程序员修炼之道 : 从小工到专家》这本书,如果你可能在科研背景下进行软件开发,可以看看 Software Carpentry上的课程。

我最近和Semil Shah在TCTV电视台进行了一次访谈,在节目中,我们就如何才能成为一名数据科学家这个问题进行了深入的讨论:techcrunch.com/2012/09/06/…


Rohit Malshe,就职于英特尔公司

当我在整个互联网中查阅数据科学相关的材料时,我只会使用C和Matlab。我精通这些语言,但直到那个时候,我所做的以及能做的任何事情都不过是工程计算。我生成大量的数据,并创建一些图表。当我被大量涌现的数据包围时,我开始思考如何在其他地方应用这些数据。我开始寻找各种课程和方法,想要使用数据做些与众不同的事情。最开始的时候,我感到无从下手,不知道该从哪里学起,也不知道该学些什么。幸运的是,我身边几乎总是有那么几个深入了解数据科学的人。

和我一起工作的人,其中一些人编写C/C++程序来生成GB级别的数据,一些人管理着分布在大型数据库上的TB级数据,一些人是顶尖的SQL、Python和R程序员,还有一些人使用Hadoop、Sap以及商业智能等搭建了组织范围内的数据库。

对于刚刚入门数据科学的新手,我有以下几点建议:

  1. 在Coursera上学习各种基础知识,但是,如果要我把能在Coursera上学到的知识同数据科学本身相比较,我只能说——Coursera就好比在Chipotle Mexican Grill吃墨西哥鸡肉卷。你肯定能吃饱,但仅仅这样是不够的,还需要些别的东西。
  2. 深入学习数据科学真的很不容易,我认为它相当于五星级自助餐,提供20种美食和500种不同的食谱。
  3. 从Coursera开始学习当然很不错,我们当然应该学习这些课程,但是我个人从来没有在Coursera上付过费,随着时间的推移,我肯定可以学到各种各样的知识。
  4. Kaggle对于那些崭露头角的工程师来说真的是一个非常不错的资源,在这里他们可以了解到其他人的各种想法,并把这些想法实现出来。

我自己是在具体实践中学习数据科学的。我从SQL开始学起,接着我学了Python和R,然后我学了许多Python和R中的工具库。之后我学了Html、使用VB脚本的GUI编程以及C#编程。后来我还学了Scikit learn。最后,我在办公室与各种各样的统计学家讨论,他们每天的工作就是对数据进行分析并得出结论,在和他们交流的过程中我学到了JMP/JSL脚本和很多统计学知识。

下面是我学习数据科学的完整流程。

首先我想建议大家的是,学习科学。数据科学是90%的科学加上10%的数据管理。不了解科学,不知道自己想要得到什么,也不知道为什么要得到它,你将无法使用你在Coursera上学到的任何知识。在这一点上,我几乎可以向你保证。

我曾见到我朋友学习了Coursera上的一些课程,但是到了最后,他们没有实现任何东西,他们无法得出正确的结论,他们实际上并没有"应用"任何他们学到的知识。除此之外,他们甚至没有使用他们获得的技能。

我按照如下的方式学习数据科学:

  1. 深入数据,了解数据的结构,了解数据的不同类型。在这个过程中,我理解了我们为什么要收集数据,我们如何收集这些数据并存储它们,以及我们在存储之前如何对数据进行预处理。
  2. 学习如何使用这些编程语言高效地处理数据。我学会了清洗数据,按照我预期的方式加工数据,并使用每一种可能的方法可视化数据。仅仅绘制数据就会花费我好多小时的时间,查看不同图表之间数据展示效果的不同。
  3. 我从负责数据库管理的朋友那里学习他们是如何管理和操作数据库的。我学习了数据库中表的结构。
  4. 学习如何绘制相关性图表,以及如何计算任何投资操作的收益。这是数据科学中的各类知识开始交叉的地方。没有什么图表是我不能画的。基本上,我在互联网上看到的图表我都会学习它的绘制方法。这点非常重要,图表是你用数据讲故事的关键。
  5. 学习一些自动化的东西,这真的很神奇,因为你可以自动地完成一些事情,这可以为你节省很多时间。
  6. 自动化很容易通过Python、R、VBscript或C#编程来实现。我可以告诉你,对我来说大概没有什么是不能用自动化的方式解决的。只需要按一下按钮,事情就这么完成了。
  7. 学习如何撰写报告。我意识到,我不得不以邮件的形式给其他人发送大量的数据和图表。相信我,大家都没有时间,也没有兴趣。 但是如果你做出的图表形象生动,写的报告通俗易懂,能够阐述你想说明的一切,并将丰富且强有力的数据展示在几幅有趣的图表之中,你就能够说服别人。
  8. 学习如何讲述故事。这也就是说,你应该能够向公司的副总裁说清楚自己部门存在的最大问题是什么。你通过生成吸引人的图表来讲述故事,进而引出你的结论。做不到这一点,你无法说服任何人。人们对数字不感兴趣。他们只记得名字、地点、事情、灵感,以及其他人做某些事的理由。一名真正的数据科学家也是一名真正的数据展示者。
  9. 最后,阅读互联网上所有能找到的博客,看看其他人如何做这些事情,如何编写程序,如何创建各种各样的图表,如何用自动化的方式处理任务等等。有些人凭借自己的技能完成了一些不可思议的项目,我也受到他们经历的启发,萌生出许多想法。这是一种了解别人想法的很好的方式。你可以基于大家的想法,做一些可以为你生活或工作带来便利的事情,并且在这个过程中发挥自己的想象力。

这里有一些博客或许对你有所帮助:数据科学博客终极指南

这些博客我读了很多,也深入学习了其中的知识。可能需要花费数周的时间才能学完这些博客,编写代码和结合数据设计实验可能也要占用几个周末的时间。

我最常访问的网站包括

我读得最多的书

  1. Python学习手册
  2. R语言编程艺术
  3. 很多统计方面的书,我随后会在这里更新。

现在我会给你提供一个更详细的方法,你可能会得到一些坚持下去的动力。

一名典型的数据科学工程师的工作是什么样子的?数据科学又是如何发挥作用的?

  1. 决策制定:在我的工作中,我每天都需要制定一些决策和计划。此外,我还需要向各位股东汇报进展,指导不同的员工,查看各种各样的数据,处理各种各样的工具和机器。这些机器中,其中一部分是用来处理任务的实际物理节点,也有一部分是维护物理节点的计算机程序和软件平台。
  2. 数据:我们拥有的大部分数据要么存储在分布于各个数据单元的若干服务器上,要么存储在一些共享设备上,或者存储在服务器中的硬盘驱动器上。
  3. 数据库:这些数据库服务器可用于使用SQL语句获取数据、直接地提取数据、使用FTP拷贝数据、以表格、CSV或文本的形式输出数据等等。通常我们会使用多种方法从数据库中提取数据。有很多种SQL平台,如TOAD、商务智能以及自建的内部平台等等。
    • 基于这些平台可以很轻松地学习SQL,也可以创建很多SQL脚本。
    • 你甚至可以创建能自动生成脚本的脚本。
    • 我建议你学习SQL,因为它是获取数据最常使用的语言之一。
  4. 还是数据:数据库中的数据可以按高度结构化的形式组织,也可以采用非结构化的形式,比如用户评论等等。
    • 这些数据通常具有固定数量的变量,有时变量的数量也可能会发生变化。
    • 数据有时也可能会丢失,也可能会错误地输入到数据库中。
      • 发现这样的问题时,应该立刻向数据库管理员发送邮件,并由他们改正系统中的错误。
      • 通常在为整个大型项目创建数据库之前,几个人会聚在一起讨论数据大致的形式,如何将它们划分到各个数据表中,以及不同数据表间应该如何连接。
      • 这些人是真正的数据科学家,他们知道终端用户每天的需求是什么。
      • 他们总是尝试以结构化的形式组织数据,因为这样可以使数据处理操作变得更加容易。
  5. 脚本与规划:当我在专用计算机的各个文件夹中获取和转储数据时,我会使用多个专门设置在特定时间运行或自动运行的脚本。我有一个相当大的硬盘用来存储大量数据。
    • 我通常会把新数据追加到现有的数据集合中,然后适时地清除旧数据。
    • 有时候我会在程序运行期间设置休眠指令,到达预定时间时快速地检查一下,然后再次进入休眠状态。
  6. 更多的脚本:此外,还有一些脚本专门用于压缩这些数据集并基于这些数据制定一系列决策。
    • 清洗数据,绘制有价值的数据透视表,要想从数据中挖掘信息,图表至关重要。
    • 要做到这点,首先你需要对自己的数据有全面的了解,你应该能够进行各种手工计算,生成excel表格并可视化数据。
    • 科学:我建议你在从事数据科学之前,先学习科学,了解隐藏在数据背后的物理学,深入研究并掌握这些知识。比如说,如果你在一家T恤公司工作,你应该熟悉T恤的方方面面,你应该了解所有可能的关于T恤的知识,即使没有任何数据,你也应该很清楚客户想要什么。
    • 如果没有对科学的良好认知,数据科学将毫无价值,基于数据科学的各种探索也只会徒劳无功
    • 注意事项:我看到很多人甚至不知道在图表中应该绘制些什么。
      • 我见过最糟糕的情况是,有些人围绕一些随机变量,根据任意两个随机变量间的关系绘制图表,并从这样的图表中分析结论。
      • 当然,很多地方都隐含着事物间的联系,但是你一定要清楚对比的变量之间是否存在一定的因果关系。
      • 示例:诺贝尔奖获得者的数量与许多国家的人均巧克力消耗量间存在着明显的相关性,但是这是一种因果关系吗?可能并不是!

最后,但也同样重要的是——仅仅使用SQL、C、Python、R和VB.Net,你就可以在数据中挖掘出自己感兴趣的信息。你当然不需要受限于这些技术,但学习新的技术需要时间、耐心以及一项接一项的系统规划。

祝你好运!


以上为译文

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《How can I become a data scientist?》,译者:6816816151

文章为简译,更为详细的内容,请查看原文