数据科学入门之我谈 (2018)

How to Become a Data Scientist With No Experience (2018 version)

Table of Contents

匆匆又一年,入坑数据科学领域已有两年。除了每日的科研之余,也要时刻地学习补充新知识,提高技能,于是又有了一些新的体会和感慨,分享给更多打算入门数据科学和人工智能(AI)领域的朋友,希望大家能少一些弯路,少一些迷茫,少一些无助。

我将在下文主要针对小白入门可能会遇到的那些坑,IT技术的自学捷径和学习数据科学必须晓得的技能为主题,分享给更多打算入门数据科学和人工智能(AI)领域的朋友,希望大家能少一些弯路,少一些迷茫,少一些无助。 —— from 数据科学入门之我谈(2017)

应某平台的公开课之约,下文是我为直播预备的讲稿内容,主要为了给小白学员讲如何入门数据科学领域的。其实我是把这个话题当做个人博文来讲的,从我自己踩过的坑到这一年学习所经历过的感受感悟,希望能帮助所有对数据科学感兴趣和打算以此转行的朋友。

先自我介绍~ 这不仅可以对我有一个必要的了解,也有助于听众对比和自我定位。

土豆: (2018)

我是一枚北京某高校在读博士生,做理论物理相关的科学研究,除了十年前的本科接触过一点点C++外,就从没再接触过其他任何编程语言。后来,受到AlphaGo等新闻的影响,2016年对人工智能技术产生了浓厚的兴趣,每天会不由自主的关注有关AI的新闻动态。在2017年初,从我报名了几家数据分析和机器学习实训课程开始正式接触数据科学。换句话说,我的Python是从零学起的

然而,由于当时自己的懒惰,计划的不周和学习方法上的不足等各种原因,线上课程没有坚持下来。后来直到2017年暑假再报名学习,才开始痛定思痛,认认真真,终于以优秀学员的优异成绩毕业后,又再报名学习了"计算机视觉"和"自然语言处理"等深度学习课程。现在是几家线上数据科学和人工智能工程师课程的助教和讲师,平时也会翻译一些国外数据科学的博文,我的PhD毕业课题也已经换成了基于深度学习技术的物理科学研究。


一、纷纷扰扰的数据科学培训市场

正如罗胖在2016年底的跨年演讲中所谈到,为知识付费的时代已经来临。在过去的2017年里,看到大量针对Python、数据分析和AI相关的线上教育培训涌现让人眼花缭乱,我还是不一一列举为好(天善/小象/AI100/CSDN/稀牛/炼数成金/专知…)。总之,我几乎都不同程度的报名学习接触过,也可谓花了我不少银子。既然我听了那么多讲师的课,对比也就在所难免。

通过不断的亲身经历和总结后,我理解的好讲师和好的教育培训平台应该是这样的:

课程干货满满还不失风趣

讲师精力充沛还热爱分享

助教认真批改还热情反馈

上面总结的每一个点其实都非常重要:

  • 课程提供的大量典型模板代码可以让学员花更少的时间成本得到更大的未来收获;
  • 讲师直播过程中的幽默感不仅让人会心一笑,有助于记忆知识点,还能起到提神的效果;
  • 从讲师的备课和在线直播中最能看到讲师的分享精神,记得头一次听某老师直播的时候,我曾情不自禁地为其热心的倾心分享而感动至热泪盈眶(这是真事啊~)~~~ 助教团队的良好氛围是最难得也是最让人眼前一亮的,这不仅仅学习经验和捷径的分享,也是一个成熟的系列课程能够不断传承的有力标志。

上纲上线的谈了半天,在新版里我就再多聊出些实在的东西来。

悉数我听过的各种主流线上数据科学课程里,我强烈建议小白从 稀牛学院 的课程入门 (已停办)。即使在时至今日的数据科学教育培训领域里,我仍然敢肯定稀牛学院的讲师和助教们能为小白学员营造出最好的学习氛围,尤其是已经打磨很久了的’实训营’ 和’ 数学基础 ‘两大金牌课程。此后,稀牛学院和网易合作推出了很类似的微专业课程,关于它们之间的差异和个人理解,可以查看我的知乎回答。至于其他的平台课程嘛。。。。如果你接触过天善和小象,再看过他们的课件与 cs231n/A.Ng 等其他知名课程材料,就知道教育领域创业的门槛是多么的低,不过他们的营销确实厉害,至今仍能货如轮转吧;CSDN 也有推出人工智能工程师课程,知识覆盖面之广,每期课程的推出可谓紧锣密鼓,充分燃烧你的钱包,真不知背后的管理领导是咋想的!不过唯一值得可圈可点的是智亮老师的深厚功底和原创课件让人印象深刻;我似乎还提到过"炼数成金"这个东西,丫的就是个骗人的玩意,多说无益~

