본문 바로가기

Python

데이터 전처리 A to Z 2회차

### 1.타이타닉 데이터 불러오기 및 데이터 조작
- 1.1 데이터 불러오기

 

import pandas as pd
import seaborn as sns

 

 

df=sns.load_dataset('titanic')        #sns에서 타이타닉 데이터 불러오기, 전처리 완료후에 저장 하겠습니다.

df.info()

 

 

age, embarked, deck, embark_town 에서 null이 존재하는것 처럼 보임. 그럼 이것을 확인해볼까?

 

df.isnull().sum()

 

 

### 2.데이터 클리닝
- 결측치

 

age 177, embarked 2, deck 688, embarked_town 2 개의 null값이 존재하는것을 확인하였다.  

 

df.describe(include='all')

 

##### (방법1) 결측치 삭제

 

df_cleand1=df.dropna(subset=['age','embarked'])

df_cleand1.info()

 

##### (방법2) 머신러닝을 활용한 결측치 채우기

891행이 712행으로 줄어든것을 확인할 수 있다. 하지만 이러게 모든 데이터를 삭제 하는것이 과연 무조건 옳은걸까?
이번에는 머신러닝을 기반으로한 결측지를 추정해서 채워 넣는 방법을 시도해보자

 

from sklearn.impute import SimpleImputer

imputer=SimpleImputer(strategy='mean') # mean 또는 most_frequent
df['age']=imputer.fit_transform(df[['age']])

 

df.info()

 

 

 

- 이상치 탐지 및 처리

from sklearn.ensemble import IsolationForest

iso_forest=IsolationForest(contamination=0.05)
df['outlier']=iso_forest.fit_predict(df[['age','fare']])

df

 

df[df['outlier']==-1].info()

 

df_cleand2=df[df['outlier']!=-1]

이상치로 판별된 행 삭제

df_cleand2.info()

 

평균으로 대체 할수도 있다.

df.loc[df['outlier']==-1,'fare']=df['fare'].mean()

 

 

### 3.데이터 변환

df['pclass']=df['pclass'].astype('category')

변환 전

변환 후

 

범주형 데이터 인코딩(one-hot encoding)

df_encoded=pd.get_dummies(df,columns=['sex','embarked'],drop_first=True)

df_encoded

 

 

스케일링(StandardScaler) 사용

 

from sklearn.preprocessing import StandardScaler

scaler=StandardScaler()
df['fare_scaled']=scaler.fit_transform(df[['fare']])

df