Spaces:
Sleeping
Sleeping
| # 数据洞察模块 (datafact_generator) | |
| 数据洞察模块(`datafact_generator`)是 ChartPipeline 框架的第二个处理环节,负责分析数据并提取关键洞察,用于增强可视化的信息价值。 | |
| ## 功能简介 | |
| 本模块通过统计分析和模式识别,从数据中提取有意义的洞察(datafacts),包括趋势、比例关系、显著差异、异常值等。这些洞察按重要性排序,可用于指导可视化设计和标注,强化数据叙事。 | |
| ## 输入与输出 | |
| ### 输入 | |
| 模块接收包含 `chart_type` 字段的数据对象,主要关注: | |
| - `data.columns`: 列定义 | |
| - `data.data`: 实际数据记录 | |
| - `chart_type`: 图表类型推荐结果 | |
| ### 输出 | |
| 模块向输入数据添加 `datafacts` 字段,结构如下: | |
| ```json | |
| { | |
| "datafacts": [ | |
| { | |
| "type": "trend", | |
| "subtype": "increase", | |
| "data_points": [ | |
| { | |
| "emergency_count": "1", | |
| "status": "active", | |
| "year": "1976" | |
| }, | |
| { | |
| "emergency_count": "15", | |
| "status": "active", | |
| "year": "2022" | |
| } | |
| ], | |
| "score": 0.95, | |
| "annotation": "紧急状态宣布数量总体呈上升趋势", | |
| "reason": "从1976年至2022年,每十年宣布的国家紧急状态总数从1个增长到平均每十年超过15个" | |
| }, | |
| { | |
| "type": "proportion", | |
| "subtype": "majority", | |
| "data_points": [ | |
| { | |
| "emergency_count": "15", | |
| "status": "active", | |
| "year": "2019" | |
| }, | |
| { | |
| "emergency_count": "3", | |
| "status": "ended", | |
| "year": "2019" | |
| } | |
| ], | |
| "score": 0.92, | |
| "annotation": "2010年代83%的紧急状态仍然活跃", | |
| "reason": "在2010-2019期间宣布的18个紧急状态中,15个仍处于活跃状态,只有3个已结束" | |
| }, | |
| { | |
| "type": "difference", | |
| "subtype": "maximum", | |
| "data_points": [ | |
| { | |
| "emergency_count": "14", | |
| "status": "ended", | |
| "year": "1999" | |
| }, | |
| { | |
| "emergency_count": "5", | |
| "status": "ended", | |
| "year": "1989" | |
| } | |
| ], | |
| "score": 0.88, | |
| "annotation": "90年代结束的紧急状态最多", | |
| "reason": "1990-1999年期间有14个紧急状态被结束,比1980年代的5个增加了9个,是所有时期中最高的" | |
| }, | |
| { | |
| "type": "trend", | |
| "subtype": "decrease", | |
| "data_points": [ | |
| { | |
| "emergency_count": "3", | |
| "status": "ended", | |
| "year": "2022" | |
| } | |
| ], | |
| "score": 0.85, | |
| "annotation": "结束的紧急状态比例逐年减少", | |
| "reason": "从1980年代的100%结束率到2020年代仅11%的结束率,显示出明显下降趋势" | |
| }, | |
| { | |
| "type": "value", | |
| "subtype": "total", | |
| "data_points": [ | |
| { | |
| "emergency_count": "41", | |
| "status": "active", | |
| "year": "2022" | |
| } | |
| ], | |
| "score": 0.82, | |
| "annotation": "总计41个紧急状态仍然活跃", | |
| "reason": "所有时期加总,仍处于活跃状态的紧急状态数量为41个,远高于已结束的30个" | |
| } | |
| ] | |
| } | |
| ``` | |
| 每个数据洞察包含以下字段: | |
| | 字段 | 类型 | 描述 | | |
| |------|------|------| | |
| | `type` | 字符串 | 洞察类型 | | |
| | `subtype` | 字符串 | 洞察的具体子类型 | | |
| | `data_points` | 对象数组 | 该洞察涉及的具体数据点,每个数据点包含多个列的值 | | |
| | `score` | 浮点数 | 重要性评分(0-1) | | |
| | `annotation` | 字符串 | 简短的洞察描述,适合作为图表标注 | | |
| | `reason` | 字符串 | 详细的解释和支持该洞察的数据依据 | | |
| ## 支持的洞察类型和子类型 | |
| 模块能够识别以下类型的数据洞察及其子类型: | |
| - **trend(趋势)** | |
| - increase: 上升趋势 | |
| - decrease: 下降趋势 | |
| - stable: 稳定趋势 | |
| - increase_then_decrease: 先升后降 | |
| - increase_then_decrease: 先降后升 | |
| - **proportion(比例)** | |
| - value_majority: 单个样本多数 | |
| - value_minority: 单个样本少数 | |
| - total_majority: 样本总和多数 | |
| - total_minority: 样本总和少数 | |
| - **difference(差异)** | |
| - maximum_large: 最大值较大 | |
| - maximum_small: 最大值较小 | |
| - minimum_large: 最小值较大 | |
| - minimum_small: 最小值较小 | |
| - average_large: 平均值较大 | |
| - average_small: 平均值较小 | |
| - sudden_increase: 时序数据陡增 | |
| - sudden_decrease: 时序数据陡降 | |
| - sudden_change: 类别数据差异明显 | |
| - **value(数值)** | |
| - total: 总和 | |
| - average: 平均值 | |
| - maximum: 最大值 | |
| - minimum: 最小值 | |
| - **correlation(相关性)** | |
| - positive: 正相关 | |
| - negative: 负相关 | |
| ## 适应图表类型 | |
| 模块考虑推荐的图表类型,优先提取与该类型最相关的洞察。例如: | |
| - 对于趋势图表,重点识别趋势和变化 | |
| - 对于比较图表,重点识别差异和对比 | |
| - 对于分布图表,重点识别分布特征和异常值 | |
| ## 使用示例 | |
| ### 命令行调用 | |
| ```bash | |
| python -m modules.datafact_generator.datafact_generator --input input_data.json --output output_data.json | |
| ``` | |
| ### 程序调用 | |
| ```python | |
| from modules.datafact_generator.datafact_generator import process | |
| success = process(input_data='input_data.json', output='output_data.json') | |
| if success: | |
| print("数据洞察生成完成") | |
| else: | |
| print("数据洞察生成失败") | |
| ``` | |
| ## 常见问题 | |
| **Q: 如何控制生成的洞察数量?** | |
| A: 模块默认返回评分最高的5个洞察,可以通过修改模块参数调整数量。 | |
| **Q: 洞察是如何排序的?** | |
| A: 洞察按评分(score)从高到低排序,评分反映该洞察的重要性和显著性。 | |
| **Q: 如何处理小数据集?** | |
| A: 对于小数据集,模块会调整统计方法以避免过度解读,并相应降低置信度。 |