AgentSkillsCN

mcp-data-cleaning

数据清洗与预处理流程,涵盖缺失值处理、分类变量编码、行过滤、列移除,以及多重共线性(VIF)检测。当您准备进行数据分析、清理杂乱的数据集,或对变量进行转换时,可使用此技能。触发条件:数据清理、data cleaning、缺失值、处理数据、preprocess、missing values、遗漏值、编码、encoding、VIF、多重共线性、共线性、filter、过滤、rename columns。

SKILL.md
--- frontmatter
name: mcp-data-cleaning
description: Data cleaning and preprocessing workflow including handling missing values, encoding categorical variables, filtering rows, removing columns, and checking multicollinearity (VIF). Use when preparing data for analysis, cleaning messy datasets, or transforming variables. Triggers: 資料清理, data cleaning, 缺失值, 處理資料, preprocess, missing values, 遺漏值, encoding, 編碼, VIF, multicollinearity, 共線性, filter, 過濾, rename columns.

Data Cleaning Workflow 技能 (資料清理流程)

描述

使用 MCP 工具進行資料清理和前處理的標準流程。

觸發條件

  • 「清理資料」「data cleaning」
  • 「處理缺失值」「處理資料」
  • 「前處理」「preprocess」

🎯 資料清理流程

code
┌─────────────────────────────────────────────────────────────────────┐
│                    Data Cleaning Workflow                            │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│   [1] 診斷問題        →  get_column_info / analyze_missing_values   │
│         ↓                                                           │
│   [2] 處理缺失值      →  handle_missing_values                       │
│         ↓                                                           │
│   [3] 欄位操作        →  remove_columns / rename_columns            │
│         ↓                                                           │
│   [4] 資料轉換        →  convert_to_binary / encode_categorical     │
│         ↓                                                           │
│   [5] 篩選資料        →  filter_rows                                │
│         ↓                                                           │
│   [6] 驗證結果        →  direct_preview_data / get_quick_stats      │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

📋 Step 1: 診斷資料問題

1.1 取得欄位資訊

python
mcp_automl_get_column_info(
    csv_path="/data/sample_data/titanic.csv"
)

輸出包含:

  • 欄位名稱
  • 資料類型
  • 非空值數量
  • 缺失值比例

1.2 分析缺失值

python
mcp_automl_analyze_missing_values(
    csv_path="/data/sample_data/titanic.csv"
)

輸出包含:

  • 各欄位缺失值數量和比例
  • 缺失模式分析
  • 處理建議

1.3 預覽資料

python
mcp_automl_direct_preview_data(
    csv_path="/data/sample_data/titanic.csv",
    n_rows=20
)

📋 Step 2: 處理缺失值

2.1 缺失值處理策略

python
mcp_automl_handle_missing_values(
    csv_path="/data/sample_data/titanic.csv",
    strategy="mean",          # 處理策略
    columns=["age"],          # 指定欄位(可選)
    output_path="/data/projects/my_project/titanic_cleaned.csv"
)

可用策略:

策略說明適用場景
mean平均值填補數值欄位,常態分佈
median中位數填補數值欄位,有極端值
mode眾數填補類別欄位
constant固定值填補有意義的預設值
drop刪除含缺失值的列缺失比例低

2.2 不同欄位不同策略

python
# 數值欄位用中位數
mcp_automl_handle_missing_values(
    csv_path="/data/sample_data/titanic.csv",
    strategy="median",
    columns=["age", "fare"],
    output_path="/data/projects/step1.csv"
)

# 類別欄位用眾數
mcp_automl_handle_missing_values(
    csv_path="/data/projects/step1.csv",
    strategy="mode",
    columns=["embarked"],
    output_path="/data/projects/step2.csv"
)

📋 Step 3: 欄位操作

3.1 移除欄位

python
mcp_automl_remove_columns(
    csv_path="/data/sample_data/titanic.csv",
    columns=["cabin", "ticket", "name"],  # 移除無用欄位
    output_path="/data/projects/titanic_reduced.csv"
)

3.2 重新命名欄位

python
mcp_automl_rename_columns(
    csv_path="/data/sample_data/my_data.csv",
    mapping={
        "old_name1": "new_name1",
        "old_name2": "new_name2",
        "性別": "gender",
        "年齡": "age"
    },
    output_path="/data/projects/data_renamed.csv"
)

📋 Step 4: 資料轉換

4.1 轉換為二元變數

python
mcp_automl_convert_to_binary(
    csv_path="/data/sample_data/titanic.csv",
    column="sex",
    mapping={
        "male": 0,
        "female": 1
    },
    output_path="/data/projects/titanic_binary.csv"
)

4.2 類別變數編碼

python
mcp_automl_encode_categorical(
    csv_path="/data/sample_data/titanic.csv",
    columns=["embarked", "pclass"],
    method="onehot",      # onehot, label, target
    output_path="/data/projects/titanic_encoded.csv"
)

編碼方法:

方法說明適用場景
onehot獨熱編碼無序類別
label標籤編碼有序類別或樹模型
target目標編碼高基數類別

📋 Step 5: 篩選資料

