라일락 꽃이 피는 날

[빅분기 실기] 데이터 정제 - 이상치, 결측치 처리 본문

데이터 분석/빅데이터 분석 기사

[빅분기 실기] 데이터 정제 - 이상치, 결측치 처리

eunki 2022. 5. 22. 22:00
728x90

이상치 확인

# 상자수염도표 그리기
df.boxplot(column='컬럼명')

 

 

 

이상치 처리

1. 이상치 기준을 IQR로 하여 제거

IQR = Q3 (3사분위수) - Q1 (1사분위수)

IQR = df['컬럼명'].quantile(0.75) - df['컬럼명'].quantile(0.25)

IQR × 1.5 보다 크거나 작은 값을 제거하여 새로운 데이터셋에 할당

df_new = df[(df['컬럼명'] < Q3 + IQR * 1.5 ) & (df['컬럼명'] > Q1 - IQR * 1.5 )]

 

 

 

2. 로그(log) 변환

변수를 log 변환하여 새로운 변수로 생성

df['log_컬럼명'] = np.log(df['컬럼명'])

 

 

 

3. 제곱근(sqrt) 변환

변수를 sqrt 변환하여 새로운 변수로 생성

df['sqrt_컬럼명'] = np.sqrt(df['컬럼명'])

 

⇒ 이상치 처리 후, histogram과 corr()로 확인

 

 

 

 

 


결측치 확인

isnull()  # 결측이면 True 반환
notnull()  # 결측이면 False 반환

# 변수별 결측값 개수 확인
isnull().sum()

# 변수별 결측 아닌 값 개수 확인
notnull().sum()

# 행 단위로 결측값 개수 확인
isnull().sum(1)

# 행 단위로 실측값 개수 확인
notnull().sum(1)

 

 

 

결측치 제거

# 결측값 있는 행 제거
df.dropna(axis=0)

# 결측값 있는 열 제거
df.dropna(axis=1)

# 결측값 있는 특정 행/열 제거
df[['컬럼명']].dropna()

 

 

 

결측치 대체

# 특정 값으로 대체
df.fillna(값)

# 앞의 값으로 대체
df.fillna(method='ffill')
df.fillna(method='pad')

# 다음 값으로 대체
df.fillna(method='bfill')
df.fillna(method='backfill')

# 평균 대체
df.fillna(df.mean())

# 다른 변수 값으로 대체
np.where(pd.notnull(df['컬럼명1'])==True, df['컬럼명1'], df['컬럼명2'])

# 집단 평균 값으로 대체
# 평균 대체 함수 생성
fill_mean_func = lambda g: g.fillna(g.mean())
# 집단별 평균 적용
df.groupby('컬럼명').apply(fill_mean_func)

# 집단별 특정 값으로 대체
# 특정값 기준 저장
fill_values = {1:1000, 2:2000}
# 설정 기준 함수 생성
fill_func = lambda d: d.fillna(fill_values[d.name])
# 집단별 설정 함수 적용
df.groupby('컬럼명').apply(fill_func)

# 변수별 다른 대체 방법
# 기준 함수 생성
fill_val = {'a':data.a.mean(), 'b':0}
# 함수 적용
df.fillna(fill_val)
728x90