머신러닝의 8할은 전처리? SQL로 지저분한 데이터 예쁘게 다듬기 (문자열/날짜 함수)

2025. 12. 15. 11:56SQL

반응형

데이터 분석이나 머신러닝을 공부하다 보면 "업무 시간의 80%는 데이터 전처리(Preprocessing)에 쓴다"는 말을 귀에 딱지가 앉도록 듣는다.
현업의 데이터는 교과서처럼 깔끔하지 않기 때문이다.

"이름과 성이 떨어져 있어서 합쳐야 해요", "이메일 대소문자가 섞여 있어요", "날짜에서 '월(Month)'만 뽑고 싶어요"...
이런 요구사항을 엑셀로 처리하다간 날이 샌다.

오늘은 SQL의 문자열 함수날짜 함수를 이용해, 원본 데이터(Raw Data)를 분석하기 좋은 형태로 가공하는 법을 실습했다. 데이터 분석가의 '칼과 가위' 같은 도구들이다.

1. 떨어진 이름 합치기 (|| 연산자)

고객 테이블(customer)을 열어보니 성(last_name)과 이름(first_name)이 따로국밥이다.
분석할 때는 'Full Name'이 필요할 때가 많다. 이걸 합쳐보자.

SELECT first_name || ' ' || last_name AS full_name,
       email
FROM customer;

PostgreSQL에서는 || (파이프 기호 2개)가 문자열을 이어 붙이는 본드 역할을 한다. 이름 사이에 ' '(공백)을 넣어주는 센스가 필요하다.

 

2. 문자열 자르기 (LEFT)

"고객 이름의 첫 글자(이니셜)만 따오고 싶다면?"
엑셀의 LEFT 함수와 똑같은 친구가 있다.

SELECT email,
       LEFT(first_name, 1) || LEFT(last_name, 1) AS initials
FROM customer;

LEFT(컬럼, 1)은 왼쪽에서 1글자만 가져오라는 뜻이다. 이니셜 추출이나 ID 앞자리 분류할 때 유용하다.

 

3. 대문자로 통일하기 (UPPER) ⭐

머신러닝 학습 시 컴퓨터는 Appleapple을 완전히 다른 글자로 인식한다.
그래서 텍스트 분석 전에 대문자(UPPER)소문자(LOWER)로 통일해 주는 것이 국룰이다.

SELECT email,
       UPPER(email) AS 대문자_이메일
FROM customer;

모든 이메일이 깔끔하게 대문자로 변환되었다.

 

4. 날짜 쪼개기 (EXTRACT)

2007-02-15 22:25:46 처럼 시분초까지 있는 데이터에서 "몇 월(Month)"인지, "무슨 요일"인지만 뽑고 싶을 때가 많다.
(월별 매출 추이를 보거나, 요일별 방문자를 셀 때 등)

SELECT payment_date,
       EXTRACT(YEAR FROM payment_date) AS 연도,
       EXTRACT(MONTH FROM payment_date) AS 월,
       EXTRACT(DAY FROM payment_date) AS 일
FROM payment;

EXTRACT 함수를 쓰면 연, 월, 일을 숫자로 쏙쏙 뽑아낼 수 있다.

 

5. 기간 계산하기 (AGE vs 뺄셈)

"이 고객이 DVD를 며칠 동안 빌렸을까?"
반납일(return_date)에서 대여일(rental_date)을 빼면 된다.

SELECT rental_date, return_date,
       return_date - rental_date AS 대여기간,
       AGE(return_date, rental_date) AS 상세기간
FROM rental
WHERE return_date IS NOT NULL -- 반납 안 한(NULL) 건은 제외
ORDER BY 대여기간 DESC
LIMIT 10;

  • 빼기(-): 9 days 04:00:00 형태로 직관적으로 보여준다.
  • AGE(): 연/월/일 단위까지 상세하게 계산해 준다.

 

📝 오늘의 문법 요약 (Cheat Sheet)

데이터를 요리조리 다듬는 칼과 가위 같은 도구들이다.

함수 설명 예시
|| 문자열 합치기 성 || ' ' || 이름
LEFT 왼쪽부터 자르기 LEFT(이름, 1)
UPPER 대문자로 변환 UPPER(이메일)
EXTRACT 날짜 요소 추출 EXTRACT(MONTH FROM 날짜)
AGE 기간 계산 AGE(종료일, 시작일)

[데이터 분석 독학기 #9 끝]

반응형