oracle取整函数 kettle,怎样使用Kettle生成随机样本数据

一、问题背景

很多数据工程师都会遇到一种情况,即部分数据不是来源于真实场景,而是需要随机生成。虽然从严格意义上讲,随机意味着有统计规律的实验结果,但在大部分ETL场景下,随机指的是伪随机数据。本文试图从数据的认识论角度讨论数据类型,并给出Kettle如何生成随机数据的解决方案。

二、数据分类

从数据挖掘的角度来分析,数据包括以下两种常用类别:

1、标称

标称可以理解为标准称呼的缩写,代表一些符号或者事物的名称。每个值代表一种类别、编码或者状态,因此标称类型往往又称之为分类。有编程经验的人,可以把标称理解为枚举类型。如果标称的可能值总数是2,那么又往往别称为二元类型。

所有可能的取值组成的集合称为值集合。举例来说,性别就是一种典型的标称类型,一般可以用如下值集合表示:

性别={男,女}

所以,性别也是一种典型的二元数据。

又如季节类型可以用如下值集合表示:

季节={春,夏,秋,冬}

又如军官军衔可以用如下值集合表示:

军官军衔={上将、中将、少将、大校、上校、中校、少校、上尉、中尉、少尉}

标称类型的数据一般没有顺序,而且做加减乘除等数学计算无现实意义,如果再去求均值或者方差就更加是做无用功了。

2、数值

数值是定量分析的基础,一般可以用整数或者实数表示,常见的表现形式包括自然数、区间数、百分比等。数值类型有序,且可以做数学计算,均值和方差等统计计算均有现实含义。

三、背景知识

Kettle利用java.util.Random类的两个方法来实现随机数字的产生。

public  double nextDouble()

public   int   nextInt()

其中nextDouble产生[0,1)区间内的一个实数,nextInt产生232个随机整数值(包含符号位),分别对应图1中的随机数字和随机整数功能。

图1:

ef734f02d637ee8ca85723f45633e969.png

那么在Kettle只有两个基本方法的前提下,如何产生满足应用需求的数据呢?

1、标称类型随机数据

产生标称类型的随机数据,一般有求模法、范围法两种方法。

求模法是指通过随机数字与值集合的势进行模运算,从而得到特定集合内的数值。假设r为一个随机正整数,那么表达式:

r % 2

的可能值要么是0,要么是1。所以,如果需要随机的性别数据,只需将0转为男、1转为女即可。

又如表达式:

r % 4

的可能值为0、1、2、3。所以,如果需要随机的季节数据,只需将0转为春、1转为夏、2转为秋、3转为冬即可。

范围法是指将[0,1)区间等距离划分为n个区间(其中n为值集合的势),然后根据随机小数z所属范围来映射到值集合。同样以性别为例,假设z是一个[0,1)区间内的随机小数,那么:

如果 0<= z< 0.5,则得到男

如果 0.5<= z< 1,则得到女

又如以季节为例,那么:

如果 0<= z< 0.25,则得到春

如果 0.25<=z < 0.5,则得到夏

如果 0.5<= z< 0.75,则得到秋

如果 0.75<=z < 0.1,则得到冬

2、数值类型随机数据

如前所述,Kettle本身支持[0,1)区间内的随机小数以及随机整数。但现实需求往往不是如此简单。例如,也许需要的数据必须是在100到200之间的整数,亦或是需要一个在10到16之间的任意小数,亦或是需要一个13位的自然数。这类问题大体可以分为区间整数、区间小数、超大型数据等类型。

假设已有[0,1)区间内的随机小数r。

如果需要一个[a,b)区间范围内的随机实数k,那么可以通过

k = a + (b-a) * r

计算得到。

如果需要一个[a,b)区间范围内的随机整数,比较简单的办法是对区间范围内的随机实数取整。另外一种办法,就是通过随机正整数d,通过以下公式

k = a + d % (b-a)

得到。这种方法与求模法思想一致。

四、Kettle解决方案

1、计算器

计算器步骤包括大量函数功能,比较常用的包括常量(Set field to constant value A)、求模(Remainder of A/B)、绝对值(Absolutevalue ABS(A))等。图2所示为一个生成四季标称的实例。其中c1字段为常量4,d1字段为随机整数r2对c1求模,d2字段为d1字段的绝对值。这样,最终得到的d2字段,可能值集合为{0,1,2,3}。

图2:

e005dd8ba2221be54ff7b0ac3426cf0a.png

2、值映射

值映射步骤可以将生成的数字转为实际需要的标称值。如果3为一个数字转四季的实例。即原始值为0时,转为春;原始值为1时,转为夏;原始值为2时转为秋;原始值为3时转为冬。

图3:

988246575b19e6226b64e6e1b0be79a3.png

3、数值范围

数值范围步骤可以根据输入字段所属区间,决定最终值。如图4实例所示,如果输入字段r1小于0.5,则输出男;如果输入字段r1大于0.5,则输出女。

图4:

b184e87d23a12adcb61eb934361ab3cc.png

4、公式

公式步骤可以编辑比较灵活的计算表达式。图5中的实例,采用前文所述计算公式,生成区间随机小数字段,并通过该步骤的类型转换能力,把随机小数取整,从而生成随机整数。

图5:

645501d41801cc4b0e4f61032fbfb1b0.png

5、综合实例

结合上述所有方法,制作了一个综合示例。如图6所示,示例通过生成记录、生成随机数、公式、计算器、数值范围、值映射等步骤,演示了产生随机数据的各种方法。

图6:

98cabbc14a5f81c30c22b59d0e2f383c.png

五、总结

本文讨论了生成随机样本数据的多种方法,并通过一个综合实例演示Kettle中的解决办法。

如需示例转换文件,请联系微信号carol_sxh有偿获取,添加好友时请注明所需文件名(KettleSample007.ktr)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值