간단한 데이터 전처리 예제

먼저 데이터를 가져올 phonenumber.txt 와 전처리한 데이터를 저장할 phonenumber_preprocess.txt 를 만든다.

그리고 phonenumeber.txt에는 다음과 같이 데이터를 저장하였다.

010-2220-3434  
01012345678  
010-12345675  
공일공-2220-3434
공일공2220오칠삼육

모두 제각기 다른 방법으로 핸드폰 번호가 입력되어있다. 우리는 이 데이터들을 전처리 과정을 통해 010****#### 형태로 통일시켜 phonenumber_preprocess.txt 파일에 저장할 것이다.

먼저 다음과 같이 변환할 문자와 변환될 문자를 mapping한 dictionary 자료형을 준비한다.

korean2number = {  
    '공' : '0',
    '일' : '1',
    '이' : '2',
    '삼' : '3',
    '사' : '4',
    '오' : '5',
    '육' : '6',
    '칠' : '7',
    '팔' : '8',
    '구' : '9',
    ' ' : '',
    '-' : '',
    '\n' : ''
}

다른 작업은 컴퓨터가 다 해주겠지만 이것만큼은 수고스럽더라도 우리 인간이 어쩔 수 없이 하여야 한다. 나중에 readlines 함수로 입력 파일에서 데이터를 읽어올 때 \n도 같이 가져와지므로 \n 을 제거하기 위해 dictionary에 추가해주었다.

다음은 데이터를 전처리하는 함수이다.

def preprocess(phonenumber):  
    for key, value in korean2number.items():
        phonenumber = phonenumber.replace(key,value)
    return phonenumber

어떤 형식의 핸드폰 번호가 들어오더라도 아까 만든 dictionary를 이용하여 동일한 형태의 핸드폰 번호로 반환해준다. 이제 데이터 전처리를 하기 위한 모든 준비가 끝났다.

with open('./phonenumber.txt','r') as input_file:  
    with open("./phonenumber_preprocessed.txt","w") as out_file:
        phonenumber_list = [
            preprocess(line)
            for line in input_file.readlines()
        ]

        for phonenumber in phonenumber_list:
            out_file.write(phonenumber + '\n')

위의 코드를 실행 후, phonenumber_preprocessed.txt 파일을 보면

01022203434  
01012345678  
01012345675  
01022203434  
01022205736  

이렇게 예쁘게 정리되어 있을 것이다. 위의 코드는 훌륭히 작동하지만 다음과 같이 좀 더 깔끔하게 리팩토링 할 수 있다.

with open('./phonenumber.txt','r') as input_file:  
    with open("./phonenumber_preprocessed.txt","w") as out_file:
        [
            out_file.write(
                preprocess(line) + '\n'
            )

            for line in input_file.readlines()
        ]