Processor

Processor(
    metadata,
    config=None
)

建立資料處理器,管理資料的前處理與後處理流程。

參數

  • metadata (Metadata): 資料架構物件,提供資料欄位的詮釋資料和型別資訊
    • 必填
  • config (dict, optional): 自訂資料處理設定
    • 預設值:無
    • 用於覆寫預設的處理程序
    • 結構為 {處理類型: {欄位名稱: 處理方式}}

範例

from petsard import Processor


# 基本用法
proc = Processor(metadata=split.metadata)

# 使用自定義設定
custom_config = {
    'missing': {'age': 'missing_mean'},
    'outlier': {'income': 'outlier_iqr'}
}
proc = Processor(metadata=split.metadata, config=custom_config)

# 資料前處理
proc.fit(data=load.data)
transformed_data = proc.transform(data=load.data)

# 還原到原始型態
proc.fit(data=load.data)
transformed_data = proc.transform(data=load.data)

方法

get_config()

proc.get_config(
    col=None,
    print_config=False
)

參數

  • col (list, optional):要取得設定的欄位名稱
    • 預設值:無,表示取得所有欄位
  • print_config (bool, optional):是否列印設定
    • 預設值:False

回傳值

  • (dict): 包含處理程序設定的字典

update_config()

proc.update_config(config)

更新處理器的設定。

參數

  • config (dict):新的處理程序設定

回傳值

get_changes()

比較當前設定與預設設定的差異。

參數

回傳值

  • (pandas.DataFrame):記錄設定差異的資料表

fit()

proc.fit(
    data,
    sequence=None
)

學習資料結構並準備轉換流程。

參數

  • data (pandas.DataFrame):用於學習的資料集
  • sequence (list, optional):自訂處理流程順序
    • 預設值:無
    • 可用值:‘missing’, ‘outlier’, ’encoder’, ‘scaler’, ‘discretizing’

回傳值

transform()

proc.transform(data)

執行資料前處理轉換。

參數

  • data (pandas.DataFrame):待轉換的資料集

回傳值

  • (pandas.DataFrame): 轉換後的資料

inverse_transform()

proc.inverse_transform(data)

執行資料後處理還原轉換。

參數

  • data (pandas.DataFrame):待還原轉換的資料集

回傳值

  • (pandas.DataFrame): 還原轉換後的資料

附錄:支援處理方式

預設處理方式

此映射定義了不同資料型別的預設處理方法。數值型別採用平均值填補、四分位距異常值處理、標準化縮放和K-bins離散化;類別型別則使用丟棄遺失值、均勻編碼和標籤編碼。

PROCESSOR_MAP: dict[str, dict[str, str]] = {
    "missing": {
        "numerical": MissingMean,
        "categorical": MissingDrop,
        "datetime": MissingDrop,
        "object": MissingDrop,
    },
    "outlier": {
        "numerical": OutlierIQR,
        "categorical": lambda: None,
        "datetime": OutlierIQR,
        "object": lambda: None,
    },
    "encoder": {
        "numerical": lambda: None,
        "categorical": EncoderUniform,
        "datetime": lambda: None,
        "object": EncoderUniform,
    },
    "scaler": {
        "numerical": ScalerStandard,
        "categorical": lambda: None,
        "datetime": ScalerStandard,
        "object": lambda: None,
    },
    "discretizing": {
        "numerical": DiscretizingKBins,
        "categorical": EncoderLabel,
        "datetime": DiscretizingKBins,
        "object": EncoderLabel,
    },
}

Config 設定

config 是一個巢狀字典,用於自訂各欄位的處理程序。

格式

config = {
    處理類型: {
        欄位名稱: 處理程序
    }
}

範例

這個設定檔為不同欄位客製化資料處理方法。年齡欄位使用平均值填補遺失值、Z-score處理異常值、最小-最大縮放和K-bins離散化;性別欄位採用One-Hot編碼;收入欄位使用四分位距處理異常值;工資欄位則使用標準化縮放。

config = {
    'missing': {
        'age': 'missing_mean',
        'salary': 'missing_median'
    },
    'outlier': {
        'income': 'outlier_iqr',
        'age': 'outlier_zscore'
    },
    'encoder': {
        'gender': 'encoder_onehot',
        'city': 'encoder_label'
    },
    'scaler': {
        'salary': 'scaler_standard',
        'age': 'scaler_minmax'
    },
    'discretizing': {
        'age': 'discretizing_kbins'
    }
}

