打破认知:程序设计 = 算法 + 数据结构?
大家好,我是陈旸,也是极客时间《数据分析实战 45 讲》专栏作者。很荣幸接到极客时间的邀请,来到极客 Live 和大家分享关于“数据分析”的话题。这次分享会共分为五部分,来为大家答疑解惑。
我们为什么要学数据分析?
学习新的数据结构和新的数据算法将会是新时代我们的使命。
很多写程序的人都听说过一个公式:程序设计 = 算法 + 数据结构,我也相信很多人认为算法是编程里的基础。
在我看来,这个公式应该过时了。从我 10 岁开始学编程时,我就被灌输了这个认知。所以,那时候我们学二叉树,学队列,学一些数组的表达方式,包括一些快速排序、排序的方法等等。
而现在,很多的数据结构,包括我们排序的算法,都已经不需要我们去编写代码了。我们直接调用一行命令,通过封装的方式,就可以拿来即用。
我再举个简单例子,在我很小的时候,有一门课叫汇编语言。它非常基础,比如,把一个字母 A 打到这个显示屏里面分多少步?它分了 32 个步骤,是如何从计分器里面读出去,最后让显示器里面显示出来。这是一个很简单的事,现在大家已经不需要关注到汇编语言的底层,很多的语言越来越高级,我们的知识已经封装的越来越完善。
我觉得在新的时代里面,如何去更新我们新的数据结构和新的数据算法,这是我们的使命。再给大家一个数据,我们近三年,所有互联网数据的总和等于 4 万年数据的总和。知识处于一个非常爆炸的过程,而且我们相信,在未来的三年,它整个的总和又是以前的双倍。
在这个海量的数据时代里面,它需要更加新型的存储的方式,举个例子,我们现在会接触到矩阵的运算,包括这些大型矩阵之间的向量表达方式和特征的抽取,包括以前我们可能会关注到一些快速排序等一系列的算法。我们现在最主要关心的是,如何从这些数据里面找出关联关系出来,如何进行分类,如何进行聚类?
这个是在新的一个时代里面的算法的数据结构和基础的能力,也是一个非常重要的核心,也是这个市场上一个新的需求。我专门做了一个关于“程序员薪资情况”的调查,我发现在招数据分析,尤其是算法数据挖掘工程师,他们的薪资普遍比其他的工程师薪资要高。
为什么?一方面是企业及整个市场的需求都很大,以数据挖掘为例,三到五万的月薪并不奇怪,甚至更高的月薪都会存在;另一方面市场缺口也很大,在 2020 年,就是一年之后,整个数据人才的需求量是现在的两倍,而且它能创造出来更多的价值。
总结而言,我们是不是需要更新我们 20 年前的认知?那一阵学的算法和数据结构基础,是否能让我们更跟上时代的步伐?
这也是我开设《数据分析实战 45 讲》专栏的一个初衷,想让大家通过这个专栏的学习,掌握到新的数据结构和新的算法的能力。
没有编程基础,也能学好数据分析
请,不要灰心。
有编程基础和没有编程基础是相对的,就算你有编程基础,但你未必有数据编程的能力。我想说的是,如果你没有编程基础,也不要灰心。因为数据分析是一个很新的领域,这几年也是非常的火爆,而且出现了很多新的理论。可能在 5 年前,有些理论是之前没有的。所以,无论是新人还是老人,起跑线都是很接近的。请,你不要灰心。
第二方面,我在这个专栏着重重强调的学习方法是 MAS 学习方法。
M-Multi-Dimension:想要掌握一个事物,就要从多个角度去认识它。也就是说要学习数据分析,你需要从不同的纬度跟人家去打交道,不管是知识概念的纬度,从工具的纬度,还是从实战的纬度,你都需要与其建立起联系。
A-Ask:不懂就问,程序员大多都很羞涩,突破这一点,不懂就问最重要。以往如果我们没有专栏可以一对一去互动,或者答疑解惑,你可能通过网上去找答案,但是网上的答案有的时候不一定是正确的,或者你不一定能找到答案,但是通过专栏留言、社群答疑,我可以帮你来去进行解答,这是非常好的方法。(进入数据分析社群,可加专栏运营 Monica 微信:imonica,了解入群规则。)
S-Sharing:最好的学习就是分享。用自己的语言讲出来,是对知识的进一步梳理。我看到专栏里的很多同学,现在逐渐养成分享的习惯。当你把这个内容分享给其它人的时候,这个内容才是你自己的,而不是老师的。我非常鼓励大家去写笔记,也有好多人把自己整理的内容放到幕布或者博客上面,这是非常好的方法。
其中一个用户总结的思维导图,很赞!
我总结以下两点:
1、如果你没有编程的基础,没有关系,你可以跟上我的专栏,你跟大家的速度是一样的,甚至你会比别人跑得更快;
2、另外,掌握好的学习方法真的非常重要,MAS 是个很不错的学习方法。这也是我专栏想达到的一个目的,授人以鱼不如授人以渔。
即使数学高考考 9 分,也不妨碍你学习数据分析
高考是封闭环境下的能力测试,考的是你的计算能力
哈哈,数学高考考 9 分也是非常了不起的一件事。我是这么看的,高考的是计算能力。举个例子,让你去求一个排列组式。我们知道,在实际的工作中,我们做的不是闭卷答案,在开卷环境下,你是可以用计算器或者提问的方式去解决问题。就是说,你现在的工作环境和以前上学的考试是两种完全不同的状态。工作上,最重要的方法是:“不懂就问“,你求助于别人,这是最省时省力的解决问题的方法。
另一方面,有些人跟我说,他的计算能力、数学能力都比较差。其实,这是有解的。在我的专栏里,我会让你去了解一些概念,你知道该怎么去用就好了,你完全没有必要去做推导。你只需要知道,我要用哪个公式,或者说我要用哪个算法,这个算法可能抽样出来就是一行代码,如果是可视化工具,根本就不用代码。
总而言之,即使你的数学基础不好,不妨碍你去学这个专栏,掌握它的概念以及方法。
很多人会望而却步,觉得中间是否需要一些数学的推导和运用。其实,大家应该从白话的角度去理解这个专栏,因为专栏里会有很多案例、比喻等等,会让大家更容易去理解概念,比如什么叫数据挖掘,什么叫分类,什么叫聚类,什么叫关联分析。
打个比方,你同时认识了两个漂亮女孩,你要追哪一个成功概率比较高?这就可以用到数据分析的一些原理,比如,你想知道这个漂亮女孩,她到底是御女还是萝莉?这就会用到分类的算法;你认识女孩的渠道比较多,比说朋友会介绍,或者网上认识等等,就会要用数据集成的知识,因为不同的渠道你需要汇总到同一个渠道里面。不同朋友推荐同一个女孩,这时候就要做数据清洗了。
再举个例子,假设你认识的女孩数量不只两个,假设有五万个,这时候决策该怎么做?那你要把这些女孩进行分组,把五万个人划分成五个组,每个组采用相同的决策,这叫聚类。聚类的方式是把一个个纬度的目标换成一个纬度,由原来的五万人变成了五个组,就大大提升了效率,采用一种降纬的思维。最后,这个数据它产生什么样的结果,你就需要采用数据可视化的方式帮你实现:我到底得出什么样的规律,或者我最后采用什么样的决策。
通过这个例子,我们可以看习数据挖掘对我们实际的帮助是很大的,它可以帮助你解决实际中遇到的一些问题,抽象出来,利用数据挖掘、清洗等方式去解决。
数据分析学到什么程度,能找到工作?
我把它分成三个阶段:初级,中级和高级。
初级:你需要了解基本的概念,会使用简单的工具。比如说你要做数据采集的话,你不会 Python 没有关系,我会教你八爪鱼怎么使。因为它是一个可视化的软件,拿来即用。另外,我也会讲解一些软件的使用,如果你也能学会用一些软件的话,也可以拿到很高的薪水。
中级:需要自己动手去写一些代码。在这个专栏里,我会主推 Python 去做数据分析,比如分类的算法、聚类的算法、关联分析的算法,包括数据预测。而一个算法需要一个好的语来实现言而,Python 是非常直接的语言,会让你得到更多可视化的结果。
高级:熟练度,还有就是效率上的提升。我举个例子,我之前做过深度学习,最开始是去调试一个图像识别算法过程,需要两到三周的时间。后来,我有了更多的经验之后,我知道哪些参数该进行优化,且这个参数在什么样的情况下可以采用什么样的收敛模型,中间的层次该怎么去调。之前需要花三周时间去完成的事情,就被缩短为三天,整个工作效率提升了 10 倍。
在我的专栏里,我特意设置了一个专属题库。为什么我要做题库呐?因为,我觉得知识要被消化吸收最快的方法,就是练习,不断地反复练习。只有练习了,把知识点融会贯通,知识才会是你的。这些题库,我也都做会讲解。
我在专属题库里列了十多个项目,都是非常实战的项目。多练习、多实战,你完全可以把这些项目写到自己的简历里,包括数据的描述及解题过程,最好用自己的话去做总结,并用博客的方式去呈现。这是非常棒的经历。
Q&A
1、问:本人已经工作 7 年了,做运维开发也有 5 年之多,主流语言也是 Python,个人对大数据开发,数据分析,数据挖掘之类的工作也特别感兴趣,所以毫不犹豫就买了老师的课程。之前空闲之余也看过相关数据挖掘的知识,比如 svm xgboot 手写体之类的。但找类似的工作突然发现没有底气,原因是没有数据挖掘相关的工作经验,我怕以后转行越来越困难,再加上一旦转行没有我现在的工资高,想想又放弃了,又不甘心,我该如何抉择?
答:首先这是一个先有鸡,还是先有蛋的问题。我想你是认可数据挖掘,也对数据分析很有兴趣。最着急的是简历中没有相关的经验。
确实很多公司很看重背景,而且你工作 7 年,又不能从初级职位开始,即使你对数据分析很感兴趣。
我建议你还是以丰富简历为目标,在简历中要想办法增加 数据分析,数据挖掘的比例。
我的专栏里会有 10+ 个项目,当然这些项目都不是太复杂。我建议你把它都做一遍,然后用自己的语言做项目总结,这些可以放到简历中。作为数据分析,数据挖掘的经验
没有其他的捷径,如果你在这方面的简历不丰富 HR 很难给你一个满意的薪水。所以你就需要在工作之外,自己来训练,整理这些项目笔记。我专栏中的很多数据都来自于 Kaggle,这里有很多实战的项目,你如果完成了我的专栏,还想进一步丰富项目经验,可以做更多 Kaggle 项目。同样采用我的方式,把它作为项目背景,自己写项目总结,作为项目经验。
2、问:数据挖掘预测部分会有哪些内容?
答:数据挖掘,我列了 10 大算法,都是最经典的算法,包括:决策树 C4.5,CART,朴素贝叶斯、SVM、KNN、K-means、EM 聚类、Apriori、PageRank、Adaboost。这些主要是分类、聚类、关联分析、连接分析的算法。当然现在深度学习很火,后面如果大家有需求的话,可以在算法介绍完之后,加餐个深度学习。不过这里最好要有 GPU 运行环境了,要不运行起来会有些吃力。3、问:推荐一些数据分析的书
答:思维:《思维简史:从丛林到宇宙》;
数据处理:《数据挖掘:概念与技术》;《Pentaho Kettle 解决方案》;《精益数据分析》;《Small Data》;《利用 Python 进行数据分析》