데이터 전처리 기초

2025. 8. 29. 09:34·자격증/AICE

 

 

출처 : 더에이아이랩 AICE Associate특강, Chat GPT

 

 

 

 

pandas에서 axis 의미

axis 값 방향 설명
axis=0 세로 방향 행 기준으로 연산, 즉 열(column) 단위 합계
axis=1 가로 방향 열 기준으로 연산, 즉 행(row) 단위 합계

 

 


 

 

결측치 처리

 

결측치

  • 데이터가 빠져 있는 값
  • 파이썬에서는 결측치를 ‘NaN’으로 표기

 

결측치 확인

  • info() 메서드로 인덱스 범위(RangeIndex), 컬럼별 non-null 수 확인
  • RangeIndex 정보의 entries 수와 컬럼 정보의 컬럼별 non-null 수를 비교해보면 결측치 존재 여부 확인 가능

 

결측치 수 확인

  • isnull() : 값이 null이면 True, null이 아니면 False 반환
  • isnull().sum(axis=0) : 데이터프레임 컬럼 기준으로 합하면 True의 합, 즉, 결측치 개수 반환

 

  이름 나이 키
0 철수 15 160
1 영희 NaN 155
2 민수 18 NaN
3 NaN NaN NaN

 

결측치 수 확인 예시 코드(axis=0)

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "이름": ["철수", "영희", "민수", None],
    "나이": [15, None, 18, None],
    "키": [160, 155, None, None]
})

print(df.isnull().sum(axis=0))

 

 

출력 결과

이름    1
나이    2
키      2
dtype: int64

각 컬럼별 결측치 수를 출력한다.

 

결측치 수 확인 예시 코드(axis=1)

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "이름": ["철수", "영희", "민수", None],
    "나이": [15, None, 18, None],
    "키": [160, 155, None, None]
})

print(df.isnull().sum(axis=1))

 

 

출력 결과

0    0
1    1
2    1
3    3
dtype: int64

각 행별 결측치 수를 출력한다.

 

 

 

결측치 처리

  • dropna() : 행 기준으로 각 컬럼값에 결측값이 1개라도 있으면 해당 행 삭제
    • how 파라미터를 ‘all’로 설정하면 모든 컬럼이 결측치인 행만 삭제됨
  • drop([’컬럼명’]) : 지정한 컬럼 삭제
  • fillna() : 파라미터에 지정하는 값으로 결측치를 대체
    • df.fillna(0) : 0으로 채우기
    • df.fillna(df.mean()) : 컬럼의 평균값으로 채우기

 


 

 

이상치 처리

 

IQR 계산하기

  • quantile() : 데이터를 크기별로 줄 세운 후 해당하는 퍼센트에 따른 값으로 반환
    • quantile(0.25) → 제1사분위수, quantile(0.75) → 제3사분위수

 


 

스케일링 (수치형 변수)

 

정규화 스케일링

from sklearn.preprocessing import MinMaxScaler

# 정의
scaler = MinMaxScaler()

# 기준 정하기(fit), 변환(fransform)
scaler.fit_transform(x_train) # x_train 기준으로 변환
scaler.transform(x_valid) # 앞에서 정해준 기준으로 변환만

 

 

표준화 스케일링

form sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(x_train)
scaler.transform(x_valid)

 

 


 

인코딩

 

레이블 인코딩

from sklern.preprocessing import LabelEncoder
LabelEncoder = LabelEncoder();
LabelEncoder .fit_transform(x_train)
LabelEncoder .transform(x_valid)
  • 범주형 데이터를 정수로 변환하는 방식
  • 순서가 없는 카테고리도 숫자로 바꾸지만, 숫자 간 순서 의미가 생기므로 주의 필요
  • LabelEncoder.inverse_transform() : 디코딩도 가능
  • LabelEncoder.fit_transform() : 학습 데이터에 맞춰 숫자 변환 + 학습
  • LabelEncoder.transform() : 학습된 기준으로 검증/새로운 데이터 변환
  • 순서가 없는 범주형 데이터에는 원-핫 인코딩이 더 안전
  • 순서가 있는 데이터에는 레이블 인코딩이 효율적
  • 아래 표에 레이블 인코딩 적용 → Red=2, Blue=0, Green=1 같은 식으로 정수 매핑됨
Color
Red
Blue
Green

 

 

레이블 인코딩 활용 예시(scikit-learn)

from sklearn.preprocessing import LabelEncoder
import pandas as pd

# 학습용/검증용 데이터
x_train = pd.DataFrame({'Color': ['Red', 'Blue', 'Green', 'Red']})
x_valid = pd.DataFrame({'Color': ['Green', 'Blue']})

# 1. LabelEncoder 객체 생성
encoder = LabelEncoder()

# 2. 학습 데이터로 학습 및 변환
y_train_encoded = encoder.fit_transform(x_train['Color'])

# 3. 검증 데이터 변환
y_valid_encoded = encoder.transform(x_valid['Color'])

print("학습 데이터 인코딩 결과")
print(y_train_encoded)

print("\n검증 데이터 인코딩 결과")
print(y_valid_encoded)

# 4. 매핑 확인
print("\n카테고리와 숫자 매핑")
print(dict(zip(encoder.classes_, range(len(encoder.classes_)))))

 

 

출력 결과

학습 데이터 인코딩 결과
[2 0 1 2]

검증 데이터 인코딩 결과
[1 0]

카테고리와 숫자 매핑
{'Blue': 0, 'Green': 1, 'Red': 2}

 

 

원-핫 인코딩

 

pandas 활용 예시

import pandas as pd

# 데이터프레임 생성
df = pd.DataFrame({
    'Color': ['Red', 'Blue', 'Green', 'Red']
})

print("원본 데이터")
print(df)

# get_dummies 적용
df_encoded = pd.get_dummies(df, columns=['Color'])

print("\n원-핫 인코딩 결과")
print(df_encoded)
  • 각 카테고리에 숫자를 하나씩 부여하는 방식
  • get_dummies() : 바로 원-핫 인코딩 가능

 

 

출력 결과

원본 데이터
   Color
0    Red
1   Blue
2  Green
3    Red

원-핫 인코딩 결과
       Color_Blue  Color_Green  Color_Red
0           0            0          1
1           1            0          0
2           0            1          0
3           0            0          1

 

 

 


 

 

사이킷런(scikit-learn) 활용 예시

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

# 예제 데이터
df_train = pd.DataFrame({'Color': ['Red', 'Blue', 'Green', 'Red']})
df_valid = pd.DataFrame({'Color': ['Green', 'Blue']})

# 1. OneHotEncoder 객체 생성
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')  
# sparse=False → 결과를 배열로 반환
# handle_unknown='ignore' → 학습에 없던 값이 나와도 에러 안남

# 2. 학습 데이터로 학습 및 변환
x_train_encoded = encoder.fit_transform(df_train[['Color']])

# 3. 검증 데이터로 변환
x_valid_encoded = encoder.transform(df_valid[['Color']])

print("학습 데이터 인코딩 결과")
print(x_train_encoded)

print("\n검증 데이터 인코딩 결과")
print(x_valid_encoded)

 

 

출력 결과

학습 데이터 인코딩 결과
[[0. 0. 1.]
 [1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

검증 데이터 인코딩 결과
[[0. 1. 0.]
 [1. 0. 0.]]

 

 

'자격증 > AICE' 카테고리의 다른 글

AI 모델링 기초  (0) 2025.09.01
데이터 수집 및 분석 기초  (0) 2025.08.26
'자격증/AICE' 카테고리의 다른 글
  • AI 모델링 기초
  • 데이터 수집 및 분석 기초
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (74) N
      • 일기 (2)
      • Python (1)
      • Java (4)
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (16)
        • Spring (6)
        • JavaScript (3)
        • WebSquare (5)
        • React (2)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (14)
        • Server (5)
        • Cloud (8)
        • Linux (1)
      • 자격증 (4) N
        • 정보처리기사 (1)
        • AICE (3) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    AI
    docker컨테이너
    google cloud run
    티스토리챌린지
    알고리즘
    AICE Associate
    자바
    백준자바
    Java
    react
    tomcat
    docker
    백준
    SpringBoot
    오블완
    AICE
    톰캣
    Apache
    websquare
    dockerspring
    머신러닝
    Spring
    db
    MySQL
    클라우드
    docker배포
    Associate
    백준알고리즘
    웹스퀘어
    docker앱배포
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
오은이
데이터 전처리 기초
상단으로

티스토리툴바