본문 바로가기

Data/Python

[Data/Python]실습_데이터 전처리: 결측치 이상치

이상치

중심 경향성에서 멀리 떨어진 값

 

처리 방법

  • 이상치 처리에 절대적인 기준 x
  • Carling, Tukey 방법 등
  • 분포 기반으로 처리도 가능

 

결측치

값이 기록되지 않고 비어 있음

 

처리 방법

  • 결측치 처리에 절대적인 기준 x
  • 단순 제거, 특정 값으로 대체하는 방식 등
  • 분석 데이터에서 결측치가 차지하는 비중이 낮은 경우 보통 단순 제거함

 

붓꽃 결측 데이터 - iris_missing.csv

 

주요 함수 및 메서드

pandas - isna(), isnull()

  • 결측치 원소를 True, 관측치를 False로 반환
  • 반대 기능 메서드 notna(), notnull()

pandas - fillna()

  • 결측치 채우기 위한 메서드
  • value 인자에 결측치를 채워 넣을 값을 입력하며 딕셔너리 사용 가능
  • 'bfill'은 뒤의 값, 'ffill'은 앞의 값을 참고해 결측 처리

pandas - dropna()

  • 결측치가 있는 row/column 제거
  • how인자에 any / all 사용해 결측치가 있는 row / column 처리

 

Q3. 평균을 기준으로 1.5 표준편차를 넘어서는 값을 이상치라고 간주할 때 Sepal.Length 변수를 기준으로 이상치인 row 개수는 몇 개인가?

 

내 코드

df=pd.read_csv("iris.csv")
df.head(7)

sl_mean=df["Sepal.Length"].mean()
sl_std=df["Sepal.Length"].std()
print(sl_mean)
print(sl_std)

outarr = [num for num in df["Sepal.Length"] if num < (sl_mean - (1.5 * sl_std)) or num > (sl_mean + (1.5 * sl_std))]
len(outarr)   # 21

 

강의 코드

sl_mean=df["Sepal.Length"].mean()
sl_std=df["Sepal.Length"].std()
print(sl_mean)
print(sl_std)

cond_1=df["Sepal.Length"]<(sl_mean-1.5*sl_std)
cond_2=df["Sepal.Length"]>(sl_mean+1.5*sl_std)
df_out=df.loc[(cond_1)|(cond_2)]   # (cond_1)|(cond_2)은 행의 조건을 의미. True인 행만 선택해 새로운 DataFrame 생성. 선택된 행의 인덱스를 df_out에 저장
len(df_out)

 

'Data > Python' 카테고리의 다른 글

[Data/Python] 상관분석  (0) 2024.01.24
[Data/Python] 이론 정리  (1) 2024.01.24
[Data/Python]실습_표본 추출  (0) 2024.01.17
[Data/Python]실습_EDA: 수치형, 범주형 기술통계  (0) 2024.01.17
[Data/Python]실습_기본문법  (0) 2024.01.17