[Python] 파이썬_파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리

2025. 4. 30. 09:37·Python/데이터 분석을 위한 Python

 

 


 

 

데이터 분석을 위한 Python

 

✔️ 데이터의 종류 이해

✔️ 이상치 탐지

✔️ 이상치 처리

 


 

 

✔️ 데이터의 종류 이해

 

 

 

 

자료의 척도 종류

명목척도(Nominal Scale)
분류만 가능 
서열X
수학적 연산 불가
예) 성별, 지역, 혈액형 등

순서척도(Ordinal Scale)
분류 가능 + 서열 O
크기 차이는 불명확
덧셈/뺄샘 불가
예) 선호도, 학년, 만족도 등

구간척도(Interval Scale)
분류/서열/간격 의미 O
절대 0 없음
비율 계산 불가
예) 온도, IQ 지수 등

비율척도(Ratio Scale)
분류/서열/간격/정대 0 모두 충족
사칙 연산 / 비율 연산 가능
예) 키, 몸무게, 나이, 수입, 점수 등

타이타닉 데이터 컬럼 확인
Pclass : 순서 척도 (1등급 선실 > 2등급 선실 > 3등급 선실로 구분하는 컬럼)
Sex : 명목척도 (1(생존) / 0(죽음) 으로 구분하는 컬럼)
Age :  비율척도 (탑승자의 나이를 나타내는 컬럼)
SibSp : 비율척도 (형제자매의 수를 나타내는 컬럼)
Parch : 비율척도 (부모자식의 수를 나타내는 컬럼)
Fare : 비율척도 (탑승자의 티켓 가격을 나타내는 컬럼)
Embarked : 명목척도 (탑승지의 위치를 S, Q, C로 구분하는 컬럼)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import koreanize_matplotlib

# 타이타닉 데이터 불러와서 데이터프레임 정보 확인
data = pd.read_csv('./data/Taitanic_train.csv')
data.info()

 

 


 

 

✔️ 이상치 탐지

 

 

 

 

이상치 탐지 방법

이상값
데이터 집합에서 다른 값들과 뚜렷하게 다른 값
통계적으로 평균을 왜곡시킴, 모델의 결과를 왜곡시킬 수 있음
전체 데이터 분포에서 정상 범위에 속하지 않는 데이터


이상치 탐지 3가지 방법
1. Z-score가 -3 ~3의 범위를 넘어가는 경우
극단적인 이상값을 탐지하는 경우

2. 평균을 기준으로 평균에서 ±(3*표준편차)를 넘는 경우
표준편차가 큰 경우에는 잘 못 잡음

3. IQR(4분위수) 기준으로 계산한 상위 하위 이상값을 넘는 경우
정규/비정규분포에서 모두 강함

 

 

 

 

Z-Score를 통한 이상치 탐지

Z-Score로 이상치 탐지 수행
Z-score가 -3 ~ 3의 범위를 넘어가는 경우
z-score : (값 -평균(mean())) / 표준편차(std())
# 이상치가 존재하는지 확인하기 위해 숫자형 자료만 선택하여 박스수염그래프 생성
data_desc = data.describe()
data_num = data[data_desc.columns]
data_num.plot(kind='box')

 

 

# Fare 컬럼의 Z-Score 확인
# 평균과 표준편차흘 구해서 z-score 계산
mean = data['Fare'].mean()
print('평균 = ',mean)

std = data['Fare'].std()
print('표준편차 = ',std)

# z-score 계산
data['z-score'] = (data['Fare'] - mean) / std
data.head()

 

 

# Z-Score 이용해 Fare 컬럼의 이상치 확인
data[(data['z-score'] < -3) | (data['z-score'] > 3)].index

 

 

+

 

 

scipy.stats.zscore를 이용해 zscore 계산

from scipy.stats import zscore

# 앞서 data에 저장한 z-score과 비교
data['z-score2'] = zscore(data['Fare'])
data[['z-score','z-score2']]

 

 

 

 

평균과 표준편차를 이용해 이상치 찾기

 

평균과 표준편차를 이용해 이상치 찾기
ESD(Extreme Studenized Deiation)
평균±(3 * 표준편차) (𝜇±3𝜎)
# Fare 컬럼의 평균과 표준분포
mean_fare = data['Fare'].mean()
std_fare = data['Fare'].std()

# 평균과 표준 편차를 활용한 이상치 범위 지정
lower_bound = mean_fare - (3 * std_fare)
upper_bound = mean_fare + (3 * std_fare)

# 평균과 표준분포 확인
print('평균 =', mean_fare)
print('표준편차 =', std_fare)
print('-'*100)

# 이상치 범위 확인
print('lower_bound = ', lower_bound)
print('upper_bound = ', upper_bound)

 

 

# 이상치 확인
# lower_bound보다 작은 이상치 값이 존재하지 않는다는 사실 확인
# upper_bound를 초과하는 이상치 값만 확인
outlie_esd = data[data['Fare'] > upper_bound]

# 이상치의 수와 상위 5개 이상치 확인
print('outlie_esd : ', len(outlie_esd))
display(outlie_esd.head())

 

 

 

 

