파이썬에서 한글을 다루다 보면, 인코딩에 대한 이슈를 그냥 지나칠 수 없다. 파이썬의 장점은 methods의 입력 데이터 형식을 지정하지 않아도 된다는 것이다.
C/C++에 익숙했던 분들은 아주 생소하게 느껴질 수 있는 부분이다.
가령 덧셈 함수를 만든다고 하면,
def sum(a,b):
return a+b
로 간단하게 할 수 있다. 여기서 a, b는 정수, 실수 모두 가능하게 된다.
하지만, a와 b가 리스트list 또는 사전dict 형태의 데이터라면 어떻게 처리해야 할까?
리스트 형식의 데이터라면, 각 i 번째 element끼리 더해서 결과를 반환하도록 하면되고,
사전 형식의 데이터라면, 같은 key 값을 갖는 데이터끼리 더해서 결과를 반환하도록 하면 될 것이다.
이제 원래 이슈로 돌아가서, 입력 데이터가 string, list, dict 중 어느 것이 든지 상관없이 데이터 값을 unicode로 변환하는 프로그램을 만들어 보자.
instance라는 함수를 통해서, 데이터가 string의 instance인지,
아니면, mutable sequence (i.e. list)의 instance인지,
아니면 mutable mapping (i.e. dict)의 instance인지.. 판단할 수 있다.
from collections import MutableMapping
from collections import MutableSequence
def convert_to_unicode(data, encoding='utf-8'):
if isinstance(data, basestring):
if not isinstance(data, unicode):
return unicode(data, encoding)
else:
return data.encode(encoding)
elif isinstance(data, MutableSequence):
# list-like object
unidata = list()
for item in data:
unidataList = convert_to_unicode(item)
unidata.append(unidataList)
return unidata
elif isinstance(data, MutableMapping):
# dict-like object
unidata = dict()
for key, value in data.items():
unidata.update([(key, convert_to_unicode(value))])
return unidata
else:
return data
'데이터과학 > 데이터 분석 실습' 카테고리의 다른 글
| Data Analysis (2): Linear Model in MATLAB (0) | 2014.01.27 |
|---|---|
| Data Analysis (1): Neuroimaging Data loading using SPM8 toolbox (11) | 2014.01.26 |
| 맥미니 몽고디비 분산 시스템 (5) - Aggregate (0) | 2013.07.20 |
| 맥미니 몽고디비 분산 시스템 (4) - Replica Set (3) | 2013.07.20 |
| 맥미니 몽고디비 분산 시스템 (3) - Sharding (1) | 2013.07.20 |