[머신러닝] Titanic Dataset
2023. 8. 30. 13:56ㆍ머신러닝
728x90
🌀 캐글( Kaggle)
* 전세계 데이터 사이언티스트들이 다양한 데이터를 분석하고 토론할 수 있는 커뮤니티를 제공한다
* 데이터 분석 및 머신러닝, 딥러닝 대회를 개최한다
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# 데이터 불러오기
df = pd.read_csv('https://bit.ly/fc-ml-titanic')
#불러온 데이터 표로 보기
df.head()
---------------------------------
#PassengerId : 승객아이디
#Survived : 생존 여부(0: 사망, 1: 생존)
#Pclass: 좌석 등급
#Name: 이름
#Sex: 성별
#Age: 나이
#SibSp: 형제, 자매, 배우자 수
#Parch: 부모, 자식 수
#Ticket: 티켓 번호
#Fare: 요금
#Cabin: 좌석번호(선실)
#Embarked: 탑승 항구
🌀 데이터 전처리
* 넓은 범위의 데이터 정제 작업을 뜻함
* 필요 없는 데이터를 삭제하고 필요한 데이터만 취하는 것, null 값이 있는 행을 삭제하는 것, 정규화, 표준화 등의 많은 작
업들을 포함하고 있다.
* 머신러닝, 딥러닝 실무에서도 전처리가 50% 이상을 차지한다.
1️⃣ 독립변수와 종속 변수 나누기
# 종속 변수와 독립 변수 나누기
feature = ['Sex','Fare','Age','Pclass'] # 독립변수
label = ['Survived'] # 종속 변수
# 변수 나눈 후 독립변수 표로 보기
df[feature].head()
# 종속변수 표로 보기
df[label].head()
# label 숫자 값으로 보기
df[label].value_counts()
------------------------------------
# 결과
Survived
0 549
1 342
dtype: int64
# 데이터를 분석하기 위한 info method 확인
df.info() # 결측치가 있는 column은 Age, Cabin, Embarked이다.
# 물론 Cabin, Embarked는 사용하지 않으므로 상관은 없지만 Age의 경우 모델을 만드는데 사용하므로 결측치를 제거한다.
# 누락된 값 즉 결측값의 개수를 계산하는 코드
df.isnull().sum()
#Age의 결측치는 평균으로 대체
df['Age']=df['Age'].fillna(df['Age'].mean())
df['Age']
# 결측값의 개수 출력
df.isnull().sum()
3️⃣ 라벨 인코딩 ( Label Encoding)
* 문자(Categorical)를 수치(Numerical)로 변환
* 성별(Sex) 항목은 object(문자열)인데 수치(Numerical)로 변경해줘야 한다.
df.info()
def covert_sex(data):
if data == 'male':
return 1
elif data == 'female':
return 0
# 성별(Sex)의 값 수치화
df['Sex'].value_counts()
# male, female 2가지 경우 밖에 없기 때문에 1, 0으로 처리를 한다.
# 위에 만든 convert_sex 함수의 형식을 'Sex'에 적용
df['Sex'] = df['Sex'].apply(convert_sex)
# 함수 적용 => 함수 적용에는 Apply 사용!!!
df.head()
df.info()
from sklearn.preprocessing import LabelEncoder
la = LabelEncoder()
df['Embarked'].value_counts()
# 해당 항구 이름을 각각 Encoding 하여 숫자로 변경시켜 준다.
la.fit_transform(df['Embarked'])
la.classes_ # array(['C', 'Q', 'S', nan], dtype=object) => C, Q, S, nan이 각각 0, 1, 2, 3으로 변경되었다.
----------------------------------------------------------------------------------------------------------
# 결과
array(['C', 'Q', 'S', nan], dtype=object)
4️⃣ 원 핫 인코딩( One Hot Encoding)
* 독립적인 데이터는 별도의 column으로 분리하고 각각 column에 해당하는 값에만 1, 나머지는 0값을 가지가 하는 방법이다
* 예) 머신러닝 알고리즘은 'C:0','Q:1','S:2','nan:3'데이터의 관계성을 찾아 'Q + Q = S'라고 학습할 수 있다.
= 관계성을 끊어주기 위해 One Hot Encoding을 사용한다
df['Embarked_num'] = LabelEncoder().fit_transform(df['Embarked'])
df.head()
# Embarked_num의 각 행의 값들이 column에 있는 값과 일치하면 1이 되고 아니면 0이 된다.
pd.get_dummies(df['Embarked_num'])
# 학습용과 검증용으로 분할하기 때문에 전처리는 train_test_split으로 나누기 전에 진행해야한다.
X_train, X_test, y_train, y_test = train_test_split(df[feature], df[label], test_size=0.2, random_state = 10)
# 행렬이기 때문에 대문자를 사용
X_train.shape, X_test.shape
--------------------------------------
# 결과
((712, 4), (179, 4))
# 행렬이 아니기 때문에 소문자 사용
y_train.shape, y_test.shape
----------------------------------------
# 결과
((712, 1), (179, 1))
728x90
반응형
'머신러닝' 카테고리의 다른 글
[ 머신러닝 ] 의사결정나무 (0) | 2023.09.06 |
---|---|
[ 머신러닝 ] 선형회귀 (0) | 2023.09.06 |
[ 머신러닝 ] 아이리스 데이터셋 (0) | 2023.06.25 |
[ 머신러닝 ] 사이킷런 & Linear SVC (0) | 2023.06.25 |
[ 머신러닝 ] 머신러닝이란? (0) | 2023.06.25 |