2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【30日でAWSをマスターするハンズオン問題集】Day17:AWS Glue DataBrewでデータクレンジング&加工

Last updated at Posted at 2025-12-11

📝 概要

項目 内容
所要時間 約1時間
メインサービス AWS Glue DataBrew, Amazon S3
学べること ノーコードでのデータクレンジング、データ品質改善、変換処理の基礎
想定費用 約300円(※データ量・実行回数により変動します)

⚠️ 注意:以下のリソースを削除し忘れると課金が継続します。

🎯 課題内容

ECサイトのレビューデータに対して、AWS Glue DataBrewを使用してノーコードでデータクレンジングと加工を行います。データ品質の問題を特定し、分析可能な状態に整形していきます。

データの課題

提供されるレビューデータ(handson_reviews_data.csv)には以下のような品質問題が含まれています:

  • 重複したレビューID
  • 商品タイトル、商品カテゴリー、レビュータイトル、レビュー本文の前後に不要な空白を含むテキストがある
  • 評価値(star_rating)が範囲外の可能性(範囲:1-5)
  • 商品カテゴリー名が正規化できていない(小文字に統一する必要がある)

📊 アーキテクチャ図

image01

🔧 実装機能

  • S3バケットにレビューデータをアップロード
  • Glue DataBrewでデータセットを作成し、データプロファイルを実行
  • データ品質の問題を可視化・特定
  • レシピを作成してデータクレンジング・変換を実行
    • 重複したレビューIDの削除
    • 商品タイトル、商品カテゴリー、レビュータイトル、レビュー本文の前後に不要な空白削除
    • 範囲外の評価値(star_rating)を削除(範囲:1-5)
    • 商品カテゴリーの正規化
  • ジョブを実行して加工済みデータをS3に出力
  • 結果の検証

💡 実装のヒント

DataBrewのプロジェクトとジョブの違い
  • プロジェクト: データの探索とレシピ(変換手順)の作成に使用します。インタラクティブなセッションで、変換の結果をすぐに確認できます。
  • ジョブ: 作成したレシピを実際のデータセット全体に適用して、結果をS3に出力します。本番運用での定期実行に使用します。

開発フローは「プロジェクトでレシピ作成 → ジョブで本番実行」となります。

データプロファイルの活用方法

DataBrewのデータプロファイル機能を使うと、以下の情報が自動で分析されます:

  • 各カラムのデータ型と統計情報
  • 欠損値の割合
  • ユニーク値の数
  • 値の分布(ヒストグラム)
  • 異常値の検出

この情報を基に、どのようなクレンジングが必要か判断しましょう。

よく使う変換レシピ

DataBrewには250以上の組み込み変換があります。このハンズオンでよく使うものは:

  • REMOVE_DUPLICATES: 重複行の削除
  • DELETE_MISSING_VALUES: 欠損値を含む行の削除
  • FILL_WITH_VALUE: 欠損値を特定の値で埋める
  • TRIM: 文字列の前後の空白を削除
  • CHANGE_DATA_TYPE: データ型の変更
  • FILTER_VALUES: 条件に基づく行のフィルタリング
  • CREATE_COLUMN: 新しいカラムの作成

✅ 完成後のチェックポイント

  • S3バケットにCSVファイルがアップロードされている
  • DataBrewでデータセットが作成され、データが正しく読み込まれている
  • データプロファイルジョブが実行され、品質問題が特定できている
  • レシピに最低4つ以上の変換ステップが含まれている
  • ジョブが成功し、加工済みデータがS3の出力先に保存されている
  • 出力データに重複などがないことを確認できている
  • 元データと比較して、行数・データ品質が改善されていることを確認できている

🧰 使用資材

サンプルデータ(オリジナルで作成しても良いですが、こちらのサンプルを使用しても構いません。):handson_reviews_data.csv

このハンズオンでは handson_reviews_data.csv を使用します。

こちらのリンク先のデータをコピーし、handson_reviews_data.csv という名前でファイルを作成して、S3にアップロードしてください。

※ダウンロードし、解凍してからご使用ください。

image29

データ構造

  • marketplace: マーケットプレイス(JP)
  • customer_id: 顧客ID
  • gender: 性別(M/W)
  • age: 年齢
  • review_id: レビューID
  • product_id: 商品ID
  • product_parent: 商品親ID
  • product_title: 商品名
  • product_category: 商品カテゴリ
  • star_rating: 評価(1-5の整数)
  • helpful_votes: 役立った投票数
  • total_votes: 総投票数
  • vine: Vineプログラム(Y/N)
  • verified_purchase: 購入確認済み(Y/N)
  • review_headline: レビュータイトル
  • review_body: レビュー本文
  • review_date: レビュー日付

