data wranger 官方連結
在機器學習中,資料品質決定了模型的成敗。今天我們來學習如何使用 SageMaker Data Wrangler 進行高效的資料預處理
Garbage In,Garbage Out”。意思是“進來是垃圾,出去也是垃圾”。
信息技術(IT)業界經常使用的這句話意味著“輸入數據不好,輸出數據也會不好”。
即使是利用最尖端的半導體和最高技術制造的AI,只要輸入垃圾,就會產生垃圾。相反,吸收了很多好內容的AI會變得更加強大
(言論來自網路)
Amazon SageMaker Data Wrangler 是一個視覺化的資料準備工具
用途
資料預處理的重要性
缺失值(Missing Values)
感測器故障導致的數據缺失
用戶未填寫的可選欄位
系統錯誤造成的資料遺失
異常值(Outliers)
設備異常產生的極端數值
人為輸入錯誤
測量精度問題
`資料不一致```
不同系統間的格式差異
時間戳記標準不統一
分類標籤不規範
資料分布不平衡
某些類別樣本過少
特徵值範圍差異巨大
時間序列資料的季節性變化
Data wrangler 支援多種資料來源
├── Amazon S3
├── Amazon Athena
├── Amazon Redshift
├── Snowflake
├── Databricks
└── 本地檔案上傳
視覺化分析
資料轉換
(基本)
刪除重複資料
處理缺失值
資料類型轉換
欄位重新命名
(進階)
特徵工程(創建新特徵)
時間序列處理
文字資料處理
編碼轉換(One-hot, Label encoding)
step 1:
[進入 SageMaker Studio -> 選擇 Data Wrangler -> 建立新的 Data Wrangler flow]
cli 操作的話如下
aws sagemaker create-processing-job \
--processing-job-name "customer-data-wrangling" \
--processing-inputs '[{
"InputName": "input-data",
"S3Input": {
"S3Uri": "s3://your-bucket/customer-data.csv",
"LocalPath": "/opt/ml/processing/input",
"S3DataType": "S3Prefix",
"S3InputMode": "File"
}
}]'
step 2:
匯入資料
客戶資料集:50,000 筆記錄,15 個欄位
- customer_id: 客戶ID
- age: 年齡(包含缺失值和異常值)
- gender: 性別(M/F/其他)
- income: 年收入(部分缺失)
- purchase_amount: 購買金額
- last_purchase_date: 最後購買日期
- category_preference: 偏好類別
<發現問題>
年齡欄位有 3% 缺失值和明顯異常值(如 150 歲)
收入資料有 15% 缺失
日期格式不一致
類別標籤有拼寫錯誤
step 3:
資料清理轉換
處理缺失
# Data Wrangler 會自動生成類似的程式碼
def handle_missing_values(df):
# 年齡缺失值用中位數填充
df['age'].fillna(df['age'].median(), inplace=True)
# 收入缺失值用同年齡組平均值填充
df['income'] = df.groupby('age_group')['income'].transform(
lambda x: x.fillna(x.mean())
)
return df
處理異常值
def remove_outliers(df):
# 移除年齡異常值(使用 IQR 方法)
Q1 = df['age'].quantile(0.25)
Q3 = df['age'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['age'] >= lower_bound) & (df['age'] <= upper_bound)]
return df
特徵工程
def create_age_groups(df):
df['age_group'] = pd.cut(df['age'],
bins=[0, 25, 35, 50, 65, 100],
labels=['Young', 'Adult', 'Middle', 'Senior', 'Elder'])
return df
def calculate_purchase_frequency(df):
# 計算每個客戶的購買頻率
df['days_since_last_purchase'] = (
pd.Timestamp.now() - pd.to_datetime(df['last_purchase_date'])
).dt.days
df['purchase_frequency'] = np.where(
df['days_since_last_purchase'] <= 30, 'High',
np.where(df['days_since_last_purchase'] <= 90, 'Medium', 'Low')
)
return df
def create_customer_segments(df):
# RFM 分析簡化版
df['customer_value'] = pd.qcut(df['purchase_amount'],
q=5,
labels=['Bronze', 'Silver', 'Gold', 'Platinum', 'Diamond'])
return df
step 4: 品質驗證
以 python 為例
# 自動檢測可能的目標洩漏
target_leakage_report = data_wrangler.detect_target_leakage(
df=processed_df,
target_column='customer_value'
)
# 快速評估特徵重要性
feature_importance = data_wrangler.analyze_feature_importance(
df=processed_df,
target='customer_value'
)
目前先探討到這 ...