python - 将具有一些公共(public)字段的多个表组合成一个表

标签 python sql sqlite

我有一系列文本文件(每年一个),其中包含年度调查/问卷的答案。文件中的列标题指的是问题编号,每一行代表一个人对问题的回答,例如

Q1,   Q2,   Q3, ...
P1A1, P1A2, P1A3, ...
P2A1, P2A2, P2A3, ...
etc.
[where Q1 is Question 1, P1 is Person 1 and A1 is Answer 1].

问卷每年都使用相同的核心问题集,但每年都会添加新问题并删除一些旧问题。因此,我的表有很多共同的字段,但它们并不完全相同,例如

Year 1             |  Year 2           |  Year 3              etc.
Q1,   Q2,   Q3     |  Q1,   Q2,   Q4   |  Q1,   Q2,   Q5
P1A1, P1A2, P1A3   |  P1A1, P1A2, P1A4 |  P1A1, P1A2, P1A5
P2A1, P2A2, P2A3   |  P2A1, P2A2, P2A4 |  P2A1, P2A2, P2A5

在此示例中,Q1 和 Q2 是核心问题,而 Qs 3、4 和 5 取决于调查年份。

已删除的问题编号绝不会重复使用:如果添加了新问题,则会为其分配一个全新的编号。真正的调查有 300 到 500 个问题,每年大约有 40,000 人回答。

我想将所有这些数据合并到一个表中,该表的列标题将是原始文件中一组不同的标题,加上一个年份列。对于问题不相关的年份,我希望有空值,例如

Year,  Q1,   Q2,   Q3,   Q4,   Q5
1,     P1A1, P1A2, P1A3, Null, Null
1,     P2A1, P2A2, P2A3, Null, Null
2,     P1A1, P1A2, Null, P1A4, Null
2,     P2A1, P2A2, Null, P2A4, Null
3,     P1A1, P1A2, Null, Null, P1A5
3,     P2A1, P2A2, Null, Null, P2A5

本质上,我只想在它们匹配的地方附加列,否则有空值,但如果可能的话,我想自动(从输入表)为最终表生成一组列标题作为问题的数量调查范围很大,解决问题然后输入 Create Table 语句的前景太可怕了!我想我所追求的是 UNION ALL 的某种变体,它不需要我按顺序指定所有列,并且可以处理不匹配的列。

请问有人有任何提示或建议吗?我原本希望使用 SQLite,但我愿意尝试几乎所有的东西。我不是数据库专家,但我对 SQL 有基本的了解,如果有帮助,我可以编写一些 Python 脚本。

如果您已经读到这里,感谢您的阅读!我认为这将是一个非常简单的问题,但要详细描述却出奇地困难。

最佳答案

第 1 步。停止编码。

第 2 步。购买一本关于数据仓库和星型模式设计的书籍。例如,Ralph Kimball 的数据仓库工具包。 http://www.amazon.com/Data-Warehouse-Toolkit-Complete-Dimensional/dp/0471200247

第 3 步。设计合适的星型模式。问题是一个维度。时间(特别是年份)是一个维度。受访者(如果您认识他们)是一个维度。 Response(个体调查工具)是一个维度。事实是给定年份的问题的答案。每项调查都变成多行事实。

第 4 步。使用您的不同年份的数据加载您的星型模式。维度(问题)的加载有点复杂,因为每年都会重复使用一些问题并添加新问题。加载维度后,事实行就很容易加载了。

第 5 步。现在您可以编写一个快速报告应用程序以从各种事实行中提取必要的数据并组装所需的报告。

关于python - 将具有一些公共(public)字段的多个表组合成一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7589745/

相关文章:

java - Android Sqlite 选择查询值是否为零或 0

python - AWS Lambda : Unable to import module 'package/file' : No module named 'util'

python - argparse 模块在 Python 中不起作用

python - 我想使用 Drive Api 从 google 云端硬盘下载文件

javascript - 在程序编译期间雪花去除反斜杠?

mysql - 如何将位数据类型的所有位填充为 1?

python - 计算 .txt 中单词的长度

.net - SQL Server 2012 Always on 和 .net 应用程序

java - rawQuery select 语句中的列名称不明确

linux - SQLITE 比较两个表中的列以查找 LIKE 数据