Spaces:
Sleeping
Sleeping
File size: 5,875 Bytes
1569336 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | # 数据洞察模块 (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: 对于小数据集,模块会调整统计方法以避免过度解读,并相应降低置信度。 |