فهرست منبع

优化:修复 Timestamp.utcnow 弃用警告 + CSV 编码统一为 utf-8-sig

leod 4 روز پیش
والد
کامیت
ba090c608f
2فایلهای تغییر یافته به همراه44 افزوده شده و 1 حذف شده
  1. 43 0
      analyze_key_factors.py
  2. 1 1
      defect_analysis/cases.py

+ 43 - 0
analyze_key_factors.py

@@ -0,0 +1,43 @@
+"""查找不良关键因子。"""
+
+import argparse
+
+import pandas as pd
+
+from defect_analysis.ml.key_factors import find_key_factors
+from defect_analysis.schemas import normalize_defect_schema
+
+
+def analyze_csv_key_factors(csv_path, *, target_defect_type=None, target_severity=None, top_n=20):
+    df = pd.read_csv(csv_path, parse_dates=["timestamp"], encoding="utf-8-sig")
+    df = normalize_defect_schema(df)
+    return find_key_factors(
+        df,
+        target_defect_type=target_defect_type,
+        target_severity=target_severity,
+        top_n=top_n,
+    )
+
+
+def main():
+    parser = argparse.ArgumentParser(description="查找不良关键因子")
+    parser.add_argument("--csv", default="defect_data.csv", help="缺陷 CSV 文件路径")
+    parser.add_argument("--target-defect-type", help="目标缺陷类型,例如 气泡/划痕/漏光")
+    parser.add_argument("--target-severity", help="目标严重等级,例如 严重")
+    parser.add_argument("--top-n", type=int, default=20)
+    args = parser.parse_args()
+
+    result = analyze_csv_key_factors(
+        args.csv,
+        target_defect_type=args.target_defect_type,
+        target_severity=args.target_severity,
+        top_n=args.top_n,
+    )
+    if result.empty:
+        print("未找到显著关键因子,请检查目标条件或增加样本量。")
+    else:
+        print(result.to_string(index=False))
+
+
+if __name__ == "__main__":
+    main()

+ 1 - 1
defect_analysis/cases.py

@@ -98,7 +98,7 @@ def update_case_status(db_path, *, case_id, status, actor, note=""):
         current_status = current["status"]
         if status not in VALID_CASE_TRANSITIONS.get(current_status, set()):
             raise ValueError(f"不允许的 Case 状态流转: {current_status} -> {status}")
-        closed_at = pd.Timestamp.utcnow().strftime("%Y-%m-%d %H:%M:%S") if status == "CLOSED" else None
+        closed_at = pd.Timestamp.now('UTC').strftime("%Y-%m-%d %H:%M:%S") if status == "CLOSED" else None
         conn.execute(
             """
             UPDATE root_cause_cases