添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

【KNIME案例】Excel公式自动转Python代码来驱动工作流

专栏 / 【KNIME案例】Excel公式自动转Python代码来驱动工作流

【KNIME案例】Excel公式自动转Python代码来驱动工作流

2022年12月10日 12:33 --浏览 · --点赞 · 星汉长空
粉丝: 2535 文章: 155


【KNIME案例】B站(274)Excel公式驱动


背景:工程实际当中涉及到指标公式计算,一般需要IT人员来固化逻辑,但业务人员对本行业的知识体系、理论公式、业务逻辑是最了解的。为了提高业务人员逻辑变更的时效性,减少IT人员与业务人员沟通交流的成本,需要业务人员对工作流具有更强的参与能力;否则,业务人员需要将业务层面的需求翻译给产品经理,产品经理还需要将其转化为可供开发的需求文档,IT人员进行开发,还需要测试,兼容,这里面的时间和人力成本太过高昂。这里介绍了一种借助KNIME的实现方式,业务人员只需要维护和更新Excel文件中的计算逻辑和公式体系,工作流会自动将其读取和转化为可以执行的python脚本代码,然后驱动工作流进行数据的加工处理,这样业务人员就对处理流程形成了直接的干预能力,提高人与人,人与机器的协同效率。


方案:业务人员使用Excel中的公式,建立输入参数和输出参数的联系,固化业务计算逻辑,完成各种复杂的指标计算。业务人员对Excel比较熟悉,完成计算功能的维护和更新,效率很高。如果业务人员能够通过Excel环境来干预、调整工作流的数据处理逻辑,将实现更为有效的人机协同。所以,这里将使用KNIME工作流,对于Excel工具中的公式体系,参数信息加以提取,将其转变为Python代码,完成与Excel工具的解耦,通过Python代码去驱动工作流里面的计算逻辑,完成批量的指标计算。而且这样的Python代码,IT人员也可以获取,了解其中的业务逻辑,将其拓展应用到其他平台和需求场景,实现团队之间的配合。

将若干固化了业务逻辑的Excel工具,使用文档管理系统管理起来,形成算法资产。对于新的计算需求,工程人员可以在文档管理系统中按图索骥,找到对应的Excel工具去驱动工作流完成计算。形成新的人力资源组织模式,新的人与机器的协同模式,最终达到高效完成需求的目的。


本例(视频介绍请移步B站,搜索Up:“星汉长空”,视频:KNIME案例(274)Excel公式驱动):


步骤1. 为了固化业务人员的业务计算逻辑,需要业务人员首先建立相应的Excel工具模板。业务人员对于Excel的使用是比较熟悉的,在里面设计输入输出参数的变量名以及它们之间的计算逻辑关系是比较方便的。在Excel模板工具当中,要求参数名与参数值之间有固定的相对位置关系,便于后面使用KNIME工具进行匹配;同时,对于输入参数和输出参数,通过不同的背景色加以区分。


步骤2. 在KNIME中拖入Create File/Folder Variables 和 Path to String (Variable) 节点去读取Excel工具文件,将来业务人员可以通过节点中的设置,更换Excel文件,从而影响后续工作流里对于数据的加工流程。KNIME工作流里面的计算逻辑,来源于这里设置的Excel工具。


步骤3. 拖入Python Script节点,加载openpyxl库,对Excel工具里面的文本信息、公式设置、单元格底色、单元格坐标位置等等信息进行获取。这些信息当中,就包含了业务人员固化的全部业务计算逻辑内容,只需要通过KNIME工作流对这些信息进行分析、整理,就可以复现业务人员的信息处理流程。


步骤4. 使用Create Well Position节点,可以将Excel单元格的行列序号对,比如(1,1)(注:行编号,列编号)转变为坐标“A1”。这样的坐标信息大量出现在Excel的公式体系当中,我们可以使用上述节点生成坐标,完成对公式体系中的坐标替换,将坐标替换成相应的参数名,形成python代码。

这里有如下几个细节技术点:

1)公式中出现的坐标位置是参数值坐标位置,并不是参数名坐标位置,我们要通过二者的相对位置关系,将其对应起来,便于之后将公式中的坐标替换成参数名;

2)参数名并不能直接出现在python代码中,我们需要将其转变为字典结构的代码形式,参数名->dictPara['参数名'],通过文本处理就可以完成;

3)对于输入参数,并没有公式,我们可以使用 dictPara['参数名'] = row['参数名'] 来替换,将来从数据源进行获取;

4)对于公式中出现的数学函数、运算符号的不同(VBA vs Python)也需要通过字符串处理功能进行更新。


步骤5. 经过步骤4,我们已经把Excel当中的公式系统转变为python代码,这些代码就可以驱动工作流对输入的批量时序数据进行加工处理,形成批量的参数计算结果。在KNIME中加入Python Script节点,将数据源表格和步骤4生成的python代码都传入进去,循环遍历数据源表格的每一行,执行python代码,完成参数计算,将批量计算结果收集起来,传到输出接口上。如果需要,可以拖入Excel Writer节点,将计算结果保存到Excel文件当中。


步骤6. IT人员如果想复用步骤4生成的python代码,可以将其从中间步骤加以输出,比如输出至py文件,在其他场景中应用。



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


解释2. 当一切流程固化以后,IT人员貌似就没有什么工作可做了,是不是这样呢?实则不然,实际的需求是千变万化、异常复杂的,业务逻辑的计算逻辑主要由业务人员完成,但也需要IT人员的协助,有些复杂的计算,库的调用,还是需要IT人员参与的,他们之间的协作关系会变得更加紧密。同时,工作流也不是一成不变的,当需求发生变更的时候,工作流的搭建,工作流功能的拓展,都需要IT人员帮助,他们可以把时间和精力发挥到更能有效产生价值的领域当中去。人员之间,人与机器之间的联系更加紧密,解决需求的效率将大大提升。