2013-10-03 69 views
2

所以,我試圖做一個相當簡單的統計顯着性計算。計算我離散分佈的上5%

我的程序創建的數據集的元組的列表:

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

u必須做一些手工計算,這裏是簡單的例子:

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) 
+1

謝謝,這個效果很好。我想沒有避免手動計算。 –

0

一種可能的方式做這將是從最高頻率遍歷到最低,然後當你到了77次出現停止並使用它作爲你的5%點。保存該次數,然後繼續下一組元組。如果元組存儲在字典或二維數組中,則列表等只需使用foreach進行迭代,並將出現77的點保存到列表中並打印列表。一種天真的做法,但可以解決你的問題。