日常工作中,涉及到数据的计算分析,Excel 一定是使用最多的。但是也有不少小伙伴困惑于 Excel 的深入学习难度大,复杂问题不好做,相同问题重复烦,大数据跑不了等问题。这里我们就来聊一聊 Excel 做数据分的好与不好,以及如何解决。
先来看 Excel 的优点。
1. 简单易学,容易上手。
首先 Excel 里有很多功能菜单,用户仅通过点击鼠标就能完成很多工作,简单到几乎每个人都能够使用它来进行基本的数据处理和分析。比如按班级数学成绩从高到底排序,直接点击对应的菜单功能就能实现。
其次 Excel 里的公式,写起来很直观,可以直接引用单元格的内容进行计算。比如计算每个同学的总分,直接在 F 列将对应单元格相加即可。这和我们做算术题的思维方式一致,很容易上手。
2. 交互性强,可实时获得计算结果
Excel 之所以应用广泛,除了使用门槛低外,还有其强大的交互功能。在 Excel 里每一步的计算结果,可直接获得。比如某订单数据,按照 SELLERID 统计每名销售员的销售总额
用数据透视表操作后,可以直接看到分类汇总后的结果,所见即所得。这对于数据分析师来说非常重要,很多时候我们要根据上一步的计算的结果来决定下一步再计算什么。
正是这两大优点,使得 Excel 成为了使用最广泛的工具。但是随着数据的爆炸式增长,业务需求变得更加复杂,Excel 的缺点也逐渐暴露出来。
1. 分析过程不好复现
首先数据分析不是单步骤就能完成的,往往需要多步骤的连续计算才能实现,而 Excel 很多操作都是通过鼠标点击实现,虽然用户体验不错,但是无法记录分析过程。在面对新的数据时,需要重复的劳动。
举个简单的例子,有两份数据。
订单数据表记录了近几年的销售订单信息。
员工信息表记录了所有员工的基本信息。
我们要找出 40 岁以下的女性销售员,并统计它们当年的平均销售额。
这个题目并不难,我们大概可以通过以下几个步骤来实现:
(1) 用函数 YEAR()提取出订单数据中年份信息
(2) 用数据透视表汇总每位销售人员的年销售额
(3) 将数据透视表的格式调整成方便下一步计算的样式,大约用 3 到 4 步的鼠标操作
(4) 将数据透视表的数据复制出来
(5) 用 VLOOKUP 函数将两表关联
(6) 在关联后的表格上筛选出 40 岁以下女性销售员的当年销售数据
(7) 将筛选后的数据复制出来
(8) 求平均值
用 Excel 操作下来,虽然用户体验很好,可以实时获得每一步的计算结果,但是操作过程却无法被记录,流程的每个步骤在 Excel 里是孤立的,并且还会产生一些中间数据。比如本题操作完后,Excel 里会产生多个 sheet 页(如下图),很容易就混乱了。如果某个条件或步骤需要修改,就只能一个一个去看。当数据源有更新时,也难以复现操作流程,只能重新去做,费时费力。
在数据分析项目中,我们遇到的问题往往比这个要复杂的多。对于复杂的项目,即使熟练的 Excel 用户也不敢轻易重现,更难保证每次需求相同,而结果一定准确了。也不要说每月甚至每周更新一次数据了,加班也干不完。
2. 复杂问题实现繁琐
Excel 终究是一个电子表格软件,很多功能都是为追求一个可视性高的表格而服务的,因此计算能力有限。在面对复杂一点的问题,实现难度会增加或操作会很繁琐。比如前面关联两表的例子,在 Excel 里并没有专门做关联的函数,一般都会用 VLOOLUP 来做,VLOOKUP 其实是个查找函数,一次只能返回一个列值,如果要返回多列,公式就要写多遍。如果要实现根据列名返回对应值,就要配合位置查找的函数才能实现,写公式的难度明显增大。如果是多条件的关联(比如根据姓名和区域)VLOOPUP 也不能直接实现,要想别的办法。仅仅一个关联问题,需求稍微变一下就要变更一下方法,本质原因就是 Excel 的函数计算功能弱。看似什么事情都能做,但是又都做的不好,很多问题都需要绕道而行。遇到复杂的业务问题就更难了,比如找出连续 3 年进入省销售前 3 的人员名单,统计每 7 天中连续三天活跃的用户数,计算每天新用户的次日留存率......
3. 面对大数据有点苦恼
Excel 只能支持 100 万行以内的数据。
当数据量大于 10 万时,Excel 计算就会很卡,甚至闪退。
随着数据分析需求的越来越高,越来越多的人转向编程语言来寻求帮助。确实编程语言可以非常有效的解决 Excel 的短板。它可以记录整个分析过程,实现自动化办公,避免重复劳动;编程语言的计算能里也更强,能够应对复杂问题,也支持大数据的运算。但是可惜的是大部分编程语言在解决 Excel 缺点的同时,也丧失了 Excel 的两大优点,容易上手和交互性强。
程序语言的用户习惯与思维方式和 Excel 是两种不同的体系,对于普通用户来说,编程门槛太高。想自学编程的人太多太多,但成功率有多少,估计 10% 都不到。其次程序语言的发明也不是为了做数据分析计算用的,缺乏交互性。而交互性,几乎可以说是数据分析的刚需。数据分析师需要知道每一步的计算结果是什么,才好决定下一步怎么计算。
那么有没有编程语言能够解决 Excel 的短板的同时,又能继承 Excel 的优点呢。
有,SPL。
SPL 是专门针对结构化数据计算而发明的一个编程语言,编程语言的计算优势它都有,而且更强。同时交互性也不错,很适合做数据分析。
1. 交互性强,对 Excel 用户特别友好
SPL 的操作方式也是在格子里进行,和 Excel 看起很像。
它可以像 Excel 一样引用单元格的内容来写公式代码。比如 A2 和 A3 的代码不用解释都能看懂,不同的是 Excel 的结果是会显示在写公式的单元格,SPL 的结果则是显示在界面右边,点击哪个格子就能看到哪个格子的结果。这样的好处就是,在可以记录计算过程的同时,又保留了很好的交互性。分析师们可以边看边写,用起来得心应手。
作为编程语言,SPL 的格值比 Excel 要更丰富,除了可以是单值外,还可以是一组值如 [3,5,7,8],也可以是一个表,比如前面班级成绩单的例子,如下图,A1 的结果就是一张表,SPL 里叫做序表。A1 代码的意思是将数据读入到 SPL。
接下来,按照数学成绩从高到低排列,并计算总分。在 SPL 里写出来是这样的:
写法简单直观,一看就懂。右边实时查看结算结果,出现错误可以及时修改。
SPL 在用户体验上极大程度的尊重了 Excel 用户的使用习惯,降低了普通人的编程门槛。
2. 可记录分析过程,随时复现
销售数据找 40 岁以下的女性销售员并求平均值的例子,Excel 需要多步操作,过程混乱,不好复现。
作为程序语言,SPL 可以记录操作过程。数据有更新时,只需替换数据源即可,无需重复劳动。条件更改时,修改起来也很容易。
3. 复杂问题,轻松应对
编程语言最大优点就是拥有更强大的计算能力。SPL 也不例外,很多复杂或繁琐的 Excel 问题在 SPL 里都不是事儿。比如前面提到用 VLOOLUP 做关联的问题,销售例子中,关联两表,写出来是这样的。
=VLOOKUP(A2,employee.xlsx!A1:I$501,MATCH(D1,employee.xlsx!A1:I$1,0))
要用两个函数配合才能实现,并且还要考虑参数是否锁行或锁列,逻辑上复杂,而且容易出错。
SPL 有专门的关联函数,直接写列名即可。将 B1 的 NAME, GENDER 等字段,按照 ID 号关联到 A2 上。
=A2.join(SELLERID,B1:EID,NAME,GENDER,STATE,BIRTHDAY)
SPL 里有丰富的计算函数,各种复杂的业务难题都能轻松应对。更多的 Excel 难题解法,官网上也有各种资料参考SPL 桌面分析,查起来很方便,这里不再一一举例。
4. 大数据处理流畅
Excel 在面对 10 万以上的数据量时就会很卡,SPL 不存在这个问题,10 万、百万的数据都能跑的很顺畅,还提供简易的游标运算,可以用流式读取数据,这样无论多大的数据量都能处理了。
SPL已开源免费,欢迎前往乾学院了解更多!