2

所以,我正在尝试做一个相当简单的统计显着性计算。

我的程序将数据集创建为元组列表:

example_dataset = [(0, 629), (1, 546), (2, 255), (3, 72), (4, 27), (5, 2), (6, 4), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0), (13, 0), (14, 0), (15, 0)]

每个数据集都是相同的,这意味着它是一个包含 16 个元组的列表,其中第一项是 0 次出现,最后一项是 15 次出现。

例如,在上面的示例数据集中,第一个元组意味着我的 629 个 DNA 序列出现了 0 次,我的 546 个 DNA 序列出现了 1 次等。

每个数据集也是相同的,序列总数始终为 1535。

5% 的序列是 76.75。我想知道每个数据集的上 5%(外观)在哪里。在上面的数据集中,在 15 次出现到 4 次出现之间我有 33 个序列(4 + 2 + 27),在 15 次出现到 3 次出现之间我有 105 个序列。

这意味着 76.75 个序列介于 3 到 4 次出现之间。

我如何发现每个数据集的这些信息,而不是通过手动计算?

我需要以某种方式创建一个函数,该函数将获取元组列表作为输入和输出 4(因为 3 已经超过 76.75 个序列)。

another_example_dataset = [(0, 331), (1, 532), (2, 398), (3, 180), (4, 74), (5, 17), (6, 3), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0), (13, 0), (14, 0), (15, 0)]

另一个例子,对于上述数据集,输出应该是 5(因为在 4 处我们已经越过了 76.75,76.75 介于 4 到 5 之间)。

不要求任何人为我编写此代码,但如果提供有用的命令或提示,将不胜感激。:)

谢谢,

埃亚尔

4

2 回答 2

0

一种可能的方法是从最高频率到最低频率进行迭代,然后当您达到 77 次出现时停止并将其用作您的 5% 点。保存出现次数并继续下一组元组。如果元组存储在字典或二维数组、列表等中,只需使用 foreach 迭代并将 77 出现的点保存到列表并打印列表。一种天真的方法,但可以解决你的问题。

于 2013-10-03T14:52:31.313 回答
0

你必须做一些手动计算,这里是一个简单的例子:

example_dataset = [(0, 629), (1, 546), (2, 255), (3, 72), (4, 27), (5, 2), (6, 4), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0), (13, 0), (14, 0), (15, 0)]
another_example_dataset = [(0, 331), (1, 532), (2, 398), (3, 180), (4, 74), (5, 17), (6, 3), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0), (13, 0), (14, 0), (15, 0)]

def CalculateIndex(dataset):
    sum5 = 0
    for i in range(15,-1,-1):
        sum5 += dataset[i][1]
        if sum5 > 76.75:
            return i+1

print "index for example_dataset is: ", CalculateIndex(example_dataset)
print "index for another_example_dataset is: ", CalculateIndex(another_example_dataset)
于 2013-10-03T15:29:20.430 回答