koolreport/cleandata

解决缺失数据问题

1.6.1 2023-03-29 09:16 UTC

This package is auto-updated.

Last update: 2024-08-30 01:44:52 UTC


README

在数据分析与数据挖掘中,缺失数据总是个问题。cleandata 包提供了解决这种数据缺失问题的方法。

安装

通过下载 .zip 文件

  1. 下载
  2. 解压缩 zip 文件
  3. cleandata 文件夹复制到 koolreport 文件夹中,使其看起来如下
koolreport
├── core
├── cleandata

通过 composer

composer require koolreport/cleandata

文档

缺失值通常以 null 值的形式出现在 KoolReport 中。我们通过 删除行为它填充新值 来解决这个问题。

DropNull

DropNull 过程将删除包含 null 值或达到一定数量 null 出现次数的行。

让我们看看一个例子

$this->src('db')
->query("select * from customers")
->pipe(new DropNull())
->pipe($this->dataStore('clean_data'));

以上是使用 DropNull 过程的最简单示例。所有包含 null 值的行都将被删除。因此,返回的数据将是那些具有完整信息的 客户

仅针对某些列

有时,只有当某些列有 null 值时,才会删除行

->pipe(new DropNull(array(
    "targetColumns"=>array("salary","tax")
)))

排除某些列

如果您想针对所有列(除某些列外,因为这些列不重要),您可以这样做

->pipe(new DropNull(array(
    "excludedColumns"=>array("address","city")
)))

针对特定类型的列

例如,您只能针对 number 列,如果这些列中的任何列有 null 值,则将删除该行

->pipe(new DropNull(array(
    "targetColumnType"=>"number"
)))

您还可以针对其他列类型,例如 stringdatedatetimetime

阈值

例如,如果数据行包含超过 2 个 null 值,则删除该行

->pipe(new DropNull(array(
    "thresh"=>3,
)))

目标值

如果不想删除 null 值,但想删除 0 值怎么办。对您来说,缺失数据是 0 值,您可以这样做

->pipe(new DropNull(array(
    "targetValue"=>0,
)))

当然,您可以设置任何目标值,无论是数字类型还是字符串类型。targetValue 的默认值为 null

严格 null

默认情况下,null 可以是空字符串或 0 值。为了启用值和类型的严格比较,您可以设置以下内容

->pipe(new DropNull(array(
    "strict"=>true,
)))

FillNull

FillNull 值是另一种数据清洗方法。我们不会删除包含 null 值的行,而是用新值填充 null 值。

->pipe(new FillNull(array(
    "newValue"=>0
)))

以上代码将用 10 填充所有 null 值。

目标值

如果您想针对 0 值,可以这样做:

->pipe(new FillNull(array(
    "targetValue"=>0,
    "newValue"=>10,
)))

用中位数和平均值填充缺失值

在上面的示例中,我们用我们想要的值填充缺失值。然而,更好的方法是用列值的平均值或中位数来填充它们。这种解决方案看起来更优雅。您可以这样做

->pipe(new FillNull(array(
    "newValue"=>FillNull::MEAN,
)))

对于中位数,您这样做

->pipe(new FillNull(array(
    "newValue"=>FillNull::MEDIAN,
)))

针对某些特定列

您可以将填充操作应用于一些指定的列

->pipe(new FillNull(array(
    "targetColumns"=>array("salary","tax"),
)))

排除某些列

某些列不重要,缺失值也不会影响,您可以这样做

->pipe(new FillNull(array(
    "excludedColumns"=>array("lastname","gender"),
)))

针对特定类型的列

如果您想,可以将填充应用于特定的 number

->pipe(new FillNull(array(
    "targetColumnType"=>"number"
)))

严格 null

默认情况下,null 可以是空字符串或 0 值。为了启用值和类型的严格比较,您可以设置以下内容

->pipe(new FillNull(array(
    "strict"=>true,
)))

支持

如果您需要支持,请使用我们的论坛,这样其他人也能从中受益。如果支持请求需要隐私,您可以发送电子邮件到我们的邮箱 support@koolreport.com