5.1 條件篩選

python
mcp_automl_filter_rows(
    csv_path="/data/sample_data/titanic.csv",
    condition="age >= 18",     # Python 表達式
    output_path="/data/projects/titanic_adults.csv"
)

5.2 複合條件

python
mcp_automl_filter_rows(
    csv_path="/data/sample_data/titanic.csv",
    condition="(age >= 18) & (pclass == 1)",
    output_path="/data/projects/titanic_adult_first.csv"
)

5.3 常用篩選條件

python
# 移除極端值
condition="(age > 0) & (age < 100)"

# 保留非空值
condition="age.notna()"

# 特定類別
condition="embarked == 'S'"

# 數值範圍
condition="(fare >= 10) & (fare <= 500)"

📋 Step 6: 驗證結果

6.1 預覽清理後的資料

python
mcp_automl_direct_preview_data(
    csv_path="/data/projects/titanic_cleaned.csv",
    n_rows=10
)

6.2 檢查統計摘要

python
mcp_automl_get_quick_stats(
    csv_path="/data/projects/titanic_cleaned.csv"
)

6.3 再次檢查缺失值

python
mcp_automl_analyze_missing_values(
    csv_path="/data/projects/titanic_cleaned.csv"
)

🎯 完整範例

範例:Titanic 資料清理

code
User: "清理 titanic.csv 準備做 ML"

Agent 執行:

1. 診斷資料
   mcp_automl_get_column_info(csv_path="/data/sample_data/titanic.csv")
   
   發現問題:
   - age: 177 個缺失值
   - cabin: 687 個缺失值(太多,移除)
   - embarked: 2 個缺失值

2. 移除無用欄位
   mcp_automl_remove_columns(
       csv_path="/data/sample_data/titanic.csv",
       columns=["cabin", "ticket", "name", "passengerid"],
       output_path="/data/projects/titanic/step1.csv"
   )

3. 處理 age 缺失值(用中位數)
   mcp_automl_handle_missing_values(
       csv_path="/data/projects/titanic/step1.csv",
       strategy="median",
       columns=["age"],
       output_path="/data/projects/titanic/step2.csv"
   )

4. 處理 embarked 缺失值(用眾數)
   mcp_automl_handle_missing_values(
       csv_path="/data/projects/titanic/step2.csv",
       strategy="mode",
       columns=["embarked"],
       output_path="/data/projects/titanic/step3.csv"
   )

5. 轉換 sex 為二元
   mcp_automl_convert_to_binary(
       csv_path="/data/projects/titanic/step3.csv",
       column="sex",
       mapping={"male": 0, "female": 1},
       output_path="/data/projects/titanic/step4.csv"
   )

6. 編碼類別變數
   mcp_automl_encode_categorical(
       csv_path="/data/projects/titanic/step4.csv",
       columns=["embarked"],
       method="onehot",
       output_path="/data/projects/titanic/titanic_cleaned.csv"
   )

7. 驗證
   mcp_automl_get_quick_stats(
       csv_path="/data/projects/titanic/titanic_cleaned.csv"
   )

回報使用者:
"✅ 資料清理完成!

清理步驟:
1. 移除欄位:cabin, ticket, name, passengerid
2. age 缺失值:用中位數 (28) 填補
3. embarked 缺失值:用眾數 (S) 填補
4. sex:轉換為 0/1
5. embarked:獨熱編碼

清理後資料:
- 路徑:/data/projects/titanic/titanic_cleaned.csv
- 筆數:891
- 欄位:10
- 缺失值:0

可以開始訓練模型了!"

📁 輸出路徑規則

建議的目錄結構

code
/data/projects/{project_name}/
├── data/
│   ├── raw/              # 原始資料
│   ├── interim/          # 中間處理結果
│   └── processed/        # 最終清理資料
├── models/               # 訓練的模型
└── reports/              # 分析報告

命名建議

code
原始:   {dataset}.csv
清理後: {dataset}_cleaned.csv
編碼後: {dataset}_encoded.csv
最終:   {dataset}_final.csv

⚠️ 常見錯誤

1. 輸出路徑不存在

python
# ❌ 錯誤:目錄不存在
output_path="/data/projects/new_folder/file.csv"

# ✅ 正確:確保目錄存在,或用已存在的目錄
output_path="/data/projects/titanic_cleaned.csv"

2. 欄位名稱錯誤

python
# 先確認欄位名稱
mcp_automl_get_column_info(...)
# 使用正確的大小寫

3. 策略不適用

python
# ❌ 錯誤:對類別欄位用 mean
strategy="mean", columns=["sex"]

# ✅ 正確:類別用 mode
strategy="mode", columns=["sex"]

💡 最佳實踐

1. 保留原始資料

  • 永遠不要覆蓋原始檔案
  • 每一步輸出到不同檔案

2. 先診斷再處理

  • 先了解資料問題
  • 再決定處理策略

3. 逐步驗證

  • 每一步後檢查結果
  • 確認處理正確再繼續

4. 記錄清理步驟

  • 記錄每個處理步驟
  • 方便重現和回溯