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: 对于小数据集,模块会调整统计方法以避免过度解读,并相应降低置信度。