IQR(사분위수)를 이용한 이상치 탐지

IQR(사분위수)를 이용한 이상치 탐지

IQR(사분위수)
데이터의 중간 50% 구간의 길이 의미
IQR은 0(min), 25%, 50%, 75%, 100(max)
IQR = Q3(75%) - Q1(25%)

IQR로 이상치를 찾는 이유
평균과 표준편차는 극단적인 값에 민감IQR은 중간값 기반이라 극단값(outlier)에 영향을 덜 받음
정규분포가 아닌 데이터에서도 이상치를 잘 찾을 수 있음

IQR 기반 이상치 판정 기준
하한값 : Q1(25%) - (1.5 * IQR)
상한값 : Q3(75%) - (1.5 * IQR)
# Fare 컬럼의 사분위값을 구하기 위해 describe 활용
print(data['Fare'].describe())
print()

# 이상치 범위 설정
fare_desc = data['Fare'].describe()
lower_bound = fare_desc.loc['25%'] - (1.5 * (fare_desc.loc['75%'] - fare_desc.loc['25%']))
upper_bound = fare_desc.loc['75%'] + (1.5 * (fare_desc.loc['75%'] - fare_desc.loc['25%']))
print('lower_bound = ', lower_bound)
print('upper_bound = ', upper_bound)
print('-'*100)

# 이상치 확인
# lower_boundv 이하인 이상치는 존재하지 않는 것을 확인
# upper_bound 이상인 이상치 확인
data[data['Fare'] > upper_bound]

 

 

 


 

 

✔️ 이상치 처리

 

 

 

 

이상치 처리 방법

이상치 처리 방법

1. 이상치 삭제(제거)
이상치인 행 삭제
 데이터 수가 충분히 많은 경우 사용

2. 이상치 대체
평균, 중앙값, 최빈값 등 이상치 값 대체
대체 값이 데이터 특성 왜곡 발생 가능성 존재

3. 이상값 변환
로그, 제곱근 변환으로 이상치 영향 완화
오른쪽으로 긴 분포에 적용

4. 구간 압축
상/하위 극단값을 지정한 분위수 값으로 대체
통계 왜곡을 최소화하여 이상치 대응

5. 모델링 시 Robust 방법
이상치에 강한 모델 사용 : RobustScaler, RANSAC 등 적용
이상치를 제거하지 않고도 모델이 견고하게 학습됨

6. 이상치만 별도 분석
이상치만 따로 분석하여 인사이트 도출
이상치가 중요 의미를 가지는 경우 사용

 

 

 

 

Winsorization으로 이상값을 정상범위의 최대값으로 대체

Winsorization
이상값을 완전히 제거하지 않고, 실제 극단치 대신 해당 분위수 값으로 대체하는 기법
평균/분산 등이 이상값으로 인해 과도하게 왜곡되는 것을 방지(데이터 수는 그대로 유지하면서 조정)
# 1사분위 값 이상의 이상치를 가지는 경우 
# 가장 큰 정상 범위의 값 = upper_bound 값
maximum = upper_bound
print('정상 범위의 최대값 =',maximum)
print('-'*100)


# Fare 컬럼에서 이상치라고 판단되는 upper_bound 이상의 값을 가지는 인덱스 추출
# Fare 컬럼에서 이상치라고 판단되는 행의 인덱스를 불러옴
outlier_idx = outlier.index

# 이상치 값을 maximum 값으로 대체
data.loc[data['Fare'] > upper_bound, 'Fare'] = maximum

# 변환된 값 확인
data.loc[outlier_idx]

 

 


 

 

이번 내용에서는 파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리에 대해 알아보았습니다.

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

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

 

 

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

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

 

ECODATALIST

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

everyonelove.tistory.com

반응형

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

[Python] 파이썬_타이타닉 데이터셋 EDA(연관 있는 컬럼과 생존율 관계 파악)  (0) 2025.05.03
[Python] 파이썬_타이타닉 데이터셋 EDA(결측치 / 이상치 탐색 및 처리)  (0) 2025.05.03
[Python] 파이썬_중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체  (0) 2025.04.24
[Python] 파이썬_데이터 분석 과정의 결측치 처리  (0) 2025.04.22
[Python] 파이썬_파이썬 Matplotlib를 활용한 라인/산점도/히스토그램/막대 그래프 생성  (0) 2025.04.21
'Python/데이터 분석을 위한 Python' 카테고리의 다른 글
  • [Python] 파이썬_타이타닉 데이터셋 EDA(연관 있는 컬럼과 생존율 관계 파악)
  • [Python] 파이썬_타이타닉 데이터셋 EDA(결측치 / 이상치 탐색 및 처리)
  • [Python] 파이썬_중앙값과 최빈값을 활용한 결측치 대체 및 scikit-learn 활용 결측치 대체
  • [Python] 파이썬_데이터 분석 과정의 결측치 처리
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] 파이썬_파이썬의 데이터의 종류와 이상치(outlier) 탐지 및 처리
상단으로

티스토리툴바