转换字段 (数据管理)

摘要

通过对每个值应用数学函数并更改分布的形状来变换一个或多个字段中的连续值。该工具中的变换方法包括对数、平方根、Box-Cox 变换、倒数、平方、指数和逆 Box-Cox 变换。

可以应用变换来减小分布中的偏度,并使其遵循正态(高斯)分布。

插图

“变换字段”工具图示
将对原始值进行变换以更接近正态分布。

使用情况

  • 该工具接受要素类或表视图作为输入。

  • 变换方法参数中提供 7 种变换方法。

    • 对数 - 将自然对数函数 log(x) 应用于所选字段中的原始值 (x)。
      • 对数变换只能应用于正值。默认情况下,如果所选字段中存在负值或零值,则在变换前会向数据添加偏移 log(x+shift) 以使该值变为正值。默认偏移等于该字段中的最大绝对负值加上一个较小的正值 (~10-6)。例如,如果所选字段中的最大负值为 -25,则会将所有值都偏移 25.000001 以使所有值均为正值。
    • 平方根 - 获取所选字段中每个值的平方根。
      • 平方根变换不能应用于负值。默认情况下,如果所选字段中存在负值,则在变换前会向数据添加偏移以使该值变为非负值。默认偏移等于该字段中的最大绝对负值以使该值变为非负值。
    • Box-Cox - 应用以下幂函数以使所选字段中的数据正态分布:

      Box-Cox 变换
      其中 x' 为变换后的值,x 为原始值,λ1 为幂(指数)参数,λ2 为偏移参数。

      • Box-Cox 变换只能应用于正值。默认情况下,如果所选字段中存在负值,则在变换前会向数据添加偏移以使该值变为正值。默认值等于该字段中的最大绝对负值,以使非负值加上一个无穷小值 (~10-6),从而使这些值为非零值。参数可用于指定幂的值,由此采用介于 -5 到 5 之间的值。如果未提供任何值,则将使用正态分布曲线的最佳近似值并将其显示在地理处理消息中。
    • 倒数 - 获取所选字段每个值 (x) 的倒数 (1/x)。
      • 倒数变换不能应用于零值。如果所选字段中存在零值,则其将在变换后的字段中报告为空。针对此方法,不会应用任何偏移。
    • 指数 - 将指数函数 (ex) 应用于所选字段中的原始值 (x)。指数变换也是对数变换的逆变换,这意味着在经过对数变换的字段上应用指数变换将返回原始数据值。
      • 默认情况下,将不会对所选字段应用任何偏移。要根据经过对数变换的字段取回原始值,请指定已用于创建对数字段的相同偏移值。在应用指数变换后减去偏移:ex - 偏移
    • 平方 - 向所选字段中每个值的应用平方函数。平方变换也是平方根变换的逆变换,这意味着在经过平方根变换的字段上应用平方变换将返回原始数据值。
      • 默认情况下,将不会对所选字段应用任何偏移。要根据经过平方根变换的字段取回原始值,请指定已用于创建平方根字段的相同偏移值。在应用平方变换后减去偏移:x2 - 偏移
    • 逆 Box-Cox - 应用 Box-Cox 变换的逆变换,这意味着在经过 Box-Cox 变换的字段上应用 Box-Cox 逆变换将取回原始数据值。逆 Box-Cox 幂函数的计算公式为:

      Box-Cox 逆变换
      其中 x' 为变换后的值,x 为原始值,λ1 为幂(指数)参数,λ2 为偏移参数。

      • 默认情况下,将不会对所选字段应用任何偏移或幂。要根据经过 Box-Cox 变换的字段取回原始值,请指定已用于创建 Box-Cox 字段的相同偏移和幂值。

  • 如果您不希望向对数、平方根和 Box-Cox 方法应用默认偏移,则可以在偏移参数中提供值 0,并且不会应用任何偏移。

  • 如果将在工具执行中使用多个字段,则所选变换方法将应用于所有字段。如果提供偏移或幂值,则会将相同的值应用于所有选定字段。如果没有为偏移参数提供值,则将根据所选变换方法为每个所选字段独立计算默认值。

  • 该工具将修改输入数据,并将新创建的变换字段附加到输入表或要素类。

  • 要变换的字段参数中,可以指定输入和输出字段名称。如果数据中已存在输出字段名称,则工具将覆盖该字段。

  • 对于每个经过变换的字段,将为地理处理消息结果中的源字段和经过变换的字段提供汇总统计数据。这些统计数据包括最大值、最小值、总和、平均值、标准差、中位数、偏度和峰度。

  • 该工具估计的偏移参数值也会显示在该地理处理消息中。通过变换方法的逆变换,可以使用这些值来获取原始数据值。

  • 该工具将为每个新创建的变换字段创建一个直方图,用于可视化其分布。

参数

标注说明数据类型
输入表

