2004년 7월 1일 목요일

data sampling을 통한 크기 줄이기.

data가 1Gbytes 쯤 되는 text 파일이 있다고 하자.
너무 크기 때문에 인간이 한 번에 checking하기 쉽지 않다.
왠만한 text editor에서 불러오기 조차 힘들다.

이 데이터가 line단위로 되어 있고 sort하여 유사한 line, pattern끼리 옆 줄에 모이게 된다고 치면
similarity(유사도) 계산을 통해 n%(70~80) 이하 되는 line을 filtering하고
sampling을 통해 1/10 정도 또 줄이면
1Gbytes의 파일도 5Mbytes 정도로 줄일 수 있다.

이 technique를 쓸 때 주의할 점 - 반드시 similiarity를 먼저 filtering하고 sampling한다.
반대로 했을 때는 그리 좋지 못한 data를 얻을 수 있다. (포본성 부족)

유사도 계산툴
http://synergy.kaist.ac.kr/~ilashman/bbs/view.php?id=tips&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=453

sampling툴
$ cat nsampler.pl
#!/usr/bin/perl

use Getopt::Std;

# frequency의 배수 번째 line만 출력한다.
# data가 너무 클 때 1/f의 확률로 data를 sampling한다.

$frequency = 10;

%args = ();
getopts("f:", \%args);

if ($args{f}) {
    $frequency = $args{f};
}

$count = 0;
while($line = <STDIN>)
{
    if ($count % $frequency == 0) {
        print $line;
    }
    ++$count;
}

댓글 없음:

댓글 쓰기