特征工程 - 自定义转换

数据转换

Data Wrangler提供了众多ML数据转换,以简化数据清理、转换和特征化。当我们添加一个转换时,它会添加一个步骤到数据流中。我们添加的每个转换都会修改我们的数据集并产生一个新的DataFrame。所有后续的转换都应用于生成的DataFrame。

Data Wrangler包含内置的转换,我们可以使用它们来转换列而无需编写任何代码。我们也可以使用PySpark、Pandas和PySpark SQL添加自定义转换。一些转换就地操作,而其他转换在数据集中创建一个新的输出列。

我们可以一次对多个列应用转换。例如,我们可以在一个步骤中删除多个列。

有关Data Wrangler提供的不同类型转换的更多信息,请访问官方文档 https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-transform.html

自定义转换

我们可以在自定义转换代码块中使用import语句导入流行的库,例如以下内容:

  • Numpy版本1.19.0
  • Scikit-learn版本0.23.2
  • Scipy版本1.5.4
  • Pandas版本1.0.3
  • Pyspark版本3.0.0

当内置转换无法满足特殊情况的需求时,我们将需要实现自定义转换。

创建新列origin-country

对于此数据集中的预订国家,我们最初有178个国家(包括酒店的原国家葡萄牙),这并不高效,我们需要将预订位置分为两类 – 国内(来自葡萄牙的预订)和国际(来自葡萄牙以外的预订)。国际预订的取消率为24%,而国内预订的取消率为56%,因此这些数据可能对我们的特征化很重要。

我们需要添加一个新列,该列需要根据预订国家, 具有国内或国际的类别。为了添加新列并添加国家类别,我们创建一个自定义转换。

点击Data Flow中的加号,并选择"Add transform”: image-20240904223242762

会跳到Data页面,点击Add transform:

image-20240904223405403

选择自定义转换: image-20240904223455023

默认为Python(Pyspark),并提供搜索示例代码段的功能:

image-20240904223536525

对于此数据集,我们将使用"Python(Pandas)"。将下拉菜单从"Python(PySpark)“更改为"Python(Pandas)",并使用下面提供的代码段。此代码将创建一个新列,用于添加国家列(国内或国际)

# Table is available as variable `df`
df['origin-country'] = df['country'].map(lambda x: 'Domestic' if x == 'PRT' else 'International')

image-20240904223653956

选择Preview,并点击Add以保存该步骤:

image-20240904223753228

总结Data Wrangler自定义转换功能的优势:

  • Data Wrangler Python函数使我们能够编写自定义转换,而无需了解Apache Spark或Pandas。

  • Data Wrangler经过优化,可以快速运行我们的自定义转换代码。

  • 使用Data Wrangler,我们不需要实现数据处理管道并配置底层计算和存储以进行执行。