esproc desktop 是什么?

非专业人员可以学会的

程序语言

桌面数据处理和分析的

工具集

esproc解决什么任务?

  • excel难以直接完成的复杂运算和表格变换
  • bi软件无法实施的多步骤交互性数据分析
  • 批量或重复性处理(查询/计算/生成/转换)手头的xls/csv/…

现在怎么办?

excel

操作简单、函数丰富

批量和重复性任务很和繁琐

对复杂的运算支持不足

借助bi软件? tableau / powerbi / qlik / tibco / objects bi …

使用简单、界面流畅美观

计算功能单一,只能做死板的多维分析

借助编程? vba

完整的编程能力,天然内置于excel

对表格计算支持太差,简单任务也要大段代码

借助编程? python

支持表格计算,交互性好,培训班遍地

表格计算不符合自然思维,太多种类表格需要掌握,难度超出非专业人员能力

df = pd.read_csv("../login_data.csv")
df["ts"] = pd.to_datetime(df["ts"]).dt.date
grouped = df.groupby("userid")
aligned_dates = pd.date_range(start=df["ts"].min(), end=df["ts"].max(), freq='d')
user_date_wether_con3days = []
for uid, group in grouped:
    group = group.drop_duplicates('ts')
    aligned_group = group.set_index("ts").reindex(aligned_dates)
    consecutive_logins = aligned_group.rolling(window=7)
    n = 0
    date_wether_con3days = []
    for r in consecutive_logins:
        n  = 1
        if n<7:
            continue
        else:
            ds = r['userid'].isna().cumsum()
            cont_login_times = r.groupby(ds).userid.count().max()
            wether_cont3days = 1 if cont_login_times>=3 else 0
            date_wether_con3days.append(wether_cont3days)
    user_date_wether_con3days.append(date_wether_con3days)
arr = np.array(user_date_wether_con3days)
day7_cont3num = np.sum(arr,axis=0)
result = pd.dataframe({'dt':aligned_dates[6:],'cont3_num':day7_cont3num})

借助数据库? sql

真正的记录集合,有交互性

环境复杂,不能直接处理桌面文件,非专业人员难以使用

过程式运算复杂度太高,非专业人员难以掌握

with all_dates as (
	select distinct trunc(ts) as login_date
	from login_data),
user_login_counts as (
	select userid, trunc(ts) as login_date, 
		(case when count(*)>=1 then 1 else 0 end) as login_count
	from login_data
	group by userid, trunc(ts)),
whether_login as (
	select u.userid, ad.login_date, nvl(ulc.login_count, 0) as login_count
	from all_dates ad
	cross join (
		select distinct userid
		from login_data) u
	left join user_login_counts ulc
	on u.userid = ulc.userid
	and ad.login_date = ulc.login_date
	order by u.userid, ad.login_date),
whether_login_rn as (
	select userid,login_date,login_count,rownum as rn 
	from whether_login),
whether_eq as(
	select userid,login_date,login_count,rn,
		(case 
			when lag(login_count,1) over (order by rn)= login_count 
				and login_count =1 and lag(userid,1) over (order by rn)=userid 
			then 0 
			else 1 
		end) as wether_e	
	from whether_login_rn
),
numbered_sequence as (
	select userid,login_date,login_count,rn, wether_e,
		sum(wether_e) over (order by rn) as lab
	from whether_eq),
consecutive_logins_num as (
	select userid,login_date,login_count,rn, wether_e,lab,
  		(select (case when max(count(*))<3 then 0 else 1 end)
   		from numbered_sequence b
   		where b.rn between a.rn - 6 and a.rn
		and b.userid=a.userid
   		group by b. lab) as cnt
	from numbered_sequence a)
select login_date,sum(cnt) as cont3_num
from consecutive_logins_num
where login_date>=(select min(login_date) from all_dates) 6
group by login_date
order by login_date;

esproc desktop!

即装即用,非专业人员可独立完成

面向结构化数据

