

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 入门 (SDK for Python (Boto3))
<a name="getting-started-python"></a>

本教程向您展示如何使用 SDK for Python (Boto3) 从头到尾完成 Amazon Personalize 工作流程。

完成入门练习后，为避免产生不必要的费用，请删除您创建的资源。有关更多信息，请参阅 [删除 Amazon Personalize 资源的要求](deleting-resources.md)。

**Topics**
+ [先决条件](#gs-sdk-prerequisites)
+ [教程](#gs-python-custom-tutorial)
+ [开始使用 Jupyter（iPython） APIs 笔记本电脑的 Amazon Personalize](#gs-jupyter-notebook)

## 先决条件
<a name="gs-sdk-prerequisites"></a>

以下是使用本指南中的 Python 示例的先决条件步骤：
+ 完成[入门先决条件](gs-prerequisites.md)，设置所需权限并创建训练数据。如果您使用自己的源数据，请确保按照先决条件设置数据格式。
+ 按照中的说明设置您的 适用于 Python (Boto3) 的 AWS SDK 环境[设置 AWS SDKs](aws-personalize-set-up-sdks.md)。

## 教程
<a name="gs-python-custom-tutorial"></a>

在以下步骤中，您将验证您的环境并为 Amazon Personalize 创建 SDK for Python (Boto3) 客户端。然后，将导入数据，创建解决方案版本并通过市场活动进行部署，随后获得建议。

### 步骤 1：验证您的 Python 环境并创建 boto3 客户端
<a name="gs-python-example"></a>

在完成先决条件之后，请运行以下 Python 示例，以确认您的环境已正确配置。此代码还会创建您在本教程中使用的 Amazon Personalize boto3 客户端。如果已正确配置环境，则会显示可用食谱列表，您现在可以运行本教程中的其他示例。

```
import boto3

personalizeRt = boto3.client('personalize-runtime')
personalize = boto3.client('personalize')

response = personalize.list_recipes()

for recipe in response['recipes']:
    print (recipe)
```

### 步骤 2：导入数据
<a name="getting-started-python-import-dataset"></a>

创建 Amazon Personalize boto3 客户端并验证您的环境后，导入您在完成[入门先决条件](gs-prerequisites.md)时创建的历史数据。要将历史数据导入 Amazon Personalize，请执行以下操作：

1. 使用以下代码创建 Amazon Personalize 架构。将 `getting-started-schema` 替换为架构的名称。

   ```
   import json
   schema = {
     "type": "record",
     "name": "Interactions",
     "namespace": "com.amazonaws.personalize.schema",
     "fields": [
         {
             "name": "USER_ID",
             "type": "string"
         },
         {
             "name": "ITEM_ID",
             "type": "string"
         },
         {
             "name": "TIMESTAMP",
             "type": "long"
         }
     ],
     "version": "1.0"
   }
   
   create_interactions_schema_response = personalize.create_schema(
       name='getting-started-schema',
       schema=json.dumps(schema)
   )
   
   interactions_schema_arn = create_interactions_schema_response['schemaArn']
   print(json.dumps(create_interactions_schema_response, indent=2))
   ```

1. 使用以下代码创建数据集组。将 `dataset group name` 替换为数据集组的名称。

   ```
   response = personalize.create_dataset_group(name = 'dataset group name')
   dataset_group_arn = response['datasetGroupArn']
   
   description = personalize.describe_dataset_group(datasetGroupArn = dataset_group_arn)['datasetGroup']
   
   print('Name: ' + description['name'])
   print('ARN: ' + description['datasetGroupArn'])
   print('Status: ' + description['status'])
   ```

1. 使用以下代码在新数据集组中创建物品交互数据集。为数据集命名，并提供前面步骤中的`schema_arn`和`dataset_group_arn`。

   ```
   response = personalize.create_dataset(
       name = 'datase_name',
       schemaArn = 'schema_arn',
       datasetGroupArn = 'dataset_group_arn',
       datasetType = 'Interactions'
   )
   
   dataset_arn = response['datasetArn']
   ```

1. 使用以下代码通过数据集导入作业导入数据。代码使用 describe\$1dataset\$1import\$1job 方法来跟踪作业的状态。

   将以下内容作为参数传递：作业名称、上一步中的 `dataset_arn`、存储训练数据的 Amazon S3 存储桶路径 (`s3://bucket name/folder name/ratings.csv`) 以及您的 IAM 服务角色的 ARN。您在[入门先决条件](gs-prerequisites.md)期间创建了此角色。Amazon Personalize 需要权限才能访问存储桶。请参阅[向 Amazon Personalize 授予访问 Amazon S3 资源的权限](granting-personalize-s3-access.md)。

   ```
   import time
   response = personalize.create_dataset_import_job(
       jobName = 'JobName',
       datasetArn = 'dataset_arn',
       dataSource = {'dataLocation':'s3://amzn-s3-demo-bucket/filename.csv'},
       roleArn = 'role_arn',
       importMode = 'FULL'
   )
   
   dataset_interactions_import_job_arn = response['datasetImportJobArn']
   
   description = personalize.describe_dataset_import_job(
       datasetImportJobArn = dataset_interactions_import_job_arn)['datasetImportJob']
   
   print('Name: ' + description['jobName'])
   print('ARN: ' + description['datasetImportJobArn'])
   print('Status: ' + description['status'])
   
   max_time = time.time() + 3*60*60 # 3 hours
   while time.time() < max_time:
       describe_dataset_import_job_response = personalize.describe_dataset_import_job(
           datasetImportJobArn = dataset_interactions_import_job_arn
       )
       status = describe_dataset_import_job_response["datasetImportJob"]['status']
       print("Interactions DatasetImportJob: {}".format(status))
       
       if status == "ACTIVE" or status == "CREATE FAILED":
           break
           
       time.sleep(60)
   ```

### 步骤 3：创建解决方案
<a name="getting-started-python-create-solution"></a>

导入数据后，创建解决方案和解决方案版本，如下所示。*解决方案* 包含用于训练模型的配置，*解决方案版本* 是经过训练的模型。

1.  使用以下代码创建新解决方案。将以下内容作为参数传递：`dataset_group_arn`来自之前的、解决方案的名称和 User-Personalization-v 2 配方的 ARN () `arn:aws:personalize:::recipe/aws-user-personalization-v2`。存储新解决方案的 ARN 以备日后使用。

   ```
   create_solution_response = personalize.create_solution(
     name='solution name', 
     recipeArn= 'arn:aws:personalize:::recipe/aws-user-personalization-v2', 
     datasetGroupArn = 'dataset group arn'
   )
   solution_arn = create_solution_response['solutionArn']
   print('solution_arn: ', solution_arn)
   ```

1. 使用以下代码创建解决方案版本。将上一步中的 `solution_arn` 作为参数传递。以下代码将创建解决方案版本。在训练期间，代码使用 [DescribeSolutionVersion](API_DescribeSolutionVersion.md) 操作来检索解决方案版本的状态。训练完成后，方法将返回新解决方案版本的 ARN。请将其存储以便将来使用。

   ```
   import time
   import json
   
   create_solution_version_response = personalize.create_solution_version(
       solutionArn = solution_arn
   )
   
   solution_version_arn = create_solution_version_response['solutionVersionArn']
   print(json.dumps(create_solution_version_response, indent=2))
   
   max_time = time.time() + 3*60*60 # 3 hours
   while time.time() < max_time:
       describe_solution_version_response = personalize.describe_solution_version(
           solutionVersionArn = solution_version_arn
       )
       status = describe_solution_version_response["solutionVersion"]["status"]
       print("SolutionVersion: {}".format(status))
       
       if status == "ACTIVE" or status == "CREATE FAILED":
           break
           
       time.sleep(60)
   ```

### 步骤 4：创建市场活动
<a name="getting-started-python-deploy-solution"></a>

创建解决方案版本后，使用 Amazon Personalize 市场活动进行部署。使用以下代码创建可部署解决方案版本的市场活动。将以下内容作为参数传递：`solution_version_arn` 和市场活动名称。方法将返回新市场活动的 Amazon 资源名称 (ARN)。请将其存储以便将来使用。

```
response = personalize.create_campaign(
    name = 'campaign name',
    solutionVersionArn = 'solution version arn'
)

arn = response['campaignArn']

description = personalize.describe_campaign(campaignArn = arn)['campaign']
print('Name: ' + description['name'])
print('ARN: ' + description['campaignArn'])
print('Status: ' + description['status'])
```

### 步骤 5：获得建议
<a name="getting-started-python-get-recommendations"></a>

创建活动之后，您可以使用它来获得建议。以下代码展示了如何从市场活动中获取建议并打印出每个推荐物品的 ID。传递您在上一步中创建的市场活动的 ARN。对于用户 ID，传递来自训练数据的用户 ID，例如 `123`。

```
response = personalizeRt.get_recommendations(
    campaignArn = 'Campaign ARN',
    userId = '123',
    numResults = 10
)

print("Recommended items")
for item in response['itemList']:
    print (item['itemId'])
```

## 开始使用 Jupyter（iPython） APIs 笔记本电脑的 Amazon Personalize
<a name="gs-jupyter-notebook"></a>

 要开始通过 Jupyter 笔记本使用 Amazon Personalize，请克隆或下载在 [Amazon Personalize 示例](https://github.com/aws-samples/amazon-personalize-samples)存储库的 [getting\$1started](https://github.com/aws-samples/amazon-personalize-samples/tree/master/getting_started) 文件夹中找到的一系列笔记本。笔记本将引导您使用 Amazon Personalize 导入训练数据、创建解决方案、创建市场活动以及获取建议。

**注意**  
 在开始使用笔记本之前，请务必按照 [README.md](https://github.com/aws-samples/amazon-personalize-samples/blob/master/getting_started/README.md) 中的步骤构建您的环境 