지피디아 » IT & Bigdata » 파이썬으로 데이터에서 이상치 찾는 방법

파이썬으로 데이터에서 이상치 찾는 방법

[파이썬 분석] 이상치 찾기

개요

우리가 사용하는 빅데이터에는 잘못되거나 올바른 데이터라고 볼 수 없는 데이터들이 있습니다.

이를 이상치라고 하죠. 이상치는 데이터 집합에서 다른 값들과 현격하게 차이나는 값이나 패턴을 가진 데이터를 나타냅니다.

이상치를 찾는 방법은 다양합니다. 연구자 마음인데, 각 학회지나 사용처마다 선호하는 것이 다를 수 있습니다.

  1. 단순확인:
    • 특정 값(평균,중앙치, 최빈치)를 기준으로 특정한 값을 다시 계산하여 이상치를 분별, 1표준편차나 2표준편차를 선정하는 등
    • 데이터 특성에 맞지 않는 값 찾기, 성별을 1과 2로 코딩했는데, 다른 값이나 소수점 값을 갖는 값
  2. 히스토그램 확인:
    • 데이터를 히스토그램으로 시각화하면 전체 데이터의 분포를 파악할 수 있습니다. 이상치는 전체 분포에서 동떨어진 부분으로 나타날 수 있습니다.
  3. 상자 수염 그림(Boxplot) 사용:
    • 상자 수염 그림은 데이터의 중앙값, 사분위수, 이상치 등을 시각적으로 보여주는 유용한 도구입니다. 상자 수염 그림을 통해 이상치를 식별할 수 있습니다.
  4. Z-스코어 기반 이상치 탐지:
    • Z-스코어는 데이터가 평균에서 얼마나 떨어져 있는지를 측정하는 표준화된 값입니다. 일반적으로 Z-스코어가 특정 임계값을 초과하면 해당 데이터는 이상치로 간주될 수 있습니다.
  5. IQR (사분위 범위)를 이용한 이상치 탐지:
    • 사분위 범위는 데이터의 상위 25%와 하위 25%를 나누는데 사용됩니다. 이상치는 주로 1.5배 이상의 IQR을 벗어나는 값으로 정의될 수 있습니다.
  6. 시각적 데이터 탐색:
    • 데이터를 산점도 등으로 시각화하면 이상치를 눈으로 쉽게 식별할 수 있습니다. 특히, 다른 데이터들과 비교하면서 차이가 큰 데이터를 찾을 수 있습니다.

단순확인 – 데이터 특성(성별)

파이썬을 활용하면, 쉽게 성별 데이터 중 이상치를 찾을 수 있습니다.

Big Data Certification KR에 있는 문제를 활용하도록 하겠습니다.

출처 : https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr

문제는 “주어진 데이터에서 이상치(소수점 나이)를 찾고 올림, 내림, 버림(절사)했을때 3가지 모두 이상치 ‘age’ 평균을 구한 다음 모두 더하여 출력하시오” 입니다.

알아야하는 것

  1. 패키지 불러오기
  2. 데이터 불러오기
  3. 데이터 추출
  4. Numpy 절삭 메소드 종류
  5. 합계

1. 패키지 불러오기 + 2. 데이터 불러오기

모든 분석의 기본은 패키지를 불러오는 것입니다. csv파일을 불러오기 위해서라도 pandas를 써야하죠

import pandas as pd
import numpy as np
df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv') # 이부분이 데이터를 불러오는 부분

3. 데이터 추출

먼저, 소수점을 가진 데이터들을 찾아야합니다.

소수점 데이터는 찾을 수 있는 방법이 많습니다. 일단 1로 나눴을 때 나머지가 0이 아닌 것. 위 케클에서 KIM TAE HEON님이 설명주신 것은 원데이터(소수점이 있는 데이터)에서 버림한 데이터(소수점이 없는 데이터)를 빼서 소수점이 있는 데이터 or 0인 데이터 호 변환 후 0인 것을 찾는 것 입니다.

지금은 % 연산자를 활용하여 나머지가 0이 아닌 것으로 데이터를 뽑아보도록 하겠습니다.

변수명은 영어로 이상치를 뜻하는 oullier로 했을 때, oullier = df[df[‘age’] % 1 != 0]와 같이 나타납니다.

여기서 주목해야할 점은 df[‘age’]가 df[]에 또 묶이는 것입니다. 파이썬에서 특정 열을 불러 올 때 많이 혼동될 수 있어 짚고 넘어가고자합니다. 내용을 해석하자면, df(전체데이터) 중 age열의 데이터가 1로 나눴을 때 나머지가 0이 아닌 것을 df(전체데이터)에서 추출하자는 것입니다.

oullier = df[df['age'] % 1 != 0] 
print(oullier.count())

4. Numpy 절삭 메소드 종류

올림은 RU, 내림은 RD, 절사는 TR로 변수명을 정했습니다.

이때, 활용되는 메소드는 numpy의 메소드들이며 다음과 같습니다.

  1. ceil : 올림
  2. floor : 버림
  3. trunc : 절사
  4. mean : 평균 계산
ru = np.ceil(oullier['age']).mean()
rd = np.floor(oullier['age']).mean()
tr = np.trunc(oullier['age']).mean()

ru, rd, tr

5. 합계

합계는 간단합니다. 단순하게 하면 위 변수들을 모두 더해서 print문에 넣으면 됩니다.

print(ru+rd+tr)
위로 스크롤