structured process language
代码简洁,远胜vba、sql和python
a
1 =file("login_data.csv").import@tc()
2 =periods(date(a1.ts),date(a1.m(-1).ts))
3 =a1.group(userid).(~.align(a2,date(ts)).(if(#<7,null,(cnt=~[-6:0].group@i(!~).max(count(~)),if(cnt>=3,1,0)))))
4 =msum(a3).~.new(a2(#):dt,int(~):cont3_num).to(7,)
  • 原生语言支持结构化数据
  • 真正的记录集合,只有一种集合
  • 直接计算桌面文件
  • 语言能力完整
  • 简化复杂计算,降低数据分析的技术门槛

超强表格处理能力

合并汇总与拆分

  • 列相同的表格合并
  • 合并时去除重复的列
  • 合并时汇总重复的列
  • 追加和累计到汇总表
  • 按分类和行数拆分
  • ……

集合运算和从属判断

  • 简单成员的交并差
  • 行式数据求交并差
  • 不确定数量的集合求交并差
  • 集合相等与从属判断
  • 次序无关的集合相等与从属判断
  • ……

特殊分类和汇总方法

  • 每n个成员分成一组
  • 使用相邻数据作为分组条件
  • 碰到空行或非空行时分组
  • 按数据值的间隔分组
  • 将分类内的数据拼接成文字
  • ……

扩展与补齐

  • 生成连续的区间
  • 根据数值将一行扩展出多行
  • 拆分文字后扩展成多行
  • 在连续值中补足缺失部分
  • 每隔n行补足若干空行
  • ……

查找与筛选

  • 查找某个值的位置
  • 使用位置筛选
  • 找到第一个或最后一个
  • 找到最大最小值
  • 选出前n名/后n名
  • ……

重复判断、计数与去重

  • 判断是否有与自己重复的数据
  • 统计重复次数
  • 不确定多列一起统计重复次数
  • 行式数据去重
  • 简单数据去重
  • ……

关联与比对

  • 关联表引用
  • 区间关联
  • 二维关联表
  • 使用区间范围倒查关联表
  • 关联多行数据
  • ……

文字与日期处理

  • 字符串拆分成多个
  • 拆出数字和日期
  • 拆出单词
  • 计算时间段的重复区间
  • 生成一组相同间隔的连续时间点
  • ……

格值与汇总值计算

  • 使用相邻行和区间计算
  • 可能提前终止的累计
  • 同类数据连续时使用同类相邻行计算
  • 同类数据不连续时使用同类相邻行计算
  • 使用同类数据的汇总信息
  • ……

排序与排名

  • 按指定次序对齐排列
  • 指定次序有重复值的对齐
  • 将并列排名的成员拼接起来
  • 在相同分类内排序
  • 分类下的排名
  • ……

行列转换

  • 固定列的行转列
  • 行式表与交叉表互换
  • 行列的高层分类互转
  • 分类内数据横向拼入列
  • 分类数据拼入列时要再分类或排序
  • ……

文件提取与生成

  • 不确定多行文本构成一个单位
  • 指定单元格提取
  • 行式和自由式混合结构提取
  • 把数据表横向填入列
  • 生成多个卡片式表格
  • ……

spl ide

全功能数据计算集成开发环境

写在格子里的代码

spl xll

增强excel计算能力的插件

spl win

桌面数据交互式计算工具

示例

找出每个月都能进top10的明星产品

spl xll直接在excel中计算

将表格由纵向转置为横向

spl xll直接在excel中处理

各车型每月销量及比上期和同期比

spl win:多步骤交互分析

1. 按车型、月份、年份分组并计数

2. 计算同期比:if(model==model[-1] && month==month[-1],salesvol/salesvol[-1],null)

3. 重新按车型、年、月排序

4. 计算比上期: if(model==model[-1] ,salesvol/salesvol[-1],null)

关联电子表格并计算实际工资

wage = standardwages*(1 evaluation-absence/40) bonus
spl win:多步骤交互计算

1. 读入3个表格

2. 用standard关联absentperformance

3. 按照公式计算工资

补足excel中缺失数据:整数列用众数,浮点数列用平均数

spl ide:代码实现循环判断逻辑
a b c
1 =file("data.xlsx").xlsimport@t()
2 for a1.fname() =a1.field(a2)
3 =b2.sum() =b2.sum(int(~))
4 =if(b3==c3,b2.mode(),b2.avg())
5 =b2.(if(~,~,b4)) >a1.field(a2,b5)
6 >file("datanew.xlsx").xlsexport@t(a1)

从一批卡片式xls文件中提取出行式数据

spl ide:简洁代码批量解析复杂格式xls
a b c
1 [id,name,sex,postion,birthday,phone,address,postcode]
2 [c1,c2,f2,c3,c4,d5,c7,c8]
3 =directory@p("data/*.xlsx")
4 for a3 =file(a4).xlsopen() =b2.(b4.xlscell(~))
5 =@|c4
6 =create(${a1.concat@c()}).record(b5)
7 >file("all.xlsx").xlsexport@t(a6)
网站地图