3

次のようなデータを含むファイルがあります。

  Entry   Freq.
    2     4.5
    3     3.4
    5     4.9
    8     9.1
    12    11.1
    16    13.1
    18    12.2
    22    11.2

今私が解決しようとしている問題は、エントリに基づいてグループ化されたデータ(範囲10)にし、範囲内の頻度を合計したいということです。たとえば、上記の表をグループ化すると、次のようになります。

    Range   SumFreq.
     0-10    21.9(i.e. 4.5 + 3.4 + 4.9 + 9.1)
     11-20   36.4

次のコードで列の分離に到達しましたが、範囲の分離を実行できません:私のコードは次のとおりです:

inp = ("c:/usr/ovisek/desktop/file.txt",'r').read().strip().split('\n')
for line in map(str.split,inp):
    k = int(line[0])
    l = float(line[-1])

これまでのところ問題ありませんが、どうすれば10の範囲でデータをグループ化できますか。

4

4 に答える 4

3

1つの方法は、整数除算によって正しいビンが得られるという事実を[ab]使用することです。

import collections
bin_size = 10
d = collections.defaultdict(float)
for line in map(str.split,inp):
    k = int(line[0])
    l = float(line[-1])
    d[bin_size * (k // bin_size)] += l
于 2012-05-31T08:25:10.237 に答える
0

そこにコードを追加するだけです。

def group_data(range):
    grouped_data = {}
    inp = ("c:/usr/ovisek/desktop/file.txt",'r').read().strip().split('\n')
    for line in map(str.split,inp):
        k = int(line[0])
        l = float(line[-1])
        range_value = k // range
        if grouped_data.has_key(range_value):
            grouped_data[range_value]['freq'] = groped_data[range_value]['freq'] + l
        else:
            grouped_data[range_value] = {'freq':l, 'value':[str(range_value * range) + ':' + str((range_value + 1) * range )]}
    return grouped_data

これにより、次のような辞書が作成されます。

{1 : {'value':'0-10', 'freq':21.9} , .... }
于 2012-05-31T08:25:53.007 に答える
0

これで、問題なくテストを開始できます。

inp = open("/tmp/input.txt",'r').read().strip().split('\n')
interval = 10
index = 0
resultDict = {}
for line in map(str.split,inp):
        k = int(line[0])
        l = float(line[-1])
        rangeNum = (int)  ((k-1)/10 )
        rangeKeyName = str(rangeNum*10+1)+"-"+str((rangeNum+1)*10)
        if(rangeKeyName in resultDict):
                resultDict[rangeKeyName] += l
        else:
                resultDict[rangeKeyName] = l

print(str(resultDict))

出力します:

{'21-30': 11.199999999999999, '11-20': 36.399999999999999, '1-10': 21.899999999999999}
于 2012-05-31T08:34:15.660 に答える
-1

あなたはこのようなことをすることができます:

fr = {}
inp = open("file.txt",'r').read().strip().split('\n')
for line in map(str.split,inp):
    k = int(line[0])
    l = float(line[-1])
    key = abs(k-1) / 10 * 10

    if fr.has_key(key):
        fr[key] += l
    else:
        fr[key] = l

for k in sorted(fr.keys()):
    sum = fr[k]
    print '%d-%d\t%f' % (k+1 if k else 0, k+10, sum) 

出力:

0-10    21.900000
11-20   36.400000
21-30   11.200000
于 2012-05-31T08:57:02.150 に答える