

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 予測結果を入力レコードに関連付ける
<a name="batch-transform-data-processing"></a>

大きなデータセットで予測を行う場合、予測に不要な属性を除外できます。予測を行った後で、除外した属性の一部をそれらの予測と関連付けたり、レポート内の他の入力データと関連付けたりすることができます。バッチ変換を使用してこれらのデータ処理ステップを実行することで、多くの場合、追加の前処理や後処理を排除できます。入力ファイルは JSON 形式と CSV 形式でのみ使用できます。

**Topics**
+ [

## 推論を入力レコードに関連付けるワークフロー
](#batch-transform-data-processing-workflow)
+ [

## バッチ変換ジョブでのデータ処理の使用
](#batch-transform-data-processing-steps)
+ [

## サポートされる JSONPath 演算子
](#data-processing-operators)
+ [

## バッチ変換の例
](#batch-transform-data-processing-examples)

## 推論を入力レコードに関連付けるワークフロー
<a name="batch-transform-data-processing-workflow"></a>

次の図は、推論を入力レコードに関連付けるワークフローを示しています。

![\[推論を入力レコードに関連付けるワークフロー。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/batch-transform-data-processing.png)


推論を入力データに関連付けるには、主に 3 つのステップがあります。

1. 入力データをバッチ変換ジョブに渡す前に、推論に不要な入力データをフィルタリングします。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ) パラメータを使用して、モデルの入力として使用する属性を決定します。

1. 入力データを推論結果に関連付けます。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ) パラメータを使用して、入力データと推論を結合します。

1. 結合したデータをフィルタリングして、レポート内の予測を解釈するためのコンテキストの提供に必要な入力を保持します。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ) を使用して、結合データセットの指定部分を出力ファイルに格納します。

## バッチ変換ジョブでのデータ処理の使用
<a name="batch-transform-data-processing-steps"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) でバッチ変換ジョブを作成してデータを処理する場合:

1. `DataProcessing` データ構造内の `InputFilter` パラメータを使用して、モデルに渡す入力部分を指定します。

1. `JoinSource` パラメータを使用して、生の入力データを変換されたデータと結合します。

1. 出力ファイルに含める結合入力部分と、バッチ変換ジョブからの変換済みデータを、`OutputFilter` パラメータで指定します。

1.  JSON または CSV 形式のファイルを選択して入力します。
   + JSON 形式または JSON Lines 形式の入力ファイルの場合、SageMaker AI は `SageMakerOutput` 属性を入力ファイルに追加するか、`SageMakerInput` 属性と `SageMakerOutput` 属性を使用して新しい JSON 出力ファイルを作成します。詳細については、「[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html)」を参照してください。
   + CSV 形式の入力ファイルの場合、結合された入力データの後に変換済みデータが続き、CSV ファイルとして出力されます。

`DataProcessing`DataProcessing 構造でアルゴリズムを使用する場合は、入力ファイルと出力ファイルの*両方*で、選択した形式がサポートされている必要があります。例えば、`CreateTransformJob` API の [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html) フィールドの [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType) パラメータと [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept) パラメータの両方を `text/csv`、`application/json`、`application/jsonlines` のいずれかの値に設定する必要があります。CSV ファイルの列を指定する構文と JSON ファイルの属性を指定する構文は異なります。誤った構文を使用すると、エラーが発生します。詳細については、「[バッチ変換の例](#batch-transform-data-processing-examples)」を参照してください。組み込みアルゴリズムの入力ファイルと出力ファイルの形式の詳細については、「[Amazon SageMaker の組み込みアルゴリズムと事前トレーニング済みモデル](algos.md)」を参照してください。

入力と出力のレコード区切り文字も、選択したファイルの入力と一致している必要があります。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType) パラメータは、入力データセットのレコードを分割する方法を示しています。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ) パラメータは、出力用にレコードを再構成する方法を示します。入力および出力形式を `text/csv` に設定した場合は、`SplitType` および `AssembleWith` パラメータも `line` に設定する必要があります。入力形式および出力形式を `application/jsonlines` に設定した場合は、`SplitType` と `AssembleWith` の両方を `line` に設定できます。

CSV ファイルの場合、埋め込まれた改行文字は使用できません。JSON ファイルの場合、属性名 `SageMakerOutput` は出力用に予約されています。JSON 入力ファイルにこの名前の属性を含めることはできません。含めた場合、入力ファイルのデータは上書きされる可能性があります。

