什么是交叉表的良好数据模型?
我正在用Python实现一个交叉表库,这是我新工作的一项编程练习。目前我已经完成了需求的实现,虽然能用,但看起来不太优雅,还有些重复。我希望能找到一个更好的模型,让数据在基础模型(存储在平面文件中的表格数据)和各种统计分析结果之间流动得更顺畅、更干净。
现在,我的流程是这样的:首先是每一行的元组集合,然后是一个直方图,用来统计这些元组出现的频率,最后是一个序列化器,它有点笨拙地把输出整理成一组表格单元格来显示。不过,我发现我经常需要回到表格或直方图那里,因为信息总是不够。
所以,有什么好的想法吗?
补充说明:这里有一些数据示例,以及我希望能从中构建的内容。请注意,“.”表示一些“缺失”的数据,这些数据只在特定条件下被计算。
1 . 1
1 0 3
1 0 3
1 2 3
2 . 1
2 0 .
2 2 2
2 2 4
2 2 .
如果我想查看上面第0列和第2列之间的相关性,这就是我会得到的表格:
. 1 2 3 4
1 0 1 0 3 0
2 2 1 1 0 1
此外,我还希望能够计算频率与总数的比率、频率与小计的比率等等。
4 个回答
0
因为这是一个早期的Python编程练习,他们可能希望你了解Python内置的一些机制,看看哪些适合用来解决这个问题的初版。字典结构看起来是个不错的选择。你从制表符分隔的文件中得到的第一列值可以作为字典的键。通过这个键找到的条目本身也可以是一个字典,它的键是第二列的值。当你第一次遇到一对值时,可以初始化一个子字典的条目,计数从1开始。
1
S W 在 activestate.com 上发布了一个关于这个问题的很好的基础教程,链接在这里:点击查看。
大致的意思是……
- 首先定义两个空的数组,xsort=[] 和 ysort=[],这两个数组用来存放你的坐标轴。你可以通过遍历你的数据来填充这些数组,或者用其他方法。
- 接着定义一个字典 rs={},这个字典里面又包含字典,用来存放你的表格数据。你需要通过遍历数据来更新这个字典,具体来说就是增加 rs[yvalue][xvalue] 的值。如果需要的话,记得创建缺失的键。
比如说,某一行 y 的总和可以用 sum([rs[y][x] for x in xsort])
来计算。
1
你可以使用一个在内存中的 sqlite
数据库作为数据结构,然后把你想要的操作定义为 SQL 查询。
import sqlite3
c = sqlite3.Connection(':memory:')
c.execute('CREATE TABLE data (a, b, c)')
c.executemany('INSERT INTO data VALUES (?, ?, ?)', [
(1, None, 1),
(1, 0, 3),
(1, 0, 3),
(1, 2, 3),
(2, None, 1),
(2, 0, None),
(2, 2, 2),
(2, 2, 4),
(2, 2, None),
])
# queries
# ...