2013-01-19 1 views
0

최근 큰 데이터 세트의 빈도 분포를 보여주는 막대 그래프를 작성해야합니다. 데이터 세트가 작 으면이 작업이 단순해야합니다. 그러나 필자가 플롯해야하는 데이터 세트에는 약 800,000,000 개의 숫자가 들어 있으며 각 숫자는 4 바이트를 차지한다고 가정합니다. 각 텍스트는 한 줄씩 하나의 텍스트 파일에 저장됩니다. 텍스트 파일은 약 4GB입니다. GNUPLOT을 시도했지만이 데이터 세트를 처리하기에 충분한 메모리가 없다는 불만을 제기합니다. 누군가이 문제를 해결하는 방법이나이 일을하기위한 다른 도구를 제안 할 수 있습니까?큰 입력에 대한 빈도 분포 생성에 대해

감사합니다, 톰

+0

: 당신은 파이썬의 최신 버전에있는 경우

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 

는, 이것은 Counter에 더욱 쉽게 할 수 있습니다 : 파일을 가정 정수를 포함 네가 가진 것. 당신은 각 숫자가 4 바이트를 차지한다고 말합니다.하지만 한 줄에 하나의 숫자가 하나의 텍스트 파일에 저장되어 있기 때문에 아스키 파일이라는 것을 의미합니다. 숫자가 부동 소수점입니까? 정수? 데이터를 보관해야합니까, 아니면 단순히 카운트가 충분합니까? – mgilson

답변

0

내가 python을 사용하십시오. 사전을 만드는 것만 큼 쉽습니다. 난 당신에 대해 좀 더 명시 할 필요가 있다고 생각

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