1. ML(머신러닝)의 Kaggle(캐글)
2.타이타닉 데이터셋 데이터전처리
- 학습 데이터와 검증 데이터 나누기
- 결측치 처리
- 라벨인코딩(Label Encoding)
- 원 핫 인코딩(One Hot Encoding)
4.타이타닉 데이터셋.ipynb
1. ML(머신러닝)의 Kaggle(캐글)
캐글 사이트(https://kaggle.com) - 전세계
데이콘 사이트(https://dacon.io/) - 우리나라
- 전세계 데이터 사이언티스트들이 다양한 데이터를 분석하고 토론할 수 있는 커뮤니티를 제공
- 데이터 분석 및 머신러닝, 딥러닝 대회를 개최하고 있습니다.
- 데이터셋, 파이썬 자료, R 자료 등 제공
2.타이타닉 데이터셋 데이터전처리
- 넓은 범위의 데이터 정제 작업을 뜻함.
- 필요없는 데이터를 삭제하고, 필요한데이터만 취하는 것, null 값이 있는 행을 삭제하는 것, 정규화, 표준화 등의 많은 작업들을 포함하고 있음
- 머신러닝, 딥러닝 실무에서도 전처리가 50%이상의 중요도를 차지함 !
🎈실습 !!
🔻 타이타닉 데이터셋 불러오기
import numpy as np
import pandas as pd
df = pd.read_csv('https://bit.ly/fc-ml-titanic')
df.head()
🔻 데이터셋의 칼럼 의미 부터 알아보기
- PassengerId : 승객ID
- Survived : 생존 여부(0:사망, 1:생존)
- Pclass : 좌석등급
- Name : 이름
- Sex : 성별
- Age : 나이
- SibSp : 형제, 자매, 배우자수
- Parch :부모, 자식수
- Ticket : 티켓번호
- Fare : 요금
- Cabin : 선실
- Embarked : 탑승 항구
🔻학습 데이터와 검증 데이터 나누기
🗨 우리가 필요한 독립변수와 종속변수를 선택 합니다.
# 독립변수[성별,요금,나이,좌석등급]
feature = ['Sex','Fare','Age','Pclass']
#종속변수[생존여부]
label = ['Survived']
🗨 생존 여부와 관계성을 알아보기 위해서 우리는 Label안에 생존여부('Survived')의 내용만 확인합니다.
# 라벨의 내용을 확인해보기
df[label].head()
# label안에 데이터가 어떤것이 있는지 확인해보기
df[label].value_counts()
🗨 '0'은 사망, '1'은 생존자
🗨 이제부터 타이타닉데이터셋을 학습데이터(80%)와 검증데이터(20%)로 데이터를 나누어 보겠습니다.
#데이터를 나누기 위해서 train_test_split를 추가해줍니다.
from sklearn.model_selection import train_test_split
🗨 train_test_split(독립변수, 종속변수, 테스트사이즈=0.25, 시드값)를 이용하여 데이터를 나눕니다.
# train_test_split(독립변수, 종속변수, 테스트사이즈=0.25, 시드값)
# 대문자는 행렬(매트릭스)형태, 소문자는 스칼라값(단일값)[그냥 단순한 방법으로 나만의 규칙]
X_train, X_test, y_train, y_test = train_test_split(df[feature],df[label],test_size=0.2,
random_state=10)
🗨데이터가 잘 나누어 졌는지 확인 합니다.
🔻결측치 처리
🗨 데이터셋의 결측치 확인 하기
df.info()
# info후 총 갯수는 891개 인데
# age,cabin,Embarked 에 결측치가 존재함
# 그러나 지금 우리는 이중에서 일단 'Age' 외에는 독립변수로 사용하지 않을 거기 때문에 다른 애들은 처리 안 해줘도 된다.
# 결측치가 몇개나 있는지 확인해봅시다.
df.isnull().sum()
🗨 우리가 사용하게 될 'Age' 의 결측값을 먼저 전체 인원의 평균 나이로 채워 넣어 주겠습니다.
# age결측치를 평균으로 처리 해보기
df['Age'] = df['Age'].fillna(df['Age'].mean())
🗨 결측값을 채운후 확인해보면 평균값으로 잘 들어갔음을 확인 할 수 있습니다.
🔻라벨인코딩(Label Encoding)
- 문자(Categorycal)를 수치(Numerical)로 변환
- 머신러닝을 돌릴때 기계는 문자를 인식 할 수 없어 수치로 변경 해주어 합니다. 문자를 넣을수 없음 !
🗨 성별의 값이 필요한데 성별은 'object'로 문자로 설정 되어 있어 지금부터 수치로 변환 해보겠습니다.
🗨 일단 성별('Sex')에 존재하는 값을 먼저 확인해보겠습니다.
df['Sex'].value_counts()
🗨 성별을 확인 해보니 'male'과 'female' 되어있습니다.
🗨 지금부터 함수를 이용하여 'male'과 'female'을 1과 0으로 변환 해보겠습니다.
# 위에서 보는거처럼 Sex에는 male, female 두개 값으로 존재 한다!
def conver_sex(data):
if data == 'male':
return 1
elif data == 'female':
return 0
df['Sex'] = df['Sex'].apply(conver_sex)
df.head()
🔻원 핫 인코딩(One Hot Encoding)
- 독립적인 데이터는 별도의 컬럼으로 분리하고, 각각 컬럼에 해당 값에만 1, 나머지는 0값을 갖게 하는 방법
- 예) 머신러닝 알고리즘은 'C:0' 'Q:1' 'S:2' 'NaN:3' 데이터의 관계성을 찾아 'Q + Q = S' 라고 학습을 할 수있음 -> 관계성을 끊어주기 위해 원 핫 인코딩을 사용
🔴함수를 이용한 변환 말고, LabelEncoder 라이브러리를 이용하여 변환 해보겠습니다.
# 라벨 인코딩 해주는 라이브
from sklearn.preprocessing import LabelEncoder
# 라벨 인코딩 le객체로 생성
le = LabelEncoder()
# 데이터 확인하기
df['Embarked'].value_counts()
le.fit_transform(df['Embarked'])
le.classes_ # 0:'C', 1:'Q', 2:'S', 3:nan
df['Embarked_num'] = LabelEncoder().fit_transform(df['Embarked'])
df.head()
pd.get_dummies(df['Embarked_num'])
'개발 > 머신러닝-딥러닝' 카테고리의 다른 글
2023.06.09 ML(머신러닝)의 의사결정나무(Decision Tree)모델 (0) | 2023.06.12 |
---|---|
2023.06.08 ML(머신러닝)의 선형회귀, 평기지표, log활용 (1) | 2023.06.12 |
2023.06.08 ML(머신러닝)의 Iris(아이리스) (0) | 2023.06.08 |
2023.06.08 ML(머신러닝)의 Scikit-learn 모듈 (0) | 2023.06.08 |
2023.06.08 ML(머신러닝)의 설명 (0) | 2023.06.08 |
댓글