## サポートされる JSONPath 演算子
<a name="data-processing-operators"></a>

入力データと推論をフィルタリングして結合するには、JSONPath 部分式を使用します。SageMaker AI は定義された JSONPath 演算子のサブセットのみをサポートします。次の表に、サポートされる JSONPath 演算子を示します。CSV データの場合、各行は JSON 配列と見なされるため、インデックスベースの JSONPath のみを適用できます (例: `$[0]`、`$[1:]`)。CSV データも [RFC 形式](https://tools.ietf.org/html/rfc4180)に従う必要があります。


| JSONPath 演算子 | 説明 | 例 | 
| --- | --- | --- | 
| \$1 |  クエリするルート要素。この演算子は、すべてのパス式の先頭に必要です。  | \$1 | 
| .<name> |  ドット表記の子要素。  |  `$.id`  | 
| \$1 |  ワイルドカード。属性名または数値の代わりに使用します。  |  `$.id.*`  | 
| ['<name>' (,'<name>')] |  大括弧で表記された要素または複数の子要素。  |  `$['id','SageMakerOutput']`  | 
| [<number> (,<number>)] |  インデックスまたはインデックスの配列。負のインデックス値もサポートされています。`-1` インデックスは配列の最後の要素を表します。  |  `$[1]` , `$[1,3,5]`  | 
| [<start>:<end>] |  配列のスライス演算子。array slice () メソッドは、配列のセクションを抽出し、新しい配列を返します。*<start>* を省略すると、SageMaker AI は配列の最初の要素を使用します。*<end>* を省略すると、SageMaker AI は配列の最後の要素を使用します。  |  `$[2:5]`, `$[:5]`, `$[2:]`  | 

角かっこ表記を使用して特定のフィールドの複数の子要素を指定する場合、かっこ内に子のネストを追加することはサポートされていません。たとえば、`$.field1.['child1','child2']` はサポートされますが、`$.field1.['child1','child2.grandchild']` はサポートされません。

JSONPath 演算子の詳細については、GitHub の「[JsonPath](https://github.com/json-path/JsonPath)」を参照してください。

## バッチ変換の例
<a name="batch-transform-data-processing-examples"></a>

次の例は、入力データと予測結果を結合するための一般的な方法を示しています。

**Topics**
+ [

### 例 : 推論のみを出力する
](#batch-transform-data-processing-example-default)
+ [

### 例: 入力データと結合した推論を出力する
](#batch-transform-data-processing-example-all)
+ [

### 例: 入力データと結合された推論を出力し、ID 列を入力から除外する (CSV)
](#batch-transform-data-processing-example-select-csv)
+ [

### 例: ID 列と結合された推論を出力し、入力から ID 列を除外する (CSV)
](#batch-transform-data-processing-example-select-json)

### 例 : 推論のみを出力する
<a name="batch-transform-data-processing-example-default"></a>

デフォルトでは、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing) パラメータは推論結果を入力と結合しません。推論結果のみが出力されます。

結果を入力と結合しないように明示的に指定する場合、[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用してトランスフォーマー呼び出しで次の設定を指定します。

```
sm_transformer = sagemaker.transformer.Transformer(…)
sm_transformer.transform(…, input_filter="$", join_source= "None", output_filter="$")
```

 AWS SDK for Python を使用して推論を出力するには、CreateTransformJob リクエストに次のコードを追加します。以下のコードは、デフォルトの動作を模倣しています。

```
{
    "DataProcessing": {
        "InputFilter": "$",
        "JoinSource": "None",
        "OutputFilter": "$"
    }
}
```

### 例: 入力データと結合した推論を出力する
<a name="batch-transform-data-processing-example-all"></a>

[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用して入力データと出力ファイル内の推論を結合する場合は、変換オブジェクトを初期化する際に `assemble_with` パラメータと `accept` パラメータを指定します。変換呼び出しを使用するときは、`join_source` パラメータに `Input` を指定し、`split_type` パラメータおよび `content_type` パラメータも指定します。`split_type` パラメータは `assemble_with` と同じ値、`content_type` パラメータは `accept` と同じ値である必要があります。パラメータと許容値の詳細については、Amazon SageMaker AI Python SDK の「[Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer)」ページを参照してください。

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, join_source="Input", split_type="Line", content_type="text/csv")
```

 AWS SDK for Python (Boto 3) を使用している場合は、次のコードを[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)リクエストに追加して、すべての入力データを推論に結合します。`Accept` と `ContentType` の値は一致する必要があり、`AssembleWith` と `SplitType` の値も一致する必要があります。

```
{
    "DataProcessing": {
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

JSON または JSON Lines の入力ファイルの場合、結果は入力 JSON ファイルの `SageMakerOutput` キーにあります。たとえば、入力がキーと値のペア `{"key":1}` を含む JSON ファイルである場合、データ変換の結果は `{"label":1}` です。

SageMaker AI は、両方を `SageMakerInput` キーの入力ファイル内に保存します。

```
{
    "key":1,
    "SageMakerOutput":{"label":1}
}
```

**注記**  
JSON の結合結果は、キーと値のペアのオブジェクトである必要があります。入力がキーと値のペアのオブジェクトではない場合、SageMaker AI は新しい JSON ファイルを作成します。新しい JSON ファイルで、入力データは `SageMakerInput` キー内に保存され、結果は `SageMakerOutput` 値として保存されます。

たとえば、CSV ファイルで、レコードが `[1,2,3]` で、ラベルの結果が `[1]` の場合、出力ファイルには `[1,2,3,1]` が含まれます。

### 例: 入力データと結合された推論を出力し、ID 列を入力から除外する (CSV)
<a name="batch-transform-data-processing-example-select-csv"></a>

[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用して入力データを推論出力と結合し、トランスフォーマー入力から ID 列を除外する場合は、トランスフォーマー呼び出しで `input_filter` に前の例と同じパラメータと JSONPath サブエクスプレッションを指定します。例えば、入力データに 5 つの列があり、最初の 1 つが ID 列である場合、次の変換リクエストを使用して、ID 列を除 くすべての列を特徴として選択します。トランスフォーマーは引き続き、推論と結合されたすべての入力列を出力します。パラメータと許容値の詳細については、Amazon SageMaker AI Python SDK の「[Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer)」ページを参照してください。

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input")
```

 AWS SDK for Python (Boto 3) を使用している場合は、`[ CreateTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)`リクエストに次のコードを追加します。

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

SageMaker AI の列を指定するには、配列要素のインデックスを使用します。最初の列はインデックス 0、2 番目の列はインデックス 1、6 番目の列はインデックス 5 です。

入力から最初の列を除外するには、`[InputFilter](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter )` を `"$[1:]"` に設定します。コロン (`:`) は、2 つの値の間のすべての要素を含めるように SageMaker AI に指示します。たとえば、`$[1:4]` は 2 番目から 5 番目の列を指定します。

コロンの後の数字を省略すると (`[5:]` など)、サブセットには 6 番目の列から最後の列までのすべての列が含まれます。コロンの前の数字、たとえば `[:5]` を省略すると、サブセットには最初の列 (インデックス 0) から 6 番目の列までのすべての列が含まれます。

### 例: ID 列と結合された推論を出力し、入力から ID 列を除外する (CSV)
<a name="batch-transform-data-processing-example-select-json"></a>

[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用している場合は、トランスフォーマー呼び出しで `output_filter` を指定することで、特定の入力列 (ID 列など) のみを推論と結合するように出力を指定できます。`output_filter` は JSONPath サブ式を使用して、入力データを推論結果と結合した後に出力として返す列を指定します。次のリクエストは、ID 列を除外して予測を行い、ID 列を推論と結合する方法を示しています。次の例では、出力の最後の列 (`-1`) に推論が含まれていることに注意してください。JSON ファイルを使用している場合、SageMaker AI は推論結果を属性 `SageMakerOutput` に保存します。パラメータと許容値の詳細については、Amazon SageMaker AI Python SDK の「[Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer)」ページを参照してください。

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input", output_filter="$[0,-1]")
```

 AWS SDK for Python (Boto 3) を使用している場合は、次のコードを[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)リクエストに追加して、ID 列のみを推論と結合します。

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input",
        "OutputFilter": "$[0,-1]"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

**警告**  
JSON 形式の入力ファイルを使用している場合、ファイルに属性名 `SageMakerOutput` を含めることはできません。この属性名は出力ファイルの推論用に予約されています。この名前の属性が JSON 形式の入力ファイルに含まれていると、入力ファイルの値が推論で上書きされる場合があります。