使用kettle进行数据统计

1.使用kettle设计一个能生成100个取值范围为0到100随机整数的转换。

为了完成该转换,需要使用生成记录控件、生成随机数控件、计算器控件及字段选择控件。控件布局如下图所示

 生成记录控件可以在限制框内指定生成记录的个数,具体配置如图所示

 生成随机数控件可以用来生成随机种子,生成0到1内的小数,具体配置如图所示。

 计算器控件可以用来对获得的小数进行映射,将范围映射到0到100中。首先需要指定一个常量N,值为100,类型为Number,接着将N和随机种子相乘的值存放到新的字段x中。具体配置如图所示。

最后使用字段选择控件,删除多余字段。字段选择控件配置可参考

使用kettle进行日志分析_瑾寰的博客-CSDN博客

最后获得的效果如下图所示:

 2.使用kettle设计一个能求数据标准差和均值的转换,输入数据从第一问获取。

在第1问的基础上添加一个单变量统计控件。

单变量统计控件具体配置如下图所示:

 在input field中选择需要计算的字段,对于需要输出的字段选择为true,其余为false。最后执行的结果如图所示:

3. 在第2问的基础上设计一个转换,任务是生成一个随机数,并判断它是否处于2中均值的一个标准差内。

为了完成目标,在第二问的基础上还需要使用记录关联(笛卡尔输出)控件和java代码控件,具体布局如下图所示:

 其中记录关联控件用来将不同来源的数据连接,具体配置如下:

 Java代码控件主要用来进行逻辑判断,判断数据是否满足题目要求,并增加新的字段ans作为结果,具体配置如下:

 其中的代码如下:

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {

  if (first) {

    first = false;

    /* TODO: Your code here. (Using info fields)

    FieldHelper infoField = get(Fields.Info, "info_field_name");

    RowSet infoStream = findInfoRowSet("info_stream_tag");

    Object[] infoRow = null;

    int infoRowCount = 0;

    // Read all rows from info step before calling getRow() method, which returns first row from any

    // input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.

    while((infoRow = getRowFrom(infoStream)) != null){

      // do something with info data

      infoRowCount++;

    }

    */

  }

  Object[] r = getRow();

  if (r == null) {

    setOutputDone();

    return false;

  }

  // It is always safest to call createOutputRow() to ensure that your output row's Object[] is large

  // enough to handle any new fields you are creating in this step.

  r = createOutputRow(r, data.outputRowMeta.size());

  /* TODO: Your code here. (See Sample)

  // Get the value from an input field

  String foobar = get(Fields.In, "a_fieldname").getString(r);

  foobar += "bar";

   

  // Set a value in a new output field

  get(Fields.Out, "output_fieldname").setValue(r, foobar);

  */

  // Send the row on to the next step.

  boolean ans = false;

  double mean = Double.parseDouble(get(Fields.In, "x(mean)").getString(r));

  double std = Double.parseDouble(get(Fields.In, "x(stdDev)").getString(r));

  double x = Double.parseDouble(get(Fields.In, "x").getString(r));

  if(x>=(mean-std) && x<=(mean+std)){

   ans = true;

  }

  System.out.println("hha");

  ans = true;

  get(Fields.Out, "ans").setValue(r, ans);

  putRow(data.outputRowMeta, r);

  return true;

}

运行结果如下图所示:

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Kettle是一种广泛使用的开源ETL (Extract, Transform, Load)工具,它可以帮助用户从各种来源提取数据、转换数据格式,并将其加载到目标数据库或其他存储系统中。数据清洗是Kettle处理数据过程的一部分,目的是提高数据质量,使得数据分析、报告和其他业务智能应用能够更有效地运行。 ### Kettle进行数据清洗的主要步骤: 1. **识别错误和异常**:在数据导入过程中,Kettle可以检查数据集中的缺失值、无效值或不符合预期模式的数据。这包括检查数值是否超出合理范围、日期格式是否正确等。 2. **数据去重**:去除重复记录,这是数据准备阶段的一个重要步骤,能显著减少后续分析的复杂性和计算成本。 3. **修正错误数据**:对于发现的错误数据,如拼写错误、语法错误等,Kettle提供了一系列的转换步骤来自动修复这些问题,比如替换特定的字符、调整文本大小写等。 4. **填充缺失值**:对于数据集中存在的空缺值,可以选择性地填充,例如用平均值、中位数、众数等统计量填充连续型变量;或使用最近邻项填充离散型变量。 5. **格式标准化**:统一数据格式,确保所有字段都采用一致的标准表示形式。这对于日志文件、文本数据、时间戳等特别有用。 6. **异常值检测和处理**:识别并处理那些明显偏离正常分布的异常值,可以通过设置阈值或使用统计模型来判断哪些数据点可能是异常值,并采取适当措施,如删除、替换或通过插值法估算其值。 7. **数据规范化**:对某些类型的属性(如地理位置信息、产品编码等),进行归一化处理,使其更容易理解或比较。 8. **验证数据一致性**:确保数据之间的关联性和合理性,例如检查两个表之间的外键约束是否满足,或验证数据内部的一致性规则。 利用Kettle数据清洗功能,可以极大地提升数据的质量,从而使数据分析结果更为准确可靠。此外,Kettle还支持多种数据源和目标库,使得数据集成任务变得相对简单高效。 --- ### 相关问题: 1. Kettle数据清洗的具体操作流程是什么? 2. Kettle如何识别和处理数据中的异常值? 3. 使用Kettle进行数据清洗与其他ETL工具相比有何优势?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值