Json-Python-Server/docs/旧的关于charts模式的实现.md
2026-01-29 18:18:32 +08:00

3.4 KiB
Raw Blame History

关于 charts 模式的实现

目标与范围

  • docs/charts-data-mode-plan.md 将后端改为返回结构化图表数据ECharts 友好),不再生成/返回图片。
  • 保持算法与分析流程不变,仅调整封装与响应结构;旧前端通过空的 images 字段保持兼容。

核心实现

  • 统一清洗函数:在 app/services/analysis_system.py 增加 to_echarts_safe,递归处理 NaN/Inf/pd.NA、numpy 标量/数组、Timestamp/datetime、Decimal带循环引用保护输出 JSON-safe 结构。
  • 分析流程改造
    • run_analysis 内强制 generate_plots=False,改用 charts 收集每步结果,steps[].chart 指向对应 key。
    • 为每个步骤新增 chart_key,映射到 charts
      • stats(统计概览 dataset 表格)、ts(时间序列 datasetacf_pacfacf/pacf 序列)、stationaritynormality(表格)、seasonalspectralheatmap(相关矩阵 flattenpca_screepca_scatterfeature_importanceclusterfactorrecordscointegration(表格 metavar_forecastforecast dataset含 step 列)。
    • _build_chart_payload 依据 chart_key 组装 ECharts 友好的 dataset/records/flatten 结构,并通过 to_echarts_safe 清洗。
    • 移除 fallback 图片生成,仅保留文字 fallback 分析。
  • 数据层改动
    • 正态性检验在 app/services/analysis/modules/basic.py 内增加直方图分箱:np.histogram 返回 [range_start, range_end, count] 列表,便于前端直接渲染。

路由响应调整

  • v1 POST /api/analyze 与 v2 POST /api/v2/analyze
    • analysis.<lang>.charts 返回各图表数据;steps 保留顺序与摘要,并携带 chart 引用。
    • images 始终为空对象,仅为兼容旧前端;删除旧的图片复制/保存逻辑,并剔除 image_path 泄露。

兼容性与注意事项

  • 核心算法、预处理、API 分析调用保持原样;仅输出封装变化。
  • 如果前端仍使用旧版,需要改为读取 analysis.<lang>.chartssteps[].chart。旧字段images为空不会报错。
  • 大型数据仍需关注内存占用;如需进一步压缩,可在 _build_chart_payload 中添加截断/抽样。

相关文件

  • 实现细节:app/services/analysis_system.py
  • 直方图分箱:app/services/analysis/modules/basic.py
  • 路由返回:app/api/routes/analysis.pyapp/api/routes/analysis_v2.py
  • 设计说明:docs/charts-data-mode-plan.md

2026-01-29 补充

  • ACF/PACF 输出改为按 lag/value 的 records便于前端直接做 bar/line 映射。
  • 频谱输出:
    • spectrogram 增加降采样并返回 values: [i,j,val],附 ft 列表。
    • periodogram 返回 dataset 形式 ["f","psd"](截断前 200 点)。
  • docs/api-endpoints-status.md 已更新状态,标记 charts 模式落地,images 为空仅兼容。

2026-01-29 后续调整

  • 应需求取消频谱降采样:spectrogram 现返回全量 f/t 与全部 values[i,j,val]periodogram 返回全量频点 dataset可能显著增大 payload如需再控体积可重新引入上限或抽样

2026-01-29 再次更新

  • time_series 模块回归“只返数据不生成图片”时间序列、ACF/PACF、季节分解、频谱均不再绘图直接返回 charts 所需数据;频谱依旧不降采样,返回全量值。