Json-Python-Server/docs/旧的关于charts模式的实现.md

46 lines
3.4 KiB
Markdown
Raw Normal View History

2026-01-29 18:18:32 +08:00
# 关于 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`(时间序列 dataset、`acf_pacf`acf/pacf 序列)、`stationarity`、`normality`(表格)、`seasonal`、`spectral`、`heatmap`(相关矩阵 flatten、`pca_scree`、`pca_scatter`、`feature_importance`、`cluster`、`factor`records、`cointegration`(表格 meta、`var_forecast`forecast 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>.charts``steps[].chart`。旧字段images为空不会报错。
- 大型数据仍需关注内存占用;如需进一步压缩,可在 `_build_chart_payload` 中添加截断/抽样。
## 相关文件
- 实现细节:`app/services/analysis_system.py`
- 直方图分箱:`app/services/analysis/modules/basic.py`
- 路由返回:`app/api/routes/analysis.py`、`app/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]`,附 `f`、`t` 列表。
- `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 所需数据;频谱依旧不降采样,返回全量值。