包含待变换字段的输入表或要素类。新变换的字段将添加到输入表中。

Table View; Raster Layer; Mosaic Layer
要变换的字段

包含要变换的值的字段。对于每个字段,可以指定输出字段名称。如果未提供输出字段名称,则该工具将使用字段名称和变换方法来创建输出字段名称。

Value Table
变换方法
(可选)

指定用于变换指定字段中包含的值的方法。

  • 倒数将倒数 (1/x) 方法应用于所选字段中的原始值 (x)。
  • 平方根将平方根方法应用于所选字段中的原始值。
  • 日志将自然对数函数 log(x) 应用于所选字段中的原始值 (x)。
  • Box-Cox将应用 Box-Cox 幂函数以使所选字段中的原始值正态分布。这是默认设置。
  • 逆 Box-Cox将 Box-Cox 变换的逆变换应用于所选字段中的原始值。
  • 平方(平方根的逆变换)将平方方法应用于所选字段中的原始值。此变换是平方根的逆变换。
  • 指数(对数的逆变换)将指数函数 exp(x) 应用于所选字段中的原始值 (x)。此变换是对数变换的逆变换。
String
功率
(可选)

Box-Cox 变换的幂参数 (λ1)。如果未提供任何值,则将使用最大似然估计 (MLE) 来确定最佳值。

Double
Shift
(可选)

对所有数据进行偏移(添加一个常数值)的值。如果指定 0,则不会应用任何偏移。

对于对数、Box-Cox 和平方根变换,如果存在负值或零值,则将在变换之前添加默认偏移值。

对于指数(逆对数)、逆 Box-Cox 和平方(逆平方根)变换,则默认不会应用任何偏移。如果提供了偏移值,则将在应用变换后减去该值。由此可以针对变换及其相关的逆变换使用相同的偏移值。

Double

派生输出

标注说明数据类型
更新的输入表

已更新的表,其中包含经过变换的字段。

表视图

arcpy.management.TransformField(in_table, fields, {method}, {power}, {shift})
名称说明数据类型
in_table

包含待变换字段的输入表或要素类。新变换的字段将添加到输入表中。

Table View; Raster Layer; Mosaic Layer
fields
[[input_field, output_field_name],...]

包含要变换的值的字段。对于每个字段,可以指定输出字段名称。如果未提供输出字段名称,则该工具将使用字段名称和变换方法来创建输出字段名称。

Value Table
method
(可选)

指定用于变换指定字段中包含的值的方法。

  • INVX将倒数 (1/x) 方法应用于所选字段中的原始值 (x)。
  • SQRT将平方根方法应用于所选字段中的原始值。
  • LOG将自然对数函数 log(x) 应用于所选字段中的原始值 (x)。
  • BOX-COX将应用 Box-Cox 幂函数以使所选字段中的原始值正态分布。这是默认设置。
  • INV_BOX-COX将 Box-Cox 变换的逆变换应用于所选字段中的原始值。
  • INV_SQRT将平方方法应用于所选字段中的原始值。此变换是平方根的逆变换。
  • INV_LOG将指数函数 exp(x) 应用于所选字段中的原始值 (x)。此变换是对数变换的逆变换。
String
power
(可选)

Box-Cox 变换的幂参数 (λ1)。如果未提供任何值,则将使用最大似然估计 (MLE) 来确定最佳值。

Double
shift
(可选)

对所有数据进行偏移(添加一个常数值)的值。如果指定 0,则不会应用任何偏移。

对于对数、Box-Cox 和平方根变换,如果存在负值或零值,则将在变换之前添加默认偏移值。

对于指数(逆对数)、逆 Box-Cox 和平方(逆平方根)变换,则默认不会应用任何偏移。如果提供了偏移值,则将在应用变换后减去该值。由此可以针对变换及其相关的逆变换使用相同的偏移值。

Double

派生输出

名称说明数据类型
updated_table

已更新的表,其中包含经过变换的字段。

表视图

代码示例

TransformField 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何使用 TransformField 工具。


import arcpy
arcpy.management.TransformField("County_Data", "Income", "LOG")
TransformField 示例 2(独立脚本)

以下独立 Python 脚本演示了如何使用 TransformField 工具。


# Import system modules. 
import arcpy 
 
try: 
    # Set the workspace and input features. 
    arcpy.env.workspace = r"C:\\Transform\\MyData.gdb" 
    inputFeatures = "County_Data" 
 
    # Set the input fields that will be standardized 
    fields = "population_total;unemployment_rate;income" 
 
    # Set the standardization method. 
    method = "BOX-COX" 
 
    # Run the Transform Field tool 
    arcpy.management.TransformField(inputFeatures, fields, method) 
 
except arcpy.ExecuteError: 
    # If an error occurred when running the tool, print the error message. 
    print(arcpy.GetMessages())

环境