본문 바로가기
개발/머신러닝-딥러닝

2023.06.08 ML(머신러닝)의 Kaggle(캐글),타이타닉 데이터셋

by 상달군 2023. 6. 9.
728x90

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'])


 

728x90

댓글