딥러닝 데이터 전처리: Pandas와 NumPy 완전 활용법(Python DeepLearning)
딥러닝 모델의 성패는 데이터 전처리에서 결정됩니다. Pandas와 NumPy를 통해 데이터 품질을 10배 끌어올리는 실전 노하우를 알려드립니다.
안녕하세요, ICT리더 리치입니다. 데이터 기반 딥러닝 프로젝트를 진행할 때 여러분은 어떤 도구를 사용하고 계신가요?
많은 분들이 알고 계시듯, Pandas와 NumPy는 전처리의 핵심 툴입니다. 하지만 단순히 데이터를 불러오고 정리하는 수준에 머무른다면, 그 잠재력을 모두 활용하고 있는 것이 아닙니다.
이번 포스팅에서는 Pandas와 NumPy를 딥러닝 전처리 관점에서 완전히 활용하는 방법을 단계별로 정리해드립니다. 실무 중심의 예제와 함께 시작해볼까요?
📌 바로가기 목차
| 데이터 분석과 전처리를 수행하는 전문가 여성 썸네일 이미지 |
1. 왜 전처리가 딥러닝 성능을 좌우할까?
딥러닝 모델은 훈련 데이터에 전적으로 의존합니다. 아무리 훌륭한 모델이라도, 입력 데이터가 부정확하거나 불균형하다면 학습 결과는 왜곡될 수밖에 없습니다. 전처리는 이러한 문제를 사전에 해결하고, 학습 효율성과 정확도를 극대화하는 핵심 단계입니다.
예를 들어, 결측치 보정, 이상치 제거, 스케일링과 같은 전처리 작업을 통해 모델이 더 나은 패턴을 인식하게 할 수 있습니다.
2. Pandas의 기초: 데이터 정제와 탐색
Pandas는 CSV, Excel, SQL 등 다양한 소스에서 데이터를 불러오고 다루는 데 매우 적합합니다. 특히 DataFrame 객체는 데이터 전처리의 핵심 구조입니다. 데이터를 탐색할 때 자주 사용하는 메서드는 다음과 같습니다.
| 메서드 | 설명 |
|---|---|
| df.head() | 데이터의 앞부분을 미리보기 |
| df.info() | 데이터 컬럼 타입과 결측치 확인 |
| df.describe() | 기초 통계 요약 |
| df.isnull().sum() | 결측치 개수 파악 |
# Pandas를 사용한 기초 전처리 예제
import pandas as pd
# 1. 데이터 불러오기
df = pd.read_csv('user_data.csv')
# 2. 데이터 상위 5개 확인
print(df.head())
# 3. 컬럼별 타입 및 결측치 확인
print(df.info())
# 4. 기초 통계 확인
print(df.describe())
# 5. 결측치 처리 - 평균으로 대체
df['age'] = df['age'].fillna(df['age'].mean())
# 6. 불필요한 열 제거
df = df.drop(columns=['unnecessary_column'])
# 7. 이상치 확인 (IQR 기반)
Q1 = df['salary'].quantile(0.25)
Q3 = df['salary'].quantile(0.75)
IQR = Q3 - Q1
outlier_cond = (df['salary'] < Q1 - 1.5 * IQR) | (df['salary'] > Q3 + 1.5 * IQR)
# 8. 이상치 제거
df = df[~outlier_cond]
# 9. 중복 제거
df = df.drop_duplicates()
# 10. 컬럼 이름 일괄 소문자 처리
df.columns = [col.lower() for col in df.columns]
# 11. 새로운 컬럼 추가 (나이대 구간화)
df['age_group'] = pd.cut(df['age'], bins=[0, 20, 40, 60, 100], labels=['청소년', '청년', '중년', '노년'])
# 12. 결과 확인
print(df.head())
3. NumPy로 수치 최적화 및 변환
NumPy는 다차원 배열을 다루는 데 최적화된 라이브러리입니다. Pandas가 구조화된 데이터를 처리한다면, NumPy는 대규모 수치 데이터를 빠르게 연산할 수 있게 해줍니다. 딥러닝에서는 다음과 같은 용도로 활용됩니다:
- 학습 데이터를 벡터 형태로 변환
- 정규화 및 표준화 처리
- 벡터 연산으로 피처 엔지니어링 처리
# NumPy로 수치 데이터를 정규화 및 처리하는 예제
import numpy as np
# 1. 랜덤 시드 설정
np.random.seed(42)
# 2. 샘플 데이터 생성 (100행, 3컬럼)
data = np.random.randint(10, 100, (100, 3))
# 3. 컬럼 이름 지정 (가상의 피처)
columns = ['feature1', 'feature2', 'feature3']
# 4. 평균 계산
mean = np.mean(data, axis=0)
# 5. 표준편차 계산
std = np.std(data, axis=0)
# 6. Z-score 정규화
normalized_data = (data - mean) / std
# 7. Min-Max 정규화
min_val = np.min(data, axis=0)
max_val = np.max(data, axis=0)
minmax_scaled = (data - min_val) / (max_val - min_val)
# 8. 조건에 따른 필터링 (feature1 > 50)
filtered = data[data[:, 0] > 50]
# 9. 특정 컬럼 변환 (로그 스케일)
log_transformed = np.log1p(data[:, 1])
# 10. 데이터 병합 예시
new_col = np.sum(data, axis=1).reshape(-1, 1)
merged = np.concatenate((data, new_col), axis=1)
# 결과 확인
print("정규화 후 샘플:\n", normalized_data[:5])
![]() |
| Pandas와 NumPy로 딥러닝 데이터 전처리 자동화 – 여성 중심 고화질 인포그래픽 |
4. 실무에서 자주 쓰이는 전처리 패턴
실제 프로젝트에서 자주 등장하는 데이터 전처리 패턴은 대부분 반복적이며 자동화할 수 있는 구조입니다. 특히 텍스트, 이미지, 시계열 데이터에서는 각각 고유의 패턴이 존재합니다.
아래는 데이터 유형별로 자주 사용되는 전처리 흐름을 정리한 테이블입니다.
| 데이터 유형 | 전처리 패턴 |
|---|---|
| 텍스트 | 토큰화, 불용어 제거, 정규표현식 클렌징 |
| 이미지 | 리사이즈, 정규화, 증강(Augmentation) |
| 시계열 | 라벨 인코딩, 결측치 보간, 시차 특성 생성 |
# 텍스트 데이터 전처리 예제 (불용어 제거, 정규화 포함)
import pandas as pd
import re
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
# 1. 간단한 텍스트 데이터프레임 생성
data = {'text': ["Hello!! This is an example sentence.",
"Pandas & NumPy are widely used in Python.",
"Preprocessing is key in deep learning."]}
df = pd.DataFrame(data)
# 2. 소문자 변환
df['text'] = df['text'].str.lower()
# 3. 특수문자 제거
df['text'] = df['text'].apply(lambda x: re.sub(r'[^a-z\s]', '', x))
# 4. 토큰화
df['tokens'] = df['text'].apply(word_tokenize)
# 5. 불용어 제거
stop_words = set(stopwords.words('english'))
df['filtered'] = df['tokens'].apply(lambda x: [word for word in x if word not in stop_words])
# 6. 결과 출력
print(df[['text', 'filtered']])
5. 전처리 파이프라인 자동화하기
전처리 작업은 프로젝트마다 거의 유사하게 반복되기 때문에 자동화가 필수입니다. Scikit-learn의 Pipeline 기능을 사용하거나, 커스텀 클래스로 프로세스를 정형화할 수 있습니다. 아래는 파이프라인 구축을 위한 기본 단계입니다.
- 데이터 불러오기
- 결측치 처리 및 이상치 제거
- 스케일링 및 인코딩
- 파이프라인 클래스화 및 함수화
- 전체 데이터셋에 일괄 적용
# scikit-learn 파이프라인을 활용한 자동 전처리 예제
import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.datasets import fetch_openml
# 1. 샘플 데이터 로딩
df = fetch_openml(name='titanic', version=1, as_frame=True)['data']
# 2. 수치형 & 범주형 분리
num_features = ['age', 'fare']
cat_features = ['embarked', 'sex', 'pclass']
# 3. 파이프라인 정의
numeric_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorical_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder(handle_unknown='ignore'))
])
# 4. 통합 파이프라인 구성
preprocessor = ColumnTransformer([
('num', numeric_pipeline, num_features),
('cat', categorical_pipeline, cat_features)
])
# 5. 전체 데이터 전처리 실행
processed = preprocessor.fit_transform(df)
print(processed.shape)
6. Pandas와 NumPy 활용 꿀팁 모음
여기서는 실전에서 바로 적용 가능한 Pandas와 NumPy 활용 팁들을 정리합니다. 작은 팁 하나로도 전처리 속도와 효율이 크게 달라질 수 있습니다.
-
Pandas에서 복잡한 조건 필터링:
df[(df['age'] > 30) & (df['salary'] > 5000)] -
NumPy 벡터화 연산: 반복문보다
np.where()또는np.select()활용 -
결측치 빠른 대체:
df.fillna(df.mean())또는df.interpolate()
# 실무 꿀팁: Pandas + NumPy 최적 활용 예시 모음
import pandas as pd
import numpy as np
# 1. 데이터 생성
df = pd.DataFrame({
'name': ['Kim', 'Lee', 'Park', 'Choi'],
'score': [88, 92, np.nan, 79],
'age': [23, 25, 24, 22]
})
# 2. 결측치 평균으로 대체
df['score'] = df['score'].fillna(df['score'].mean())
# 3. 조건 필터링
young_high_score = df[(df['age'] < 25) & (df['score'] > 85)]
# 4. 새로운 컬럼 만들기
df['grade'] = np.where(df['score'] >= 90, 'A', 'B')
# 5. apply + lambda로 연산
df['age_group'] = df['age'].apply(lambda x: '20s' if x < 30 else '30s')
# 6. NumPy를 활용한 브로드캐스팅
df['score_scaled'] = (df['score'] - np.min(df['score'])) / (np.max(df['score']) - np.min(df['score']))
# 7. 다중 조건을 select로 처리
conditions = [
(df['score'] >= 90),
(df['score'] >= 80),
(df['score'] < 80)
]
choices = ['A', 'B', 'C']
df['tier'] = np.select(conditions, choices)
# 결과 확인
print(df)
![]() |
| 모델보다 먼저, 데이터 전략부터! – Pandas와 NumPy 전처리 인포그래픽 (남성 중심) |
7. 자주 묻는 질문 (FAQ)
Pandas는 테이블 형태의 데이터를 다루기 위한 라이브러리이며, NumPy는 수치 연산을 위한 배열 기반 라이브러리입니다. Pandas는 NumPy를 기반으로 구축되어 있습니다.
결측치는 값이 누락된 것이고, 이상치는 통계적으로 벗어난 값입니다. 결측치는 보간 또는 평균 대체, 이상치는 필터링이나 로그 변환 등으로 처리합니다.
네. 데이터의 품질은 모델의 성능에 직접적인 영향을 미칩니다. 전처리는 모델 학습 전에 꼭 필요한 기본 절차입니다.
아닙니다. 머신러닝, 통계 분석, 데이터 시각화 등 거의 모든 데이터 기반 작업에 전처리는 핵심 요소입니다.
Scikit-learn의 preprocessing 모듈, TensorFlow의 tf.data API도 매우 유용하며, 대규모 데이터에는 Dask나 Polars도 추천합니다.
8. 마무리 요약
✅ 전처리는 모델보다 먼저 설계되어야 할 전략입니다
딥러닝에서의 데이터 전처리는 단순한 준비 작업이 아니라, 모델 성능을 결정짓는 핵심 전략입니다.
Pandas와 NumPy는 그 전략을 실현할 수 있는 강력한 도구이자 파트너입니다.
반복되는 전처리 패턴을 자동화하고, 데이터 품질을 체계적으로 관리하면
모델 설계 전부터 성능 향상을 보장할 수 있습니다.
오늘부터 전처리를 ‘선택’이 아닌 ‘전략’으로 접근해 보세요!


댓글
댓글 쓰기