0

だから私は周波数スペクトルを生成しようとしています。それを行うために、データを追加した列からデータをビンにソートしようとしています。何らかの理由で、5 つのビンすべてで値が 0 になるため、コードが機能しません。

コードは次のとおりです。

minprop = 0
minprop1 = 0
minprop2 = 0
minprop3 = 0
minprop4 = 0 

for x in range(1,100):

    if minorallelefreq[x] <= 0.1:
        minprop = minprop + 1 
    if minorallelefreq[x] > 0.1 and minorallelefreq[x] <= 0.2: 
        minprop1 = minprop1 + 1 
    if minorallelefreq[x] > 0.2 and minorallelefreq[x] <= 0.3: 
        minprop2 = minprop2 + 1
    if minorallelefreq[x] > 0.3 and minorallelefreq[x] <= 0.4: 
        minprop3 = minprop3 + 1
    if minorallelefreq[x] > 0.4 and minorallelefreq[x] <= 0.5:
        minprop4 = minprop4 + 1



bin1 = minprop/float(counter)
bin2 = minprop1/float(counter)
bin3 = minprop2/float(counter)
bin4 = minprop3/float(counter)
bin5 = minprop4/float(counter)  
print "Bin1 (0-0.1)=", bin1, "\t", "Bin2 (0.1-0.2)=", bin2, "\t", "Bin3 (0.2-0.3)=", bin3, "\t", "Bin4 (0.3-0.4)=", bin4, "\t", "Bin5 (0.4-0.5)=", bin5

したがって、ループが機能しなかった理由は、Python が私の値 (すべて 10 進数) を 10 進数として読み取らなかったためであることが判明しました。そのため、float(minorallelefreq[x]) に変更する必要がありましたが、うまくいきました。

4

2 に答える 2

4

このコードにはいくつかのバグの可能性があります

  1. int(0.1) => 0 なので、負の値がない限り、minprop は常に 0 になります。
  2. minprop4 のインデントはありません。値が同時に > 0.4 と <= 0.4 になることはできないため、設定されることはありません。
  3. 100 個の要素があり、それらがすべて 0 から 0.4 の間にあると仮定します。

予想される値ではなく、実際の値に基づいて自動的にバケット化することをお勧めします。

import collections
buckets = collections.Counter()

for value in minorallfreq:
    bucket = int(value * 10) / 10.0
    buckets[bucket] += 1
于 2013-10-25T21:28:24.483 に答える