关于创建针对大输入的频率分布

时间:2013-01-19 18:01:49

标签: gnuplot frequency-distribution

最近我需要创建一个直方图,显示大数据集的频率分布。如果数据集很小,这应该是一个简单的工作。但是,我需要绘制的数据集包含大约800000000个数字(假设每个数字需要4个字节),它们都存储在一个文本文件中,每行一个数字。文本文件大约为4 GB。我试过GNUPLOT,但它抱怨没有足够的内存来处理这个数据集。有人可以建议如何解决这个问题,或任何其他工具来完成这项工作吗?

谢谢, 汤姆

1 个答案:

答案 0 :(得分:0)

我使用python。它就像构建字典一样简单。假设您的文件包含整数:

from collections import defaultdict

d = defaultdict(int)
with open('datafile') as fin:
    for line in fin:
        d[int(line)] += 1

for item,number_of_occurances in sorted(d.items()):
    print item,number_of_occurances

如果您使用的是较新版本的python,使用Counter可以更轻松:

from collections import Counter
with open('datafile') as fin:
    d = Counter(int(line) for line in fin)

for item,number_of_occurances in sorted(d.items()):
    print item,number_of_occurances