간단한 데이터 전처리 예제
먼저 데이터를 가져올 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()
]