단계별로 따로따로 공부하지 마세요! 오늘은 데이터를 처음부터 끝까지 다루는 “통합 데이터 파이프라인”을 직접 만들어 봅니다.
안녕하세요, 데이터 실무에 강해지고 싶은 여러분을 위한 실전 포스팅입니다! 이번 시간에는 Python을 이용해 다음 네 단계를 하나로 묶은 통합 파이프라인을 만들어볼 거예요. ✔️ 데이터 수집 (Open API or CSV) ✔️ 전처리 (결측치, 인코딩, 스케일링) ✔️ 시각화 (matplotlib, seaborn) ✔️ 예측 모델 학습 (scikit-learn) 각 단계별 코드와 함께 실제 분석 흐름을 연결해보며, “데이터 분석이 어떻게 끝까지 이어지는지” 직접 체험해볼 수 있는 콘텐츠입니다. 데이터 사이언스 입문자, 실무 전환자, 프로젝트를 시작하려는 분이라면 꼭 끝까지 따라와 주세요!
바로가는 목차
1. 데이터 불러오기 및 구조 파악
이번 실습에서는 예제로 널리 사용되는 **타이타닉 생존자 예측 데이터셋**을 사용하겠습니다. 데이터는 Kaggle에서 다운로드하거나 seaborn 내장 데이터로도 불러올 수 있어요.
import pandas as pd
import seaborn as sns
# seaborn에서 바로 로드
df = sns.load_dataset("titanic")
print(df.shape)
df.head()
컬럼에는 생존 여부, 나이, 성별, 클래스, 요금, 탑승 위치 등 다양한 정보가 들어있어요. 이제 이 데이터를 분석 가능한 형태로 가공해봅시다!
2. 전처리: 결측치 처리, 인코딩, 정규화
이제 데이터를 모델링 가능한 형태로 정리합니다. 결측치를 채우고, 범주형을 수치형으로 인코딩하고, 정규화까지 처리해보겠습니다.
df = df.drop(columns=["deck", "embark_town", "alive"])
df["age"].fillna(df["age"].median(), inplace=True)
df["embarked"].fillna("S", inplace=True)
df.dropna(inplace=True)
# 인코딩
df["sex"] = df["sex"].map({"male": 0, "female": 1})
df["embarked"] = df["embarked"].map({"S": 0, "C": 1, "Q": 2})
# 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[["age", "fare"]] = scaler.fit_transform(df[["age", "fare"]])
전처리 후에는 결측치도 사라지고, 모든 변수가 수치형이 되어 머신러닝 입력값으로 준비 완료입니다!
3. 시각화로 패턴 파악하기
전처리가 끝났다면, 본격적인 분석에 앞서 간단한 시각화를 통해 변수 간 관계를 살펴봅니다. survived(생존 여부)와 성별, 클래스, 요금 간 관계를 시각적으로 확인해볼게요.
import seaborn as sns
import matplotlib.pyplot as plt
# 생존율과 클래스
sns.barplot(x="pclass", y="survived", data=df)
plt.title("클래스별 생존율")
plt.show()
# 요금과 생존률
sns.boxplot(x="survived", y="fare", data=df)
plt.title("요금과 생존 여부 관계")
plt.show()
이러한 시각화는 단순한 그림이 아니라, 모델 설계의 핵심 인사이트를 제공합니다. “이 변수는 생존과 관계 있겠구나!”라는 직관을 얻을 수 있는 단계죠.
4. 예측 모델 학습 및 테스트
이제 전처리된 데이터를 기반으로 머신러닝 모델을 학습해보겠습니다. 우리는 타이타닉 승객의 생존 여부를 예측하는 **이진 분류(binary classification)** 문제를 풀게 됩니다.
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
X = df.drop("survived", axis=1)
y = df["survived"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier()
model.fit(X_train, y_train)
preds = model.predict(X_test)
print(classification_report(y_test, preds))
랜덤포레스트(Random Forest)는 구조가 직관적이면서도 강력한 성능을 가진 분류 모델입니다. 정확도(accuracy), 정밀도(precision), 재현율(recall) 등을 보고 성능을 평가할 수 있어요.
5. 전체 파이프라인 통합 및 함수화
실무에서는 각 단계를 함수로 나누어 하나의 파이프라인으로 묶는 것이 중요합니다. 이렇게 하면 코드 재사용성, 유지보수성, 자동화까지 쉬워집니다.
def preprocess(df):
df = df.drop(columns=["deck", "embark_town", "alive"])
df["age"].fillna(df["age"].median(), inplace=True)
df["embarked"].fillna("S", inplace=True)
df.dropna(inplace=True)
df["sex"] = df["sex"].map({"male": 0, "female": 1})
df["embarked"] = df["embarked"].map({"S": 0, "C": 1, "Q": 2})
scaler = MinMaxScaler()
df[["age", "fare"]] = scaler.fit_transform(df[["age", "fare"]])
return df
def train_model(df):
X = df.drop("survived", axis=1)
y = df["survived"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier()
model.fit(X_train, y_train)
preds = model.predict(X_test)
print(classification_report(y_test, preds))
return model
# 실행
df = sns.load_dataset("titanic")
clean_df = preprocess(df)
trained_model = train_model(clean_df)
이제 우리는 데이터 수집 → 전처리 → 시각화 → 모델링까지 한 번에 실행 가능한 **통합 데이터 분석 파이프라인**을 완성했습니다! 🎉
함수로 나누면 각 단계가 독립적으로 관리되고, 중복 코드 없이 재사용할 수 있으며 자동화에도 유리합니다. 실무에서도 유지보수를 위해 필수적인 구조입니다.
네! 예를 들어 결측치를 채우기 전에 정규화를 하면 잘못된 값이 들어갈 수 있고, 인코딩 순서도 학습 영향을 줄 수 있어요. 흐름에 따라 순서를 정하는 게 중요합니다.
입력 데이터가 충분하지 않거나, 중요한 특성을 누락했을 수 있습니다. 다양한 모델을 시도하거나 파라미터 튜닝, 교차검증을 활용해 성능을 개선해보세요.
네! scikit-learn의 Pipeline
또는 joblib
으로 모델과 전처리 흐름을 파일로 저장하고 불러올 수 있어요. MLOps나 배포에도 많이 활용됩니다.
지금까지 데이터를 불러오고, 전처리하고, 시각화하며, 모델링까지 연결해보는 통합 분석 파이프라인을 함께 구현해보았습니다. 이런 구조를 한 번 직접 만들어보면, 데이터 분석의 흐름과 실무에서의 사용 방식을 한 눈에 이해할 수 있어요. 앞으로는 더 다양한 데이터셋, 더 고도화된 모델, 자동화와 배포까지도 단계별로 확장해볼 수 있습니다. 꼭 기억하세요. 분석은 단계가 아닌 흐름입니다.
'SW개발 > Python' 카테고리의 다른 글
OpenAPI 데이터를 머신러닝으로 예측하는 워크플로우 만들기 (0) | 2025.04.02 |
---|---|
파이썬 데이터 시각화 입문 – matplotlib, seaborn으로 만드는 멋진 차트 (0) | 2025.03.25 |
ChatGPT API로 파이썬에서 AI 서비스 만들기 (0) | 2025.03.25 |
Django vs Flask!! 파이썬 웹 프레임워크 완벽 비교 분석 (0) | 2025.03.10 |