얼레벌레

슬기로운 인턴생활) DB 오류 해결하기 본문

사담

슬기로운 인턴생활) DB 오류 해결하기

낭낭이 2022. 2. 16. 20:45

아주 한가한 나날..

인턴따리가 전문연구원분들도 해결하지 못한 업무를 넘겨 맡게 되었다.

은행 대상 ESG DB 전문 개발 중 적재 오류가 발견되었고, 일부 character들이 인식 오류로 인해 ? 혹은 ?로 적재되는 문제점이 발생하였다.

 

원본과 적재본을 비교하며 사유를 파악해보니, 옾 등의 받침이 특수한 한글의 경우 ?로 대체되어 적재되었고, · 등의 자음+한자 형식의 unicode character들이 ?로 대체되어 발견되었다. 하지만, 솔직히 어떤 규칙이 있는 채로 DB 적재에 오류가 생긴 게 아니라 원본과 적재본을 비교하는데 '대체 적재를 어떻게 하길래 이런 결과가 나오는거지?' 싶었다. 자동이라는 한글도 ?5개 정도로 대체된 셀도 있었다.

처음에는 인코딩문젠가 싶었는데 내가 있는 부서는 적재팀이 아니라 확인하기 어려웠다. 

 

해결방안을 생각해보았다.

idea 1)

  • 처음 본 적재본에서의 문제는 Unicode Character 'EN DASH' (U+2013) 가 ?로 뜬다는 점이었다. 그래서 그거에 맞춰서 함수를 생성하려고 했으나 멀쩡한 한글이나 한자도 적재되며 ?나 ?로 대체된 것을 확인하여 첫번째 생각은 접었다

idea 2)

  • 결국 ?나 ?가 있는 부분을 확인하고, 해당 row에 오류가 있었는지 있었다면 어떤 column에 있었는지 확인가능한 파이썬 코드를 작성하였다. 그리고 ?나 ?는 공백으로 대체하고, 또다시 공백2개는 공백1개로 대체하는 작업을 하였다.
  • 해당 처리 방법의 문제점은 원본에서도 ?였던 부분이 공백으로 처리된다는 점이다. 하지만 어떤 부분이 오류가 있어서 ?로 나오고 어떤 부분은 오류가 없지만 원래 ?인지 알 수 없는 부분이라 모두 삭제하는 작업을 거치는 함수를 작성하였다.
file = pd.read_excel('파일명.xlsx', dtype = 'str')
file_lst = ['file1','file2','file3',...]

# cleanQMark(file) : 전체 DB에서 ?, ?삭제함수
## 각각 다른 엑셀파일로 내보내기
def cleanQMark(file):
	df = file.apply(lambda x: x.replace('\\?|?',' ',regex = True).replace(' +',' ',regex = True).replace('nan',''))
	return df

for f in file_lst:
	cleanedQFile = cleanQMark(eval(f))
	cleanedQFile.to_excel(f+'_removeq'+'.xlsx',index=False)

# cleaning(file) : 행별 ? 포함 개수, 포함 column 확인 
## 하나의 엑셀 파일, 다른 시트로 지정
def cleaning(file)
	lst = [0 for i in range(len(file))]
	col_lst = [[] for i in range(len(file))]
	for i in list(file.columns):
		indexLst = list(file[file[i].astype(str).str.contains('\\?|?')].index)
		for j in range(len(file)):
			if j in indexlst:
				col_lst[j].append(i)
				lst[j] += 1
			else:
				lst[j] += 0
	file['NUM_Q'] = lst
	file['COL_Q'] = col_lst
	funcCleanFile = file.replace('nan','')
	return funcCleanFile

writer = pd.ExcelWriter('파일명.xlsx',engine='xlsxwriter')
for f in file_lst:
	cleaned_file = cleaning(eval(f))
	cleaned_file.to_excel(writer,sheet_name = f, index=False)
writer.save()

 

다음주 중에나 이 DB 오류 문제가 어떻게 해결될지 해결 방안이 나올 것 같다.

인턴을 하면서 나날이 늘어가는 파이썬 실력..

고오급 문법은 구사하지 못하지만 확실히 실무에 필요한 능력이 향상하는 것 같기도 하고 ? 아님 말고~

Comments