{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Academic-Data-Agent\n",
        "\n",
        "## 项目简介\n",
        "\n",
        "这是一个面向 Hello-Agents 社区展示的精简演示 Notebook，用来快速说明 Academic-Data-Agent 如何处理两类输入：\n",
        "\n",
        "- 结构化表格数据\n",
        "- 文本型 PDF 文献\n",
        "\n",
        "Notebook 默认使用轻量模式，便于社区评审快速复现。\n",
        "\n",
        "## 作者信息\n",
        "\n",
        "- GitHub: @healer-666\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 环境配置\n",
        "\n",
        "首次运行前，请先在项目目录执行：\n",
        "\n",
        "```bash\n",
        "pip install -r requirements.txt\n",
        "```\n",
        "\n",
        "并根据 `.env.example` 创建 `.env`，填写可用的模型配置。\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {},
      "outputs": [],
      "source": [
        "from __future__ import annotations\n",
        "\n",
        "from pathlib import Path\n",
        "import sys\n",
        "\n",
        "from IPython.display import Markdown, display\n",
        "\n",
        "PROJECT_ROOT = Path.cwd()\n",
        "SRC_PATH = PROJECT_ROOT / \"src\"\n",
        "OUTPUT_ROOT = PROJECT_ROOT / \"outputs\"\n",
        "OUTPUT_ROOT.mkdir(exist_ok=True)\n",
        "\n",
        "if str(SRC_PATH) not in sys.path:\n",
        "    sys.path.insert(0, str(SRC_PATH))\n",
        "\n",
        "from data_analysis_agent.agent_runner import run_analysis\n",
        "from data_analysis_agent.presentation import render_trace_table, render_full_report, render_diagnostics\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {},
      "outputs": [],
      "source": [
        "def render_run_summary(result, title: str):\n",
        "    methods = \", \".join(result.methods_used) if result.methods_used else \"unknown\"\n",
        "    tools = \", \".join(result.tools_used) if result.tools_used else \"unknown\"\n",
        "    summary_md = f\"\"\"\n",
        "## {title}\n",
        "\n",
        "- 输入类型: `{result.input_kind}`\n",
        "- 数据路径: `{result.data_context.absolute_path.as_posix()}`\n",
        "- 数据规模: `{result.data_context.shape[0]} x {result.data_context.shape[1]}`\n",
        "- 识别领域: `{result.detected_domain}`\n",
        "- 使用工具: `{tools}`\n",
        "- 分析方法: `{methods}`\n",
        "- 文档解析状态: `{result.document_ingestion_status}`\n",
        "- 候选表数量: `{result.candidate_table_count}`\n",
        "- 选中主表: `{result.selected_table_id or 'not_applicable'}`\n",
        "- PDF 多表综合: `{result.pdf_multi_table_mode}`\n",
        "- 报告路径: `{result.report_path.as_posix()}`\n",
        "- Trace 路径: `{result.trace_path.as_posix()}`\n",
        "- 审稿状态: `{result.review_status}`\n",
        "- 总耗时: `{result.total_duration_ms / 1000:.2f}s`\n",
        "\"\"\"\n",
        "    display(Markdown(summary_md))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 示例 1：表格数据分析\n",
        "\n",
        "这里使用一个轻量的 Excel 样例，演示标准表格分析路径。社区版默认使用 `draft + auto`，尽量减少等待时间。\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[1/7] Loading runtime configuration...\n",
            "      Model: deepseek-chat | Tavily credential: detected\n",
            "      Latency mode: auto\n",
            "      Vision review: configured\n",
            "[2/7] Created production run directory...\n",
            "      Run root: c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130434\n",
            "[3/7] Running input document ingestion...\n",
            "      Input kind: tabular\n",
            "      Document ingestion skipped: input is already tabular.\n",
            "[4/7] Building compact dataset metadata context...\n",
            "      Data shape: 1070 rows x 31 columns\n",
            "[5/7] Tool registry ready: PythonInterpreterTool, TavilySearchTool\n",
            "      Fast path: True | effective max steps: 3\n",
            "[6/7] Advanced Data Analyst started reasoning (max steps = 3)\n",
            "      Analysis round: 1\n",
            "      Step 1/3: thinking...\n",
            "      Calling PythonInterpreterTool | Stage 1: Load the raw Excel file, inspect data quality, clean missing values and column names, and save cleaned dataset.\n",
            "      Completed PythonInterpreterTool | status = success\n",
            "        Observation: Loading raw Excel file... Raw shape: (1070, 31) Raw columns: ['序号', '孕妇代码', '年龄', '身高', '体重', '末次月经', 'IVF妊娠', '检测日期', '检测抽血次数', '检测孕周', '孕妇BMI', '原始读段数', '在参考基因组上比对的比例', '重复读段的比例', '唯一比对的读段数 ', 'GC含量', '13号染色体的Z值', '18号\n",
            "      Step 2/3: thinking...\n",
            "      Calling PythonInterpreterTool | Stage 2: Load cleaned data, perform statistical analysis, generate visualizations, and save figures.\n"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "WARNING:matplotlib.legend:No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "      Completed PythonInterpreterTool | status = success\n",
            "        Observation: Loaded cleaned data shape: (1070, 31) Columns: ['序号', '孕妇代码', '年龄', '身高', '体重', '末次月经', 'IVF妊娠', '检测日期', '检测抽血次数', '检测孕周', '孕妇BMI', '原始读段数', '在参考基因组上比对的比例', '重复读段的比例', '唯一比对的读段数', 'GC含量', '13号染色体的Z值', '18号染色体的Z值', '21号染色\n",
            "      Step 3/3: thinking...\n",
            "      Final report generated successfully.\n",
            "[7/7] Saving Markdown report and run trace...\n",
            "      Final report: c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130434/final_report.md\n",
            "      Agent trace: c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130434/logs/agent_trace.json\n",
            "[8/8] Production artifact validation passed.\n"
          ]
        },
        {
          "data": {
            "text/markdown": [
              "\n",
              "## 表格案例运行摘要\n",
              "\n",
              "- 输入类型: `tabular`\n",
              "- 数据路径: `C:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/data/sample_table.xlsx`\n",
              "- 数据规模: `1070 x 31`\n",
              "- 识别领域: `生物医学/无创产前检测（NIPT）`\n",
              "- 使用工具: `PythonInterpreterTool`\n",
              "- 分析方法: `数据清洗（缺失值处理、类型转换）, 描述性统计, Shapiro-Wilk正态性检验, Mann-Whitney U检验, 效应量计算（秩二列相关系数）, Bootstrap置信区间估计, Pearson相关性分析, 箱线图, 热力图, 分布直方图`\n",
              "- 文档解析状态: `not_needed`\n",
              "- 候选表数量: `0`\n",
              "- 选中主表: `not_applicable`\n",
              "- PDF 多表综合: `False`\n",
              "- 报告路径: `c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130434/final_report.md`\n",
              "- Trace 路径: `c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130434/logs/agent_trace.json`\n",
              "- 审稿状态: `skipped`\n",
              "- 总耗时: `110.79s`\n"
            ],
            "text/plain": [
              "<IPython.core.display.Markdown object>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "tabular_result = run_analysis(\n",
        "    data_path=PROJECT_ROOT / \"data\" / \"sample_table.xlsx\",\n",
        "    output_dir=OUTPUT_ROOT,\n",
        "    quality_mode=\"draft\",\n",
        "    latency_mode=\"auto\",\n",
        "    verbose=True,\n",
        ")\n",
        "render_run_summary(tabular_result, \"表格案例运行摘要\")\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "\n",
              "    <h2>Agent 推理轨迹表</h2>\n",
              "    <table style=\"width:100%; border-collapse:collapse; font-size:14px;\">\n",
              "      <thead>\n",
              "        <tr style=\"background:#f3f4f6;\">\n",
              "          <th style=\"border:1px solid #d1d5db; padding:8px;\">Step</th>\n",
              "          <th style=\"border:1px solid #d1d5db; padding:8px;\">Stage / Tool</th>\n",
              "          <th style=\"border:1px solid #d1d5db; padding:8px;\">Decision</th>\n",
              "          <th style=\"border:1px solid #d1d5db; padding:8px;\">Status</th>\n",
              "          <th style=\"border:1px solid #d1d5db; padding:8px;\">Short Observation</th>\n",
              "          <th style=\"border:1px solid #d1d5db; padding:8px;\">Notes</th>\n",
              "        </tr>\n",
              "      </thead>\n",
              "      <tbody>\n",
              "        \n",
              "            <tr>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">1</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">本地 Python 分析 (PythonInterpreterTool)</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Stage 1: Load the raw Excel file, inspect data quality, clean missing values and column names, and save cleaned dataset.</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">成功</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Loading raw Excel file... Raw shape: (1070, 31) Raw columns: [&#x27;序号&#x27;, &#x27;孕妇代码&#x27;, &#x27;年龄&#x27;, &#x27;身高&#x27;, &#x27;体重&#x27;, &#x27;末次月经&#x27;, &#x27;IVF妊娠&#x27;, &#x27;检测日期&#x27;, &#x27;检测抽血次数&#x27;, &#x27;检测孕周&#x27;, &#x27;孕妇BMI&#x27;, &#x27;原始读段数&#x27;, &#x27;在参考基因组上比对的比例&#x27;, &#x27;重复读段的比例&#x27;, &#x27;唯一比对的读段数 &#x27;, &#x27;GC含量&#x27;, &#x27;13号染色体的Z值&#x27;, &#x27;18号</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Local Python execution | status=success | decision=Stage 1: Load the raw Excel file, inspect data quality, clean missing values and column names, and save cleaned dataset. | observation=Loading raw Excel file... Raw shape: (1070, 31) Raw columns: [&#x27;序号&#x27;, &#x27;孕妇代码&#x27;, &#x27;年龄&#x27;, &#x27;身高&#x27;, &#x27;体重&#x27;, &#x27;末次月经&#x27;, &#x27;IVF妊娠&#x27;, &#x27;检测日期&#x27;, &#x27;检测抽血次数&#x27;, &#x27;检测孕周&#x27;, &#x27;孕妇BMI&#x27;, &#x27;原始读段数&#x27;, &#x27;在参考基因组上比对的比例&#x27;, &#x27;重复读段的比例&#x27;, &#x27;唯一比对的读段数 &#x27;, &#x27;GC含量&#x27;, &#x27;13号染色体的Z值&#x27;, &#x27;18号</td>\n",
              "            </tr>\n",
              "            \n",
              "            <tr>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">2</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">本地 Python 分析 (PythonInterpreterTool)</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Stage 2: Load cleaned data, perform statistical analysis, generate visualizations, and save figures.</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">成功</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Loaded cleaned data shape: (1070, 31) Columns: [&#x27;序号&#x27;, &#x27;孕妇代码&#x27;, &#x27;年龄&#x27;, &#x27;身高&#x27;, &#x27;体重&#x27;, &#x27;末次月经&#x27;, &#x27;IVF妊娠&#x27;, &#x27;检测日期&#x27;, &#x27;检测抽血次数&#x27;, &#x27;检测孕周&#x27;, &#x27;孕妇BMI&#x27;, &#x27;原始读段数&#x27;, &#x27;在参考基因组上比对的比例&#x27;, &#x27;重复读段的比例&#x27;, &#x27;唯一比对的读段数&#x27;, &#x27;GC含量&#x27;, &#x27;13号染色体的Z值&#x27;, &#x27;18号染色体的Z值&#x27;, &#x27;21号染色</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Local Python execution | status=success | decision=Stage 2: Load cleaned data, perform statistical analysis, generate visualizations, and save figures. | observation=Loaded cleaned data shape: (1070, 31) Columns: [&#x27;序号&#x27;, &#x27;孕妇代码&#x27;, &#x27;年龄&#x27;, &#x27;身高&#x27;, &#x27;体重&#x27;, &#x27;末次月经&#x27;, &#x27;IVF妊娠&#x27;, &#x27;检测日期&#x27;, &#x27;检测抽血次数&#x27;, &#x27;检测孕周&#x27;, &#x27;孕妇BMI&#x27;, &#x27;原始读段数&#x27;, &#x27;在参考基因组上比对的比例&#x27;, &#x27;重复读段的比例&#x27;, &#x27;唯一比对的读段数&#x27;, &#x27;GC含量&#x27;, &#x27;13号染色体的Z值&#x27;, &#x27;18号染色体的Z值&#x27;, &#x27;21号染色</td>\n",
              "            </tr>\n",
              "            \n",
              "            <tr>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">3</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">最终报告</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Analysis complete. Generate final report with APA-style statistics, effect sizes, and telemetry.</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">成功</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">无</td>\n",
              "              <td style=\"border:1px solid #d1d5db; padding:8px; vertical-align:top;\">Generated final Markdown report: Analysis complete. Generate final report with APA-style statistics, effect sizes, and telemetry.</td>\n",
              "            </tr>\n",
              "            \n",
              "      </tbody>\n",
              "    </table>\n",
              "    "
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "render_trace_table(tabular_result)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 示例 2：PDF 文献分析\n",
        "\n",
        "这里使用一篇小型样例论文。当前版本会：\n",
        "\n",
        "- 抽取文献背景\n",
        "- 识别候选表\n",
        "- 自动选择一张主表做定量分析\n",
        "- 将其他候选表作为上下文证据参与报告解释\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "[1/7] Loading runtime configuration...\n",
            "      Model: deepseek-chat | Tavily credential: detected\n",
            "      Latency mode: auto\n",
            "      Vision review: configured\n",
            "[2/7] Created production run directory...\n",
            "      Run root: c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655\n",
            "[3/7] Running input document ingestion...\n",
            "      Input kind: pdf\n",
            "      Document ingestion completed | status = completed\n",
            "      Summary: PDF 文档解析完成：共提取 2 张候选表，已选择 table_01 作为主表写入 cleaned_data.csv，其余候选表会与文献背景一起作为综合解释上下文。\n",
            "[4/7] Building compact dataset metadata context...\n",
            "      Data shape: 7 rows x 5 columns\n",
            "[5/7] Tool registry ready: PythonInterpreterTool\n",
            "      Fast path: True | effective max steps: 3\n",
            "[6/7] Advanced Data Analyst started reasoning (max steps = 3)\n",
            "      Analysis round: 1\n",
            "      Step 1/3: thinking...\n",
            "      Calling PythonInterpreterTool | Stage 1: Load raw PDF table, inspect, clean column names, handle missing values, save cleaned dataset.\n",
            "      Completed PythonInterpreterTool | status = success\n",
            "        Observation: Raw data shape: (7, 5) Raw data columns: ['Model Configuration', 'Precision', 'Recall', 'mAP50', 'mAP50-95'] Raw data dtypes: Model Configuration object Precision float64 Recall float64 mAP50 float64 mAP50-95 float64 dty\n",
            "      Step 2/3: thinking...\n",
            "      Calling PythonInterpreterTool | Stage 2: Load cleaned data, compute descriptive statistics, rankings, bootstrap confidence intervals, cautious correlation analysis, generate 2-4 light visualizations.\n",
            "      Completed PythonInterpreterTool | status = success\n",
            "        Observation: === Loaded cleaned data === Model Configuration Precision Recall mAP50 mAP50_95 0 YOLOv5 0.95920 0.86365 0.93806 0.67804 1 YOLOv6 0.84015 0.80368 0.81593 0.59957 2 YOLOv7 0.73430 0.89090 0.89700 0.67450 3 YOLOv8 0.95006 \n",
            "      Step 3/3: thinking...\n",
            "      Final report generated successfully.\n",
            "[7/7] Saving Markdown report and run trace...\n",
            "      Final report: c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/final_report.md\n",
            "      Agent trace: c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/logs/agent_trace.json\n",
            "[8/8] Production artifact validation passed.\n"
          ]
        },
        {
          "data": {
            "text/markdown": [
              "\n",
              "## PDF 案例运行摘要\n",
              "\n",
              "- 输入类型: `pdf`\n",
              "- 数据路径: `C:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/data/extracted_tables/table_01.csv`\n",
              "- 数据规模: `7 x 5`\n",
              "- 识别领域: `computer_vision_object_detection`\n",
              "- 使用工具: `PythonInterpreterTool`\n",
              "- 分析方法: `descriptive_statistics, ranking, bootstrap_confidence_intervals, spearman_correlation, visualization`\n",
              "- 文档解析状态: `completed`\n",
              "- 候选表数量: `2`\n",
              "- 选中主表: `table_01`\n",
              "- PDF 多表综合: `True`\n",
              "- 报告路径: `c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/final_report.md`\n",
              "- Trace 路径: `c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/logs/agent_trace.json`\n",
              "- 审稿状态: `skipped`\n",
              "- 总耗时: `122.89s`\n"
            ],
            "text/plain": [
              "<IPython.core.display.Markdown object>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "pdf_result = run_analysis(\n",
        "    data_path=PROJECT_ROOT / \"data\" / \"sample_paper.pdf\",\n",
        "    output_dir=OUTPUT_ROOT,\n",
        "    quality_mode=\"draft\",\n",
        "    latency_mode=\"auto\",\n",
        "    document_ingestion_mode=\"auto\",\n",
        "    verbose=True,\n",
        ")\n",
        "render_run_summary(pdf_result, \"PDF 案例运行摘要\")\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/markdown": [
              "## 完整报告正文\n",
              "\n",
              "# 小样本目标检测模型性能对比分析报告\n",
              "\n",
              "## 数据概览\n",
              "本数据集来源于一篇关于目标检测模型改进的学术论文（PDF 提取表）。数据包含 7 种 YOLO 系列模型配置（YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv11、YOLOv8‑BFDS）在四个关键性能指标上的表现：\n",
              "- **Precision**（精确率）\n",
              "- **Recall**（召回率）\n",
              "- **mAP50**（平均精度，IoU 阈值为 0.5）\n",
              "- **mAP50‑95**（平均精度，IoU 阈值从 0.5 到 0.95 的平均值）\n",
              "\n",
              "数据规模为 7 行 × 5 列，属于典型的小样本结果表（N=7）。原始数据无缺失值，已进行列名标准化（将 `mAP50-95` 改为 `mAP50_95`）并保存为清洗后 CSV。\n",
              "\n",
              "## 方法说明\n",
              "鉴于样本量极小（N=7），本次分析严格遵循小样本分析原则：\n",
              "1. **描述性统计**：计算各指标的均值、标准差、四分位数。\n",
              "2. **排序与排名**：按各指标从高到低排列模型。\n",
              "3. **Bootstrap 置信区间**：采用非参数 Bootstrap（5000 次重抽样，百分位法）估计各指标总体均值的 95% 置信区间，避免对分布形态的假设。\n",
              "4. **相关性分析**：使用 Spearman 秩相关系数（非参数）评估指标间的单调关联，同时提供 Pearson 相关系数作为参考。\n",
              "5. **可视化**：生成 4 幅轻量图表，直观展示模型间性能差异与指标间关系。\n",
              "\n",
              "**统计学治理说明**：\n",
              "- 未进行假设检验（如 t 检验、ANOVA），因为每个模型仅有一个观测值，不具备重复测量或实验组内重复，不符合群体比较的前提。\n",
              "- 所有结论均基于描述性统计与 Bootstrap 区间，避免过度推断。\n",
              "- 相关性分析仅提示关联，不暗示因果关系。\n",
              "\n",
              "## 核心假设检验结论\n",
              "**本分析未执行传统假设检验**，原因如下：\n",
              "- 每个模型配置仅有一个观测值，无法估计组内变异，因此不能进行组间显著性检验。\n",
              "- 小样本（N=7）下，任何参数检验的统计功效极低，且正态假设难以验证。\n",
              "- 遵循《PDF_Small_Table_Mode》指导，仅进行描述性、排序、Bootstrap 区间及相关性分析。\n",
              "\n",
              "替代的量化结论如下：\n",
              "\n",
              "### 1. Bootstrap 95% 置信区间（各指标总体均值）\n",
              "| 指标 | 样本均值 | 95% CI (Bootstrap) |\n",
              "|------|----------|---------------------|\n",
              "| Precision | 0.8983 | [0.8462, 0.9501] |\n",
              "| Recall | 0.8647 | [0.8063, 0.9232] |\n",
              "| mAP50 | 0.9018 | [0.8519, 0.9516] |\n",
              "| mAP50_95 | 0.6733 | [0.5996, 0.7471] |\n",
              "\n",
              "**解读**：所有指标的置信区间均较宽，反映小样本下估计的不确定性。mAP50_95 的区间下限最低（约 0.60），提示该指标在不同模型间波动较大。\n",
              "\n",
              "### 2. 模型排名（按各指标降序）\n",
              "- **Precision**：YOLOv8‑BFDS (0.970) > YOLOv5 (0.959) > YOLOv8 (0.950) > YOLOv9 (0.946) > YOLOv11 (0.888) > YOLOv6 (0.840) > YOLOv7 (0.734)\n",
              "- **Recall**：YOLOv8‑BFDS (0.990) > YOLOv11 (0.899) > YOLOv7 (0.891) > YOLOv5 (0.864) > YOLOv9 (0.808) > YOLOv6 (0.804) > YOLOv8 (0.799)\n",
              "- **mAP50**：YOLOv8‑BFDS (0.991) > YOLOv11 (0.947) > YOLOv5 (0.938) > YOLOv7 (0.897) > YOLOv8 (0.868) > YOLOv9 (0.855) > YOLOv6 (0.816)\n",
              "- **mAP50_95**：YOLOv8‑BFDS (0.836) > YOLOv11 (0.699) > YOLOv5 (0.678) > YOLOv7 (0.675) > YOLOv8 (0.622) > YOLOv9 (0.604) > YOLOv6 (0.600)\n",
              "\n",
              "**综合表现最佳**：YOLOv8‑BFDS 在四项指标上均排名第一，且领先幅度明显。\n",
              "\n",
              "### 3. Spearman 秩相关系数矩阵\n",
              "| | Precision | Recall | mAP50 | mAP50_95 |\n",
              "|-------------|-----------|--------|-------|----------|\n",
              "| Precision  | 1.000 | 0.179 | 0.536 | 0.714 |\n",
              "| Recall     | 0.179 | 1.000 | 0.536 | 0.536 |\n",
              "| mAP50      | 0.536 | 0.536 | 1.000 | 0.893 |\n",
              "| mAP50_95   | 0.714 | 0.536 | 0.893 | 1.000 |\n",
              "\n",
              "**解读**：\n",
              "- mAP50 与 mAP50_95 呈现强正相关（ρ=0.893），说明两者变化趋势高度一致。\n",
              "- Precision 与 mAP50_95 呈中度正相关（ρ=0.714）。\n",
              "- Recall 与 Precision 几乎无单调关联（ρ=0.179），提示在这组模型中，高精确率不一定伴随高召回率，反之亦然。\n",
              "\n",
              "## 结果解释\n",
              "1. **YOLOv8‑BFDS 全面领先**：该模型在四项指标上均位列第一，尤其 Recall (0.990) 与 mAP50 (0.991) 接近完美，与文献背景中“增强的 YOLOv8 模型集成 DCNv2、E‑SEModule、Concat_BiFPN 等优化模块”的描述相符，说明其改进有效提升了检测精度与召回。\n",
              "2. **传统模型表现分化**：YOLOv5 在 Precision 和 mAP50 上表现优异（第二、三位），但 Recall 仅居中；YOLOv7 在 Recall 上较高（第三），但 Precision 最低（0.734）。这种分化反映了不同模型架构在精度‑召回权衡上的差异。\n",
              "3. **mAP50_95 整体较低**：所有模型的 mAP50_95 均低于 0.84，且 Bootstrap 区间下限仅约 0.60，说明在更严格的 IoU 阈值范围内，模型性能仍有较大提升空间。\n",
              "4. **相关性提示**：mAP50 与 mAP50_95 强相关，可视为一致性验证；Precision 与 Recall 几乎无关，符合目标检测中常存在的“精度‑召回 trade‑off”现象。\n",
              "\n",
              "## 讨论\n",
              "### 与文献背景的关联\n",
              "- 背景文献提到“YOLOv8‑BFDS 集成 DCNv2、E‑SEModule、Concat_BiFPN 等模块以提升对变形、遮挡、小目标及低对比度物体的检测能力”。本数据中 YOLOv8‑BFDS 在 Recall（0.990）和 mAP50（0.991）上显著高于其他模型，间接支持了这些模块的有效性。\n",
              "- 文献亦提及“CB‑YOLOv5s 通过双向通道解决目标相互遮挡及背景相似导致的低检测精度问题”。本表中未包含 CB‑YOLOv5s，但 YOLOv5 本身在 Precision 和 mAP50 上表现良好，说明基础 YOLOv5 已有较强检测能力，改进版本可能在此基础上进一步提升。\n",
              "\n",
              "### 方法学局限\n",
              "1. **样本量极小**：仅 7 个模型，每个模型仅单次观测，无法进行统计检验，所有结论均为描述性。\n",
              "2. **缺乏重复测量**：未提供同一模型在多组数据上的性能变异，因此无法评估模型稳定性。\n",
              "3. **数据来源单一**：仅来自一篇论文的单个结果表，可能存在选择性报告偏差。\n",
              "4. **未控制实验条件**：不同模型的训练数据、超参数、硬件环境可能不同，影响直接可比性。\n",
              "\n",
              "### 与候选表的交叉验证\n",
              "PDF 中另一候选表（table_02）包含 YOLOv8 与 YOLOv8+BiFPN 的对比，其中 YOLOv8+BiFPN 的 Precision、Recall、mAP50 分别为 0.973、0.983、0.988，均高于本表中 YOLOv8 的对应值（0.950、0.799、0.868）。这进一步支持了 BiFPN 结构对性能的提升作用，与本表中 YOLOv8‑BFDS（含 Concat_BiFPN）表现最优的趋势一致。\n",
              "\n",
              "## 清洗后数据路径\n",
              "`c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/data/cleaned_data.csv`\n",
              "\n",
              "## 图表引用\n",
              "1. **各模型精确率与召回率对比**  \n",
              "![精确率与召回率对比](c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/figures/review_round_1/bar_precision_recall.png)\n",
              "2. **精确率 vs 召回率散点图**  \n",
              "![精确率 vs 召回率散点图](c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/figures/review_round_1/scatter_precision_recall.png)\n",
              "3. **Spearman 秩相关热图**  \n",
              "![Spearman 秩相关热图](c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/figures/review_round_1/heatmap_spearman_corr.png)\n",
              "4. **多指标平行坐标图**  \n",
              "![多指标平行坐标图](c:/Users/pc/OneDrive/Desktop/agent/Co-creation-projects/healer-666-Academic-Data-Agent/outputs/run_20260317_130655/figures/review_round_1/parallel_coordinates.png)"
            ],
            "text/plain": [
              "<IPython.core.display.Markdown object>"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "render_full_report(pdf_result)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<h2>错误与诊断详情</h2><p>本次运行无工具级异常。</p>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "render_diagnostics(pdf_result)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 总结与展望\n",
        "\n",
        "这个社区版演示重点展示三件事：\n",
        "\n",
        "- 结构化表格的自动分析能力\n",
        "- PDF 文献中的候选表提取与主表分析能力\n",
        "- 运行产物、报告与 trace 的可追踪性\n",
        "\n",
        "完整版项目还提供了 Gradio 工作台、历史记录浏览、视觉审稿和更完整的工程能力。\n"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "agent_env",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.10.20"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}
