You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
16 lines
1.4 KiB
16 lines
1.4 KiB
"""Inventory final tables, plots, and slide-ready notes."""
|
|
from __future__ import annotations
|
|
import csv
|
|
from dataclasses import asdict
|
|
from pathlib import Path
|
|
from .models import FinalExperimentReport,PresentationAsset
|
|
class PresentationAssetsBuilder:
|
|
def build(self,report:FinalExperimentReport,analysis:Path)->list[PresentationAsset]:
|
|
assets=[PresentationAsset("table_summary","table","条件別主要結果","final_experiment_report_summary.csv","有効人数、反応率、反応時間、Yaw","結果")]
|
|
for i,p in enumerate(sorted((analysis/"plots").glob("*.png")),1):assets.append(PresentationAsset(f"figure_{i}","figure",p.stem,str(p),"Phase 8生成図","結果"))
|
|
return assets
|
|
def export(self,assets:list[PresentationAsset],md:Path,csv_path:Path)->list[Path]:
|
|
md.parent.mkdir(parents=True,exist_ok=True);md.write_text("# 発表用成果物\n\n## スライド構成\n研究目的 → システム → 条件 → 結果 → 除外・品質 → 制約 → 今後\n\n"+"\n".join(f"- {a.asset_type}: [{a.title}]({a.file_path}) — {a.description}" for a in assets)+"\n\n統計的有意差は因果関係を直接証明しない。\n",encoding="utf-8")
|
|
fields=["asset_id","asset_type","title","file_path","description","suggested_slide"]
|
|
with csv_path.open("w",encoding="utf-8-sig",newline="") as f:w=csv.DictWriter(f,fieldnames=fields);w.writeheader();w.writerows(asdict(a) for a in assets)
|
|
return [md,csv_path]
|
|
|