Skip to content

Commit 629ee62

Browse files
committed
feat(prepare_data): implement strict column naming convention
BREAKING CHANGE: Strict column naming convention now enforced - Text column: must be named 'text' (legacy names show warning) - Time column: must be named 'timestamp' (supports year/date/datetime formats) - Covariate columns: must use 'cov_' prefix (e.g., cov_province, cov_category) - Label column: must be named 'label' Added DATA_FORMAT_TEMPLATE.md documentation with complete format requirements
1 parent 138620f commit 629ee62

2 files changed

Lines changed: 398 additions & 110 deletions

File tree

doc/DATA_FORMAT_TEMPLATE.md

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
# THETA 数据格式要求模板 (严格模式)
2+
3+
> 本文档说明 THETA 主题模型框架对输入数据的**严格列名规范**
4+
5+
---
6+
7+
## 📋 列名规范总览
8+
9+
| 用途 | 列名 | 是否必需 | 说明 |
10+
|------|------|---------|------|
11+
| **文本** | `text` | ✅ 必需 | 文档文本内容 |
12+
| **时间** | `timestamp` | DTM 必需 | 支持年份/日期/时间戳格式 |
13+
| **协变量** | `cov_*` | STM 必需 | 必须以 `cov_` 前缀命名 |
14+
| **标签** | `label` | 有监督必需 | 文档分类标签 |
15+
16+
---
17+
18+
## 1️⃣ 文本列: `text`
19+
20+
**必须命名为 `text`**
21+
22+
```csv
23+
text
24+
"这是第一篇文档的内容..."
25+
"这是第二篇文档的内容..."
26+
```
27+
28+
---
29+
30+
## 2️⃣ 时间列: `timestamp`
31+
32+
**必须命名为 `timestamp`**,用于 DTM (Dynamic Topic Model) 时序分析。
33+
34+
### 支持的时间格式
35+
36+
| 格式 | 示例 | 处理方式 |
37+
|------|------|---------|
38+
| **年份** | `2026` | 直接使用 |
39+
| **日期** | `2026-10-17``2026/10/17` | 提取年份 → `2026` |
40+
| **时间戳** | `2026-10-17 14:30:00` | 提取年份 → `2026` |
41+
42+
### 示例
43+
44+
```csv
45+
text,timestamp
46+
"2020年的文档内容...",2020
47+
"2021年的文档内容...",2021-06-15
48+
"2022年的文档内容...",2022-03-20 10:30:00
49+
```
50+
51+
### ⚠️ 重要说明
52+
53+
- **DTM 最终只使用年份**,不支持月/日级别的时间切片
54+
- 无论输入 `2026-10-17` 还是 `2026`,最终都会转换为年份 `2026`
55+
- 至少需要 **2 个不同的年份** 才能运行 DTM
56+
57+
---
58+
59+
## 3️⃣ 协变量列: `cov_*` 前缀
60+
61+
**必须以 `cov_` 前缀命名**,用于 STM (Structural Topic Model) 分析。
62+
63+
### 命名规范
64+
65+
| 原列名 | 规范列名 |
66+
|--------|---------|
67+
| `province` | `cov_province` |
68+
| `category` | `cov_category` |
69+
| `source` | `cov_source` |
70+
| `author` | `cov_author` |
71+
| `region` | `cov_region` |
72+
73+
### 示例
74+
75+
```csv
76+
text,timestamp,cov_province,cov_category,cov_source
77+
"文档内容...",2023,北京,政策,政府网站
78+
"文档内容...",2023,上海,新闻,媒体
79+
"文档内容...",2024,广东,报告,统计局
80+
```
81+
82+
### 协变量要求
83+
84+
- **唯一值数量**: 2-50 个(不能太少或太多)
85+
- **数据类型**: 分类变量(不是连续数值)
86+
- **至少需要 1 个协变量列** 才能运行 STM
87+
88+
---
89+
90+
## 4️⃣ 标签列: `label`
91+
92+
**必须命名为 `label`**,用于有监督主题建模。
93+
94+
```csv
95+
text,label
96+
"关于环境保护的文章...",环境
97+
"关于人工智能的论文...",科技
98+
"关于医疗改革的报告...",医疗
99+
```
100+
101+
---
102+
103+
## 📝 完整数据模板
104+
105+
### 模板 1: 基础主题建模 (LDA/CTM/ETM)
106+
107+
```csv
108+
text
109+
"文档内容1..."
110+
"文档内容2..."
111+
"文档内容3..."
112+
```
113+
114+
### 模板 2: 有监督主题建模
115+
116+
```csv
117+
text,label
118+
"文档内容1...",类别A
119+
"文档内容2...",类别B
120+
"文档内容3...",类别A
121+
```
122+
123+
### 模板 3: 时序主题建模 (DTM)
124+
125+
```csv
126+
text,timestamp
127+
"2020年文档...",2020
128+
"2021年文档...",2021
129+
"2022年文档...",2022
130+
```
131+
132+
### 模板 4: 结构化主题建模 (STM)
133+
134+
```csv
135+
text,cov_province,cov_category
136+
"文档内容...",北京,政策
137+
"文档内容...",上海,新闻
138+
"文档内容...",广东,报告
139+
```
140+
141+
### 模板 5: 完整元数据 (DTM + STM)
142+
143+
```csv
144+
text,timestamp,cov_province,cov_category,cov_source,label
145+
"文档内容...",2023,北京,政策,政府网站,环境
146+
"文档内容...",2023,上海,新闻,媒体,科技
147+
"文档内容...",2024,广东,报告,统计局,经济
148+
```
149+
150+
---
151+
152+
## 🔍 系统检测输出示例
153+
154+
运行 `prepare_data.py` 时会显示:
155+
156+
```
157+
============================================================
158+
Column Auto-Detection Results (Strict Mode)
159+
============================================================
160+
161+
[Naming Convention]
162+
- Text column: 'text'
163+
- Time column: 'timestamp' (supports: 2026, 2026-10-17, 2026-10-17 14:30:00)
164+
- Covariate columns: 'cov_<name>' (e.g., cov_province, cov_category)
165+
- Label column: 'label'
166+
167+
[Time Column] ✓ 'timestamp' (type: year)
168+
Sample values: [2020, 2021, 2022, 2023, 2024]
169+
Note: All formats will be converted to YEAR for DTM analysis
170+
171+
[Covariate Columns] ✓ Detected 3 columns:
172+
- cov_province: 34 unique values, e.g., ['北京', '上海', '广东']
173+
- cov_category: 5 unique values, e.g., ['政策', '新闻', '报告']
174+
- cov_source: 8 unique values, e.g., ['政府网站', '媒体', '学术期刊']
175+
============================================================
176+
```
177+
178+
---
179+
180+
## ⚠️ 遗留列名兼容
181+
182+
为保持向后兼容,系统仍会识别以下遗留列名,但会显示警告:
183+
184+
### 文本列(遗留)
185+
- `cleaned_content`, `clean_text`, `content`, `Text`
186+
- **建议**: 重命名为 `text`
187+
188+
### 时间列(遗留)
189+
- `year`, `date`, `time`, `created_at`, `年份`
190+
- **建议**: 重命名为 `timestamp`
191+
192+
### 协变量列(遗留)
193+
- 任何符合条件的分类列(2-50 个唯一值)
194+
- **建议**: 添加 `cov_` 前缀
195+
196+
---
197+
198+
## 🛠️ 数据准备命令
199+
200+
```bash
201+
cd THETA/src/models
202+
203+
# 基础模型
204+
python prepare_data.py --dataset my_data --model baseline
205+
206+
# DTM(需要 timestamp 列)
207+
python prepare_data.py --dataset my_data --model dtm
208+
209+
# STM(需要 cov_* 列)
210+
python prepare_data.py --dataset my_data --model baseline
211+
```
212+
213+
---
214+
215+
## ✅ 数据质量检查清单
216+
217+
- [ ] CSV 文件使用 UTF-8 编码
218+
- [ ] 文本列命名为 `text`
219+
- [ ] 时间列命名为 `timestamp`(如需 DTM)
220+
- [ ] 协变量列以 `cov_` 前缀命名(如需 STM)
221+
- [ ] 标签列命名为 `label`(如需有监督学习)
222+
- [ ] 每个文档至少 20 个词
223+
- [ ] 总文档数至少 100 篇
224+
225+
---
226+
227+
**最后更新**: 2026-04-11

0 commit comments

Comments
 (0)