feat: add run_compare.sh orchestration script for dataset×algo comparison
This commit is contained in:
Executable
+88
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
# run_compare.sh — 对所有内置数据集 × 6 算法跑对比可视化
|
||||
#
|
||||
# 用法:
|
||||
# bash scripts/run_compare.sh [数据集目录] [输出目录]
|
||||
#
|
||||
# 默认:
|
||||
# 数据集目录: ../../datasets/builtin
|
||||
# 输出目录: render_compare
|
||||
#
|
||||
# 管道: inject → detect-batch → render-algo → montage
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
BUILTIN_DIR="${1:-../../datasets/builtin}"
|
||||
OUTPUT="${2:-render_compare}"
|
||||
ALGOS="ksigma iqr grubbs shesd lof sample_ad_model"
|
||||
URL="${TS_ANA_TD_URL:-ws://root:taosdata@localhost:6041}"
|
||||
|
||||
# 多列数据集映射: dataset_name → value_col
|
||||
# 未在此映射中的数据集默认使用 "value" 列
|
||||
declare -A VALUE_COLS=(
|
||||
["ecg_002"]="ECG1"
|
||||
["sensor_007"]="ankle_horiz_fwd"
|
||||
)
|
||||
|
||||
mkdir -p "$OUTPUT/det" "$OUTPUT/algo"
|
||||
|
||||
total=0
|
||||
ok=0
|
||||
skip=0
|
||||
|
||||
for dataset_dir in "$BUILTIN_DIR"/*/; do
|
||||
name=$(basename "$dataset_dir")
|
||||
csv="$dataset_dir/data.csv"
|
||||
[[ -f "$csv" ]] || { echo "SKIP $name: no data.csv"; ((skip++)); ((total++)); continue; }
|
||||
|
||||
# 确定 value 列
|
||||
value_col="${VALUE_COLS[$name]:-value}"
|
||||
|
||||
echo "=== $name (value_col=$value_col) ==="
|
||||
|
||||
# 1. 注入
|
||||
echo " [1/3] inject..."
|
||||
uv run python -m ts_anomaly_td inject \
|
||||
--csv "$csv" --stable "$name" --value-col "$value_col" --url "$URL" \
|
||||
|| { echo " inject FAILED, skipping $name"; ((total++)); continue; }
|
||||
|
||||
# 2. 逐算法检测 + 渲染
|
||||
panels=()
|
||||
for algo in $ALGOS; do
|
||||
det_json="$OUTPUT/det/${name}_${algo}.json"
|
||||
algo_png="$OUTPUT/algo/${name}_${algo}.png"
|
||||
|
||||
echo " [2/3] detect $algo..."
|
||||
uv run python -m ts_anomaly_td detect-batch \
|
||||
--stable "$name" --algo "$algo" --json --url "$URL" \
|
||||
> "$det_json" 2>/dev/null || true
|
||||
|
||||
echo " [2/3] render $algo..."
|
||||
uv run python -m ts_anomaly_td render-algo \
|
||||
--gt-csv "$csv" --det-json "$det_json" --algo "$algo" \
|
||||
--output "$algo_png" --value-col "$value_col" \
|
||||
--title "$name / $algo" \
|
||||
|| { echo " render $algo FAILED"; continue; }
|
||||
|
||||
panels+=("$algo_png")
|
||||
done
|
||||
|
||||
# 3. 拼图
|
||||
if [[ ${#panels[@]} -gt 0 ]]; then
|
||||
echo " [3/3] montage (${#panels[@]} panels)..."
|
||||
uv run python -m ts_anomaly_td montage \
|
||||
--inputs "${panels[@]}" \
|
||||
--output "$OUTPUT/${name}_compare.png" \
|
||||
--cols 2 \
|
||||
--title "$name — 算法对比"
|
||||
echo " → $OUTPUT/${name}_compare.png"
|
||||
((ok++))
|
||||
else
|
||||
echo " no panels, skip montage for $name"
|
||||
fi
|
||||
((total++))
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== 完成: $ok/$total 成功, $skip 跳过 ==="
|
||||
ls -la "$OUTPUT"/*_compare.png 2>/dev/null || echo "(无拼图输出)"
|
||||
Reference in New Issue
Block a user