abt Machine Learning/Data Analysis

데이터 전처리 기본 method(outlier, missing value)

cloudin 2023. 11. 17. 14:54

(jupyter notebook 사용)

데이터 전처리_결측치 처리

 

 

1. pandas에서 iris missing 데이터를 불러와서 상단 7개 데이터만 확인

import pandas as pd

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

 

 

 

 

 

 

2. iris missing 상단 7개 데이터를  df_na에 저장 후 결측치 처리 method 함수 실행해보기

 

(1) isna 함수

df_na = df.head(7)
df_na["Sepal_Length"].isna()

 

=> "Sepal_Length"의 null 값인 부분만 True로 반환

 

 

 

(2) notna 함수

df_na["Sepal_Length"].notna()

 

=> "Sepal_Length"의 관측치값만  True로 반환

 

 

 

 

 

 

3. 논리값 활용하여 결측치 갯수 구하기

 

 

(1) Sepal Length의 결측치 갯수 구하기

df_na["Sepal_Length"].isna().sum()        # null값의 갯수

 

 

 

(2) 각 Column별 결측치 갯수 구하기

df_na.isna().sum()

=> sum의 기본 값은 axis=0이므로 변수별 갯수가 구해진다

 

 

 

(3) row 기준 결측치 갯수 구하기

df_na.isna().sum(axis = 1)

 

 

 

 

 

 

3. 결측치를 다른 값으로 대체하기 : fillna()

 

(1) 변수에 해당하는 결측치만 다른 값으로 대체 -> dictionary 사용

df_na.fillna(value = {"Sepal_Length": 999})

 

=> "Sepal_Length"에 해당하는 결측치만 999로 채워짐

 

 

 

(2) 2개 이상의 변수에 해당하는 결측치를 다른 값으로 대체할 경우

df_na.fillna(value = {"Sepal_Length": 999,
                     "Sepal_Width": 999})

 

=> "Sepal_Length", "Sepal_Width"에 해당하는 결측치가 999로 바뀜

 

 

 

(3) 데이터의 전체 결측치를 다른 값으로 대체시 dictionary 사용하지 않아도 된다

df_na.fillna(value = 999)

 

=> Species의 결측치까지 하나의 값으로 바뀌므로 적절한 코드 사용 필수

 

 

 

(4) 데이터 결측치를 평균값으로 대체하기

- Sepal_Width의 평균값을 변수에 저장)

SW_mean = df_na["Sepal_Width"].mean()
SW_mean

 

=> 해당 코드를 실행하면 Sepal_Width의 평균값이 출력된다

3.3600000000000003

 

- Sepal_Width의 결측치를 Sepal_Width의 평균값으로 대체

df_na = df_na.fillna(value = {"Sepal_Width" : SW_mean})

 

=> df_na에 덮어씌워주어야 한다

 

 

 

 

 

4. 결측치 날려버리기 : dropna()

 

(1) 결측치 포함된 행 날리기

df_na2 = df.head(7)
df_na2.dropna()

 

=> dropna에 지정할 수 있는 조건 중 how = 'any'로 기본값이 설정되어 있기 때문에 결측치가 포함된 모든 행이 없어진다.

함수 설명 보는 단축키 : Shift + Tab + Tab

 

 

 

(2) 모든 요소가 결측치이면 제거 : dropna(how = 'all')

df_na2.dropna(how = 'all')

 

=> 6행의 Species까지 모두 null 값이어야 날아간다.

 

 

 

 

 

5. 원하는 데이터 출력 : iloc

 

(1) 마지막 열 제외한 나머지 데이터 출력

df_na2.iloc[:, :-1]

 

=> Species 제외한 나머지 데이터 모두 출력됨

 

 

+) 여기서 dropna(how = 'all') 사용

df_na2.iloc[:, :-1].dropna(how = 'all')

=> 마지막 행이 날아간 것을 볼 수 있다.

 

 

 

 

 

 

6. quantile() 함수 알아보기

 

(1) 한꺼번에 Sepal_Length의 최대값, 최소값, 평균값 출력

print(df["Sepal_Length"].max())
print(df["Sepal_Length"].min())
print(df["Sepal_Length"].mean())
7.9
4.3
5.8538461538461535

 

 

(2) 중간값 출력 : median()

df["Sepal_Length"].median()
5.8

 

 

(3) quantile() 사용

df["Sepal_Length"].quantile()
5.8

 

=> median과 같은 결과 나오는 이유 : quantile()의 q=0.5로 기본 설정되어 있기 때문이다

 

 

 

(4) quantile의 q값 바꿔서 출력해보기

print(df["Sepal_Length"].quantile(q=0.25))   # 제 1 사분위수
print(df["Sepal_Length"].quantile(q=0.50))   # 제 2 사분위수
print(df["Sepal_Length"].quantile(q=0.75))   # 제 3 사분위수
5.1
5.8
6.4

 

 

 

 

 

강의 듣고 나서 든 생각 : 강의만 듣는 건 정말 쓸모가 없다..

어차피 돌아서면 까먹는 것을

죽이 되든 밥이 되든 프로젝트나 해보자~