

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 開始使用網域資料集群組 (SDK for Python (Boto3))
<a name="getting-started-domain-python"></a>

本教學課程說明如何使用適用於 Python 的 SDK (Boto3) 為 VIDEO\$1ON\$1DEMAND 網域建立網域資料集群組。在本教學課程中，您會為使用案例建立*最佳挑選*的推薦者。

當您完成入門練習時，為了避免產生不必要的費用，請刪除您建立的資源。如需詳細資訊，請參閱[刪除 Amazon Personalize 資源的需求](deleting-resources.md)。

**Topics**
+ [先決條件](#gs-sdk-domain-prerequisites)
+ [教學課程](#gs-python-tutorial)
+ [開始使用 Amazon Personalize APIs搭配 Jupyter (iPython) 筆記本](#gs-jupyter-domain-notebook)

## 先決條件
<a name="gs-sdk-domain-prerequisites"></a>

以下是在本指南中使用 Python 範例的先決條件：
+ 完成 [入門先決條件](gs-prerequisites.md)以設定所需的許可並建立訓練資料。如果您使用的是自己的來源資料，請確定您的資料格式與先決條件相同。
+ 依照 中的指定設定您的 適用於 Python (Boto3) 的 AWS SDK 環境[設定 AWS SDKs](aws-personalize-set-up-sdks.md)。

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

在下列步驟中，您會驗證您的環境，並為 Amazon Personalize 建立適用於 Python (Boto3) 的 SDK 用戶端。然後，您可以匯入資料、為您使用案例建立*最佳挑選*的建議者，並取得建議。

### 步驟 1：驗證您的 Python 環境並建立 boto3 用戶端
<a name="gs-python-domain-verify-environment"></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-domain-import-dataset"></a>

在您建立 Amazon Personalize boto3 用戶端並驗證環境之後，匯入您完成 時建立的歷史資料[入門先決條件](gs-prerequisites.md)。若要將歷史資料匯入 Amazon Personalize，請執行下列動作：

1. 使用下列程式碼在 Amazon Personalize 中建立結構描述。`gs-domain-interactions-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": "EVENT_TYPE",
             "type": "string"
         },
         {
             "name": "TIMESTAMP",
             "type": "long"
         }
     ],
     "version": "1.0"
   }
   
   create_interactions_schema_response = personalize.create_schema(
       name='gs-domain-interactions-schema',
       schema=json.dumps(schema),
       domain='VIDEO_ON_DEMAND'
   )
   
   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',
     domain = 'VIDEO_ON_DEMAND'
   )
   dsg_arn = response['datasetGroupArn']
   
   description = personalize.describe_dataset_group(datasetGroupArn = dsg_arn)['datasetGroup']
   
   print('Name: ' + description['name'])
   print('ARN: ' + description['datasetGroupArn'])
   print('Status: ' + description['status'])
   ```

1. 使用下列程式碼，在您的新資料集群組中建立項目互動資料集。為資料集命名，並提供先前步驟`dataset_group_arn`的 `schema_arn`和 。

   ```
   response = personalize.create_dataset(
       name = 'interactions-dataset-name',
       schemaArn = interactions_schema_arn,
       datasetGroupArn = dsg_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'
   )
   
   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)
   ```

### 步驟 4：建立推薦者
<a name="domain-gs-py-create-recommender"></a>

資料集匯入任務完成後，您就可以建立建議者。使用下列程式碼來建立推薦者。將以下內容做為參數傳遞：建議者的名稱、資料集群組的 Amazon Resource Name (ARN)，以及`arn:aws:personalize:::recipe/aws-vod-top-picks`配方 ARN。此程式碼使用 describe\$1recommender 方法來追蹤建議者的狀態。

```
import time
create_recommender_response = personalize.create_recommender(
  name = 'gs-python-top-picks',
  recipeArn = 'arn:aws:personalize:::recipe/aws-vod-top-picks',
  datasetGroupArn = dsg_arn     
)
recommender_arn = create_recommender_response['recommenderArn']

print('Recommender ARN:' + recommender_arn)
max_time = time.time() + 3*60*60 # 3 hours
while time.time() < max_time:

    version_response = personalize.describe_recommender(
        recommenderArn = recommender_arn
    )
    status = version_response["recommender"]["status"]

    if status == "ACTIVE":
        print("Creation succeeded for {}".format(recommender_arn))
        
    elif status == "CREATE FAILED":
        print("Creation failed for {}".format(recommender_arn))

    if status == "ACTIVE":
        break
    else:
        print("Recommender creation is still in progress")
        
    time.sleep(60)
```

### 步驟 5：取得建議
<a name="domain-gs-py-get-recommendations"></a>

建立推薦者之後，您可以使用它來取得具有下列程式碼的建議。以參數形式傳遞您在上一個步驟中建立的推薦者的 Amazon Resource Name (ARN)，以及使用者 ID （例如，`123`)。方法會列印建議項目的清單。

```
response = personalizeRt.get_recommendations(
    recommenderArn = "arn:aws:personalize:us-west-2:014025156336:recommender/gs-python-top-picks-89",
    userId = '123'
)
print("Recommended items")
for item in response['itemList']:
    print (item['itemId'])
```

## 開始使用 Amazon Personalize APIs搭配 Jupyter (iPython) 筆記本
<a name="gs-jupyter-domain-notebook"></a>

 若要開始使用 Jupyter 筆記本建立網域資料集群組，請複製或下載一系列筆記本，這些筆記本位於 [Amazon Personalize 範例](https://github.com/aws-samples/amazon-personalize-samples)儲存庫的 [notebooks\$1managed\$1domains](https://github.com/aws-samples/amazon-personalize-samples/tree/master/getting_started/notebooks_managed_domains) 資料夾中。筆記本會逐步引導您匯入訓練資料、建立推薦者，以及使用 Amazon Personalize 取得建議。

**注意**  
 開始使用筆記本之前，請務必依照 https：//[README.md](https://github.com/aws-samples/amazon-personalize-samples/blob/master/getting_started/README.md) 中的步驟建置您的環境 