商业工作中最常见的数据是表格式数据,比如订单记录、人员信息、销售合同等,用专业的术语来说叫做结构化数据。职场人员处理表格式数据时,最常用的工具是Excel,这是因为Excel提供了简单易用的公式和界面友好的操作,可以完成大多数任务。但有时遇到较特殊困难的运算,以及要反复执行的动作或涉及大批量文件的处理,继续手工操作Excel就会非常繁琐。这种时候,如果能编程解决,就可以大幅度提高工作能力和效率。这也是目前有不少职场人员开始学习程序语言的原因。
市场上可供职场人员学习使用以处理这些表格式数据的程序设计语言有不少,我们挑选其中四种典型技术来讨论:1. 以MySQL为代表的小型数据库;2. Excel中自带的VBA;3.近年来非常热门被各大培训机构推崇的Python;4.后起的新秀esProc。下面,就我们来深入了解这些程序语言在安装、调试、表格式数据计算方面的差异,看看哪个最适合职场人员学习使用。
MySQL
MySQL、HSQLDB、SQLite都属于小型数据库,这类数据库对软硬件环境要求低,且能在桌面运行,理论上职场人员可以学会。这里以最常见的MySQL为例,讨论这种程序语言的特点。
安装配置方面,MySQL虽然比大型数据库简化了很多,但对职场人员仍然难度过大。MySQL自带的客户端过于简陋,通常要额外安装第三方客户端(比如Navicat、Toad),这就使MySQL的安装难度成倍上升。更困难的是,无论服务端还是客户端,都需要指定数据库名、端口、字符集等关键配置项,非专业人员很难理解这些新概念,这也会增加安装难度。
调试方面, 因为SQL就不提倡分步,缺乏调试的基础,MySQL也没有提供专门的调试功能。简单语句还可以,但稍复杂些比如带嵌套的语句,调试就非常困难,只能先手工拆分成多条语句分别执行,再逐步缩小问题范围,整个操作过程不仅非常繁琐,而且需要较高的技术水平,这对职场人员来讲实在是太难了。
表格式数据的计算方面,MySQL同样不方便。MySQL不支持直接计算Excel文件,而是要先把Excel导出为CSV,再将CSV导入MySQL库表,最后才能进行计算。其中入库又分为4个步骤,分别是切换库、建表、入库、建索引。比如将emp.csv导入MySQL,需要在命令行输入如下代码:
mysql>use testdb; mysql>create table emp ( -> empid int(10) not null, -> name varchar(50), -> deptid int(10), -> salary float, -> sex varchar(1), -> birthday date, -> hireday date)CHARSET = utf8; mysql>LOAD DATA INFILE 'd:dataemp.csv' INTO TABLE emp ->CHARACTER SET utf8 ->FIELDS TERMINATED BY ',' ->LINES TERMINATED BY ' ' ->IGNORE 1 LINES; mysql>ALTER TABLE emp ADD PRIMARY KEY (empid); |
入库的过程不仅操作繁琐,还要学习很多新概念,大部分职场人员被挡在门外,很难进入后续的计算阶段。如果能够突破前期的入库障碍,后续的数据计算会相对容易些,因为SQL的历史非常悠久,已经积累了大量教学资料,几乎所有的常见运算都能找到相应的示例。不过,如果碰到的运算比较复杂, SQL就会比较为难,比如常见的有序运算,像同期比、排名等实现起来都很不方便;SQL又不提倡分步,经常导致要写出多层嵌套的语句,这些对非专业人员来讲要求过高了。
VBA
VBA是微软官方提供的Excel开发语言,不仅可以定制最自由的操作界面,还可以实现任意一种运算,包括反复和批量的运算。换句话说,理论上VBA什么都可以实现。
安装配置方面,由于 VBA内置于Excel,因此无需额外安装,这一点最为友好。
调试方面,VBA功能足够丰富,对职场人员来说比较友好。VBA是现代开发语言,提倡分步计算,大目标可以拆分成多个小步骤,具备良好的调试基础。VBA也确实提供了breakpoint、run to curor、step in、step over等调试功能,可以观察每一步的计算结果和每个变量的实时状态,这有利于开发者调整思路,并快速找到错误代码。
但是,在表格式数据的计算方面,VBA表现很差,远不如MySQL。什么都可以实现意味着什么都不精,VBA缺少专门为表格数据设计的基础运算,常见的过滤、排序、聚合等在SQL中只要一句即可完成的运算,在VBA中都要写很多行代码才能实现,不仅过于繁琐,而且对于非专业人员还有相当的难度,往往会变成难以逾越的障碍。
Python
VBA最大的缺陷是没有表格式数据函数库,而Python提供了丰富的这类运算能力,恰好可以弥补VBA的缺陷。对于基本的表格式数据运算,比如过滤、排序、聚合等,Python通常只需一两行代码,比如下面的分组汇总:
data.groupby("deptid")['salary'].agg([len, np.sum, np.mean]) |
对于访问Excel文件,比起SQL中的十几行代码,Python也只需两行:
import pandas as pd data = pd.read_excel('d:/emp.xlsx') |
Python的安装部署是个有点困难的事。安装Python的时候,用户需具备专业程序员的素质,才能从十几个选项中做出正确选择,否则很容易缺失功能,比如调试功能默认不会安装。有些选项甚至要通过下载不同的安装包来解决,比如32位/64位。安装好Python本体后并不能进行上述的表格数据计算,还需要再安装pandas及Excel支持库,这要用第三方函数库的安装工具来做,这个安装工具运行在命令行中,对职场人员很不友好,而且安装工具本身也需要更新,届时还需另一个安装命令。市场上也有一些封装好的第三方安装包,有的可以较方便地安装Ptyhon和pandas,但五花八门良莠不齐,非专业人员很难选择。从这个角度上看,Python其实还是面向专业技术人员的工具。
在调试方面,Python作为提倡分步计算的现代开发语言,同样具备完善的调试功能。需要注意是,Python的表格式数据类型(dataFrame)是Pandas提供的,并不是Python的原生数据类型,调试时Python会把它展现为糟乱的多层结构,而不是友好的表格形式。一边调试一边在“立即执行”窗口手工打印变量,一定程度上可以缓解这个难题,但远不如原生数据类型方便。
Python代码看起来简单,但其实学习难度相当高,尤其对职场人员而言。Python Pandas不是为结构化数据设计,它用于处理表格式数据的dataFrame并不是我们常规理解的,由一行行记录构成的集合,而是数学家常用的概念,由多个行列定义的矩阵。事实上,Pandas就没有记录这种数据类型,这导致很多运算要绕弯路才能想清楚,虽然看起来写着并不长,但其实思考难度很大,比如“取上一行”要理解成“把列下移一位”才可以。其次,Python有很多与表格式数据相关的数据类型,除了前面讲到的dataFrame,还有分组汇总后的DataFrameGroupBy类型,以及序列、矩阵等。这些本质上都是集合数据类型,但操作方式却不一样,你无法举一反三,每次遇到都要去找例子看。如果没有深刻理解它的内部结构(然而这对于职场人员又太难了),对和错经常要凭运气了。培训班虽多,教出来也只是会抄代码改例子,碰到新情况没有例子可抄时,很多人就会晕掉。
前面提到过,Python擅长基本的表格式数据运算,这其实还有另一层意思:Python较难实现较复杂的表格式数据计算,即使写出来,代码也不再那么简练了。举个不太复杂的例子,比如计算一支股票最长连续上涨的天数,Python写出大概是这样:
import pandas as pd aapl = pd.read_excel('d:/AAPL.xlsx') continue_inc_days=0 ; max_continue_inc_days=0 for i in aapl['price'].shift(0)>aapl['price'].shift(1): continue_inc_days =0 if i==False else continue_inc_days +1 max_continue_inc_days = continue_inc_days if max_continue_inc_days < continue_inc_days else max_continue_inc_days print(max_continue_inc_days) |
esProc
与Pandas类似,esProc也有一套表格式数据函数库,与Pandas不同的是,esProc的学习难度要低得多。
esProc的基础数据类型(序表)就是由一行行记录构成的集合,和我们常规理解的一样。使用这种数据类型计算表格式数据时,无须多绕弯路,只需按照自然思路正常实现,而且代码非常简短。esProc的重要数据类型很少,只有记录和集合这两种。表格数据、数组,以及分组之后的数据(集合的集合),这些本质上都是集合,在esProc中的操作方法也完全一致,只要学会一种,就能举一反三掌握其他。
基本运算方面,esProc和pandas都很容易,看上去区别不大。但当遇到的问题有一定的复杂性时,就需要多个函数组合起来才能解决,有些还要在循环判断中进行计算。对于这种情况,esProc比Python更容易实现,代码也更简短。比如,同样计算最长的连续上涨天数,esProc实现同样思路只要两行:
A | B | |
1 | =file("d:/AAPL.xlsx").xlsimpor@t() | 读Excel文件,首行为列名 |
2 | =a=0,A1.max(a=if(price>price[-1],a+1,0)) | 求最长连续上涨天数 |
安装部署方面,esProc虽然不能像VBA那样无需安装,但比MySQL和Python要简单多了。为方便用户操作,esProc特意简化步骤,支持一键式安装。即使定制安装,也只有部署路径和32位/64位这种简单选择,且主体功能不缺失。
在调试方面,esProc和Python类似,同样具备完善的调试功能。比Python更方便的是,esProc支持对表格数据类型(序表)进行调试,可以方便地观察表格数据的变化,可显著提升调试效率。除此之外,esProc用单元格代表计算步骤或变量,无需额外定义变量,用格名就可以引用该步骤或变量。这种类似Excel的开发风格,可以显著降低职场人员的开发/调试门槛。
总结
职场人员学习编程无非就是为了提高工作效率,能借助工具当然好,但如果工具本身带来的难度更大,那就没必要了。所以,这些编程语言不仅要好用,还要易学习、易安装、易调试等等。
经过前面的分析的比较,我们可以对考查的这几种工具列一个对比表:
安装 | 调试 | 表格式数据计算 | 学习 | |
MySql | ★ | ★ | ★★ | ★★★★ |
VBA | ★★★★★ | ★★ | ★ | ★ |
Python | ★★ | ★★★ | ★★★ | ★★★ |
esProc | ★★★★ | ★★★★★ | ★★★★★ | ★★★★ |
注:最高五星,星越多表示越方便
可以看出,相比之下,esProc是最适合职场人员的程序语言,不仅学习难度低,而且容易实现较复杂的表格式数据计算,还提供了一键式安装和针对表格式数据的调试功能。