写点什么

打破认知:程序设计 = 算法 + 数据结构?

  • 2019-01-08
  • 本文字数:4280 字

    阅读完需:约 14 分钟

打破认知:程序设计=算法+数据结构?

大家好,我是陈旸,也是极客时间《数据分析实战 45 讲》专栏作者。很荣幸接到极客时间的邀请,来到极客 Live 和大家分享关于“数据分析”的话题。这次分享会共分为五部分,来为大家答疑解惑。


00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00

    我们为什么要学数据分析?

    学习新的数据结构和新的数据算法将会是新时代我们的使命。

    很多写程序的人都听说过一个公式:程序设计=算法+数据结构,我也相信很多人认为算法是编程里的基础。


    在我看来,这个公式应该过时了。从我 10 岁开始学编程时,我就被灌输了这个认知。所以,那时候我们学二叉树,学队列,学一些数组的表达方式,包括一些快速排序、排序的方法等等。


    而现在,很多的数据结构,包括我们排序的算法,都已经不需要我们去编写代码了。我们直接调用一行命令,通过封装的方式,就可以拿来即用。


    我再举个简单例子,在我很小的时候,有一门课叫汇编语言。它非常基础,比如,把一个字母 A 打到这个显示屏里面分多少步?它分了 32 个步骤,是如何从计分器里面读出去,最后让显示器里面显示出来。这是一个很简单的事,现在大家已经不需要关注到汇编语言的底层,很多的语言越来越高级,我们的知识已经封装的越来越完善。


    我觉得在新的时代里面,如何去更新我们新的数据结构和新的数据算法,这是我们的使命。再给大家一个数据,我们近三年,所有互联网数据的总和等于 4 万年数据的总和。知识处于一个非常爆炸的过程,而且我们相信,在未来的三年,它整个的总和又是以前的双倍。


    在这个海量的数据时代里面,它需要更加新型的存储的方式,举个例子,我们现在会接触到矩阵的运算,包括这些大型矩阵之间的向量表达方式和特征的抽取,包括以前我们可能会关注到一些快速排序等一系列的算法。我们现在最主要关心的是,如何从这些数据里面找出关联关系出来,如何进行分类,如何进行聚类?


    这个是在新的一个时代里面的算法的数据结构和基础的能力,也是一个非常重要的核心,也是这个市场上一个新的需求。我专门做了一个关于“程序员薪资情况”的调查,我发现在招数据分析,尤其是算法数据挖掘工程师,他们的薪资普遍比其他的工程师薪资要高。


    为什么?一方面是企业及整个市场的需求都很大,以数据挖掘为例,三到五万的月薪并不奇怪,甚至更高的月薪都会存在;另一方面市场缺口也很大,在 2020 年,就是一年之后,整个数据人才的需求量是现在的两倍,而且它能创造出来更多的价值。


    总结而言,我们是不是需要更新我们 20 年前的认知?那一阵学的算法和数据结构基础,是否能让我们更跟上时代的步伐?


    这也是我开设《数据分析实战 45讲》专栏的一个初衷,想让大家通过这个专栏的学习,掌握到新的数据结构和新的算法的能力。

    没有编程基础,也能学好数据分析

    请,不要灰心。

    有编程基础和没有编程基础是相对的,就算你有编程基础,但你未必有数据编程的能力。我想说的是,如果你没有编程基础,也不要灰心。因为数据分析是一个很新的领域,这几年也是非常的火爆,而且出现了很多新的理论。可能在 5 年前,有些理论是之前没有的。所以,无论是新人还是老人,起跑线都是很接近的。请,你不要灰心。


    第二方面,我在这个专栏着重重强调的学习方法是 MAS 学习方法。


    M-Multi-Dimension:想要掌握一个事物,就要从多个角度去认识它。也就是说要学习数据分析,你需要从不同的纬度跟人家去打交道,不管是知识概念的纬度,从工具的纬度,还是从实战的纬度,你都需要与其建立起联系。


    A-Ask:不懂就问,程序员大多都很羞涩,突破这一点,不懂就问最重要。以往如果我们没有专栏可以一对一去互动,或者答疑解惑,你可能通过网上去找答案,但是网上的答案有的时候不一定是正确的,或者你不一定能找到答案,但是通过专栏留言、社群答疑,我可以帮你来去进行解答,这是非常好的方法。(进入数据分析社群,可加专栏运营 Monica 微信:imonica,了解入群规则。)


    S-Sharing:最好的学习就是分享。用自己的语言讲出来,是对知识的进一步梳理。我看到专栏里的很多同学,现在逐渐养成分享的习惯。当你把这个内容分享给其它人的时候,这个内容才是你自己的,而不是老师的。我非常鼓励大家去写笔记,也有好多人把自己整理的内容放到幕布或者博客上面,这是非常好的方法。



    其中一个用户总结的思维导图,很赞!


    我总结以下两点:


    1、如果你没有编程的基础,没有关系,你可以跟上我的专栏,你跟大家的速度是一样的,甚至你会比别人跑得更快;


    2、另外,掌握好的学习方法真的非常重要,MAS 是个很不错的学习方法。这也是我专栏想达到的一个目的,授人以鱼不如授人以渔。

    即使数学高考考 9 分,也不妨碍你学习数据分析

    高考是封闭环境下的能力测试,考的是你的计算能力

    00:00 / 00:00
      1.0x
      • 3.0x
      • 2.5x
      • 2.0x
      • 1.5x
      • 1.25x
      • 1.0x
      • 0.75x
      • 0.5x
      网页全屏
      全屏
      00:00


      哈哈,数学高考考 9 分也是非常了不起的一件事。我是这么看的,高考的是计算能力。举个例子,让你去求一个排列组式。我们知道,在实际的工作中,我们做的不是闭卷答案,在开卷环境下,你是可以用计算器或者提问的方式去解决问题。就是说,你现在的工作环境和以前上学的考试是两种完全不同的状态。工作上,最重要的方法是:“不懂就问“,你求助于别人,这是最省时省力的解决问题的方法。


      另一方面,有些人跟我说,他的计算能力、数学能力都比较差。其实,这是有解的。在我的专栏里,我会让你去了解一些概念,你知道该怎么去用就好了,你完全没有必要去做推导。你只需要知道,我要用哪个公式,或者说我要用哪个算法,这个算法可能抽样出来就是一行代码,如果是可视化工具,根本就不用代码。


      总而言之,即使你的数学基础不好,不妨碍你去学这个专栏,掌握它的概念以及方法。


      很多人会望而却步,觉得中间是否需要一些数学的推导和运用。其实,大家应该从白话的角度去理解这个专栏,因为专栏里会有很多案例、比喻等等,会让大家更容易去理解概念,比如什么叫数据挖掘,什么叫分类,什么叫聚类,什么叫关联分析。


      打个比方,你同时认识了两个漂亮女孩,你要追哪一个成功概率比较高?这就可以用到数据分析的一些原理,比如,你想知道这个漂亮女孩,她到底是御女还是萝莉?这就会用到分类的算法;你认识女孩的渠道比较多,比说朋友会介绍,或者网上认识等等,就会要用数据集成的知识,因为不同的渠道你需要汇总到同一个渠道里面。不同朋友推荐同一个女孩,这时候就要做数据清洗了。


      再举个例子,假设你认识的女孩数量不只两个,假设有五万个,这时候决策该怎么做?那你要把这些女孩进行分组,把五万个人划分成五个组,每个组采用相同的决策,这叫聚类。聚类的方式是把一个个纬度的目标换成一个纬度,由原来的五万人变成了五个组,就大大提升了效率,采用一种降纬的思维。最后,这个数据它产生什么样的结果,你就需要采用数据可视化的方式帮你实现:我到底得出什么样的规律,或者我最后采用什么样的决策。


      通过这个例子,我们可以看习数据挖掘对我们实际的帮助是很大的,它可以帮助你解决实际中遇到的一些问题,抽象出来,利用数据挖掘、清洗等方式去解决。

      数据分析学到什么程度,能找到工作?

      00:00 / 00:00
        1.0x
        • 3.0x
        • 2.5x
        • 2.0x
        • 1.5x
        • 1.25x
        • 1.0x
        • 0.75x
        • 0.5x
        网页全屏
        全屏
        00:00


        我把它分成三个阶段:初级,中级和高级。


        初级:你需要了解基本的概念,会使用简单的工具。比如说你要做数据采集的话,你不会 Python 没有关系,我会教你八爪鱼怎么使。因为它是一个可视化的软件,拿来即用。另外,我也会讲解一些软件的使用,如果你也能学会用一些软件的话,也可以拿到很高的薪水。


        中级:需要自己动手去写一些代码。在这个专栏里,我会主推 Python 去做数据分析,比如分类的算法、聚类的算法、关联分析的算法,包括数据预测。而一个算法需要一个好的语来实现言而,Python 是非常直接的语言,会让你得到更多可视化的结果。


        高级:熟练度,还有就是效率上的提升。我举个例子,我之前做过深度学习,最开始是去调试一个图像识别算法过程,需要两到三周的时间。后来,我有了更多的经验之后,我知道哪些参数该进行优化,且这个参数在什么样的情况下可以采用什么样的收敛模型,中间的层次该怎么去调。之前需要花三周时间去完成的事情,就被缩短为三天,整个工作效率提升了 10 倍。


        在我的专栏里,我特意设置了一个专属题库。为什么我要做题库呐?因为,我觉得知识要被消化吸收最快的方法,就是练习,不断地反复练习。只有练习了,把知识点融会贯通,知识才会是你的。这些题库,我也都做会讲解。


        我在专属题库里列了十多个项目,都是非常实战的项目。多练习、多实战,你完全可以把这些项目写到自己的简历里,包括数据的描述及解题过程,最好用自己的话去做总结,并用博客的方式去呈现。这是非常棒的经历。

        Q&A

        问:本人已经工作 7 年了,做运维开发也有 5 年之多,主流语言也是 Python,个人对大数据开发,数据分析,数据挖掘之类的工作也特别感兴趣,所以毫不犹豫就买了老师的课程。之前空闲之余也看过相关数据挖掘的知识,比如 svm xgboot 手写体之类的。但找类似的工作突然发现没有底气,原因是没有数据挖掘相关的工作经验,我怕以后转行越来越困难,再加上一旦转行没有我现在的工资高,想想又放弃了,又不甘心,我该如何抉择?


        答:首先这是一个先有鸡,还是先有蛋的问题。


        我想你是认可数据挖掘,也对数据分析很有兴趣。最着急的是简历中没有相关的经验。


        确实很多公司很看重背景,而且你工作 7 年,又不能从初级职位开始,即使你对数据分析很感兴趣。


        我建议你还是以丰富简历为目标,在简历中要想办法增加 数据分析,数据挖掘的比例。


        我的专栏里会有 10+个项目,当然这些项目都不是太复杂。我建议你把它都做一遍,然后用自己的语言做项目总结,这些可以放到简历中。作为数据分析,数据挖掘的经验


        没有其他的捷径,如果你在这方面的简历不丰富 HR 很难给你一个满意的薪水。所以你就需要在工作之外,自己来训练,整理这些项目笔记。我专栏中的很多数据都来自于 Kaggle,这里有很多实战的项目,你如果完成了我的专栏,还想进一步丰富项目经验,可以做更多 Kaggle 项目。同样采用我的方式,把它作为项目背景,自己写项目总结,作为项目经验。


        问:数据挖掘预测部分会有哪些内容?


        答:数据挖掘,我列了 10 大算法,都是最经典的算法,包括:决策树 C4.5,CART,朴素贝叶斯、SVM、KNN、K-means、EM 聚类、Apriori、PageRank、Adaboost。这些主要是分类、聚类、关联分析、连接分析的算法。当然现在深度学习很火,后面如果大家有需求的话,可以在算法介绍完之后,加餐个深度学习。不过这里最好要有 GPU 运行环境了,要不运行起来会有些吃力。


        问:推荐一些数据分析的书


        答:思维:《思维简史:从丛林到宇宙》;


        数据处理:《数据挖掘:概念与技术》;《Pentaho Kettle 解决方案》;《精益数据分析》;《Small Data》;《利用 Python 进行数据分析》


        点击《数据分析实战45讲》,现在正在限时优惠,原价 ¥99,限时优惠 ¥79,仅限 3 天!


        2019-01-08 12:018905

        评论 1 条评论

        发布
        用户头像
        难以想象居然会在infoq上面看到这种文章,我不知道有多少人和我一样觉得三观不正,希望是我out了
        2019-01-10 20:32
        回复
        没有更多了
        发现更多内容

        区块链技术赋能音乐作品版权保护 法院采信存证证书作为有效权属证据

        CECBC

        从Engineer到Leader,我在思考啥?

        夏兮。

        互联网 管理 技术人 IT

        Groovy记录(1)-GroovyClassLoader

        春秋易简

        Groovy

        前后端、多语言、跨云部署,全链路追踪到底有多难?

        阿里巴巴云原生

        阿里云 云原生 全链路追踪

        双非学历为进大厂天天刷Java面试题,面试却履败,原因竟是算法?

        Java 编程 程序员 架构 IT

        【Vuex 源码学习】第十二篇 - Vuex 插件机制的实现

        Brave

        源码 vuex 10月月更

        gRPC,爆赞

        AlwaysBeta

        golang 编程 gRPC 后端 Go 语言

        「架构师教程」二十年架构师「马士兵」大牛的Java高级架构师教程

        Java 编程 程序员 IT 计算机

        面试作弊神器?!阿里P8亲自撰写的这份Java最新面试手册

        Java 程序员 架构 面试 后端

        阿里架构师总结Go语言和java语言之间的对比联系

        hanaper

        应用出海,如何使用苹果 CallKit 提升网络通话体验

        融云 RongCloud

        音视频 出海社交

        存量时代会员深度运营逻辑

        boshi

        深度思考 运营

        五分钟了解 Blazor

        智联大前端

        blazor

        基于区块链的供应链金融创新

        CECBC

        学生试卷&答题结构redis存储

        Nico

        Serverless 工程实践 | 零基础上手 Knative 应用

        阿里巴巴云原生

        阿里云 Serverless 云原生 Knative

        艺术市场的区块链革命

        CECBC

        Alibaba最新微服务持续集成,内含(Jenkins+Docker+Spring Cloud+K8S)

        Java 架构 面试 程序人生 编程语言

        隐蔽的角落-这次我们只聊Cilium IPAM

        Lance

        Node.js 日志之 winston 实践

        devpoint

        nodejs winston logger 10月月更

        Facebook宕机事故,暴露了上云不是唯一的答案

        脑极体

        Groovy 记录(2)-CompilationUnit

        春秋易简

        趣说Node.js的回调函数

        Regan Yue

        node.js JavaScrip Regan Yue 10月月更

        面试官:你说说ThreadLocal为什么会导致内存泄漏?

        长河

        Java

        ToB产品如何自传播(下)

        石云升

        产品经理 产品思维 10月月更

        拿蚂蚁offer,全靠阿里P8大牛总结的Java架构开发手册

        Java 编程 程序员 架构 面试

        实践篇 -- Redis客户端缓存在SpringBoot应用的探究

        binecy

        缓存 springboot redis sentinel

        Prometheus 基础查询(一)

        耳东@Erdong

        Prometheus 10月月更

        业界良心啊!第五次更新的Spring Cloud Alibaba升级太多内容

        Java 编程 程序员 IT 计算机

        SSRF漏洞实例分析

        网络安全学海

        网络安全 信息安全 渗透测试 WEB安全 漏洞分析

        并发相关的性质学习笔记

        风翱

        并发 10月月更

        打破认知:程序设计=算法+数据结构?_数据库_陈旸_InfoQ精选文章