正式定档!QCon 北京站改期为2024年4月11-13日,地点:北京·国测国际会议会展中心 >>> 了解详情
写点什么

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

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

    阅读完需:约 14 分钟

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

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


00:00 / 00:00
    1.0x
    • 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
      • 2.0x
      • 1.5x
      • 1.25x
      • 1.0x
      • 0.75x
      • 0.5x
      网页全屏
      全屏
      00:00


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


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


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


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


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


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


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

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

      00:00 / 00:00
        1.0x
        • 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:018614

        评论 1 条评论

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

        4年Java开发经验,从传统公司裸辞之后足足准备了3个月,终于拿到美团

        Java 程序员 后端

        97 道大厂 Java 核心面试题出炉,来试试看你会几道题?

        Java 程序员 后端

        apollo在Spring boot加载过程解析,redis单线程原理

        Java 程序员 后端

        client-go实战之一:准备工作,干货分享

        Java 程序员 后端

        DL4J实战之五:矩阵操作基本功,微服务架构技术栈

        Java 程序员 后端

        Alibaba内部流行的“Java突击宝典”,springboot模块化架构

        Java 程序员 后端

        avatar Logo,nginx负载均衡算法及原理

        Java 程序员 后端

        Binder源码阅读指南之java层,Java程序员如何有效提升学习效率

        Java 程序员 后端

        CPU战争40年,终于把Intel打趴下了,字节跳动两轮面试让等hr

        Java 程序员 后端

        Docker系列(3)--容器连接和Dockerfile,kafka的原理

        Java 程序员 后端

        90行代码,15个元素实现无限滚动,吃透这份Java高级工程师面试497题解析

        Java 程序员 后端

        985应届进大厂,后端开发两年被裁,对前路迷茫的我

        Java 程序员 后端

        5种可能在10年后消失的开发语言,java消息队列面试题

        Java 程序员 后端

        6 种事件驱动的架构模式,springboot入门书籍

        Java 程序员 后端

        95% 的算法都是基于这 6 种算法思想,大厂Java面试必考点

        Java 程序员 后端

        Dubbo面试题,mybatis架构图

        Java 程序员 后端

        apiserver源码分析——启动流程,java工程师技术栈

        Java 程序员 后端

        BAT大厂Java面试必备:20道最新JVM面试题(含答案

        Java 程序员 后端

        架构实战营模块二作业

        随风King

        「架构实战营」

        CDH+Kylin三部曲之二:部署和设置,java项目百度网盘

        Java 程序员 后端

        Dijkstra求最短路算法 ( 超级超级详细的 ) 不断更新中

        Java 程序员 后端

        鸿蒙生态的2021:像犀牛在丛林飞

        脑极体

        as-if-serial规则和happens-before规则的区别

        Java 程序员 后端

        7年Java开发经验,面试20多家公司,砍下16个Offer

        Java 程序员 后端

        CAS都不了解,你还怎么看J-U-C,下载量瞬秒百万

        Java 程序员 后端

        CentOS部署Harbor镜像仓库,java进阶训练营百度网盘

        Java 程序员 后端

        4个实验,彻底搞懂TCP连接的断开,实战nginx张宴

        Java 程序员 后端

        6年拉力工作经验,学了阿里P8级架构师的7+1,java基础学习百度云

        Java 程序员 后端

        6月GitHub上最牛逼的10个Java开源项目,号称“Star收割机

        Java 程序员 后端

        Docker 从入门到实践系列三 - Docker 常用命令

        Java 程序员 后端

        docker-compose下的java应用启动顺序两部曲之二:实战

        Java 程序员 后端

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