安利了半天,还值得一提的是专知的’ 深度学习:算法到实战 ‘课程,我有幸参加了2019年第一期的线上培训。科研一线的中科院自动化所教授与博士生授课,让我头一次从科班学术界的角度全面接触深度学习,让我印象很深刻,收获良多。不过值得注意的是这个课并不适合小白入门哈~

篇幅有限,这个话题就暂且到此吧,只想说:

广泛的口碑固然很重要,但你亲自给的口碑无疑是更重要的。


二、线上学习的参与感非常重要

安利完课程,接下来就是要安利你自己了。

  • 直播随时回放?!

几乎所有的在线培训课程都支持直播随时回放,学习资料也随时获取的功能,对于入门学员来说,这是潜意识中最容易滋生懒惰和拖延的信息。我当初没有很好的坚持下来的主要原因就是这样,虽然心里很清楚这个课程非常好,但是依然会不由自主地产生了懈怠的心理,要么总以为这个钱一花出去,知识就好像已经保存在了我的脑海中,以后可以随时调取来用;要么就是到了直播上课时间,自己明明有时间听直播但还是会自信的以为隔天听直播回放也是一样,还能节省时间。

  • 坚持听直播!

上述提到的小心思其实都可以理解,我也都有不止一次的经历过。但以我的亲身经验来说,学习的参与感是尤为重要的。理论上说,所有的数据科学和AI相关技术知识都是可以通过网络资源获取和自学得到,但是既然选择了知识付费教育,就是选择了相信付费教育可以带来知识的高效获取、安排的灵活便利和有效的监督促进,那么也就应该能理解到紧跟课程进度不掉队,才能保证钱没有白花,其中学习的过程会是自己一步一个脚印不断在进步的过程。自然地,坚持听直播也是产生对自己积极暗示的最直接途径,不仅可以增进自己正在上进学习的自我监督感,还可以在直播过程的互动中,更容易边听边联想,提高对知识点的记忆和理解能力(关于人类记忆的本质是联觉这个话题就不展开了…)

至于说,在线上学习的过程中究竟如何更高效的总结和记忆知识呢?这就是下面的话题了哈!


三、做好笔记是在线学习的不二捷径

  • 用心

其实,谁都知道做笔记这件习以为常的小事。若按照笔记内容来区分,还可以分为学习笔记,读书笔记,观影笔记(观后感)和心情笔记(随笔)等等。然而,我在这里想强调的关键是:**为什么要做笔记。**这是关乎到笔记该如何存在的本质问题。如果不区分笔记的类型和内容,非要我一语中的说笔记应该怎么做的话,我会故作平静的告诉你:好笔记是要用心做出来的

  • 笔记软件推荐: Typora

你在线上参加课程学习的时候,肯定会有这样的感受:资料好多啊!从讲师的授课讲义,直播口述的知识信息,再到你解决bug看过的技术博文和高手给过你的答疑解惑,还有各种电子书籍和教程,这些知识的来源渠道很多也很繁杂,不可能再像中学时知识的来源只有书本和任课老师了。此外,IT类型的技术知识大多会涉及到很多代码,显然不可能拿个小本本手写,更何况大多都是电子版本的形式呈现。所以,不可避免的需要学会在电脑上做笔记,然后就是需要根据个人习惯来谈了。我是都在Typora上做笔记的,由于篇幅所限,就不更多安利此软件了,详细请先百度。(“作业部落”上做笔记也是一个不错的选择,它有着完备的 markdown 和 Math 以及完美代码块渲染,行间评论系统非常棒,也可以发布文章,唯一的大缺点就是没有社交化平台)

P.S:除了编程算法技术外的数学理论知识是不适合在 PC 上做电子化笔记的,只能传统的手写笔记才能记到脑子里,切记。。。。

  • Teaching is Learning

