所以,我正在尝试进行一个相当简单的统计显着性计算。
我的程序将数据集创建为元组列表:
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个出现。
例如,在上面的示例数据集中,第一个元组表示我的DNA序列的629次出现0次,我的DNA序列中有546次出现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之间)。
不要求任何人为我编码,但有用的命令或提示将不胜感激。 :)
谢谢,
的Eyal
答案 0 :(得分:0)
一种可行的方法是迭代从最高频率到最低频率然后当你达到77次出现时停止并将其用作5%点。保存该次数,然后转到下一组元组。如果元组存储在字典或二维数组中,列表等只是用foreach迭代并将77出现的点保存到列表中并打印列表。这种天真的做法可以解决你的问题。
答案 1 :(得分: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)