Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] Amazon MachineLearning 入門 (4) データソースの作成(バッチ予測用)

More than 3 years have passed since last update.

この記事について

JAWS-UG CLI専門支部 #67 MachineLearning入門で実施するハンズオン用の手順書です。

前提条件

必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

  • MachineLearningのフルコントロール権限
  • S3のフルコントロール権限

0. 準備

0.1. リージョンを指定

コマンド
export AWS_DEFAULT_REGION="eu-west-1"

0.2. 資格情報を確認

コマンド
aws configure list

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************GMWA         iam-role
secret_key     ****************obFC         iam-role
    region                eu-west-1              env    AWS_DEFAULT_REGION

0.3. バージョン確認

コマンド
aws --version
結果
aws-cli/1.10.66 Python/2.7.12 Linux/4.4.19-29.55.amzn1.x86_64 botocore/1.4.56

0.4. バージョンアップ(必要に応じて)

コマンド
sudo pip install -U awscli

0.5. 変数の確認

コマンド
cat << ETX

    BUCKET_NAME: ${BUCKET_NAME}
    AWS_ID: ${AWS_ID}
    ML_MODEL_ID: ${ML_MODEL_ID}

ETX
結果
    BUCKET_NAME: jawsug-cli-ml-************
    AWS_ID: ************
    ML_MODEL_ID: ml-model-cli-************

1. データソースの作成(バッチ予測用)

1.1. サンプルデータのダウンロード

予測用データのダウンロード

コマンド
curl https://s3.amazonaws.com/aml-sample-data/banking-batch.csv > banking-batch.csv
結果
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  469k  100  469k    0     0   189k      0  0:00:02  0:00:02 --:--:--  189k

ファイルを確認

コマンド
ls -al | grep banking-batch.csv
結果
-rw-rw-r-- 1 ec2-user ec2-user  480428 Jan 29  2015 banking-batch.csv

1.2. スキーマファイルの生成

CSVファイルの構造を定義します。

ヘッダー情報の確認

CSVの1列目を確認します。

ターゲット変数が含まれていないことが確認できます。

コマンド
head -1 banking-batch.csv
結果
age,job,marital,education,default,housing,loan,contact,month,day_of_week,duration,campaign,pdays,previous,poutcome,emp_var_rate,cons_price_idx,cons_conf_idx,euribor3m,nr_employed

ファイル名の指定

コマンド
PREDICTION_DATA_SCHEMA_FILE="prediction_data_schema.json"

スキーマファイルの生成

バッチ予測用のため、ターゲット変数は指定されていません。

コマンド
cat << EOF > ${PREDICTION_DATA_SCHEMA_FILE}
{
  "version":"1.0",
  "rowId":null,
  "rowWeight":null,
  "dataFormat":"CSV",
  "dataFileContainsHeader":true,
  "attributes":[
    {"attributeName":"age","attributeType":"NUMERIC"},
    {"attributeName":"job","attributeType":"CATEGORICAL"},
    {"attributeName":"marital","attributeType":"CATEGORICAL"},
    {"attributeName":"education","attributeType":"CATEGORICAL"},
    {"attributeName":"default","attributeType":"CATEGORICAL"},
    {"attributeName":"housing","attributeType":"CATEGORICAL"},
    {"attributeName":"loan","attributeType":"CATEGORICAL"},
    {"attributeName":"contact","attributeType":"CATEGORICAL"},
    {"attributeName":"month","attributeType":"CATEGORICAL"},
    {"attributeName":"day_of_week","attributeType":"CATEGORICAL"},
    {"attributeName":"duration","attributeType":"NUMERIC"},
    {"attributeName":"campaign","attributeType":"NUMERIC"},
    {"attributeName":"pdays","attributeType":"NUMERIC"},
    {"attributeName":"previous","attributeType":"NUMERIC"},
    {"attributeName":"poutcome","attributeType":"CATEGORICAL"},
    {"attributeName":"emp_var_rate","attributeType":"NUMERIC"},
    {"attributeName":"cons_price_idx","attributeType":"NUMERIC"},
    {"attributeName":"cons_conf_idx","attributeType":"NUMERIC"},
    {"attributeName":"euribor3m","attributeType":"NUMERIC"},
    {"attributeName":"nr_employed","attributeType":"NUMERIC"}
  ],
  "excludedAttributeNames":[]
}
EOF

cat ${PREDICTION_DATA_SCHEMA_FILE}

スキーマファイルの検証

コマンド
jsonlint -q ${PREDICTION_DATA_SCHEMA_FILE}

1.3. 予測用データのアップロード

アップロードするファイル名を指定

コマンド
PREDICTION_DATA_FILE="banking-batch.csv"

ファイルのアップロード

コマンド
aws s3 cp ${PREDICTION_DATA_FILE} s3://${BUCKET_NAME}
aws s3 cp ${PREDICTION_DATA_SCHEMA_FILE} s3://${BUCKET_NAME}
結果
upload: ./banking-batch.csv to s3://jawsug-cli-ml-************/banking-batch.csv
upload: ./prediction_data_schema.json to s3://jawsug-cli-ml-************/prediction_data_schema.json

