经常面对这类任务?

  • 对着500多个Excel做同样的汇总统计
  • 去除文本文件里的重复行
  • 对比两个csv有啥差异
  • 几十个Excel合并起来,把大Excel拆成多个小的
  • 几个Excel的数据要用同一个列关联起来

被这些问题困扰?

  • 文件装入MySQL倒是能处理,但安装导入都太麻烦
  • Python装上版本又不对,不知道为啥能读Excel2017却不认得2003
  • Java学习和使用都太难了,结果每次都要手工做
  • 文件太大读进来内存溢出

当前常用技术有什么问题?

JAVA

  • 需要专业程序员,技术要求高
  • 计算类库少,代码繁琐
  • 开发环境配置复杂

SQL

  • 文件需先入库再计算,非常麻烦
  • 部署复杂、配置复杂、算法难写
  • IDE不友好,调试困难

Python

  • 语法不是专为结构化数据计算设计
  • 复杂运算不易开发
  • 版本之间存在不兼容问题
  • 外围开源包安装配置麻烦

使用集算器实现自由计算

仅需基本的编程知识,即可自由、自助、快速地进行文件计算
桌面级工具,即装即用,环境配置简单!

便利开发环境

即装即用,调试功能完善

敏捷语法体系

某支股票最长连续涨了多少交易日

Python

1 import pandas as pd
2 def iterate(col):
3 prev = 0;
4 res = 0;
5 val = 0;
6 for curr in col:
7 if curr – prev > 0:
8 res += 1;
9 else:
10 res = 0;
11 prev = curr;
12 if val < res:
13 val = res;
14 return val;
15 data = pd.read_excel('D:/Stock.xlsx',sheet_name=0). sort_values('Date').groupby('Company')['Price'].apply(iterate);

SPL

A
1 =file("D:/Stock.xlsx").xlsimport@t().sort(Date).group(Company)
2 =0
3 =A1.max(A2=if(Price>Price[-1],A2+1,0))

集合运算领域专业语法,同样过程代码更简洁!

直接SQL语法

直接针对文件使用SQL,无须将数据入库
A
1 $SELECT * FROM D:/Stock.xlsx WHERE Company='0001' ORDER BY date
2 $SELECT Company,max(price),min(price) from D:/Stock.xls WHERE month(date)=1 GROUP BY Company
3 $SELECT Company.Name,Stock.date,Stock.price FROM D:/Stock.xls Stock LEFT JOIN D:/Company.txt Company ON Stock.company=Company.ID
SPL中的简单SQL

面向过程计算

完整的循环分支控制

多样性数据源接口

  • txt、log、CSV、ini
  • xls、xlsx
  • Excel各版本 2003…2013…2019
  • xml、json

示例:文本间差异

算法
相对于old.csv,找到new.csv中新增的记录,其中userName和date联合确定一条记录。
文件
Old.csv New.csv
  userName,date,saleValue,saleCount userName,date,saleValue,saleCount
1 Rachel,2015-03-01,4500,9 Rachel,2015-03-01,4500,9
2 Rachel,2015-03-03,8700,4 Rachel,2015-03-02,5000,5
3 Tom,2015-03-02,3000,8 Ashley,2015-03-01,6000,5
4 Tom,2015-03-03,5000,7 Rachel,2015-03-03,11700,4
5 Tom,2015-03-04,6000,12 Tom,2015-03-03,5000,7
6   John,2015-03-04,4800,4
代码
  A B C
1 =file("d:\\old.csv").import@ct() =file("d:\\new.csv").import@ct() /逗号分隔的文本
2 =new=[B1,A1].merge@od()   /求差集

示例:多Excel多sheet分组汇总

算法
同一目录下有多个Excel,每个Excel有多个sheet,sheet格式相同,合并所有Excel的所有sheet,并按月分组,对金额求和求平均。
文件
Customer ID Customer Name Invoice Number Amount Purchase Date
1234 John Smith 100-0002 $1,200.00 2013/1/1
2345 Mary Harrison 100-0003 $1,425.00 2013/1/6
3456 Lucy Gomez 100-0004 $1,390.00 2013/1/11
4567 Rupert Jones 100-0005 $1,257.00 2013/1/18
5678 Jenny Walters 100-0006 $1,725.00 2013/1/24
6789 Samantha Donaldson 100-0007 $1,995.00 2013/1/31
代码
  A B C
1 for directory@p("d:/excel/*.xlsx") =file(A1).xlsopen() /循环目录下每个Excel
2   =B1.conj(B1.xlsimport@t(;~.stname))  /循环每个sheet
3   =@|B2  /依次合并sheet
4

=A4.groups (month('Purchase Date'):Month;sum(Amount):Total,avg(Amount):Average)

 /分组汇总

集算器与常用语言的对比

SPL技术特点

  • 敏捷性 即装即用,环境配置简单,无须额外插件
  • 适用性 完善的类库和过程计算,可进行复杂数据处理
  • 易用性 语法简单直观,调试方便,无须专业程序员
  • 开放性 内置多种文件访问接口,直接计算
  • 集成性 无缝嵌入应用系统,易于转为应用内计算

资源链接


英文版