728x90
반응형
👍데이터 3개 불러오기
import pandas as pd
X_train = pd.read_csv("X_train.csv")
y_train = pd.read_csv("y_train.csv")
X_test = pd.read_csv("X_test.csv")
👍결측치 찾기
아래 함수를 통해 개수를 파악한다
X_train.isnull().sum()
사진 설명을 입력하세요.
👍결측치의 데이터 타입 확인하기 -> X_train.info()
수치형(age, hous.per.week) 과 범주형(workclass,occupation,native.country)를 알 수 있다.
사진 설명을 입력하세요.
👍결측값의 컬럼 고유 개수 확인하기
X_train['workclass].value_counts() # 이 함수는 많이 쓰이니 꼭 기억하자
고유값이 Private가 가장 너무 많이 나왔으니, 해당 값(최빈값)으로 결측값을 쓰면 되겠다~
이런걸 판단할 수 있음
사진 설명을 입력하세요.
👍범주형 변수 결측치 처리하기 (Object)
삭제 / 최빈값 / 없는값
결측치가 있는 행을 전체 삭제하기
# 결측치가 있는 데이터(행) 전체 삭제 및 확인 dropna() #기본값 axis=0
df=X_train.dropna(axis=0)
df.isnull().sum()
특정 컬럼에 결측치가 있으면 행을 삭제하기
# 특정컬럼에 결측치가 있으면 데이터(행) 삭제 subset=['native.country',workclass']
# 다건의 행을 삭제할 때는 리스트로 묶어서 넣어준다
df=X_train.dropna(subset='native.country')
df.isnull().sum()
결측이 너무 많아 특정 컬럼을 아예 삭제해 버리기 (axis)
# 결측치가 많은 특정 컬럼 삭제 drop(['workclass'], axis=1)
df = X_train.drop(['workclass'], axis=1)
df.isnull().sum()
최빈값(mode)으로 채우기
# 최빈값
mode=X_train['workclass'].mode()[0]
#fillna 쓸때는 특정 컬럼을 지정해줘야함 (전체 채워지니까)
X_train['workclass'].fillna(mode)
결측값을 새로운 값으로 넣는다
# 결측값을 새로운 카테고리로 생성 X_train['occupation']
X_train['occupation'] = X_train['occupation'].fillna('X')
X_train.isnull().sum()
결측치를 처리할때는 가급적 Train 테스트를 처리할때, Test 데이터도 동시에 처리한다 !!!
👍수치형 변수 결측치 처리하기 (float, int)
- 평균/중앙/최대/최소/그룹별 ~값
- mean() , median(), max(), min()
# 주당 근무시간 중앙값으로 채우기
value = int(X_train['hours.per.week'].median())
print("채울 값:", value)
X_train['hours.per.week'] = X_train['hours.per.week'].fillna(value)
X_test['hours.per.week'] = X_test['hours.per.week'].fillna(value)
👍이상값
아까 describe로 확인했지만 나이는 음수가 있으면 안되므로 조건을 걸어 정비함
# age가 1이상인 데이터만 살림
print(X_train.shape)
X_train = X_train[X_train['age']>0]
print(X_train.shape)
IQR로도 확인하지만, 너무 많은 데이터가 있고 다 삭제하기는 애매함
잘쓰이지는 않음
# IQR로 확인 >> 너무 많은 데이터가 많음. 다 삭제하기는 애매하므로.. ㅕㅎㅍㄷ34ㅈ3
cols = ['age','fnlwgt','education.num', 'capital.gain', 'capital.loss', 'hours.per.week']
for col in cols:
Q1 = X_train[col].quantile(.25)
Q3 = X_train[col].quantile(.75)
IQR = Q3 - Q1
min_iqr = Q1-1.5*IQR
max_iqr = Q3+1.5*IQR
cnt=sum((X_train[col] < min_iqr) | (X_train[col] > max_iqr))
print(f'{col}의 이상치:{cnt}개 입니다.')
전처리 주의 사항
- 이상치, 결측치에 대해 test 데이터(행) 삭제 불가
- 예) test 데이터 100개가 주어지고 100개로 평가를 하는데 임의로 10개를 삭제해버리면 채점을 할 수가 없음
- train 데이터는 학습/훈련용 데이터임. 데이터가 많을 경우 임의로 소수 데이터(행) 삭제해도 무방함
- test, train 컬럼은 삭제/추가 가능. 단, train과 컬럼수와 명이 일치해야 함 (y(target) 제외)
728x90
'IT&게임 > 빅데이터분석기사(빅분기)' 카테고리의 다른 글
빅데이터분석기사 제2유형 : ④ 머신러닝 (분류) (1) | 2024.06.06 |
---|---|
빅데이터분석기사 제2유형 : ③ 피처엔지니어 (스케일/인코딩) (2) | 2024.06.06 |
빅데이터분석기사 제2유형 : ① EDA (0) | 2024.06.04 |
빅데이터 분석기사 - 1유형 예제문제 학습하기(결측치2) (0) | 2024.06.03 |
빅데이터 분석기사 - 1유형 예제문제 학습하기(결측치) (1) | 2024.06.02 |
댓글