什么是交叉制表的良好数据模型?

时间:2009-06-19 19:22:34

标签: python algorithm data-structures statistics crosstab

我正在用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

此外,我希望能够计算频率/总频率,频率/小计,& c的比率。

4 个答案:

答案 0 :(得分: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
# ...

答案 1 :(得分:1)

S W发布了a good basic recipe for this on activestate.com

本质似乎是......

  1. 将xsort = []和ysort = []定义为轴的数组。通过迭代数据或其他方式填充它们。
  2. 通过迭代数据并递增rs [yvalue] [xvalue],将rs = {}定义为表格数据的字典。如果/在需要时创建缺失的密钥。
  3. 然后例如,行y的总数将为sum([rs[y][x] for x in xsort])

答案 2 :(得分:0)

由于这是Python的早期编程练习,他们可能希望您了解Python内置机制适合初始版本的问题。字典结构似乎是一个很好的候选人。 tab-sep文件中的第一列值可以是字典中的键。该键找到的条目本身可以是字典,其键是第二列值。子字典的条目是一个计数,当你第一次遇到一对时添加一个新的子字典时,它被初始化为1。

答案 3 :(得分:-1)

为什么不使用HTML Tables存储它?它可能不是最好的,但您可以非常轻松地在浏览器中查看它。

编辑:

我只是重新阅读了这个问题而你要求的是数据模型,而不是存储模型。回答这个问题...

这完全取决于您将如何报告数据。例如,如果您要进行大量的旋转或聚合,那么将它存储在列主要顺序中会更有意义,例如,这样您就可以对列进行求和以获得计数。

如果你解释一下你想要提取的信息,那将会有很大的帮助。