遺失值

MissingMean

將缺失值用該欄的平均值填入。

MissingMedian

將缺失值用該欄的中位數填入。

MissingMode

將缺失值用該欄的眾數填入。如果有多個眾數會隨機填入。

MissingSimple

將缺失值用指定的值填入。

參數

  • value (float, default=0.0):要填入的自訂值。

MissingDrop

捨棄任何含有缺失值的列。

離群值

OutlierZScore

此方法將 z 分數的絕對值大於 3 的資料歸類為異常值。

OutlierIQR

在此方法中,超過 1.5 倍四分位距(IQR)範圍的資料會被視為異常值。

OutlierIsolationForest

此方法使用 sklearnLocalOutlierFactor 進行異常值識別。這是一種全域轉換,意即只要設定檔中有任何欄位使用此方法作為異常值處理器,它將覆寫整個設定檔並將此方法應用於所有欄位。

OutlierLOF

此方法使用 sklearnLocalOutlierFactor 進行異常值識別。這是一種全域轉換,意即只要設定檔中有任何欄位使用此方法作為異常值處理器,它將覆寫整個設定檔並將此方法應用於所有欄位。

編碼

EncoderUniform

將每個類別映射到均勻分布的特定範圍,範圍大小由資料中類別的出現頻率決定。

EncoderLabel

將類別變數對應到一系列的整數 (1, 2, 3,…) 藉此達到轉換為連續型資料的目的。

EncoderOneHot

將類別變數對應到一系列的獨熱編碼 (One-hot) 數值資料。

EncoderDate

將不標準的日期時間資料轉換為日期格式,支援各種日期格式,包含民國年等自訂曆法。

參數

  • input_format (str, optional):日期解析格式字串
    • 預設值:無(使用模糊解析)
    • 範例:"%Y-%m-%d" 或 “%MinguoY-%m-%d”
  • date_type (str, default=“datetime”):轉換後的日期型別
    • “date”:僅日期(無時間)
    • “datetime”:日期和時間
    • “datetime_tz”:含時區的日期和時間
  • tz (str, optional):輸出日期的時區
    • 預設值:無
    • 範例:“Asia/Taipei”
  • numeric_convert (bool, default=False):是否嘗試轉換數值型時間戳
  • invalid_handling (str, default=“error”):無效日期的處理方式
    • “error”:拋出錯誤
    • “erase”:替換為空值
    • “replace”:使用替換規則
  • invalid_rules (list[dict[str, str]], optional):無效日期的替換規則
    • 預設值:無

範例

# 基本使用方式
config = {
    'encoder': {
        'created_at': 'encoder_date'
    }
}

# 使用民國年格式
config = {
    'encoder': {
        'doc_date': {
            'method': 'encoder_date',
            'input_format': '%MinguoY-%m-%d'
        }
    }
}

# 使用時區和無效日期處理
config = {
    'encoder': {
        'event_time': {
            'method': 'encoder_date',
            'date_type': 'datetime_tz',
            'tz': 'Asia/Taipei',
            'invalid_handling': 'erase'
        }
    }
}

尺度

ScalerStandard

利用 sklearn 中的 StandardScaler,將資料轉換為平均值為 0、標準差為 1 的樣態。

ScalerZeroCenter

利用 sklearn 中的 StandardScaler,將資料轉換為平均值為 0 的樣態。

ScalerMinMax

利用 sklearn 中的 MinMaxScaler,將資料轉換至 [0, 1] 的範圍。

ScalerLog

此方法僅能在資料為正的情形可用,可用於減緩極端值對整體資料的影響。

ScalerTimeAnchor

此方法透過計算與參考時間序列的時間差來縮放日期時間資料。提供兩種縮放模式:

參數

  • reference (str):用於計算時間差的參考欄位名稱。必須是日期時間型態的欄位。
  • unit (str, default=‘D’):時間差計算的單位。
    • ‘D’:天(預設)
    • ‘S’:秒

範例

scaler:
    create_time:
      method: 'scaler_timeanchor'
      reference: 'event_time'
      unit: 'D'

離散化

DiscretizingKBins

將連續資料切分為 k 個類別(k 個區間)。

參數

  • n_bins (int, default=5):k 值,即為類別數。