개발학습일지

[AI] 인공지능 만들기 전 데이터 처리하기 본문

AI/데이터 전처리

[AI] 인공지능 만들기 전 데이터 처리하기

처카푸 2024. 4. 16. 17:31

데이터 전처리에 필요한 라이브러리

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from imblearn.over_sampling import SMOTE
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.model_selection import train_test_split

 

1. pd 데이터 가져오기

2. 0 이나 다른 데이터로 채워져 있는 값 nan 으로 변환

3. 비어있는 데이터 확인(있으면 삭제하거나 채우기)

4. 예측할 컬럼을 y, 예측을 위해 필요한 데이터는 X로 지정

5. 데이터 범위 맞춰주기(피처스케일링)

6. 문자열 데이터가 있을 경우 레이블 인코딩 또는 원핫 인코딩으로 문자열 데이터를 숫자로 바꿔준다

7. 예측할 값 데이터 갯수 파악 (데이터 불균형일시 데이터 늘리거나 삭제)

8.학습용과 테스트 용으로 데이터 나누기

# 데이터프레임을 불러온다
df = pd.read_csv('파일명')

 # 불러온 df 정보를 확인
df.describe()

 # 0이나 다른 데이터로 채워져 있는 값을 nan값으로 변경한다
df.loc[ : , 컬럼1:컬럼2 ] = df.loc[ : , 컬럼1:컬럼2].replace(0, np.nan) # 0을 nan값으로 바꾼다

# nan값 확인
df.isna().sum()

# nan값이 있을 경우 삭제하거나 값을 채워준다
df.dropna()
df.fillna(df.mean()) # 평균값으로 채우기

# 예측할 컬럼을 y, 예측을 위해 필요한 데이터 X로 지정
X = df.loc[:, '컬럼1' : '컬럼2']
y = df['컬럼']

# 문자열 데이터가 있을경우 레이블 인코딩(또는 원핫)으로 문자열 데이터를 숫자로 바꿔준다
sorted( X['컬럼'].unique() )
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer

# 레이블 인코딩
encoder = LabelEncoder()
X['컬럼'] = encoder.fit_transform(X['컬럼'])

# 원핫 인코딩
ct = ColumnTransformer( [( 'encoder', OneHotEncoder(),[0] )], remainder='passthrough' )
ct.fit_transform(X.values)

# 예측할 값 데이터 갯수 파악
df['예측할 값 컬럼'].value_counts()

# 데이터의 불균형일시 up sampling 기법으로 데이터를 늘린다
from imblearn.over_sampling import SMOTE
sm = SMOTE()
X, y = sm.fit_resample(X, y)

# 피처스케일링(=범위 맞추기)
from sklearn.preprocessing import StandardScaler, MinMaxScaler
m_scaler_x = MinMaxScaler()
X = m_scaler_x.fit_transform(X)

# 학습용과 테스트용 나누기
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2, random_state=2)