데이터 전처리 기본 method(outlier, missing value)
(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'로 기본값이 설정되어 있기 때문에 결측치가 포함된 모든 행이 없어진다.
(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
강의 듣고 나서 든 생각 : 강의만 듣는 건 정말 쓸모가 없다..
어차피 돌아서면 까먹는 것을
죽이 되든 밥이 되든 프로젝트나 해보자~