0

こんにちは、次のようなタブ区切りのファイルがあるとします (各フィールドはタブ スペースで区切られています)。

Name    ID    Country    GPA
Tom    id1    USA        3.4
Jon    id2    Canada    
Amy           UK         3.0
Kevin  id4    Scotland    
Kris                     3.1

ここで name の密度 = 1.0 は 100% ID の密度は 0.6 で 60% (2 つのフィールドが欠落) です Country の密度は 0.8 GPA の密度も 0.6

Pythonを使用してファイルのこれを見つける方法は? また、40 GB を超える数千のファイルに対してこれを行う必要があるため、効率的で高速なアルゴリズムが必要です。Map Reduce コードも機能します。
前もって感謝します :)

4

2 に答える 2

1
from collections import Counter
from itertools import izip
import csv

with open(filename, 'rb') as f:
    reader = csv.reader(f, delimiter='\t')
    keys = next(reader)
    counts = Counter()
    for i, row in enumerate(reader):
        counts.update(k for k, v in izip(keys, row) if v)
    line_count = i + 1
    for k in keys:
        print k, 'density:', 1.0 * counts[k] / line_count
于 2012-09-04T22:07:37.773 に答える
0
f = open(name,'r')
head = f.readline().strip().split('\t')
num = 0
has = [0]*len(head)
for line in f:
    num += 1
    for (i,x) in enumerate(line.strip().split('\t')):
        if x:
            has[i] += 1

print head
print [float(x)/num for x in has]
于 2012-09-04T22:09:00.707 に答える