본문 바로가기
데이터 분석

데이터 전처리

by anion 2023. 10. 29.

#age 항목을 Intger type으로 변경
cust=cust.astype({'age': int})

#결측치가 문자 '_'로 되어있어 에러발생

 

cust = cust.replace("_", np.NaN)

 

#replace()함수로 결측치 채우기
cust=cust_fix.copy()
cust['age']=cust['age'].replace(np.nan, cust['age'].median())
cust.head()

 

# interpolate 함수의 선형 방법을 사용하여 결측값을 채우기
cust=cust_fix.copy()
cust=cust.interpolate()
cust.head()

 

#범주형 데아터의 값 분포 확인하기
print(cust['sex'].value_counts())

 

#Normalization

값들을 모두 0과 1사이의 값으로 변환합니다.

#사이킷런 패키지의 MinMaxScaler를 이용하여  Scaling 하기
from sklearn.preprocessing import MinMaxScaler
scaler=MinMaxScaler()
normalization_df=cust_data_num.copy()
normalization_df[:]=scaler.fit_transform(normalization_df[:])
normalization_df.head()

 

# y값이 숫자가 아니기에 컴퓨터가 잘 이해하지 못해 숫자로 변환
# setosa --> 0, versicolor --> 1, virginica --> 2 : LabelEncoding

from sklearn.preprocessing import LabelEncoder

 

# 1. LabelEncoder 함수 정의 : le
# 2. y값에 대해 fit_transform 함수 이용해서 라벨인코딩 수행하고 다시 y에 저장
# 3. le.classes_ 출력해서 어떤 라벨들이 인코딩 되었는지 확인

le = LabelEncoder()
y = le.fit_transform(y)
print(le.classes_)

 

# 컴퓨터는 문자열을 이해하지 못하고 숫자 0과 1을 잘 이해합니다.
문자들로 되어 있는 값들을 컴퓨터가 잘 이해할수 있도록 숫자로 변경하는 작업이 Label Encoding입니다.

from sklearn.preprocessing import LabelEncoder
labelencoder_df=cust_data.copy()

le = LabelEncoder()
labelencoder_df['class'] = le.fit_transform(labelencoder_df['class'])
labelencoder_df

 

#One-Hot Encording

원-핫 인코딩은 간단히 말해 한 개의 요소는 True, 나머지 요소는 False로 만들어 주는 기법입니다.
기계 학습의 주요 문제 중 하나는 많은 알고리즘이 범주 형 데이터를 입력값으로 수용하지 않는다는 점인데, 이를 One-Hot Encording을 통해 해결 할 수 있습니다.

#pandas에서는 get_dummies함수를 사용하면 쉽게 One-Hot Encording이 가능
pd.get_dummies(cust_data['class'])

 

#columns를 사용해서 기존 테이블에 One-Hot Encording으로 치환된 변수 생성하기
cust_data_end=pd.get_dummies(cust_data, columns=['class'])
cust_data_end

 

# MultipleLines 컬럼의 값들이 문자열로 되어 있어 숫자로 변환해야 함. 컴퓨터가 이해할수 있도록
# Object 컬럼의 데이터를 원-핫-인코딩해서 숫자로 변경해 주는 함수 : Pandas get_dummies()

pd.get_dummies(data=df, columns=['MultipleLines'])

 

 

# Object 컬럼명 수집

cal_cols = df.select_dtypes('object').columns.values
cal_cols

 

# Pandas get_dummies() 함수 이용
# 원-핫-인코딩 결과를 df1 저장


df1 = pd.get_dummies(data=df, columns=cal_cols)

 

 

# 차트에서 한글을 사용하기 위해서는 아래와 같이 한글을 지원하는 폰트를 설정해 주어야 합니다.

import matplotlib.font_manager as fm
fm.findSystemFonts(fontpaths=None, fontext='ttf')

#찾은 폰트를 기본 폰트로 설정하기
plt.rc('font', family='NanumGothicCoding')
plt.rc('axes', unicode_minus=False)

 

 

# Boolean indexing으로 검색

cond = (df['TotalCharges'] == '') | (df['TotalCharges'] == ' ')
df[cond]

 

# DataFrame replace 함수 
# 대상 컬럼 : 'TotalCharges'  

df['TotalCharges'].replace([' '], ['0'], inplace=True)

 

# 'TotalCharges' 컬럼 type을 float로 변경
# 결과를 TotalCharges 컬럼에 다시 넣어야 합니다.

df['TotalCharges'] = df['TotalCharges'].astype(float)

 

 

# Train dataset, Test dataset 나누기 : train_test_split 함수 사용
# 입력 : X, y 
# Train : Test 비율 = 7: 3  --> test_size=0.3
# y Class 비율에 맞게 나누기 : stratify=y
# 여러번 수행해도 같은 결과 나오게 고정하기 : random_state=42 
# 결과 : X_train, X_test, y_train, y_test


X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.3, 
                                                    stratify=y,
                                                    random_state=42)

 

 

from sklearn.preprocessing import MinMaxScaler

 

# 사이키런의 MinMaxScaler() 함수 활용
# 정의할 결과를 'scaler'로 매핑
scaler = MinMaxScaler()

 

X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

 

recall_eval('K-Nearest Neighbor', knn_pred, y_test)

'데이터 분석' 카테고리의 다른 글

시각화 라이브러리  (0) 2023.08.20
시계열 데이터 처리  (0) 2023.08.19
데이터 축소 - 특징 선택  (0) 2023.08.02
데이터 변환 - 특징 생성  (0) 2023.08.02
데이터 변환 - 정규화, 구간화  (0) 2023.08.02