

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 시작하기(Python용 SDK(Boto3))
<a name="getting-started-python"></a>

이 자습서에서는 Python용 SDK(Boto3)를 사용해 처음부터 끝까지 Personalize 워크플로우를 완료하는 방법을 보여줍니다.

시작하기 연습을 마쳤을 때 불필요한 요금이 발생하지 않도록 하려면 생성한 리소스를 삭제합니다. 자세한 내용은 [Amazon Personalize 리소스 삭제 요구 사항](deleting-resources.md) 단원을 참조하십시오.

**Topics**
+ [사전 조건](#gs-sdk-prerequisites)
+ [자습서](#gs-python-custom-tutorial)
+ [주피터(IPython) 노트북으로 Personalize API 사용 시작하기](#gs-jupyter-notebook)

## 사전 조건
<a name="gs-sdk-prerequisites"></a>

다음은 이 안내서에서 Python 예제를 사용하기 위한 필수 조건 단계입니다.
+ [시작하기 전제 조건](gs-prerequisites.md)를 완료하여 필요한 권한을 설정하고 학습 데이터를 생성합니다. 고유한 소스 데이터를 사용하는 경우 필수 조건 단계와 같이 데이터의 형식이 지정되었는지 확인합니다.
+ 에 지정된 대로 AWS SDK for Python (Boto3) 환경을 설정합니다[AWS SDKs 설정](aws-personalize-set-up-sdks.md).

## 자습서
<a name="gs-python-custom-tutorial"></a>

다음에 이어지는 단계에서는 환경을 확인하고 Personalize용 Python용 SDK(Boto3) 클라이언트를 생성합니다. 그런 다음 데이터를 가져와서 캠페인이 포함된 솔루션 버전을 생성 및 배포하고 추천을 받습니다.

### 1단계: Python 환경을 확인하고 boto3 클라이언트 만들기
<a name="gs-python-example"></a>

필수 조건을 완료한 후 다음 Python 예제를 실행하여 환경이 올바르게 구성되었는지 확인합니다. 또한 이 코드는 이 자습서에서 사용하는 Personalize boto3 클라이언트를 생성합니다. 환경이 올바르게 구성된 경우 사용 가능한 레시피 목록이 표시되고 이 자습서의 다른 Python 예제를 실행할 수 있습니다.

```
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>

Personalize boto3 클라이언트를 생성하고 환경을 확인했으면, [시작하기 전제 조건](gs-prerequisites.md)완료 시 생성한 과거 데이터를 가져옵니다. 과거 데이터를 Personalize로 가져오려면 다음과 같이 합니다.

1. 다음 코드를 사용하여 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`, 학습 데이터를 저장한 S3 버킷 경로(`s3://bucket name/folder name/ratings.csv`), IAM 서비스 역할의 ARN 등을 파라미터로 전달합니다. [시작하기 전제 조건](gs-prerequisites.md)의 일부로 이 역할을 생성했습니다. 버킷에 액세스할 수 있는 권한이 Personalize에 필요합니다. [Personalize에 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-v2 레시피의 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을 반환합니다. 나중에 사용하기 위해 이 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>

솔루션 버전을 생성한 후 Personalize 캠페인을 통해 배포합니다. 다음 코드를 사용하여 솔루션 버전을 배포하는 캠페인을 생성합니다. 파라미터로 캠페인 이름, `solution_version_arn`을 전달합니다. 메서드는 새 캠페인의 리소스 이름(ARN)을 반환합니다. 나중에 사용하기 위해 이 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'])
```

## 주피터(IPython) 노트북으로 Personalize API 사용 시작하기
<a name="gs-jupyter-notebook"></a>

 주피터 노트북을 사용하여 Personalize를 사용하려면 [Personalize 샘플](https://github.com/aws-samples/amazon-personalize-samples) 리포지토리의 [getting\$1start](https://github.com/aws-samples/amazon-personalize-samples/tree/master/getting_started) 폴더에 있는 일련의 노트북을 복제하거나 다운로드합니다. 노트북에서는 Personalize를 사용하여 학습 데이터를 가져오고, 솔루션을 생성하고, 캠페인을 생성하고, 추천을 받는 과정을 안내합니다.

**참고**  
 노트북을 시작하기 전에 [README.md](https://github.com/aws-samples/amazon-personalize-samples/blob/master/getting_started/README.md)의 단계에 따라 환경을 구축해야 합니다 