틀린 그림 찾기
같은 문자열로 찾았는데 왜 있다가 없다가 할까?
<문제 상황>
AI허브에서 데이터를 받았는데 label 데이터와 image 데이터 수가 달랐다. (이건 시작에 불과했음을... 데이터가 볼수록 이상하다. 사기 당했다.) label이 있는 이미지만 사용할 수 있으니까 img_file_name 컬럼을 추출해서 txt 파일로 만들고, 이 파일과 매치되는 이름의 데이터만 새로운 폴더로 복사해 모델을 만들려고 했다.
1. 기존 데이터프레임의 컬럼으로 txt 파일 생성
2. txt 파일과 매치되는 이름의 이미지만 새 폴더에 복사
3. 새 폴더에서 파일명을 리스트로 받아오고 데이터프레임으로 변환
4. 파일명 데이터프레임과 기존 데이터프레임을 join 해서 이미지가 있는 데이터만 남기기
이렇게 기깔나는 계획을 세웠는데 파일명 데이터프레임과 기존 데이터프레임이 도저히 연결이 안 되는 이슈가 발생했다. inner join하면 데이터프레임이 안 생기고, 파일명에 기존df를 left join 해봐도 파일명 컬럼 제외 전부 NaN값으로 채워지는 상황.
대체 왜 이런 건지 모르겠어서 1번부터 다시 세 번이나 반복했는데... txt 파일에서 파일명을 복사해보고 답을 찾았다. 한글 데이터가 깨져서 보기엔 같은 이름이지만 컴퓨터에서는 다른 이름이었던 거다.
길이를 비교해보면 더 확실히 알 수 있다. 보기엔 똑같은 문자열이지만 길이가 다르다. 한글 데이터 진짜 이럴 거니.
<해결>
# unicodedata.normalize(form, unistr)
# form : 'NFD' 자음 모음 분리 or 'NFC' 자음 모음 결합
# unistr : 적용할 string 데이터를 매개변수로 지정
# 개별 데이터에 적용
data1 = df['file_name'].iloc[6186]
data1_uni = unicodedata.normalize('NFC', data1)
print(len(data1_uni))
>>> 36
# 데이터프레임에 적용
df['img_file_name'] = df['file_name'].apply(lambda x: unicodedata.normalize('NFC', x))
검색을 통해 unicodedata 모듈을 알게 되었다. 한글의 자음과 모음을 분리할 수도 있고 결합할 수도 있는 모듈이다. 나의 경우 데이터 수가 적은 파일명 데이터프레임에 자음 모음 결합을 진행했다. 단일 데이터로 먼저 시험해보고 lambda, apply 함수를 사용했다.
하루종일 삽질했는데 해결해서 시원하기도 하고 허무하기도 하고.
업무에서는 속도가 중요하지만, 공부할 때는 직접 검색해서 찾아보고 삽질하는 시간도 필요하다고 생각해서 프로젝트에 gpt를 잘 사용하지 않고 있다. gpt4로 유료결제까지 했음에도! 이렇게 문제가 발생할 때면 내 생각이 맞다는 게 느껴진다. 평생 기억할 거야 한글 데이터 이슈...
'프로젝트' 카테고리의 다른 글
IITP 4기 최종 프로젝트 결과 및 회고 : 대상 수상! (0) | 2024.07.04 |
---|---|
로컬 프로젝트 폴더 GitHub 업로드 / There isn’t anything to compare / everything up-to-date 에러 해결 (0) | 2024.07.01 |
애증의 AI 허브 데이터 (0) | 2024.06.05 |
티스토리 hELLO 스킨 본문 글자색, 코드블럭 테마 커스텀 (0) | 2024.04.03 |
Colab에서 Kaggle api로 데이터 다운 받아서 사용하기 (0) | 2024.03.27 |