アップロードされたファイルを確認

コマンド
aws s3 ls ${BUCKET_NAME} | grep ${PREDICTION_DATA_FILE}
aws s3 ls ${BUCKET_NAME} | grep ${PREDICTION_DATA_SCHEMA_FILE}
結果
2016-10-23 06:51:38     480428 banking-batch.csv
2016-10-23 06:51:41       1404 prediction_data_schema.json

2. データソースの作成

2.1. バッチ予測用データソースの作成

データソースIDの指定

コマンド
PREDICTION_DATA_SOURCE_ID="prediction-cli-${AWS_ID}-$(date +%Y%m%d%H)"

データソーススペックファイル名の指定

コマンド
PREDICTION_DATA_SOURCE_SPEC_FILE="prediction_data_source_spec.json"

変数の確認

コマンド
cat << ETX

    PREDICTION_DATA_SOURCE_SPEC_FILE: ${PREDICTION_DATA_SOURCE_SPEC_FILE}
    BUCKET_NAME: ${BUCKET_NAME}
    PREDICTION_DATA_FILE: ${PREDICTION_DATA_FILE}
    DATA_SCHEMA_FILE:${PREDICTION_DATA_SCHEMA_FILE}

ETX
結果
    PREDICTION_DATA_SOURCE_SPEC_FILE: prediction_data_source_spec.json
    BUCKET_NAME: jawsug-cli-ml-************
    PREDICTION_DATA_FILE: banking-batch.csv
    DATA_SCHEMA_FILE:prediction_data_schema.json

データソーススペックファイルの生成

コマンド
cat << EOF > ${PREDICTION_DATA_SOURCE_SPEC_FILE}
{
  "DataLocationS3": "s3://${BUCKET_NAME}/${PREDICTION_DATA_FILE}",
  "DataSchemaLocationS3": "s3://${BUCKET_NAME}/${PREDICTION_DATA_SCHEMA_FILE}"
}
EOF

cat ${PREDICTION_DATA_SOURCE_SPEC_FILE}
結果
{
  "DataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
  "DataSchemaLocationS3": "s3://jawsug-cli-ml-************/prediction_data_schema.json"
}

データソーススペックファイルの検証

コマンド
jsonlint -q ${PREDICTION_DATA_SOURCE_SPEC_FILE}

変数の確認

コマンド
cat << ETX

    PREDICTION_DATA_SOURCE_ID: ${PREDICTION_DATA_SOURCE_ID}
    PREDICTION_DATA_SOURCE_SPEC_FILE: ${PREDICTION_DATA_SOURCE_SPEC_FILE}

ETX
結果
    PREDICTION_DATA_SOURCE_ID: prediction-cli-************
    PREDICTION_DATA_SOURCE_SPEC_FILE: prediction_data_source_spec.json

データソースの作成

コマンド
aws machinelearning create-data-source-from-s3 \
    --data-source-id ${PREDICTION_DATA_SOURCE_ID} \
    --data-spec file://${PREDICTION_DATA_SOURCE_SPEC_FILE}
結果
{
    "DataSourceId": "prediction-cli-************"
}

データソースの確認

コマンド
aws machinelearning get-data-source \
    --data-source-id ${PREDICTION_DATA_SOURCE_ID}
結果
{
    "Status": "COMPLETED",
    "NumberOfFiles": 1,
    "DataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
    "CreatedByIamUser": "arn:aws:iam::************:user/user01",
    "DataSizeInBytes": 480428,
    "ComputeStatistics": false,
    "LastUpdatedAt": 1474613517.536,
    "DataSourceId": "prediction-cli-************",
    "CreatedAt": 1474613515.885,
    "FinishedAt": 1474613517.536
}

データソースの一覧

コマンド
aws machinelearning describe-data-sources
結果
{
    "Results": [
        {
            "Status": "COMPLETED",
            "NumberOfFiles": 1,
            "DataLocationS3": "s3://jawsug-cli-ml-************/banking-batch.csv",
            "CreatedByIamUser": "arn:aws:sts::************:assumed-role/CLI/i-0****************",
            "DataSizeInBytes": 480428,
            "ComputeStatistics": false,
            "LastUpdatedAt": 1477205620.185,
            "DataSourceId": "prediction-cli-************-2016102306",
            "CreatedAt": 1477205618.067,
            "FinishedAt": 1477205620.185
        },
        {
            "Status": "COMPLETED",
            "ComputeTime": 1296000,
            "NumberOfFiles": 1,
            "DataLocationS3": "s3://jawsug-cli-ml-************/banking.csv",
            "CreatedByIamUser": "arn:aws:sts::************:assumed-role/CLI/i-0****************",
            "DataSizeInBytes": 4882918,
            "ComputeStatistics": true,
            "LastUpdatedAt": 1477201359.786,
            "DataSourceId": "training-cli-************-2016102305",
            "StartedAt": 1477201112.605,
            "CreatedAt": 1477201110.17,
            "FinishedAt": 1477201359.786
        }
    ]
}

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした