利用KETTLE实现原始数据的归一化处理

上次从TUSHARE下载了某股票的交易数据,一直想试一下KETTLE的ETL功能。网上下载了KETTLE8.3,开始干。 KETTLE8.3是基于JAVA的软件,只要环境设置好了,直接运行Spoon.bat 就行可以。

一、KETTLE的主要功能

Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。kettle做为ETL工具,主要用来对数据进行加载、清洗、导入导出等操作。 Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

二、数据的归一化

获取的交易数据,存在数量级不一致的问题,对后续的机器学习或者展示都产生了不利影响,于是想到了使用归一化方方法,将数据都变为(0,1)之间的小数。通过公式“(当前值-该列最小值)/(该列最大值- 该列最小值)”把数据映射到0~1范围之内处理。

三、kettle中的实现

1、坑

kettle中不能对维度不一致的数据进行处理。

例如:select min(volume) from shares.tick_data4 返回的结果就是个1X1的矩阵。

SELECT date, open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20 FROM tick_data4 返回的结果就是NX17的矩阵。

这两个矩阵不能直接使用计算器或公式组件进行运算处理。

2、解

经朋友提示,可以修改表输入中SQL语句实现增加一个min,max列。

SQL1:

SELECT date, open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20

,(select min(volume) from shares.tick_data4) as volume_min

,(select max(volume) from shares.tick_data4) as volume_max

FROM tick_data4

SQL2:

SELECT date, open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20,min(volume) as volume_min,max(volume) as volume_max

FROM tick_data4

对比两个SQL,你会发现:SQL1可以返回Nx19的矩阵,SQL2只能返回1X19的矩阵。真不记得大学的数据库原理中有SQL1这种写法,全当是我学习不认真了。

3、注意事项

在数据经处理后,要使用表输出将数据导出到数据库,这个时候,千万不能忘了要执行一下SQL ,不然会报出目的表不存在的问题。

打开APP阅读更多精彩内容