含まれるデータ品質問題

  • 重複したレビューID
  • 商品タイトル、商品カテゴリー、レビュータイトル、レビュー本文の前後に不要な空白を含むテキストがある
  • 評価値(star_rating)が範囲外の可能性(範囲:1-5)
  • 商品カテゴリー名が正規化できていない(小文字に統一する必要がある)

🔗 リファレンスリンク

🛠️ 解答・構築手順(クリックで開く)

解答と構築手順を見る

✅ ステップ1:S3バケットの作成とデータアップロード

  1. AWSマネジメントコンソールにログイン
  2. S3サービスを開く
  3. 「バケットを作成」をクリック
    • バケット名:glue-databrew-handson-<your-name>-<random>(グローバルでユニークな名前)
    • リージョン:任意(東京リージョン推奨:ap-northeast-1)
    • その他の設定はデフォルトのまま
  4. 作成したバケット内に以下のフォルダ構造を作成:
    • input/ - 元データ格納用
    • output/ - 加工済みデータ出力用

image02

  1. handson_reviews_data.csvinput/ フォルダにアップロード

image03

✅ ステップ2:IAMポリシーとIAMロールの作成

  1. IAM サービスを開く
  2. 「ロール」→「ロールを作成」
  3. 信頼されたエンティティタイプ:AWSのサービス
  4. ユースケース:DataBrew を選択

image04

  1. 許可ポリシー:
    • AWSGlueDataBrewServiceRole
    • AmazonS3FullAccess(本番環境では必要最小限の権限に絞ること)
  2. ロール名:GlueDataBrewHandsonRole
  3. 「ロールを作成」をクリック

image05

✅ ステップ3:DataBrewでデータセットを作成

  1. AWSマネジメントコンソールで AWS Glue DataBrew を開く
  2. 左メニューから「データセット」を選択
  3. 「新しいデータセットの接続」をクリック
  4. データセット設定:
    • データセット名: reviews-dataset
    • 「新しいデータセットへの接続」を選択
    • データレイク/データストア: Amazon S3 Buckets
    • S3一覧より自身の作成したバケットより handson_reviews_data.csv を選択

image06

  • 追加したファイルのタイプ: CSV
  • CSV 区切り記号: カンマ(,)
  • 列ヘッダー値: 最初の行をヘッダーとして扱う
  1. 「データセットを作成」をクリック

image07

✅ ステップ4:データプロファイルジョブの実行

  1. 作成したデータセット「reviews-dataset」を選択
  2. 画面上部の「データプロファイルを実行」をクリック
  3. プロファイルジョブの設定:
    • ジョブ名: reviews-profile-job
    • ジョブ実行サンプル: 完全なデータセット
    • ジョブ出力設定:
      • S3の場所: s3://自身の作成したS3バケット名/output/profile/ ※参照を押下して「output」ファイルを選択後、「profile/」を追記
    • 許可: 先ほど作成した GlueDataBrewHandsonRole を選択
  4. 「ジョブを作成し実行する」をクリック
  5. ジョブが完了するまで数分待機(ステータスが「Succeeded」になるまで)

image08

image09

確認ポイント

  • 各カラムの欠損値の割合
  • star_rating カラムの値の分布(1-5以外の値があるか)
  • review_date カラムのフォーマット

image10

✅ ステップ5:プロジェクトの作成とレシピ開発

  1. 左メニューから「プロジェクト」を選択
  2. 「プロジェクトを作成」をクリック
  3. プロジェクト設定:
    • プロジェクト名: reviews-cleaning-project
    • レシピ名: reviews-cleaning-project-recipe
    • データセットを選択 reviews-dataset(作成済みのデータセット)
    • IAM role: GlueDataBrewHandsonRole
  4. 「プロジェクトを作成」をクリック
  5. プロジェクトが開き、インタラクティブなデータ編集画面が表示されます

image11

✅ ステップ6:データクレンジングレシピの作成

以下の順序で変換ステップを追加していきます。各ステップは画面右上の「Recipe」パネルに記録されます。

6-1. 重複行の削除

  1. 画面上部のツールバーから「重複」>「列内の重複した値を削除する」を選択

image12

  1. 画面右側のソース列:「review_id」
    • 変換を適用:すべての行
  2. 「変更のプレビュー」をクリックし、変更内容を確認する
  3. 「適用」をクリック

image13

