交互数据分析从 Excel 到 SPL:基本营销分析

订单数据表记录了近几年的销售订单信息。

..

员工信息表记录了所有员工的基本信息。

..

1. 汇总并关联成宽表

将原始的订单数据汇总到年。然后再和员工信息表进行关联,做成这样一张表格,用于进一步的数据分析。

..

Excel 要手工操作多步。

(1)汇总每位销售人员的年销售额。

订单的原始数据中没有年份,只有订单日期,用 YEAR() 函数提取出年份。

..

然后使用数据透视表功能,汇总每个人的年销售额,如下图。

..

但是这样的显示方式无法进行下一步计算,还要设置报表布局,调整显示方式。大概要 3 到 4 步的菜单操作调整成下图格式。

..

后面还要进行很多分析计算,在数据透视表上是无法直接操作的,还得手动将数据复制粘贴出来。

..

(2)将汇总后的数据与员工表的相关信息进行关联

Excel 要用 VLOOKUP 关联,

D1 格填入:

=VLOOKUP($A2,employee.xlsx!$A$1:$I$501,MATCH(D$1,employee.xlsx!$A$1:$I$1,0))

然后拖动公式。

Excel 公式写法有点复杂,拖动公式要考虑参数锁行或锁列,容易出错。

VLOOKUP 只能做单列关联,如果要按照 SELLERID 和 YEAR 去关联,用 VLOOKUP 就会麻烦很多。

..

..

SPL 代码也有多步,但过程要清晰很多:


A

B

1

=file("sales.csv").import@t()

=file("employee.csv").import@t()

2

=A1.groups(SELLERID,year(ORDERDATE):YEAR;sum(AMOUNT):AMOUNT)

3

=A2.join(SELLERID,B1:EID,NAME,GENDER,STATE,BIRTHDAY)

SPL 是一种程序语言,但它的代码看起来和 Excel 很像,也是在格子写公式,且可以引用格子的值。

A1 格和 B1 格导入两份数据订单表和员工信息表。

SPL 有很强的交互性,可以实时查看每一步的计算结果。点击 A1 格,界面右边就可以看到 A1 格中数据。

..

A2 格按照 SELLERID 和 YEAR,分类汇总销售额,得到每个销售员每年的销售额。groups 为分类汇总函数。

A3 将员工表关联到汇总后的订单数据上,按照 ID 号进行关联。join 为关联函数,写法简单,填入关联条件和要返回的列名即可。一次关联可以返回多个列值, 也支持多列关联。

写成程序代码后,源数据变化时只要再执行一遍即可,避免重复操作。

2. 找出 40 岁以下女销售并统计她们当年的平均销售额

原始数据里没有年龄,要根据出生日期计算年龄。

Excel 可以用函数 DATEDIF 计算当前日期和出生日期的差值,得到年龄。

..

然后用筛选菜单,选出 2024 年 40 岁以下女性销售数据

..

统计平均销售额时,还不能在筛选数据上直接计算,要复制出来统计。

..

..

SPL 在前面基础上继续处理:


A

……

4

=A3.select(YEAR==2024 && age(date(BIRTHDAY))<=40 && GENDER=="F")

5

=A4.avg(AMOUNT)

A4 用 select 函数过滤,写上条件,筛选出 2024 年且 40 岁以下的女销售完成的订单,年龄可以临时计算。

A5 统计平均销售额

SPL IDE 支持单独执行一条语句。前 3 句代码已经执行过了,这里只要单独执行 A4 和 A5 就可以了。

..

3. 找出近几年的销售冠军

用 Excel 将数据按年和销售额排序,就可以看到每年的销售冠军。但是取出这些人却不太容易,要么手动复制,要么再加一个组内计数列再过滤,都比较麻烦,碰到有并列冠军时就更复杂。

..

SPL 的 maxp 函数可以取出销售额最大值所在整条数据,按年分组就可以得到每年的销售冠军,可以在任务 1 完成的 A3 基础上继续计算:


A

……

4

=A3.groups(YEAR;maxp(AMOUNT):m)

5

=A4.(m)

SPL 里有更丰富的聚合运算,比如 max() 取最大值,pmax 取最大值的位置,maxp 取最大值所在的整行数据。这些在 Excel 是没有的。

然后 A5 取出每组的聚合结果就可以了。

如果考虑到可能有人并列销售冠军,则可以在 maxp 上增加选项 @a 返回所有最大值所在行的数据。


A

……

4

=A3.groups(YEAR;maxp@a(AMOUNT):m)

5

=A4.conj(m)

map@a 会返回一个集合,在 A5 中要用 conj 函数合并。

4. 找出当年每个州的销售前三名

用 Excel 先选出 2024 年数据

..

然后和前一个任务类似,按 STATE 和 AMOUTN 排序,得到每个州的销售排名

..

每个州的前 3 名都能看到了,但通常还是要手动复制出来,数据量较大时就只能加辅助计数列了,不然过于繁琐。

SPL 还是继续在任务 1 的 A3 基础上计算,和任务 3 类似,只是换一个聚合函数:


A

……

4

=A3.select(YEAR==2024).groups(STATE;top(-3;AMOUNT):top3).conj(top3)

用 select 选出 2024 年数据,再用 groups() 函数按照省份分组,每个组内取销售额前 3 的数据即可。

这里的 top 也是一个聚合函数,它会返回一个小集合,即前三名成员。类似地,这里要用 conj 函数合并。