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

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

  1. Java案例:集合的Stream方法

    Java案例:集合的Stream方法 ArrayList实现了Collection接口,Collection接口有个缺省方法Stream(),因此ArrayList对象可以直接调用该方法获得集合对象的 ...

  2. 【KNIME案例】参数化驱动工作流调用业务人员建立的脚本

    背景:工程实际当中涉及到指标公式计算,一般需要IT人员来固化逻辑,但业务人员对本行业的知识体系.理论公式.业务逻辑是最了解的.为了提高业务人员逻辑变更的时效性,减少IT人员与业务人员沟通交流的成本,需 ...

  3. 前端工程师之jquery实战案例大集合-彭亮-专题视频课程

    前端工程师之jquery实战案例大集合-17028人已学习 课程介绍         详细介绍了一个js类库的实战应用,这里主要讲解jquery.是一个可以很容易就做各种网页特效的面相对象的方法函数集 ...

  4. 【KNIME案例】基于工作流的移动端系统工况参数监控

    背景:工业设备系统运行工况参数数据是错综复杂的,需要借助若干主/子系统图来进行展示,从而全面展现整个系统的状态,完成对系统的监控,确保系统健康稳定运行,提升工程运维水平.但这样的前端展示环境往往是复杂 ...

  5. MySQL—运算符详解(算术、比较、逻辑、范围运算符与集合运算符 模糊查询 NULL值运算与null值判断 位运算符)

    MySQL--运算符详解 知识纲要 算术运算符 比较运算符 逻辑运算符 范围运算符与集合运算符 模糊查询 NULL值运算与null值判断 位运算符 1.算术运算符 加 减 乘 除 取余 div 也表示 ...

  6. 黑马程序员_Java(登陆注册案例,set集合,map集合,Collections)

    ------- android培训. java培训.期待与您交流! ---------- 生命不息,奋斗不止!做个斗士!!!!! 1:登录注册案例 需求:用户登录注册案例. 按照如下的操作,可以让我们 ...

  7. c语言集合交并补 位运算实现

    #include <stdio.h> #include <stdlib.h>/*集合元素的输入*/ long long change_string(char *ch){//将元 ...

  8. IO流案例,集合到文件数据排序、复制单级和多级文件夹及复制文件的异常处理

    目录 一.集合到文件数据排序 二.复制单级文件夹 三.复制多级文件夹 四.复制文件的异常处理 基本做法: JDK7版本改进: JDK9版本改进: 一.集合到文件数据排序 需求: 键盘录入5个学生信息( ...

  9. python 中set集合类型(去重、成员运算)

    集合类型的作用:去重以及成员运算 # 第一种.创建集合,使用花括号{},打印默认去重 one_set = {10, 20, 33, 10, 22, 33, 20} print(one_set)# 第二 ...

最新文章

  1. java matchcollection_Java集合之collection
  2. X431 元征诊断枪
  3. php求平均值的函数_国二常用函数(二)
  4. sublime中编译的sass如何改变css输出风格?【这里有答案】
  5. 1200可以读取modbus tcp_S7-1200 作 MODBUS TCP服务器
  6. php utc时间_PHP转换UNIX时间戳 UTC时间(TZ格式) 标准时间的方法 UNIX UTC GMT时间、本地时间互转...
  7. 事业单位考试考试【转载】
  8. android write file,Android Study Day 3 --Android File Read And Write
  9. 单元测试的思考与实践
  10. 如何制作毕业地图分布图_最简单的数据地图制作,一共6步搞定!
  11. 点击电脑桌面图标就点计算机图标老是出现是否删除快捷方式,电脑点击桌面图标提示缺少快捷方式怎么办...
  12. excel中看着是空单元格,使用Ctrl+G定位空值却定位不到
  13. 教你10分钟电脑配置挑选装机速成攻略
  14. 脑动力PHP函数速查效率手册pdf
  15. Linux中C语言标准库glibc源码下载
  16. excel 透视表 vba_使用Excel VBA删除数据透视表计算字段
  17. 高频DCDC电源减小EMI的布局技巧
  18. 零基础学Python(全彩版)
  19. win7变成xp风格了怎么改回_【让win7变成xp】win7变成xp风格_win7界面变成xp
  20. R语言对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画

热门文章

  1. 国外top10的aPaaS平台
  2. 2020低压电工模拟考试题库及低压电工复审模拟考试
  3. Android GPS应用:动态获取位置信息
  4. FrontPage服务器扩展
  5. 联想y7000p2020H重装系统后少了各种驱动的解决办法。
  6. Ghost XP_SP2 新垦家园贺岁纯净版
  7. 深度学习训练营之海贼王人物识别
  8. 玩客云刷Armbian带docker详细教程(附所有软件)
  9. Windows server 2012 R2服务器上的SqlServer数据库无法用公网IP远程访问
  10. 压力传感器的选择与应用