데이터
실습 데이터는 그림과 같습니다.
실습을 위해 큰 데이터가 아닌 6개 데이터만 있는 작은 데이터 셋 입니다.
데이터를 다운 받은 후 가져오기 위한 코드
import pandas as pd
df = pd.read_csv("path")
df
문제 먼저 풀어보기!
실제 실습을 들어가기전 데이터를 보고 아래 질문을 코드로 풀어 봅시다!.
[결측치 탐색]
- 각 열의 결측치를 가지고 있는 데이터의 수는?
- 결측치가 존재하는 행만 뽑아 내는 코드.
- 결측치가 존재하는 feature는 무엇이 있는가?
[결측치 처리]
- age 와 measurement 열의 결측치가 있는 행을 제거해 주세요.
- age 와 measurement 열의 결측치를 0으로 바꿔주세요.
- age 와 measurement 열의 결측치를 평균값으로 바꿔주세요.
- age 와 measurement 열의 결측치를 KNN보간 값으로 값을 바꿔주세요.
- gender 와 education 열의 결측치가 있는 행을 제거해 주세요.
- gender 와 education 열의 결측치를 'Unknown'으로 바꿔주세요.
- gender 와 education 열의 결측치를 최빈값으로 바꿔주세요.
결측치 탐색
- 각 열의 결측치를 가지고 있는 데이터의 수는?
df.isnull().sum()
- 결측치가 존재하는 행만 뽑아 내는 코드
df[df.isnull().any(axis=1)]
df.loc[df.isnull().any(axis=1), :]
- 결측치가 존재하는 feature는 무엇이 있는가?
df.isnull().any(axis=0)
keys = df.keys()
for idx, item in enumerate(df.isnull().any(axis=0)):
if item:
print(keys[idx])
결측치 다루기
- age 와 measurement 열의 결측치가 있는 행을 제거해 주세요.
df.loc[:, ['age', 'measurement']].dropna()
- age 와 measurement 열의 결측치를 0으로 바꿔주세요.
# 방법 1
df.loc[:, ['age', 'measurement']].fillna(0)
# 방법 2
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=0)
data = imp.fit_transform(df.loc[:, ['age', 'measurement']])
df.loc[:, ['age', 'measurement']] = data
- age 와 measurement 열의 결측치를 평균값으로 바꿔주세요.
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
data = imp.fit_transform(df.loc[:, ['age', 'measurement']])
df.loc[:, ['age', 'measurement']] = data
- age 와 measurement 열의 결측치를 KNN보간 값으로 값을 바꿔주세요.
from sklearn.impute import KNNImputer
imp = KNNImputer(n_neighbors=2, weights='uniform')
data = imp.fit_transform(df.loc[:, ['age', 'measurement']])
df.loc[:, ['age', 'measuerment']] = data
- gender 와 education 열의 결측치가 있는 행을 제거해 주세요.
df.loc[:, ['gender', 'education']].dropna()
- gender 와 education 열의 결측치를 'Unknown'으로 바꿔주세요.
df.loc[:, ['gender', 'education']].fillna('Unknown')
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value='Unknown')
data = imp.fit_transform(df.loc[:, ['gender', 'education']])
df.loc[:, ['gender', 'education']] = data
- gender 와 education 열의 결측치를 최빈값으로 바꿔주세요.
df.loc[:, ['gender', 'education']].fillna(df.loc[:, ['gender', 'education']].mode().iloc[0])
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values = np.nan, strategy='most_frequent')
data = imp.fit_transform(df.loc[:, ['gender', 'education']].values)
df.loc[:, ['gender', 'education']] = data