6

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

4 回答 4

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
# ...
于 2009-06-20T23:03:24.147 回答
1

SW在 activestate.com 上发布了一个很好的基本配方

本质似乎...

  1. 将 xsort=[] 和 ysort=[] 定义为轴的数组。通过遍历您的数据或其他方式来填充它们。
  2. 通过迭代数据并递增 rs[yvalue][xvalue],将 rs={} 定义为列表数据的字典。如果/需要时创建缺少的键。

那么例如,第 y 行的总数将是sum([rs[y][x] for x in xsort])

于 2011-07-15T02:11:19.297 回答
0

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

于 2009-06-19T19:57:22.373 回答
-1

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

编辑:

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

这完全取决于您将如何报告数据。例如,如果您要进行大量数据透视或聚合,则以列主要顺序存储它可能更有意义,例如,您可以对列进行求和以获取计数。

如果您解释您要提取的信息类型,将会有很大帮助。

于 2009-06-19T19:29:09.403 回答