[Python] 파이썬_중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체

2025. 4. 24. 11:12·Python/데이터 분석을 위한 Python

 

 


 

 

데이터 분석을 위한 Python

 

✔️ 결측치 처리_중앙값/최빈값 대체

✔️SimpleImputer / KNNImputer 활용한 결측치 처리

 

 


 

 

✔️ 결측치 처리_중앙값/최빈값 대체

 

 

 

 

타이타닉의 Age 컬럼을 중앙/최빈값으로 대치

# 원본 데이터에 영향을 주지 않기 위해서 .copy 활용
data = pd.read_csv('./data/Taitanic_train.csv')
data2 = data.copy()

# Age 컬럼에서 결측치가 존재하는 행의 인덱스만 추출하여 저장
age_na_index2 = data2[data2['Age'].isna()].index

# 중앙값으로 대체 및 결측치 존재 행만 추출하여 확인(중앙값으로 대체되었음을 확인)
data2['Age'] = data2['Age'].fillna(data2['Age'].median())
data2.loc[age_na_idx]

 

 

# 원본 데이터에 영향을 주지 않기 위해서 .copy 활용
data = pd.read_csv('./data/Taitanic_train.csv')
data3 = data.copy()

# Age 컬럼에서 결측치가 존재하는 행의 인덱스만 추출하여 저장
age_na_idx3 = data3[data3['Age'].isna()].index

# 시리즈 형태로 나오기 때문에 최빈값을 .iloc[0] / [0]으로 추출
# 최빈값으로 대체 및 결측치 존재 행만 추출하여 확인(최빈값으로 대체되었음을 확인)
data3['Age'] = data3['Age'].fillna(data3['Age'].mode()[0])
data3.loc[age_na_idx]

 

 


 

 

✔️SimpleImputer / KNNImputer 활용한 결측치 처리 

 

 

 

 

scikit-learn의 SimpleImputer를 이용한 대치

SimpleImputer(strategy='...')
단일 컬럼의 대표값을 계산하여 결측치를 대체

SimpleImputer의 strategy 종류
평균(mean) : 수치형 데이터 사용, 이상치 적고 분포가 대칭에 가까운 경우 용이
중앙값(median) : 수치형 데이터 사용, 이상치가 많아 평균이 왜곡되는 경우 용이
최빈값(mode) : 범주형/이산형 수치 데이터 사용, 가장 자주 등장하는 값으로 대체

KNNImputer
여러 변수 간의 유사도를 이용해 해당 컬럼 값을 평균(또는 거리 가중 평균)으로 대체
(대치할 때 주변의 값을 참조하여 결측치를 대체)

 

 

 

 

SimpleImputer 평균값 대치

# SimpleImputer 평균값 대치
from sklearn.impute import SimpleImputer

# 원본 데이터에 영향을 주지 않기 위해서 .copy 활용
data = pd.read_csv('./data/Taitanic_train.csv')
data4 = data.copy()

# Age 컬럼에서 결측치가 존재하는 행의 인덱스만 추출하여 저장
na_idx = data4[data4['Age'].isna()].index

# SimpleImputer 객체 생성
# strategy(전략) = mean(평균값) 설정
imp_mean = SimpleImputer(strategy = 'mean')

# Age의 평균값을 결측치를 대체하여 채운 배열 생성
# 2차원 배열이므로 1차원 배열 형태로 변환하여 적용
data4['Age'] = imp_mean.fit_transform(data4[['Age']])[:, 0]

# 결측치 존재 행만 추출하여 확인
data4.loc[na_idx]

 

 

 

 

 

SimpleImputer 중앙값 대치

# SimpleImputer 중앙값 대치
from sklearn.impute import SimpleImputer

# 원본 데이터에 영향을 주지 않기 위해서 .copy 활용
data = pd.read_csv('./data/Taitanic_train.csv')
data5 = data.copy()

# Age 컬럼에서 결측치가 존재하는 행의 인덱스만 추출하여 저장
na_idx = data5[data5['Age'].isna()].index

# SimpleImputer 객체 생성
# strategy(전략) = median(중앙값) 설정
imp_median = SimpleImputer(strategy = 'median')

# Age의 중앙값을 결측치를 대체하여 채운 배열 생성
# 2차원 배열이므로 1차원 배열 형태로 변환하여 적용
data5['Age'] = imp_median.fit_transform(data5[['Age']])[:, 0]

# 결측치 존재 행만 추출하여 확인
data5.loc[na_idx]

 

 

 

 

 

SimpleImputer 최빈값 대치

# SimpleImputer 최빈값 대치
from sklearn.impute import SimpleImputer

# 원본 데이터에 영향을 주지 않기 위해서 .copy 활용
data = pd.read_csv('./data/Taitanic_train.csv')
data6 = data.copy()

# Age 컬럼에서 결측치가 존재하는 행의 인덱스만 추출하여 저장
na_idx = data6[data6['Age'].isna()].index

# SimpleImputer 객체 생성
# strategy(전략) = most_frequent(최빈값) 설정
imp_mode = SimpleImputer(strategy = 'most_frequent')

