【KNIME案例】对集合进行并交差补等运算

背景:在使用KNIME工作流对数据进行加工处理的过程中,经常需要进行数据聚合(比如分组),形成列表或者集合(List or Set)类型,这就引发了对于集合的操作需求。如何完成集合的运算,对两个(进而对多个)集合,求取它们的并集、交集、差集、补集,这对于信息的处理将十分有益,在某些需求下,有效地使用集合运算操作,可以大大加快数据处理的效率。

方案:本例通过一个去除真子集(集合A为集合B的子集,且B含有不包含在A内的元素,则将集合A删除)这样的例子,来介绍一下KNIME中的集合运算操作是如何实现的。当然,涉及到集合操作的节点不止本例介绍的Column Aggregator节点一种,其他的集合运算节点,将在以后遇到合适案例的时候加以介绍。通过使用Column Aggregator节点,我们可以求取两个集合的交集,并集,异或以及它们各自含有的元素的数量,通过这样的列聚合节点功能,我们可以巧妙地完成很多看似较难实现的数据分析、处理需求。如果将集合运算与其他KNIME数据处理功能加以融合,将释放更大的能量。

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

步骤1. 在KNIME中拖入Table Creator节点,输入两列测试数据,作为功能演示使用。第一列为大写字母(A、B、C、D),将依据此列来进行数据分组;第二列为大写字母组下的具体元素,每个组内包含若干小写字母。这样就形成了多行的原始数据表格。

步骤2. 拖入GroupBy节点,在Groups标签页,依据column1,也就是大写字母来分组。在Manual Aggregation标签页,对column2的小写字母进行分组聚合,聚合方式选择Set。通过这样的设置,我们可以得到依据大写字母分成的若干数据组,每一组当中包含了小写字母的集合(包含组中出现的所有元素,唯一、不重复且无固定顺序)。具体结果如下:


{ "A" : [a,b], "B" : [a,b,c], "C" : [c,d], "D" : [c,a] }
通过观察可知,集合A和集合D均为集合B的真子集,应当予以删除;集合C中,含有其他集合都不具有的元素d,不是任何集合的真子集,经过工作流的最后处理,应该只留下集合B和集合C(亦即,集合B替代集合A,集合D出现在最后的结果里,这是本例的原始需求)。

步骤3. 为了判断各个集合之间的包含关系,也就是确定是否某一个集合是另一个集合的真子集,我们需要构造步骤2中出现的所有集合的排列组合。拖入Cross Joiner节点,将步骤2,经过GroupBy节点分组聚合之后得到的表格(内含多个集合),连到Cross Joiner节点的左侧上下两个端口上,形成其自身与自身的集合间的排列组合,也就是生成了4个(A、B、C、D)集合的4 * 4=16个排列组合记录,每条记录当中都含有左集合和右集合两个集合记录,我们将判断左集合是否为右集合的真子集。

步骤4. 由图中集合运算示意图所示,如果集合A为集合B的真子集,需要满足如下两个条件:


1)左集减右集的差集元素数量为零:
亦即左集不包含右集没有的元素,左集减右集的差集获取,可以通过右集与左右并集的异或操作来实现,set(A) - set(B) = set(B) ^ set(set(A) & set(B)),集合B与AB并集不同之处,就是 set(A) - set(B) 的部分;


2)左集与右集通过异或操作得到的集合,元素数量不为零:
亦即左右两个集合,除了公共部分以外,还有元素。由于已经满足了条件1,那么这样的元素只能出现在B集合当中,亦即B集合当中含有A集合没有的元素,A集合是B集合的真子集。


在KNIME中拖入Rule-based Row Filter节点,设置行过滤条件为:$Exclusive-or count$ > 0 AND $Exclusive-or count (#1)$ = 0 => TRUE 
(注:$Exclusive-or count (#1)$ 对应条件1,$Exclusive-or count$对应条件2)
经过这样的行筛选,可以筛选出真子集的列表,其中含有大写字母标签,用来指示哪些集合是其他集合的真子集。

步骤5. 经过步骤4,我们得到了所有真子集的列表,可以根据每个集合的大写字母标签来清除其对应的原始数据集中的记录。在KNIME中拖入Reference Row Filter节点,Data table column和Reference table column都选择column1,也就是大写字母标签所在的列,依据大写字母标签来决定删除哪些记录。在Include rows from reference table单选框里,选择Exclude rows from reference table选项,执行这样的行参照筛选节点,就可以将原始表格中,对含有真子集大写字母标签的行加以排除。

步骤6(特殊情况). 当集合列表中出现由完全相同若干元素组成的集合且这些集合不是其他集合的真子集时,它们的大写字母标签不会出现在真子集列表当中,也就不会被上一步的行参照筛选节点所删除。对于这些完全相同的集合,需要给出进一步的移出逻辑,是全部保留,还是基于先后出现顺序保留第一个或者最后一个,这都是需要确定的,只要需求确定下来,就可以利用工作流进一步加以实现。


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值