6-2. 空白のトリミング

  1. product_title カラムをクリック
  2. 「…(3点リーダー)」の列アクションより「クリーン」→「連続する空白」を選択
  3. 削除する値を指定します:「ホワイトスペース」,「先頭と末尾のスペース」
  4. 「変更のプレビュー」をクリックし、変更内容を確認し、「適用」をクリック
  5. 同様に product_category, review_headline, review_body カラムにも適用

※元データのcsvファイルには以下のようにproduct_title ,product_category, review_headline, review_bodyのデータの先頭と末尾に空白が存在しています。

image30

6-3. 評価値の範囲チェックと修正

  1. star_rating カラムの横の「列フィルター」ボタンをクリック

image16

  1. フィルター値を設定する
  • ソース列: star_rating
  • フィルター条件: 「は次の間にある:」
  • 次以上: 1 次よりも小さい: 6
  1. 「レシピに追加」をクリック

image17

  1. 画面右側の「適用」をクリック

image18

6-4. カテゴリの正規化(大文字小文字統一)

  1. product_category カラムをクリック
  2. 「…(3点リーダー)」の列アクションより「フォーマット」→ 「小文字に変更」をクリック

image23

  1. 「変更のプレビュー」をクリックし、変更内容を確認し、「適用」をクリック

image24

✅ ステップ7:レシピの保存

  1. 画面右上の「Recipe」パネルを確認
  2. 「発行」をクリック(ポップアップ上でも「発行」をクリック)
  3. Recipe name: reviews-cleaning-project-recipe
  4. 画面右上の「ジョブを作成」をクリック

✅ ステップ8:ジョブの作成と実行

  1. 左メニューから「ジョブ」を選択
  2. 「ジョブを作成」をクリック
  3. ジョブ設定:
    • ジョブ名: reviews-cleaning-job
    • ジョブタイプ:(下記作成したデータセットとレシピが選択されていることを確認する)
      • 関連付けられたデータセット:reviews-dataset
      • 関連付けられたレシピ: reviews-cleaning-project-recipe

image31

  • 出力:
     - 出力先: AmazonS3
     - S3の場所: s3://自身の作成したS3バケット名/output/cleaned/ ※参照を押下して「output」ファイルを選択後、「cleaned/」を追記
    • ファイルタイプ: CSV
    • 区切り記号: カンマ(,)
    • 圧縮: None
  • アドバンストジョブ設定:
    • ユニットの最大数: 2
    • 許可: GlueDataBrewHandsonRole

image26

  1. 「ジョブを作成し実行する」をクリック
  2. ジョブのステータスを確認(「Succeeded」になるまで数分待機)

✅ ステップ9:結果の確認

  1. S3コンソールを開く
  2. s3://your-bucket-name/output/cleaned/ に移動
  3. 出力されたCSVファイルをダウンロード
  4. ローカルでファイルを開いて確認:
    • 「review_id」カラムの重複が削除されているか
    • 「product_title」,「product_category」,「review_headline」,「review_body」カラムの空白がトリミングされているか
    • 「star_rating」カラムの評価値が1-5の範囲か
    • 「product_category」カラムの正規化ができているか(小文字に統一)
      ※Excelで開いて文字化けしてしまう場合は以下画像の通り「データ」→「テキストまたはCSVから」でインポートすると
       文字化けせず確認できます。

image27

image28

🧹 片付け(リソース削除)

  1. DataBrewジョブの削除

    • 「Jobs」→ 作成したジョブを選択 → 「Delete」
  2. DataBrewプロジェクトの削除

    • 「Projects」→ 作成したプロジェクトを選択 → 「Delete」
  3. DataBrewデータセットの削除

    • 「Datasets」→ 作成したデータセットを選択 → 「Delete」
  4. DataBrewレシピの削除(オプション)

    • 「Recipes」→ 作成したレシピを選択 → 「Delete」
  5. S3バケットの削除

    • S3コンソール → バケットを選択 → 「空にする」→「削除」
    • 注意:バケット内のすべてのオブジェクトを削除してから、バケット自体を削除
  6. IAMロールの削除

    • IAMコンソール → 「ロール」→ GlueDataBrewHandsonRole を削除

🏁 おつかれさまでした!

この課題では AWS Glue DataBrew を使用して、ノーコードでのデータクレンジングと加工スキルを習得しました。DataBrewは以下のような場面で非常に有効です:

  • データアナリストやビジネスユーザーがコードを書かずにデータ準備を実行
  • 機械学習の前処理として、学習用データのクレンジング
  • データパイプラインでの定期的なデータ変換処理
  • データ品質の継続的な監視と改善

🎉 これでDataBrewの基礎は完璧です!実際のプロジェクトでも活用していきましょう!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?