# Age의 최빈값을 결측치를 대체하여 채운 배열 생성
# 2차원 배열이므로 1차원 배열 형태로 변환하여 적용
data6['Age'] = imp_mode.fit_transform(data6[['Age']])[:, 0]

# 결측치 존재 행만 추출하여 확인
data6.loc[na_idx]

 

 

 

 

 

KNNImputer : 최근접 이웃 알고리즘 활용

KNN 최근접이웃법
결측값 비율이 30%~50%인 경우 사용
# KNNImputer 최근접 이웃법 활용
from sklearn.impute import KNNImputer

# 원본 데이터에 영향을 주지 않기 위해서 .copy 활용
data = pd.read_csv('./data/Taitanic_train.csv')
data7 = data.copy()

# Age 컬럼에서 결측치가 존재하는 행의 인덱스만 추출하여 저장
na_idx = data7[data7['Age'].isna()].index

# KNNImputer 객체 생성
# n_neighbors(참고할 이웃의 수)는 5개로 설정(기본값)
knn_imp = KNNImputer(n_neighbors=5)

# 최근접 이웃 5개의 평균을 결측치 대체 수행
# 2차원 배열이므로 1차원 배열 형태로 변환하여 적용
data6['Age'] = knn_imp.fit_transform(data6[['Age']])[:, 0]

# 결측치 존재 행만 추출하여 확인
data7.loc[na_idx]

 

 

+

 

 

깊은 복사, 얕은 복사

깊은 복사 : .copy를 통해 새로운 객체 생성
얕은 복사 : 재할당을 통한 같은 객체 참조
# data를 copy()를 이용해 복사
data_copyed = data.copy()

# data를 다른 변수에 재할당
data_reassigned = data

# id를 활용하여 각 객체들의 메모리 주소를 정수로 반환
# data와 재할당을 통한 data_ressigned는 동일한 객체임을 확인
# 새롭게 만들어진 data_copyed는 다른 메모리 주소에 저장됨을 확인
print(id(data))
print(id(data_copyed))
print(id(data_reassigned))

 

 


 

 

이번 내용에서는 중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체 에 대해 알아보았습니다.

데이터 분석을 하기 위해서는 가장 꾸준히 공부해야 하는 언어는 파이썬(Python)이라고 생각합니다.

앞으로 꾸준히 파이썬(Python) 내용을 공부하고 정리할테니 파이썬 코딩에 도움이 되었으면 좋겠습니다.

 

 

데이터 분석과 관련된 다양한 정보들이 확인하고 싶다면

관심 있는 분들은 방문해서 좋은 정보 얻어가시길 바랍니다.

 

ECODATALIST

데이터 분석 공부 열심히 하는 중😁

everyonelove.tistory.com

 

반응형

'Python > 데이터 분석을 위한 Python' 카테고리의 다른 글

[Python] 파이썬_타이타닉 데이터셋 EDA(결측치 / 이상치 탐색 및 처리)  (0) 2025.05.03
[Python] 파이썬_파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리  (5) 2025.04.30
[Python] 파이썬_데이터 분석 과정의 결측치 처리  (0) 2025.04.22
[Python] 파이썬_파이썬 Matplotlib를 활용한 라인/산점도/히스토그램/막대 그래프 생성  (0) 2025.04.21
[Python] 파이썬_파이썬 Matplotlib를 활용한 그래프 생성  (0) 2025.04.21
'Python/데이터 분석을 위한 Python' 카테고리의 다른 글
  • [Python] 파이썬_타이타닉 데이터셋 EDA(결측치 / 이상치 탐색 및 처리)
  • [Python] 파이썬_파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리
  • [Python] 파이썬_데이터 분석 과정의 결측치 처리
  • [Python] 파이썬_파이썬 Matplotlib를 활용한 라인/산점도/히스토그램/막대 그래프 생성
DAILYSEEKER
DAILYSEEKER
데이터 분석 공부 열심히 하는 중😁
  • DAILYSEEKER
    ECODATALIST
    DAILYSEEKER
  • 전체
    오늘
    어제
  • 글쓰기 관리자
    • DATA (224)
      • SQL (18)
        • SQLD (3)
        • 데이터 분석을 위한 MySQL (5)
        • 혼자 공부하는 SQL (10)
      • Python (39)
        • 데이터 분석을 위한 Python (32)
        • 데이터 분석을 위한 데이터 스크래핑 (4)
        • 데이터 분석 프로젝트 (3)
      • 기획 (3)
        • 서비스 기획 (1)
        • 기업 분석 (2)
      • Frontend(프론트엔드) (22)
        • 데이터 분석을 위한 웹 개발 언어 (9)
        • 자바스크립트 (13)
        • 타입스크립트 (0)
      • 코딩 테스트 (86)
        • 프로그래머스_MySQL (86)
      • Data Driven (12)
        • 코드 없이 배우는 데이터 분석 (6)
        • Excel (5)
      • UI & UX (24)
        • 피그마(Figma) (24)
      • BDA 학회 (20)
        • BDA학회_8기 (4)
        • BDA학회_9기 (16)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
DAILYSEEKER
[Python] 파이썬_중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체
상단으로

티스토리툴바