接下来,就是要说关键了:你做的笔记是写给未来的自己看的。在网络上听直播学习的过程中,为了节省时间和提高学习效率,看直播回放的次数应该尽可能的少,不能稍有点想不起来的知识点都要看回放找相关的说明和代码吧?所以说,你在线学习数据科学做笔记的最首要的目标,那就是尽可能的将直播视频中你认为有必要的记录下的内容记下来,就为的是再回忆某个记不太清的知识点或者代码内容的时候,只需要search自己的笔记即可,也就是说让笔记上的内容能够覆盖直播视频中你觉得有价值的所有信息,保证直播回放只看一次。此外,由于在电脑上做笔记有着可以快速录入信息,代码格式标准,还可以随时添入新信息等特点,所以在你自己的课程笔记基础上,还可以进一步写清楚如何解决的某报错信息、踩过的坑、花不少精力搞懂的代码详解、各种牛人或博文对同一个问题或者知识点的理解等等,都可以总结和记录下来。这样写的目的是什么呢?就是给你未来的自己看的,并且用自己的口吻写给未来"愚笨"的自己(其实,这里的学习技巧本质叫做费曼技巧,不展开谈了,直接贴给你学习大神 Scott H. Young 的讲解"十天内掌握线性代数:惊人的超速学习实验",YouTube 上还可以找到他的个人频道有更多细致的讲解)。那么呼应回上面说的,真正"用心"的去思考怎么做笔记给自己的时候,自然地会做出更高效,更适合自己的笔记来。

下面贴一个我自己听完Python和Pandas课的笔记小截图,都是慢慢补充自己写的,可见一斑吧。


四、自学路上必会之 “上下求索"的技能

正如我们在上面谈到的,线上课程学习的过程中必然会遇到各种各样的坑或者bug。那么你该如何面对呢?

首先,要摆正一个正确的态度。IT相关技术的学习特点是:没有哪个人会知道所有的答案,但所有与答案相关的信息都一定能在互联网上找到。这也就暗示了数据科学和AI技术的学习一定是也只能是以自学的方式获取知识和技能为途径的。没有人能给你打包票或提供所有你所需和最适合你的资源去学习,在自学的道路上,靠山靠地,不如靠自己!所以,千万不要有任何等着抱大腿或者轻轻松松、不知不觉就能成为AI算法工程师之类的臆想。

事实上,如果你多留意就会发现,高手都有很强的寻找答案的能力,有时候在讨论群里他们回答问题的时就是给你一个链接那么简单,里面可能是某国内外论坛上的一个讨论帖,但是在评论区某个人给的某某回复就可以完美解决你问题。这种"高手"是如何炼成的?这就是我想要普及一个很少有人强调,但是想入门一个IT技术就必须会的技能:搜索

前面已经从理论和现实的角度上提及很多次为啥要先自己搜索答案了,所以我主要说说如何搜索找到你想要的答案。再说白了,就是要充分利用百度和Google搜索

首先,在自己搜索答案的时候心中要记得这样一个"真理”:”理论上,我现在遇到的这个问题,一定可以找到在网络上的某个角落可以找到相关这个答案的蛛丝马迹~~“。然后,可以先试一试百度中搜索关键词,因为无需翻墙,响应速度也够快,更重要的是对中文的支持要稍微好一些(请暂时容忍一会无良的百度广告推广)。

比方说你忘记了Dataframe中对如何随机抽取某数量的样本(取表格的某几行),你就需要先构思用什么关键词合适了。关键词取的越多,显示的网页信息会越准确相关,但是真正相关的网页条目越少。关键词取的越少,自然地搜索结果会越泛泛。我的习惯是先用尽量少的但最相关的关键词去搜索,然后再慢慢让搜索要求变松。

对于上面的例子,我会倾向于搜索关键词:”pandas 随机 行“。pandas就是python的一个库,所以有了pandas,就没有必要写python,其他两个关键词是我假设要搜索到的网页上,至少必然会有的词汇。前几个搜索结果如下:

快速用眼睛扫过上面每个搜索结果,阅读红色关键字在该行所要表达的含义,就立马知晓第四个网页有你想要的答案,原来是pandas的sample函数!Google和百度搜索都可以很好的将关键词标记在搜索结果上,搜索引擎的这个功能可以让我们事半功倍的找到答案(居然也有没这种功能的搜索引擎,Yahoo!没错,说的就是你!)。

既然 有百度搜索为啥还要用Google呢? 这个问题的答案与为啥我们所有的键盘上都是写着26个英文字母是一样的,因为IT技术都是外国人发明的。。。那么,你也就可以理解对于很多非常细节的bug报错或者更加专业细致的解答,都会在国外的英文网页上找到答案。国外的技术社区一般都更活跃,牛人更多也更牛。所以,把你含有关键信息的报错信息扔到Google里,会更容易得到相关的解答信息,甚至可以找到对应的开源源码。比如下面我随便在百度上找的报错截图:

ArrtibuteError: '_NamespacePath' object has no attribute 'sort'

这究竟是什么意思呢? 把关键报错信息扔到Google里看看:

可以看到这个报错在Github上的不同代码仓库中有讨论到,还有著名的stackoverflow论坛上也有帖子,逐个点进去查看是否与自己的情况类似就能找到答案的蛛丝马迹啦。至于如何进一步提高自己的搜索水平,请自行搜索!

总之,就还是那句话:

只要你想要的没有找不到的!因为善于搜索,所以了解世界。

Because it’s there!

(附:免翻墙的谷歌搜索方案:http://dir.scmor.com/)


五、自学路上必会之 “提问的艺术”

在自学的这条道路上,总有你即使搜索也无能为力的时候,也有一时想快速得到高手或前辈的解答的时候,难免就会想到直接拉个人问一下不就好了嘛?没错,这是获取经验和知识最直接的方式。但是,你是否知道如何提出你的问题,也是一个需要技术含量的哦!其实很多时候群里没有人回答你的问题,不是因为别人对你的问题不屑一顾或者觉得问题太low,而是不知道你在问什么。。。。。

比方说,有的直接求 &^%$ 大神的出现:

难道会指望有自称大神的人回跳出来说自己是精通的么?请先自行研究,然后直接把具体的问题贴出来,才能让别人有机会接你的话音儿。

更多的情况是,和问题相关的背景细节不说清楚就直接随口一问:

按照哪个步骤说明?环境怎么检验的?在哪里import说不行?这些如果不说清楚,是不会有人晓得你的电脑环境究竟是啥情况,更没法替你解答。

要知道,只有真正清楚和了解自己是遇到了什么问题,才能给出合理和清晰的提问。下面我翻译了Fast.ai上给出的“如何提问的技巧”来简要说明,当你不知道自己遇到什么问题的时候,该如何提问:(另外有一个 informative 版本的提问的智慧)

提问的内容尽量包含:

  1. 你为了解决这个问题,你是做了哪些操作?你希望这些操作是什么效果和实际的效果是什么?
  2. 你猜测这个问题的根源是什么,以及你认为解决该问题可能需要如何做?
  3. 请告知你的基本电脑环境:如什么操作系统?在云平台?你的库版本是啥等~
  4. 如果你的操作步骤不同于课程给的notebook模板,请强调出来~
  5. 你收到的报错信息是什么(很重要!)
  6. 如果可以,请截图
  7. 如果和课程中操作的返回结果不一致,请指明~
  8. 你已经解决的部分问题是怎么做的?比方说你重启了电脑?重启了kernel?
  9. 你发觉到某些可行的解决方案,可以贴出来,如来自csdn、简书等~

上面的列表信息就是Fast.ai上数据科学家大牛提供的一个“提问说明”。请尽量参照这个列表去提问就好了。你说的越清楚,其他人就会越明白。不然,只有遇到过完全一样问题的人才清楚你在说什么。。。。

(附:其实著名的 stackoverflow.com 上记得也有个类似的提问说明帖子,不过就懒得找了~ 基本类似的~)


最后

关于小白入门数据科学,我想说的关键内容上述都差不多已经提到了,虽然还有很多小细节,诸如如何看报错信息、如何掌控自己电脑的环境变量等等,但这些小问题经过上面的介绍,终归不会成为问题。

  • 小结一下:

    • 优秀的线上教育平台:课程干货满满还不失风趣,讲师精力充沛还热爱分享,助教认真批改还热情反馈

    • 坚持听直播!

    • 好笔记是要用做出来的

    • 笔记软件推荐: Typora

    • 笔记是写给未来的自己看的!

      写笔记的目标是:直播回放只看一次!

    • 正确的态度是什么?

      没有哪个人知道所有的答案, 但所有与答案相关的信息都一定能在互联网上找到。

    • 入门一个IT技术就必须会的技能:搜索

      要充分利用百度和Google搜索

    • 只有真正清楚和了解自己是遇到了什么问题,才能给出合理和清晰的提问。

      论“提问的艺术”

最后的小忠告就是:不要指望相关的数学基础可以一步到位,要先多操作多实战。在不断应用和使用的过程中,慢慢学习和补充数学基础。

相信你终会发觉到,入门机器学习和AI领域其实比你想象得要容易的多。

(完)

Next
Previous

Related