【KNIME案例】对两列数据进行有上限值的分段累积求和

背景:本例代表的是一类比较复杂的数据处理需求,对具有两列整型数据的表格,进行累积求和,因为两列求和值分别有对应的上限值设定,所以这样的累积求和是分段进行的,需要通过循环的方式进行,为每一次累积求和的行打标签,确定哪些行是在同样的一段累积求和过程中选取的。如果使用Excel等工具来完成这样的功能,由于表格的循环变动,很难完成,这种复杂数据处理需求是有普遍代表性的,一般需要通过编程来实现,这里介绍使用KNIME工作流,也可以完成同样的需求。

方案:详细介绍一下数据处理过程,原始表格中含有两列整型数据,如果对它们进行分别累积求和,从第一行开始,前两行,前三行,前四行 ... 都会计算出相应的累积求和计算结果。由于我们对两列分别设置了累积求和的上限值,两列数据在累积的过程中,都会停止在某一行,如果再进行累积,就会超过上限值,那么累积到这样的一行,就可以保证累积和小于或等于上限值。一般情况下,两列停止的行号(也就是选取的行数)不会是相同的,因为每次要对两列取相同的行数,为了保证两列累积和都小于上限值,只能取两个行数当中较小的一个,这样就完成了原始数据表格的一次行的选取工作。持续进行这样的过程,就会将原始表格分成若干段,需求就是为这些段落,赋予序号标签,区分哪些行是属于同一次累积求和过程所涉及的行。

本例(视频介绍请移步B站,搜索Up:“星汉长空”,视频:KNIME案例(277)持续数据累积,具体步骤介绍请参考视频,下面仅简要介绍关键的步骤及涉及到的节点功能):

步骤1. 在KNIME中拖入Table Creator节点,输入两列整型测试数据,作为功能演示使用。

步骤2. 拖入Variable Creator节点,建立两个整型变量,分别命名为a、b,并设置例子用数据,a=20、b=15,用来作为两列累积求和的上限值使用。

步骤3. 由于需要持续进行行累积求和,而且要选取相应的行,这是一个循环过程,所以需要加入递归循环(Recursive Loop Start和Recursive Loop End)节点,将Table Creator节点与Recursive Loop Start节点相连,作为第一次的数据表格输入条件。

步骤4. 在每一次的循环过程当中,对于两列分别进行数据处理(处理流程是一样的):


1)加入Moving Aggregation节点,对于当前列的数据进行累积求和(聚合方法选择“Sum”),获取累积求和结果;
2)累积求和结果在某一行的时候,将超过累积和上限值,所以加入Rule-based Row Filter节点,链接在Moving Aggregation节点之后,在过滤的规则当中写下$Sum(列名)$ <= $${上限值变量名}$$ => TRUE,这样累积和超上限值的行,就会被该行过滤节点所剔除;
3)继续链接Extract Table Dimension节点,获取累积到小于等于上限值所选取的行数。
对于两列得到的行数进行合并,并借助Table Column to Variable节点,将二者转变为变量。

步骤5. 拖入Math Formula (Variable)节点,使用 if(logic,x,y) 函数来获取步骤 4 获取的两个行数的最小值。将该最小值传入一个Row filter节点,对循环每一步要处理的表格进行行筛选(选Include by row number选项),依据最小行数,获取表格头部的一段。

步骤6. 持续进行循环选取,在循环结束的时候,每一次循环所选取的行段落就会叠加在一起,形成一个新的表格。只要在Recursive Loop End节点中,勾选了“Add iteration column”选项,就会出现每一段的序号标签,区分某一行参与了哪一次的累积求和过程。


解释1. 何为KNIME?KNIME数据分析平台是一款强大开源的数据挖掘软件平台,可以固化数据处理的流程,在人与人,人与机器之间进行传递。

解释2. 数据处理任务固化成工作流有什么好处?上面建立的Excel多工作簿表格联结工作流,并不限制工作簿的数量,也没有手动设置工作簿间联结所依据的关键字段的名称,都是自动化完成的。这样的工作流固化的操作流程,减少了人工参与所带来的风险,确保了数据处理质量的一致性,也可以形成人员之间,人与机器之间的有效协同配合,大大加快需求解决的效率,代表了新的方法论,是一种新的组织模式的载体;且与编程实现功能有所不同,具有传递流程思想的作用,便于共享、维护、复用、拓展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值