💡 Key Takeaways
- Step 1: Understand Your Data Before You Touch It
- Step 2: Standardize Your Structure and Format
- Step 3: Handle Missing Values Strategically
- Step 4: Identify and Remove Duplicate Records
나는 잘못된 쉼표 하나 때문에 3주 동안의 작업을 잃었던 그 날을 절대 잊지 않을 것이다. 2011년, 나는 시카고의 중간 규모 보험 회사에서 주니어 데이터 분석가로 일하고 있었다. 고객 세분화 모델을 구축하는 데 거의 한 달을 보냈지만, 내 전체 데이터셋이 일관되지 않은 날짜 형식과 깨끗한 주소 필드에 숨어 있는 특수 문자 때문에 손상되었다는 것을 발견했다. 모델은 쓰레기였다. 내 상사는 분노했다. 그리고 나는 내 경력에서 가장 힘든 교훈을 배웠다: 엉망인 데이터는 단순히 너를 느리게 하는 것뿐만 아니라, 네 작업을 완전히 탈선시킬 수 있다.
💡 주요 요점
- 1단계: 데이터를 만지기 전에 이해하기
- 2단계: 구조와 형식을 표준화하기
- 3단계: 결측값을 전략적으로 처리하기
- 4단계: 중복 레코드 식별 및 제거하기
그 고통스러운 경험은 내 직업 생활의 다음 13년을 정의할 경로로 나를 이끌었다. 오늘날 데이터 품질과 거버넌스를 전문으로 하는 시니어 데이터 엔지니어로서, 나는 셀 수 없이 많은 데이터셋을 정리했다—50행짜리 스프레드시트에서 포춘 500대 기업을 위한 멀티 테라바이트 데이터베이스에 이르기까지. 나는 상상할 수 있는 모든 형태의 데이터 혼란을 보았다: 토끼처럼 증가하는 중복 레코드, 제로로 위장한 널 값, HTML 태그로 오염된 텍스트 필드, 그리고 이름을 알아볼 수 없는 글자로 바꾸는 인코딩 문제.
사실 불완전한 데이터는 어디에나 존재한다. 2023년 가트너 연구에 따르면, 낮은 데이터 품질은 조직에 연간 평균 1,290만 달러의 비용을 초래한다. IBM은 불량 데이터가 미국 경제에 연간 약 3.1조 달러의 비용을 초래한다고 추정한다. 그러나 이러한 충격적인 숫자에도 불구하고 대부분의 조직은 여전히 데이터 정리를 사후 처리로 취급하며, 분석을 위한 길에 급하게 처리해야 할 무엇으로 여긴다.
이 기사는 그것을 바꾸려는 나의 시도이다. 다음 여러 섹션에서는 나는 엉망이고 신뢰할 수 없는 데이터를 깨끗하고 분석 준비가 된 데이터셋으로 변환하기 위해 사용하는 정확한 10단계 프로세스를 안내할 것이다. 이것은 이론적인 개념이 아니라—내가 수년간의 실무를 통해 다듬은 전투 테스트된 기술들이다. 단순한 CSV 파일을 다루든 복잡한 다중 출처 데이터셋을 다루든, 이 프레임워크는 데이터 정리를 체계적이고 효율적으로 접근할 수 있도록 도와줄 것이다.
1단계: 데이터를 만지기 전에 이해하기
초보자들이 저지르는 가장 큰 실수는 먼저 작업 중인 내용을 이해하지 않고 정리 작업에 곧바로 뛰어드는 것이다. 이는 모델을 모른 채 자동차 엔진을 고치려 하는 것과 같다. 탐색에서 시작해야 한다.
새로운 데이터셋을 받으면, 어떤 변경을 하기 전에 최소 30분은 이를 탐색하는 데 보낸다. 나는 Excel, Google Sheets 또는 CSV 뷰어와 같은 도구로 열고 그 내용을 훑어본다. 패턴, 변칙 및 구조를 찾고 있다. 총 몇 개의 행과 열이 있는가? 열 헤더가 무엇을 말해주고 있는가? 명확한 섹션이나 그룹이 있는가? 병합된 셀, 색상 코드, 또는 임베디드 소계와 같은 즉각적인 빨간 깃발이 보이는가?
다음으로 각 열의 기본 통계를 생성한다. 숫자 필드의 경우 최소값, 최대값, 평균 및 중앙값을 알고 싶다. 텍스트 필드의 경우 고유 값 수와 가장 일반적인 항목을 보고 싶다. 이 통계적 개요는 단순히 행을 스크롤할 때는 보이지 않는 문제를 종종 드러낸다. 예를 들어, "수량" 열에서 최소값이 -500이면 이는 조사해야 할 명확한 데이터 품질 문제다.
이 단계에서 데이터 사전을 작성하기도 한다—각 필드를 설명하고 예상되는 데이터 유형과 목적, 그리고 알려진 문제를 기록한 간단한 문서이다. 이것은 추가 작업처럼 보일 수 있지만, 나중에 엄청난 시간을 절약해 준다. 정리 작업에 몰두하다가 혼란스러운 무언가를 마주치면, 몇 시간 전 배운 것을 기억하려고 애쓰기보다는 사전을 참조할 수 있다.
문서화는 여러 출처의 데이터를 다루거나 미래에 정리 프로세스를 반복해야 할 경우 특히 중요하다. 나는 한 번 47개의 지역 사무소에서 월별 판매 데이터를 받는 프로젝트에서 일한 적이 있는데, 각 사무소마다 약간씩 다른 형식 규칙이 있었다. 첫 달에 포괄적인 데이터 사전을 만들었던 덕분에 이후 한 해 동안 수백 시간을 절약했다.
마지막으로, 나는 항상 다른 작업을 하기 전에 원본 데이터의 백업 사본을 만든다. 이것은 강조할 수밖에 없다: 절대 데이터의 유일한 복사본에서 직접 작업하지 마라. 내가 너무 많은 사람들이 소스 파일을 실수로 덮어쓰고 대체할 수 없는 정보를 잃는 것을 보았다. 복사본을 만들고 명확하게 날짜 스탬프를 붙여 이름을 짓고 안전한 곳에 저장하라. 미래의 당신이 고마워할 것이다.
2단계: 구조와 형식을 표준화하기
데이터를 이해한 후, 다음 단계는 일관된 구조를 설정하는 것이다. 일관되지 않은 형식은 내가 마주치는 가장 일반적이고 실망스러운 데이터 품질 문제 중 하나이다. 이는 여러 가지 방법으로 나타난다: 한 행에 "01/15/2024"로 쓰인 날짜와 다른 행에 "January 15, 2024"로 쓰인 날짜, 대시가 있는 전화번호와 없는 전화번호, 일관되지 않은 대문자 사용, 그리고 혼합된 측정 단위 등.
"더러운 데이터는 단순한 기술적 문제가 아니라 비즈니스 리스크이다. 나쁜 데이터에 기반하여 내린 모든 결정은 어둠 속에서 내린 결정이다."
나는 날짜 형식 표준화부터 시작한다. 날짜는 다루기 힘든 문제인데, 서로 다른 시스템과 지역이 다르게 형식을 정하고 있기 때문이다. "03/04/2024"는 3월 4일인가, 4월 3일인가? 맥락이 없으면 알 수 없다. 나는 항상 날짜를 ISO 8601 형식(YYYY-MM-DD)으로 변환하는데, 이는 명확하고 정렬이 제대로 된다. 데이터에 시간이 포함되어 있다면 YYYY-MM-DD HH:MM:SS 형식을 사용하라.
다음은 텍스트 형식화를 다룬다. 나는 대문자화 규칙을 설정하고 이를 일관되게 적용한다. 이름의 경우 일반적으로 제목 대문자 형식을 사용한다(예: John Smith). 코드나 식별자인 경우 대문자를 사용할 수 있다(SKU-12345). 구체적인 선택보다 일관성이 더 중요하다. 모든 텍스트 필드에서 선행 및 후행 공백도 제거한다—이러한 보이지 않는 문자는 데이터를 일치시키거나 필터링할 때 끝없는 문제를 야기한다.
숫자 형식화도 주의가 필요하다. 숫자 필드에서 통화 기호, 백분율 기호 및 천 단위 구분자를 제거하라. 이를 순수 숫자로 저장하고 데이터를 제시할 때만 형식을 적용한다. 나는 한 번 2시간 동안 계산 오류를 디버깅한 끝에, 어떤 숫자가 쉼표가 포함되어 텍스트로 저장되어 있다는 것을 깨달았다. 공식은 "1,000"을 텍스트로 보고, "1000"을 숫자로 보고 있어서 완전히 일관되지 않은 결과를 낳았다.
범주형 데이터의 경우, 허용되는 값의 표준화된 목록을 생성하고 모든 값을 그 목록에 매핑한다. "상태" 필드에 "활성", "비활성" 또는 "보류 중"만 포함되어야 하는 경우, "active", "ACTIVE", "In Progress" 및 "Pend"와 같은 변형이 있다면 이를 정리해야 한다. 일반적으로 원래 값과 표준화된 해당 값이 표시된 매핑 테이블을 생성한 다음, 찾기 및 바꾸기 또는 조회 기능을 사용하여 수정을 적용한다.
열 헤더도 특별한 주의를 필요로 한다. 나는 이를 명확하고 간결하며 일관되게 바꾼다. 공간(대신 밑줄 사용), 특수 문자 및 모호한 약어는 피한다. 대부분의 데이터 처리 도구에서 "Cust_Name"은 "Customer Name"보다 낫고, 6개월 후 코드를 읽을 때 "order_date"는 "Ord_Dt"보다 더 명확하다.
3단계: 결측값을 전략적으로 처리하기
결측 데이터는 불가피하다. 내 경험상, 사실상 모든 실제 데이터셋에는 공백이 존재한다. 문제는 결측값을 발견할 것인가가 아니라, 그것들을 어떻게 처리할 것인가이다. 당신이 선택한 접근 방식은 분석 결과에 크게 영향을 미칠 수 있으므로, 이 단계에서는 신중한 생각이 필요하다.
| 데이터 문제 유형 | 일반적인 원인 | 비즈니스 영향 | 정리 난이도 |
|---|---|---|---|
| 중복 레코드 | 수동 입력, 시스템 병합, 고유 식별자 부족 | 부풀려진 메트릭, 자원 낭비, 고객 혼란 | 중간 |
| 결측값 | 선택적 필드, 데이터 마이그레이션 오류, 센서 고장 | 불완전한 분석, 편향된 모델, 보고서 공백 | 높음 |
| 형식 불일치 | 여러 데이터 출처, 지역 차이, 유산 시스템 | 조인 실패, 파싱 오류, 통합 실패 | 낮음 |
| 인코딩 문제 | 문자 집합 불일치, 파일 전송, 데이터베이스 마이그레이션 | 손상된 텍스트, 검색 실패, 표시 문제 | 중간 |
| 이상값 및 변칙 | 데이터 입력 오류, 시스템 오류, 사기 활동 | 왜곡된 통계, 잘못된 통찰, 모델 저하 | 높음 |
먼저, 데이터셋에서 결측값이 나타나는 모든 방법을 식별한다. 널 값은 명백한 것이지만, 결측 데이터는 종종 disguise된다. 나는 "N/A", "NULL", "None", "—", 빈 문자열, 제로, 999 또는 단일 공백으로 표시된 결측값을 포함한 데이터셋을 본 적이 있다. 이러한 모든 변형을 찾아서 어떻게 처리할 것인지 결정해야 한다.