Reporter
Reporter(method, **kwargs)
用於產生實驗結果檔案與評估報告。
參數
method
(str):報告產生方式- ‘save_data’:將資料集儲存為 CSV
- 需要額外參數:
source
(str | List[str]):目標模組或實驗名稱
- 需要額外參數:
- ‘save_report’:產生評估報告
- 需要額外參數:
granularity
(str | List[str]):報告詳細度- 單一粒度:‘global’、‘columnwise’、‘pairwise’、‘details’、’tree’
- 多重粒度:[‘global’, ‘columnwise’] 或 [‘details’, ’tree’]
eval
(str | List[str], optional):目標評估實驗名稱
- 需要額外參數:
- ‘save_timing’:儲存時間資訊
- 可選額外參數:
time_unit
(str):時間單位(‘seconds’、‘minutes’、‘hours’、‘days’)module
(str | List[str]):依特定模組過濾
- 可選額外參數:
- ‘save_data’:將資料集儲存為 CSV
output
(str, optional):輸出檔案名稱前綴- 預設值:‘petsard’
naming_strategy
(str, optional):檔名命名策略- ’traditional’:使用傳統命名格式(預設)
- ‘compact’:使用簡化命名格式
範例
from petsard.reporter import Reporter
# 儲存合成資料
reporter = Reporter('save_data', source='Synthesizer')
reporter.create({('Synthesizer', 'exp1'): synthetic_df})
reporter.report() # 產生:petsard_Synthesizer[exp1].csv
# 產生評估報告(單一粒度)
reporter = Reporter('save_report', granularity='global')
reporter.create({('Evaluator', 'eval1_[global]'): results})
reporter.report() # 產生:petsard[Report]_[global].csv
# 產生評估報告(多重粒度)
reporter = Reporter('save_report', granularity=['global', 'columnwise'])
reporter.create({
('Evaluator', 'eval1_[global]'): global_results,
('Evaluator', 'eval1_[columnwise]'): columnwise_results
})
reporter.report() # 為每個粒度產生個別報告
# 使用新粒度類型產生評估報告
reporter = Reporter('save_report', granularity=['details', 'tree'])
reporter.create({
('Evaluator', 'eval1_[details]'): details_results,
('Evaluator', 'eval1_[tree]'): tree_results
})
reporter.report() # 產生詳細和樹狀結構報告
# 使用簡化命名策略
reporter = Reporter('save_report', granularity='global', naming_strategy='compact')
reporter.create({('Evaluator', 'eval1_[global]'): results})
reporter.report() # 產生:petsard_eval1_global.csv
# 儲存時間資訊
reporter = Reporter('save_timing', time_unit='minutes', module=['Loader', 'Synthesizer'])
reporter.create({'timing_data': timing_df})
reporter.report() # 產生:petsard_timing_report.csv
方法
create(data)
使用函式化設計模式初始化報告資料。
參數
data
(dict):報告資料,其中:- 鍵:實驗元組 (模組名稱, 實驗名稱, …)
- 值:要報告的資料 (pd.DataFrame)
- 可選用 ’exist_report’ 鍵來合併先前結果
- save_timing 模式:使用 ’timing_data’ 鍵搭配時間 DataFrame
回傳值
dict | pd.DataFrame | None
:準備用於報告的處理後資料- save_data 模式:處理後的 DataFrame 字典
- save_report 模式:包含粒度特定結果的字典
- save_timing 模式:包含時間資訊的 DataFrame
- 無資料處理時回傳 None
report(processed_data)
使用函式化設計模式產生並儲存 CSV 格式報告。
參數
processed_data
:來自create()
方法的輸出
輸出檔名格式:
根據 naming_strategy
參數:
Traditional 策略(預設):
- save_data 模式:
{output}_{module-expt_name-pairs}.csv
- save_report 模式:
{output}[Report]_{eval}_[{granularity}].csv
- save_timing 模式:
{output}_timing_report.csv
Compact 策略:
- save_data 模式:
{output}_{module}_{experiment}.csv
- save_report 模式:
{output}_{experiment}_{granularity}.csv
- save_timing 模式:
{output}_timing_report.csv
粒度類型
傳統粒度
global
:整體摘要統計columnwise
:逐欄分析pairwise
:欄位間成對關係
擴展粒度類型
details
:詳細分解與額外指標tree
:階層樹狀結構分析
多粒度支援
Reporter 現在支援在單一操作中處理多個粒度:
# 同時處理多個粒度
reporter = Reporter('save_report', granularity=['global', 'columnwise', 'details'])
result = reporter.create(evaluation_data)
reporter.report(result) # 為每個粒度產生個別報告
函式化設計
Reporter 使用函式化的「拋出再拋回」設計模式:
create()
處理資料但不將其儲存在實例變數中report()
接收處理後的資料並產生輸出檔案- 不維護內部狀態,減少記憶體使用量
版本相容性
預計在 v2.0 移除的功能
以下功能已標記為 deprecated,將在 v2.0 版本中移除:
ReporterMap
類別:請改用ReporterMethod
enum- Tuple-based 實驗命名系統:將被
ExperimentConfig
系統取代
建議使用者開始遷移至新的 API 以確保未來相容性。
命名策略
Reporter 支援兩種檔名命名策略:
Traditional 策略(預設)
使用原有的命名格式,保持向後相容性:
- 包含完整的模組和實驗資訊
- 使用方括號標記特殊資訊
- 適合需要詳細檔名資訊的場景
Compact 策略
使用簡化的命名格式:
- 移除冗餘的標記符號
- 使用底線分隔各部分
- 產生更簡潔易讀的檔名
# Traditional 策略範例
reporter = Reporter('save_report', granularity='global', naming_strategy='traditional')
# 輸出:petsard[Report]_eval1_[global].csv
# Compact 策略範例
reporter = Reporter('save_report', granularity='global', naming_strategy='compact')
# 輸出:petsard_eval1_global.csv