페이지 불러오는 중
pandas로 정제·집계한 DataFrame은 그 자체가 목적이 아니라 시각화와 모델링의 입력입니다.
df.plot(빠른 확인) → matplotlib(세밀 제어) → seaborn(통계 플롯, long 포맷 선호)Pipeline/ColumnTransformer로 옮김ndarray를 받고, 결과를 다시 DataFrame으로 되돌림import pandas as pd
import numpy as npdf["amount"].plot(kind="hist", bins=50) # 빠른 분포 확인
df.groupby("month")["amount"].sum().plot() # 선그래프
df.plot.scatter(x="price", y="qty", alpha=0.3)
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 4))
df.groupby("city")["amount"].sum().plot.bar(ax=ax)
ax.set_title("도시별 매출")
import seaborn as sns
long_df = df.melt(id_vars="city", value_vars=["q1", "q2"], var_name="quarter", value_name="sales")
sns.boxplot(data=long_df, x="quarter", y="sales", hue="city")df.plot은 탐색용(한 줄로 확인). 발표 자료는 matplotlib으로 축·라벨·크기 제어.melt가 사실상 필수 전 단계.💡 이럴 때: 정제 중간중간
df.plot/hist로 분포를 눈으로 확인하면 잘못된 형 변환·이상치를 빨리 잡습니다.
df["amount_scaled"] = (df["amount"] - df["amount"].mean()) / df["amount"].std()전체 데이터로 평균·표준편차를 계산하면 테스트 정보가 학습에 새어 듭니다(누수). 결측 대체·인코딩도 마찬가지입니다.
Pipeline + ColumnTransformerfrom sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
num_cols = ["amount", "qty"]
cat_cols = ["city", "grade"]
pre = ColumnTransformer([
("num", Pipeline([("impute", SimpleImputer(strategy="median")),
("scale", StandardScaler())]), num_cols),
("cat", Pipeline([("impute", SimpleImputer(strategy="most_frequent")),
("ohe", OneHotEncoder(handle_unknown="ignore"))]), cat_cols),
])
X_train_t = pre.fit_transform(X_train) # 학습 통계 계산 + 변환
X_test_t = pre.transform(X_test) # 저장된 학습 통계로 변환만💡 이럴 때: 탐색·EDA·피처 아이디어 검증은 pandas로 빠르게. 모델에 실제로 들어갈 변환은
fit/transform이 분리되는 scikit-learn으로 옮겨 학습/추론 일관성과 재현성을 확보합니다.
💡 이럴 때: "그룹 통계"류 피처(도시별 평균 등)는 groupby().transform으로 만들되, 시간 분할 검증에서는 과거 데이터만으로 계산해 누수를 막습니다 → Python - pandas 08. 그룹 연산 (groupby).
set_output(transform="pandas")로 변환 결과를 DataFrame(열 이름 유지)으로 받을 수 있습니다.# pandas → NumPy
arr = df[num_cols].to_numpy() # 권장 (values보다 명시적)
arr = df["amount"].to_numpy(dtype="float32", na_value=np.nan)
# NumPy → pandas
pd.DataFrame(arr, columns=num_cols, index=df.index)
pd.Series(arr, name="pred")
# 모델 예측 결과를 원본에 다시 붙이기
df["pred"] = model.predict(X_t) # 인덱스 정렬 주의: 길이/순서 일치해야 함to_numpy()는 열 dtype이 섞여 있으면 object로 승격됩니다. 수치 열만 골라서 변환합니다.Int64, string)은 to_numpy() 시 결측 처리(na_value)를 명시합니다.💡 이럴 때: 모델 입력 직전에
to_numpy()로 넘기고, 예측값은 원본 인덱스에 맞춰df["pred"] = ...로 되돌립니다. 중간에 정렬·필터가 있었다면 인덱스가 어긋나지 않았는지 확인합니다.
[원천: CSV/DB/Parquet]
→ pandas: 로드·탐색·결측/이상치·정제·파생·집계·결합 (02~11장)
→ (EDA) df.plot / seaborn 으로 분포 확인
→ 학습/추론 분리 변환: sklearn Pipeline + ColumnTransformer
→ model.fit(X, y) / model.predict
→ 결과를 DataFrame으로 되돌려 리포트·시각화
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.